Print me: Ctrl+P → A4 → margins "Default/None" → scale 100% → background graphics on. Fits ~2 pages. = already printed on the official 2026 formula sheet (don't re-copy if space is tight) · = NOT on the official sheet — this is why this cheatsheet exists.

Autonomous Robotics — exam cheatsheet · SS 2026 · companion to the official formula sheet + fx-991CW

0 · Trig, vectors, calculus basics

θ30°45°60°90°
sin01/2√2/2√3/21
cos1√3/2√2/21/20
tan01/√31√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).

1 · State-space & motion

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.

Constant acceleration over Δt
vt+1 = vt + aΔt xt+1 = xt + vtΔt + ½aΔt²
Invert for a: a = 2(x₁−x₀−v₀Δt)/Δt² (unique only if a const.)

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].

2 · Wheels & constraints

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φ̇.

Differential drive (r wheel radius, L separation)
v = r(ωRL)2 ω = r(ωR−ωL)L Rturn = vω
wheel speed vi=rωi; equal ω's → straight; opposite → spin in place.

Unicycle: ẋ=v cos θ, ẏ=v sin θ, θ̇=ω.

Bicycle (wheelbase L, steering α)
x⁺=x+v cosθΔt · y⁺=y+v sinθΔt · θ⁺=θ+v tan αLΔt
turning radius R=L/tan α. Steering error → orientation error (redirects all later motion); velocity error → distance error.

3 · Lagrangian mechanics

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θ.

With viscous friction b: add Q=−bθ̇ (non-conservative → right side, NOT into V):
ml²θ̈ + bθ̇ + mgl sin θ = 0
(Ex 7: m=2, l=1, b=0.1, g=10 → 2θ̈+0.1θ̇+20 sinθ=0.) I=ml² (point mass). Alternative: torque balance Iθ̈=−mgl sinθ−bθ̇.

4 · Rotations (SO(3))

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.

Elementary rotations (✔ only Ry is on the sheet)
Rx(γ)=1 0 0
0 cosγ −sinγ
0 sinγ cosγ
 Ry(β)=cosβ 0 sinβ
0 1 0
−sinβ 0 cosβ
Rz(α)=cosα −sinα 0
sinα cosα 0
0 0 1
pattern: 1 on the axis; −sin above +sin except Ry (flipped)
ZYX Euler (α,β,γ) body-frame: R = Rz(α)Ry(β)Rx(γ).

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.

5 · Rigid transforms

cP=cRWWP+ctW; homogeneous cTW=[R t; 0 0 0 1], cP̃=cTWWP̃ (append 1 to the point).

Inverse — translation is NOT −t:
T⁻¹ = [Rᵀ −Rᵀt; 0 0 0 1] ⇔ PW=Rᵀ(PC−t)

Planar pose: T=[cosθ −sinθ x; sinθ cosθ y; 0 0 1]. Camera center in world = −Rᵀt.

6 · Camera projection

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.

7 · Ceiling markers (course setup)

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.

8 · Triangulation, SfM, flow, events

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.

9 · Bayes filter · KF · EKF · SLAM

Bayes' rule (write normalizer separately!)
P(A|z) = P(z|A)P(A)P(z), P(z)=ΣiP(z|Ai)P(Ai)
check: posteriors sum to 1; belief moves toward sensor-favored hypothesis.

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).

Kalman filter (linear + Gaussian)
predict: μ̄=Aμ+Bu; Σ̄=AΣAᵀ+R
gain: K=Σ̄Cᵀ(CΣ̄Cᵀ+Q)⁻¹
update: μ⁺=μ̄+K(z−Cμ̄); Σ⁺=(I−KC)Σ̄
innovation=z−Cμ̄ (measured−expected); R=process noise, Q=measurement noise. Gaussian: fully described by (μ,Σ) and closed under linear+Gaussian ops → efficient exact updates.

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.

10 · Planning & control

Open-loop u=uplanned(t) (no sensing, drifts) · closed-loop policy u=π(x) · feedback u=K(xref−x).

Dijkstra: f(n)=g(n) · A*: f(n)=g(n)+h(n) g=cost from start, h=estimated cost to goal. Admissible: h never overestimates → A* optimal. Consistent: triangle inequality → no reopening. h≡0 ⇒ A*=Dijkstra. Good h → fewer expansions, goal-directed.

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).

11 · FSM · RL · ROS (definitions)

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.

12 · Sanity checks & traps

13 · Worked micro-examples (pattern anchors)

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.