| θ | 0° | 30° | 45° | 60° | 90° |
|---|---|---|---|---|---|
| sin | 0 | 1/2 | √2/2 | √3/2 | 1 |
| cos | 1 | √3/2 | √2/2 | 1/2 | 0 |
| tan | 0 | 1/√3 | 1 | √3 | ∞ |
sin(180−θ)=sin θ · cos(180−θ)=−cos θ · sin(−θ)=−sin θ · cos(−θ)=cos θ. E.g. cos 135°=−√2/2, sin(−120°)=−√3/2, cos(−120°)=−½.
● atan2(y,x): angle of (x,y) in the correct quadrant (atan(y/x) is wrong for x<0). Angle of (3,3)=45°; of (−2,−2√3): atan2 gives −120°.
Vector norm ‖v‖=√(vx²+vy²+vz²); unit vector v/‖v‖; dot a·b=‖a‖‖b‖cos θ; cross x̂×ŷ=ẑ (right-hand rule).
Chain rule: d/dt f(s(t)) = f′(s)·ṡ. Product: (fg)′=f′g+fg′. ẋ=dx/dt (rate), ẍ=acceleration.
Small angle: sin θ≈θ, cos θ≈1 (θ in rad).
✔ Continuous: ẋ=f(x,u), y=h(x,u) · discrete: xk+1=fk(xk,uk). State x = minimal info making the future independent of the past; u = control input; y = sensor output.
● Position accumulates more error than velocity (integration sums errors) → dead reckoning drifts → external sensors needed.
● Trajectory = path X(s) + time scaling s(t): Ẋ=X′(s)ṡ; Ẍ=X″ṡ²+X′s̈ (don't drop the s̈ term).
● Integrators: Euler x+=f·dt (err O(dt²)/step); midpoint: slope at half-step; RK4: 4 slopes weighted 1-2-2-1 (err O(dt⁵)/step).
● Double integrator, state (x,y,vx,vy), u=(ax,ay): xt+1=Axt+But, A rows: [1 0 Δt 0; 0 1 0 Δt; 0 0 1 0; 0 0 0 1], B: [½Δt² 0; 0 ½Δt²; Δt 0; 0 Δt].
✔ Holonomic g(q,t)=0 (limits positions); velocity constraint A(q,t)q̇=b (non-holonomic if not integrable → limits velocities, e.g. no sideways motion). Omni robot = holonomic; diff-drive/car = non-holonomic.
✔ No-slip: ẋ sin θ − ẏ cos θ = 0 · rolling: ẋ cos θ + ẏ sin θ = rφ̇.
● Unicycle: ẋ=v cos θ, ẏ=v sin θ, θ̇=ω.
✔ T=½mv², V=mgy, L=T−V; Euler–Lagrange: d/dt(∂L/∂q̇)−∂L/∂q = Q.
✔ Pendulum (mass m, rod l): T=½ml²θ̇², V=mgl(1−cosθ) → ml²θ̈+mgl sinθ=0, θ̈=−(g/l)sinθ.
● R∈SO(3): RᵀR=I, det R=1, R⁻¹=Rᵀ. Columns of Rsa = axes of {a} in {s} coords. Build 3rd axis: ẑ=x̂×ŷ.
● Subscript cancellation: RabRbc=Rac; Rabpb=pa; Rab=RasRsb=RsaᵀRsb.
● Composition side: Rsb′=R·Rsb = rotate about world-frame axis (premultiply); Rsb″=Rsb·R = rotate about body-frame axis (postmultiply). Fixed-frame sequence ⇒ stack left: last applied is leftmost.
● Skew matrix of ω=(ω₁,ω₂,ω₃): [ω] = rows [0 −ω₃ ω₂; ω₃ 0 −ω₁; −ω₂ ω₁ 0]; [ω]ᵀ=−[ω]; [ω]x=ω×x.
● Axis-angle/exp coords ω̂θ (‖ω̂‖=1): Rodrigues R=e[ω̂]θ=I+sinθ[ω̂]+(1−cosθ)[ω̂]²; angular velocity ω=ω̂θ̇; ṘR⁻¹=[ωs], R⁻¹Ṙ=[ωb].
2D rotation: R(θ)=[cosθ −sinθ; sinθ cosθ]; circular motion about C: P(θ)=C+R(θ)rCP.
✔ cP=cRWWP+ctW; homogeneous cTW=[R t; 0 0 0 1], cP̃=cTWWP̃ (append 1 to the point).
Planar pose: T=[cosθ −sinθ x; sinθ cosθ y; 0 0 1]. Camera center in world = −Rᵀt.
✔ Pipeline: PW →(R,t)→ PC →(÷ZC)→ (xn,yn) →(K)→ (u,v). xn=XC/ZC, yn=YC/ZC; u=fxxn+cx, v=fyyn+cy; K=[fx s cx; 0 fy cy; 0 0 1]; λp̃=K[R|t]P̃W; normalize (ũ,ṽ,w̃)↦(ũ/w̃, ṽ/w̃).
● Back-projection: xn=(u−cx)/fx, yn=(v−cy)/fy; ray d=(xn,yn,1); with known depth: XC=xnZC, YC=ynZC. Pixel ↦ ray, not point (depth lost).
Visible ⇔ ZC>0 (Z=0 unprojectable). Metric image plane: x=f·XC/ZC (f in length units). Offsets scale like 1/ZC.
Intrinsic=internal geometry (fx,fy,cx,cy,skew; in K; fixed by hardware). Extrinsic=camera pose (R,t; changes with motion). Principal point=(cx,cy) where optical axis hits image; resolution≈2·(cx,cy). Skew≠0 only for non-perpendicular pixel axes. Barrel distortion: lines bulge outward (magnification ↓ with radius, wide-angle); pincushion: inward (telephoto). Homogeneous coords make translation+rotation+projection all matrix products.
✔ Camera looks up, marker height h → all points share ZC=h: s = f/h [px/m]; Δu = sΔX; ΔX = Δu/s; h doubles → s halves.
✔ Heading: θr = θm − θi (marker's true − observed orientation). Sheet page 2!
● Pixel noise → metric: ΔXerr=Δuerr/s. One symmetric marker fixes position not heading → need 2 markers (or asymmetric marker). Ceiling: fixed, unoccluded, rarely moved. West=−x, North=+y.
● Triangulation: 3D point = intersection of viewing rays from ≥2 known poses; each view: λp̃=PX̃ (P=K[R|t], 3×4) → 2 linear homogeneous eqs → stack: AX̃=0; solve: SVD A=UΣVᵀ, X̃ = last column of V (smallest σ; minimizes ‖AX̃‖ on ‖X̃‖=1).
● Reprojection error ‖p−p̂‖₂. Baseline ↑ → depth accuracy ↑ but matching harder. Stereo depth: Z=f·b/d (d=disparity).
● SfM = one moving camera, unknown poses; estimates structure+motion jointly (scale unknown). Pipeline: detect → match → pose est. → triangulate → bundle adjustment (joint nonlinear refinement of all poses+points minimizing total reprojection error).
● Optical flow: Ixu+Iyv+It=0 (1 eq, 2 unknowns). Assumes brightness constancy (+ small motion). Aperture problem: only flow along the gradient is observable — motion along an edge invisible.
● Event camera: async per-pixel events (x,y,t,p) on log-brightness change (p=polarity ±1) vs sync full frames; µs latency, high dynamic range, no absolute intensity.
● Bayes filter — predict: bel(xt)=∫p(xt|ut,xt−1)bel(xt−1)dx (uncertainty grows); correct: bel(xt)=η·p(zt|xt)bel(xt) (shrinks).
● p(xt|ut,xt−1)=motion model; p(zt|xt)=sensor model; bel(xt)=belief (posterior over states given all data).
● EKF: nonlinear f,h → linearize at estimate: A=∂f/∂x, C=∂h/∂x (Jacobians). Use when uncertainty ≈ Gaussian + good initial guess; particle filter for global/multi-modal localization.
● SLAM: chicken-and-egg — localization needs map, mapping needs pose → estimate jointly. EKF-SLAM state: (x, y, θ, m1x, m1y, m2x, m2y, …). Data association = which measurement ↔ which landmark; wrong association corrupts filter.
● Range → circle (2D) / sphere (3D) around landmark (trilateration d=vsoundΔt); ≥2 identified landmarks → unique pose. Identical rooms → multi-modal belief. Known quantities (e.g. compass heading) are inputs, not state.
✔ Open-loop u=uplanned(t) (no sensing, drifts) · closed-loop policy u=π(x) · feedback u=K(xref−x).
● Open-loop grid localization: belief = set of possible cells; M (drive to wall) collapses corridors to end cells; with step counting, each M's count is a measurement pruning hypotheses (predict+correct).
● FSM: states=behaviors, labeled transitions=events; global interrupt (battery low→Recharge). + simple/interpretable/verifiable; − state explosion, poor under uncertainty.
● RL: state=agent's situation; action=chosen control; reward=scalar feedback per step, maximize cumulative sum; policy π: states→actions, u=π(x) or π(u|x) — the thing RL learns.
● ROS: node=process doing one job; topic=named pub/sub channel; message=typed data on a topic; master (ROS 1)=discovery/name service only — traffic is peer-to-peer.
Diff drive r=0.1, L=0.5, ωL=4, ωR=6: v=0.1·10/2=0.5 m/s; ω=0.1·2/0.5=0.4 rad/s; R=0.5/0.4=1.25 m.
Projection K=[800 0 320; 0 800 240; 0 0 1], PC=(1,2,5): xn=0.2, yn=0.4 → u=800·0.2+320=480, v=800·0.4+240=560.
Back-projection p=(720,440), same K: xn=(720−320)/800=0.5, yn=0.25 → ray (0.5,0.25,1); depth 4 → PC=(2,1,4).
World→pixel PW=(3,2,10), t=(−1,0,0), R=I: PC=(2,2,10) → u=800·0.2+320=480, v=800·0.2+240=400.
Bayes P(A)=0.7, P(z|A)=0.9, P(B)=0.3, P(z|B)=0.2: P(z)=0.63+0.06=0.69 → P(A|z)=0.63/0.69≈0.913, P(B|z)≈0.087.
Ceiling marker f=800, h=4: s=200 px/m; move 0.5 m → 100 px; ±10 px noise → ±10/200=±5 cm; heading 45°−20°=25°.
Pendulum m=2, l=1, b=0.1, g=10: 2θ̈+0.1θ̇+20 sinθ=0 ⇔ θ̈+0.05θ̇+10 sinθ=0.
Optical flow Ix=2, Iy=−1, It=−3, u=1: 2−v−3=0 → v=−1 (check: 2+1−3=0 ✓).
Reprojection p=(320,200), p̂=(312,198): ‖(8,2)‖=√68=2√17≈8.25 px.
EKF-SLAM state, 2 landmarks: (x, y, θ, m1x, m1y, m2x, m2y)ᵀ ∈ ℝ⁷.
Tetrahedron EKF dims: state ℝ¹² (p,a,v,ω); z ∈ ℝ⁸ (4 pts × 2); A 12×12, C 8×12.
Mock test (Moodle "Test") = collection Ex 1–7: Bayes filter, EKF modeling, frames, rotation composition, rigid body, path scaling, pendulum — rehearse those first. Exam 17.07.2026 · allowed: official sheet + fx-991CW.