Download Game! Currently 96 players. Last logged in:UrsaStylusSilencerBlitzer

Blitzer's Blog >> 72844

Back to blogs index
Posted: 29 Sep 2026 21:27 [ permalink ]
The calculation of Inverse Kinematics (IK)translating a desired 3D foot
position into specific hip, knee, and ankle anglesmust be carefully
distributed.
You should never run full 3D inverse kinematics on the RP2040 edge nodes. The
RP2040 uses an ARM Cortex-M0+ processor, which completely lacks a hardware
Floating-Point Unit (FPU). Every time you call sin(), cos(), or atan2(), the
compiler must inject a massive software emulation block that will severely
choke your 1000Hz motor control loop.
Instead, modern robotics use a hierarchical approach, splitting the math based
on compute capabilities and required frequencies.
Tier 1: The Android Browser (The Brain)
Rate: 3050Hz | Math: Heavy Non-linear Trigonometry
The Android device handles the "macro" IK. Given a desired walking speed and
heading, it determines where the foot needs to be in 3D space (XYZ
coordinates) to take a step.
 * The Implementation: You can write a FABRIK (Forward And Backward Reaching
Inverse Kinematics) or CCD (Cyclic Coordinate Descent) solver in standard
JavaScript. Because these algorithms require iterative floating-point math and
matrix inversions, run them inside a dedicated Web Worker. Alternatively,
compile a C/C++ IK solver to WebAssembly (WASM) for near-native performance
inside the browser.
 * The Output: The browser outputs a sparse stream of target joint angles
(e.g., "Hip: 12B0, Knee: 45B0") over WebSockets or Web Serial to the ESP32.
Tier 2: The ESP32 (The Interpolator)
Rate: 500Hz | Math: Cubic Splines
If you send 50Hz joint angles directly to the motors, the robot will jerk
violently and fall over. The ESP32 acts as a buffer and interpolator.
 * The Implementation: The ESP32 takes the sparse waypoints from the Android
brain and generates smooth cubic splines. It has hardware floating-point
support, making this lightweight algebra extremely fast.
 * The Output: It blasts a continuous, ultra-smooth 500Hz stream of target
angles across the CAN FD bus to the edge nodes.
Tier 3: The RP2040 (The Local Reflex)
Rate: 1000Hz+ | Math: Linear Algebra (Jacobians) and PID
The RP2040 must avoid atan2() at all costs. It receives the high-speed target
angles from the ESP32 and runs a localized PID loop to drive the motors.
However, to handle immediate balance recovery (e.g., the foot hits a rock), it
uses a Jacobian Matrix.
A Jacobian is a linear approximation of the IK equations at the leg's current
pose. Instead of solving a complex trig equation to find a new angle, it uses
simple matrix multiplication (which Cortex-M0+ can do very quickly, especially
if using fixed-point integer math) to map an external force at the foot
directly to a counter-torque at the knee and hip. This allows the leg to act
as a virtual spring without ever relying on the Android brain for permission
to react.