RobotArmNode#
Module: mime.nodes.actuation.robot_arm
Stability: experimental
Algorithm ID: MIME-NODE-102
Version: 1.0.0
Verification Mode: Mode 2 (Independent)
Summary#
URDF-driven articulated rigid-body manipulator. Kinematic and inertial structure is parsed once at construction from a URDF file; joint-space dynamics are integrated each step with semi-implicit Euler, using mass matrix from CRBA, nonlinear bias from RNEA, and per-link external wrenches mapped via Jacobian transpose. v1 is fully rigid (no flexibility, no contact, no cogging).
Governing Equations#
$$ M(q),\ddot q + c(q,\dot q) + g(q) ;=; \tau_{\mathrm{eff}} + \sum_i J_i^{!\top},F^{\mathrm{ext}}_i $$
with $$ \tau_{\mathrm{eff}} = \tau_{\mathrm{cmd}} - f \cdot \dot q, \qquad J_i = J_{\mathrm{geom}}(q, i) \in \mathbb{R}^{6\times N}. $$
Integration:
$$ \dot q_{n+1} = \dot q_n + \ddot q,\Delta t, \qquad q_{n+1} = q_n + \dot q_{n+1},\Delta t, \qquad q_{n+1} \leftarrow \mathrm{clip}(q_{n+1};,q_{\mathrm{lo}},q_{\mathrm{hi}}). $$
Discretization#
Semi-implicit (symplectic) Euler with explicit forces. The mass matrix $M(q)$ is built by a vectorised CRBA pass using ancestor masking; the nonlinear bias $c(q,\dot q) + g(q)$ is computed by a single RNEA pass. Each per-link 6-DOF external wrench is multiplied by the transpose of that link’s geometric Jacobian (linear-then-angular ordering). Joint limits are enforced by hard clipping after the position update.
Implementation Mapping#
Equation Term |
Implementation |
Notes |
|---|---|---|
$M(q)$ — joint-space mass matrix |
|
CRBA, ancestor mask |
$c(q,\dot q)+g(q)$ — nonlinear bias |
|
RNEA single pass |
$J_i$ — geometric Jacobian for link $i$ |
|
linear-angular ordering |
$\sum_i J_i^{!\top}F^{\mathrm{ext}}_i$ |
|
static-N unrolled loop |
$\ddot q = M^{-1}(\tau_{\mathrm{eff}} + \tau_{\mathrm{ext}} - \mathrm{bias})$ |
|
|
Semi-implicit Euler $q,\dot q$ update |
|
clip to limits |
Forward kinematics — link / EE poses |
|
URDF link-COM frames |
Pose composition base ⊕ link ⊕ tool |
|
scalar-first quat |
Assumptions and Simplifications#
Rigid joints — no flexibility, backlash, or compliant stops.
Linear viscous joint friction $\tau_f = f,\dot q$. Coulomb friction not modelled.
Fixed base —
base_pose_worldis held constant by the caller.Gravity is treated as a uniform inertial field in world coordinates.
External wrenches are expressed in world coordinates and applied at each link’s inertial origin (the URDF
<inertial><origin>).URDF fixed joints are merged at parse time — caller cannot re-introduce a fixed joint at runtime.
Validated Physical Regimes#
Parameter |
Verified Range |
Notes |
|---|---|---|
|
1 – 10 |
Tested on 3-link planar fixture; algorithm scales further |
Timestep |
$10^{-4}$ – $10^{-2}$ s |
Stable for revolute manipulators with reasonable inertias |
Known Limitations and Failure Modes#
No contact / collision detection: links can pass through each other or through the world without any reaction force.
Joint limit clipping is hard — $\dot q$ is not zeroed at the limit, so the arm can integrate against the wall and produce large reaction spikes if energy is supplied.
Single solve per step — no fixed-point iteration with downstream nodes beyond what
GraphManager’s coupling-group machinery provides.Cogging torque, rotor imbalance, and motor current draw belong to
MotorNode(the magnet-rotor stage at the EE), not this node. The per-axis arm motors are abstracted into joint-space torques / friction.
Stability Conditions#
Empirical: dt < 1e-2 s for typical revolute manipulators; tighter at high stiffness. The semi-implicit scheme is symplectic, so energy drift on conservative systems is bounded over long horizons.
State Variables#
Field |
Shape |
Units |
Description |
|---|---|---|---|
|
(N,) |
rad |
$q$ |
|
(N,) |
rad/s |
$\dot q$ |
Parameters#
Parameter |
Type |
Default |
Units |
Description |
|---|---|---|---|---|
|
str |
— (required) |
— |
URDF file path |
|
str |
— (required) |
— |
URDF link name to expose as EE |
|
tuple[7] |
identity |
m, quat |
tool-tip offset in EE-link frame |
|
tuple[7] |
identity |
m, quat |
world pose of root link |
|
tuple[N] or None |
URDF damping |
N·m·s/rad |
per-joint viscous friction |
|
tuple[3] |
(0,0,-9.80665) |
m/s² |
world-frame gravity |
|
tuple[(N,2)] or None |
URDF limits |
rad |
(lower, upper) per joint |
Boundary Inputs#
Field |
Shape |
Default |
Coupling Type |
Description |
|---|---|---|---|---|
|
(N,) |
zeros |
additive |
$\tau_{\mathrm{cmd}}$ |
|
(N, 6) |
zeros |
additive |
per-link world-frame wrench |
Boundary Fluxes (outputs)#
Field |
Shape |
Units |
Description |
|---|---|---|---|
|
(7,) |
m, quat |
tool-tip pose, scalar-first quat |
|
(N, 7) |
m, quat |
URDF link-COM poses |
|
(N,) |
rad |
$q$ |
|
(N,) |
rad/s |
$\dot q$ |
|
(N,) |
N·m |
$\tau_{\mathrm{cmd}} - f\dot q + J^\top F_{\mathrm{ext}}$ |
MIME-Specific Sections#
Anatomical Operating Context#
Not applicable — RobotArmNode is an external apparatus operating in the lab frame, not in any anatomical compartment. Its base pose is positioned outside the patient.
Clinical Relevance#
The arm carries the magnet-rotor + permanent-magnet stage at its end-effector. Its kinematic precision and stiffness directly determine the achievable accuracy of microrobot actuation: lateral drift of the EE relative to the microrobot’s vessel translates into the misalignment-induced wobble / step-out reduction effects analysed in the actuation-decomposition plan. This node is not in patient contact and makes no clinical claims.
Mode 2 Independent Verification#
All verification is independent (no MADDENING upstream wraps a multibody arm). Evidence: MIME-VER-120 / 121 / 122 / 123 / 124.
References#
[@Featherstone2008] Featherstone, R. (2008). Rigid Body Dynamics Algorithms. Springer. — CRBA, RNEA, spatial-vector formulations.
[@Sciavicco2000] Sciavicco, L. & Siciliano, B. (2000). Modelling and Control of Robot Manipulators. Springer. — Jacobian-transpose wrench mapping; PD with gravity compensation.
[@Annin2024AR4] Annin, C. (2024). AR4 Open-Source 6-DOF Robot Arm. — URDF and STL meshes for the bundled default-arm experiment under
MICROROBOTICA/experiments/ar4_helical_drive/.
Verification Evidence#
tests/verification/test_robot_arm.pydocs/validation/benchmark_reports/mime_ver_120_robot_arm_fk.mddocs/validation/benchmark_reports/mime_ver_121_robot_arm_mass_matrix.mddocs/validation/benchmark_reports/mime_ver_122_robot_arm_free_fall.mddocs/validation/benchmark_reports/mime_ver_123_robot_arm_gravity_hold.mddocs/validation/benchmark_reports/mime_ver_124_robot_arm_pd_tracking.md
Changelog#
Version |
Date |
Change |
|---|---|---|
1.0.0 |
2026-04-30 |
Initial implementation. URDF parsing via |