MIME-VER-120 — RobotArmNode Forward Kinematics#
Date: 2026-04-30
Node under test: mime.nodes.actuation.robot_arm.RobotArmNode
Algorithm ID: MIME-NODE-102
Benchmark type: Analytical (Mode 2 independent)
Test file: tests/verification/test_robot_arm.py::test_ver120_fk_vs_analytical
Acceptance: $\max|p_{\text{node}} - p_{\text{analytic}}|_\infty < 10^{-10}$ m over 5 random configs
Goal#
Verify that RobotArmNode.compute_boundary_fluxes produces an
end-effector tool-tip position that agrees with the closed-form
3-link planar formula
$$ \begin{aligned} x &= L_1\cos q_1 + L_2 \cos(q_1+q_2) + L_3 \cos(q_1+q_2+q_3),\ y &= L_1\sin q_1 + L_2 \sin(q_1+q_2) + L_3 \sin(q_1+q_2+q_3). \end{aligned} $$
This validates the entire FK chain: URDF parse → joint transforms →
link_world_poses → tool-offset composition.
Configuration#
Parameter |
Value |
|---|---|
URDF |
|
Link lengths $L_1, L_2, L_3$ |
$1.0, 1.0, 0.5$ m |
|
|
|
$(L_3/2, 0, 0, 1, 0, 0, 0)$ — link COM is at $L_3/2$, tool tip is +$L_3/2$ further |
|
$(0, 0, -9.80665)$ |
Configurations |
5 samples from $\mathcal{U}[-\pi, \pi]^3$ (seed 20260430) |
JAX precision |
x64 enabled at module load |
Procedure#
For each random $q$:
Build
state = {joint_angles: q, joint_velocities: 0}.Call
arm.compute_boundary_fluxes(state, {}, dt)and read the first 3 components ofend_effector_pose_world.Compute the analytical reference with double-precision NumPy.
Track $\max_i|p_{\text{node},i} - p_{\text{analytic},i}|_\infty$ across all configs.
Result#
PASS. The maximum component error across the 5 configurations is recorded by the test and is well below the $10^{-10}$ acceptance.
Scope and Limitations#
Validates planar revolute FK only (the fixture has all axes along $+\hat z$). Spatial FK with non-planar axes is exercised indirectly by the kinematics-package tests (
tests/control/test_kinematics.py), which include 3-D placements.Does not validate orientation, only position.
Does not exercise prismatic joints or fixed-joint merging — those have their own coverage in the kinematics-package suite.
Reproducibility#
Seed: NumPy
default_rng(20260430)for joint angles.Hardware: any platform with JAX ≥ 0.4 in float64 (
jax_enable_x64).Software: MIME 0.1.0; MADDENING pinned in
pyproject.toml.Run:
JAX_PLATFORMS=cpu .venv/bin/python -m pytest tests/verification/test_robot_arm.py::test_ver120_fk_vs_analytical -x -q.