# numbers_log for 008-unit8-kinematics (rerun 2026-10-11 03:16)

===== analysis_problems.py (exit 0, 0.6 s)
P1: body point (0.5, 0.2) at pose (1, 2, 90 deg) -> [0.8 2.5]
P2: IK (0.1, 0.4): r 0.4123 q(up) deg [48.75, 70.53]  q(down) deg [103.18, -70.53]  FK check [0.1 0.4] [0.1 0.4]
P3: wheel speeds m/s 0.18 0.42  rad/s 5.455 12.727  feasible True
P4: eps 0.2 percent over 10 m: true end 9.984 0.625  heading deg 7.16  small-angle heading 0.125 rad, lateral 0.625  position error 0.625
P5: 2000 counts = 314.2 mm; heading change if only one wheel moves 1.963 rad = 112.5 deg
resolution: distance per count mm 0.1571  heading per count (one wheel) mrad 0.982 deg 0.056  both wheels opposite:  1.963 mrad per count pair
R5 budget: random rms at 20 m (simulated) 0.831 m; allowed 2.0 m; systematic allowed sqrt(2.0^2-0.831^2) = 1.819 m -> eps <= 0.147 percent
calibration resolution: dy = 1 cm over 5 m -> d eps = 0.000128 ( 0.012799999999999999 percent )
usable workspace: joint rate for 0.1 m/s under 1.0 rad/s for r between 0.126 and 0.449 m

===== analysis_sympy.py (exit 0, 1.4 s)
J = Matrix([[-l1*sin(q1) - l2*sin(q1 + q2), -l2*sin(q1 + q2)], [l1*cos(q1) + l2*cos(q1 + q2), l2*cos(q1 + q2)]])
det J simplifies to: l1*l2*sin(q2)  (expected l1 l2 sin q2) True
x^2+y^2 = l1**2 + 2*l1*l2*cos(q2) + l2**2   -> cos q2 = (x^2+y^2-l1^2-l2^2)/(2 l1 l2): True
J^-1 = Matrix([[cos(q1 + q2)/(l1*sin(q2)), sin(q1 + q2)/(l1*sin(q2))], [-(l1*cos(q1) + l2*cos(q1 + q2))/(l1*l2*sin(q2)), -(l1*sin(q1) + l2*sin(q1 + q2))/(l1*l2*sin(q2))]])
norm of J^-1 column growth: 1/|sin q2| factor: l2*cos(q1 + q2)

===== fig01_frames.py (exit 0, 0.7 s)
obstacle in sensor frame (0.8, 0.0)  in rover frame [0.9 0. ]  in world frame [2.7794 1.45  ]
world -> rover again: [ 0.9 -0. ]

===== fig02_arm.py (exit 0, 0.8 s)
target (0.35, 0.25) r = 0.4301  up: q = [11.13, 62.72] deg ; down: q = [59.95, -62.72] deg
check FK: [0.35 0.25] [0.35 0.25]
workspace: inner radius 0.09999999999999998 outer 0.5  area m^2: 0.754 (full circle of angles q1)

===== fig03_jacobian.py (exit 0, 1.0 s)
joint rate norm for 0.1 m/s radial motion at r = {0.15: 0.659, 0.3: 0.543, 0.45: 1.006, 0.49: 2.208, 0.499: 6.955}
det J at q2 = 90 deg (cm^2): 600.0  at q2 = 5 deg: 52.293

===== fig04_diffdrive.py (exit 0, 0.8 s)
wheel speed limit v_wheel_max = w_noload r = 0.6912 m/s ; track 0.16 m
max in-place turn rate 8.639 rad/s = 495.0 deg/s ; at v = 0.5 m/s: w_max = 2.389 rad/s, min turning radius 0.209 m
turning radius v/w: {(0.4, 1.0): 0.4, (0.2, 2.0): 0.1}

===== fig05_drift.py (exit 0, 2.0 s)
systematic: true end [18.77   6.064  0.625] closed form 18.77 6.064 0.625 ; odometry end [20.  0.  0.] ; position error 6.188 m = 30.9 percent of distance; heading error 35.81 deg
s =    1 m: systematic error  0.016 m (  1.6 percent) | random: simulated rms 0.010 m, lateral formula 0.010 m (1.0 percent)
s =    2 m: systematic error  0.063 m (  3.1 percent) | random: simulated rms 0.026 m, lateral formula 0.029 m (1.3 percent)
s =    5 m: systematic error  0.391 m (  7.8 percent) | random: simulated rms 0.100 m, lateral formula 0.114 m (2.0 percent)
s =   10 m: systematic error  1.560 m ( 15.6 percent) | random: simulated rms 0.293 m, lateral formula 0.323 m (2.9 percent)
s =   15 m: systematic error  3.497 m ( 23.3 percent) | random: simulated rms 0.538 m, lateral formula 0.593 m (3.6 percent)
s =   20 m: systematic error  6.188 m ( 30.9 percent) | random: simulated rms 0.831 m, lateral formula 0.913 m (4.2 percent)
calibration: lateral error after 5 m straight: 0.3908 m  ->  eps estimate 0.005 (true 0.005 )

===== fig06_integration.py (exit 0, 1.1 s)
n    12 dt  1.0472 s: quarter-lap end-point error: Euler 0.37166 m, exact arc 1.05e-15 m
n    24 dt  0.5236 s: quarter-lap end-point error: Euler 0.18530 m, exact arc 9.49e-16 m
n    48 dt  0.2618 s: quarter-lap end-point error: Euler 0.09258 m, exact arc 8.95e-16 m
n   100 dt  0.1257 s: quarter-lap end-point error: Euler 0.04443 m, exact arc 6.28e-16 m
n   200 dt  0.0628 s: quarter-lap end-point error: Euler 0.02221 m, exact arc 1.57e-15 m
n   500 dt  0.0251 s: quarter-lap end-point error: Euler 0.00889 m, exact arc 3.67e-15 m
n  1000 dt  0.0126 s: quarter-lap end-point error: Euler 0.00444 m, exact arc 7.00e-15 m
polygon radius ratio for Euler at n = 12: 1.01152 (circumradius of the regular polygon / true radius)
track error    0 percent: odometry says 360.34 deg, true rotation 360.39 deg, error 0.05 deg (formula 0.00)
track error    1 percent: odometry says 360.34 deg, true rotation 356.82 deg, error -3.52 deg (formula -3.56)
track error    2 percent: odometry says 360.34 deg, true rotation 353.32 deg, error -7.01 deg (formula -7.06)
track error    5 percent: odometry says 360.34 deg, true rotation 343.23 deg, error -17.11 deg (formula -17.14)
track error   10 percent: odometry says 360.34 deg, true rotation 327.63 deg, error -32.71 deg (formula -32.73)
