urdf/bodies/rb1/rb1_body.urdf.xacro:96-108 (branch jazzy-devel, same on
humble-devel):
<link name="${prefix}front_cover_link">
<inertial>
<mass value="0.25" />
<inertia ixx="0.00007" ixy="0.0" ixz="0.0"
iyy="0.00007" iyz="0.0" izz="0.0078" />
The tensor is diagonal, so the principal moments are the declared values:
a + b = 0.00007 + 0.00007 = 0.00014
c = 0.0078
a + b < c -> violated by 98.205%
A rigid body's principal moments must satisfy a + b >= c. No mass
distribution can produce this one.
Two independent sanity checks that it is the izz that is wrong, not the
diagonal being oddly shaped:
- Radius of gyration.
izz implies sqrt(0.0078/0.25) = 0.177 m; ixx implies
sqrt(0.00007/0.25) = 0.0167 m. A 10.6x disagreement on a single cover panel.
- Plate bound. For any flat plate,
izz/ixx <= 2 (perpendicular-axis
theorem, with equality for a symmetric plate). Here izz/ixx = 111.4. A thin
disc carrying this izz would have ixx = iyy = 0.0039, not 7e-05.
So either izz is ~50x too large, or ixx/iyy are ~50x too small; the plate
bound says the consistent pair for this izz is ixx = iyy = 0.0039.
MuJoCo refuses the file outright:
Error: inertia must satisfy A + B >= C; use 'balanceinertia' to fix
so this is not an RViz nicety — the RB-1 description cannot be loaded by a
MuJoCo-family consumer at all.
It is a single occurrence, not copy-pasted: I parsed every <inertial> block in
the file and front_cover_link is the only one that violates (the base_link
tensor is fine). So one edit fixes it.
Honest scoping on impact: the joint above it is fixed, so in consumers that
merge fixed-joint children the wrong tensor lumps into base_link, whose own
izz is 0.981 — about a 0.8% perturbation, i.e. dynamically minor. The headline
is the load failure rather than the dynamics.
Happy to send a PR if you have a preferred value; I would only be guessing
between "izz is wrong" and "ixx/iyy are wrong" without the CAD, and the
plate bound narrows it but does not settle which side was mistyped.
urdf/bodies/rb1/rb1_body.urdf.xacro:96-108(branchjazzy-devel, same onhumble-devel):The tensor is diagonal, so the principal moments are the declared values:
A rigid body's principal moments must satisfy
a + b >= c. No massdistribution can produce this one.
Two independent sanity checks that it is the
izzthat is wrong, not thediagonal being oddly shaped:
izzimpliessqrt(0.0078/0.25) = 0.177 m;ixximpliessqrt(0.00007/0.25) = 0.0167 m. A 10.6x disagreement on a single cover panel.izz/ixx <= 2(perpendicular-axistheorem, with equality for a symmetric plate). Here
izz/ixx = 111.4. A thindisc carrying this
izzwould haveixx = iyy = 0.0039, not7e-05.So either
izzis ~50x too large, orixx/iyyare ~50x too small; the platebound says the consistent pair for this
izzisixx = iyy = 0.0039.MuJoCo refuses the file outright:
so this is not an RViz nicety — the RB-1 description cannot be loaded by a
MuJoCo-family consumer at all.
It is a single occurrence, not copy-pasted: I parsed every
<inertial>block inthe file and
front_cover_linkis the only one that violates (thebase_linktensor is fine). So one edit fixes it.
Honest scoping on impact: the joint above it is
fixed, so in consumers thatmerge fixed-joint children the wrong tensor lumps into
base_link, whose ownizzis 0.981 — about a 0.8% perturbation, i.e. dynamically minor. The headlineis the load failure rather than the dynamics.
Happy to send a PR if you have a preferred value; I would only be guessing
between "
izzis wrong" and "ixx/iyyare wrong" without the CAD, and theplate bound narrows it but does not settle which side was mistyped.