Background
Three independent bug reports (#236, #463, #489) hit essentially the same crash: rne()/inertia() raising AttributeError/TypeError on URDF-loaded robots (Panda, KinovaGen3) that have a structural (non-actuated, jindex=None) link in the chain -- typically the base-mount link before the first real joint.
Current status (verified 2026-08-25)
The literal crash no longer reproduces on current main -- confirmed directly:
>>> robot = rtb.models.URDF.Panda()
>>> robot.rne(q=[-1.649, -0.107, 0, 0, 0, 0, 0], qd=np.zeros(7), qdd=np.zeros(7), gravity=[9.81, 0, 0])
[0. 0. 0. 0. 0. 0. 0.]
No exception -- but that's the wrong answer. The equivalent DH Panda model, same pose, same gravity vector, returns real nonzero torques ([1.307, 3.65, -3.52, -1.23, -1.60, 0.038, 0.078]). Same symptom reproduces on KinovaGen3 (#463's exact repro): near-zero-but-not-exactly-zero torques (~1e-8 to ~1e-3) instead of the real gravity-load torques a bent 7-DOF arm should show.
So whatever change stopped the crash did not fix the underlying computation -- it just made the wrong answer silent instead of loud, which is arguably worse for anyone not specifically checking against a reference.
Root cause and proposed fix
#483 diagnosed this precisely and submitted a full working patch: when a fixed/structural link precedes an actuated joint, that link's center-of-mass and inertia tensor are never transformed into the parent actuated joint's frame before being folded into the dynamics recursion -- they're silently dropped/miscounted. #483's patch (verified against Pinocchio by the submitter) fixes this at the source. Not yet applied to main.
Next steps
Originally reported: #236, #463, #489. Fix proposed in #483 (kept open, not duplicated here).
Background
Three independent bug reports (#236, #463, #489) hit essentially the same crash:
rne()/inertia()raisingAttributeError/TypeErroron URDF-loaded robots (Panda, KinovaGen3) that have a structural (non-actuated,jindex=None) link in the chain -- typically the base-mount link before the first real joint.Current status (verified 2026-08-25)
The literal crash no longer reproduces on current
main-- confirmed directly:No exception -- but that's the wrong answer. The equivalent DH Panda model, same pose, same gravity vector, returns real nonzero torques (
[1.307, 3.65, -3.52, -1.23, -1.60, 0.038, 0.078]). Same symptom reproduces on KinovaGen3 (#463's exact repro): near-zero-but-not-exactly-zero torques (~1e-8to~1e-3) instead of the real gravity-load torques a bent 7-DOF arm should show.So whatever change stopped the crash did not fix the underlying computation -- it just made the wrong answer silent instead of loud, which is arguably worse for anyone not specifically checking against a reference.
Root cause and proposed fix
#483 diagnosed this precisely and submitted a full working patch: when a fixed/structural link precedes an actuated joint, that link's center-of-mass and inertia tensor are never transformed into the parent actuated joint's frame before being folded into the dynamics recursion -- they're silently dropped/miscounted. #483's patch (verified against Pinocchio by the submitter) fixes this at the source. Not yet applied to
main.Next steps
Robot.rne()'s internals have since diverged further from Proposed fixes for RNE with fixed joints give incorrect results #483's patch) the fix from Proposed fixes for RNE with fixed joints give incorrect results #483.Originally reported: #236, #463, #489. Fix proposed in #483 (kept open, not duplicated here).