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
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 |
float64 (via |
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.