Dear Isaac Sim Team,
I recently ported a MuJoCo model to Isaac Sim using the available importer. I noticed that the off-diagonal elements were simply ignored, so I added the information about the off-diagonal elements in the USD file via the physics:principalAxes element of the PhysicsMassAPI.
Given that I was unsure whether I needed to present the quaternion in (w,x,y,z) or (x,y,z,w) convention, I simply tried both and looked at the simulation results. To my surprise, the results were the same.
Intrigued by this observation and thinking that Isaac Sim simply ignores off-diagonal inertia elements, I decided to side-step the physics:principalAxes element and create an xForm element that carries the diagonal inertia information and is rotated to align with the inertia frame. As an example, here is the conversion I did:
point3f physics:centerOfMass = (-0.0044, -0.0007, -0.12190001)
float3 physics:diagonalInertia = (0.09044195, 0.113096856, 0.1350886)
quat physics:principalAxes = (0.5153317, 0.48197561, 0.53200862, 0.46808074)
float physics:mass = 10.767688
def Xform "inertia_properties" (
apiSchemas = ["PhysicsMassAPI"]
)
{
point3f physics:centerOfMass = (-0.0044, -0.0007, -0.12190001)
float3 physics:diagonalInertia = (0.09044195, 0.113096856, 0.1350886)
float physics:mass = 10.767688
quatd xformOp:orient = (0.5153317, 0.48197561, 0.53200862, 0.46808074)
double3 xformOp:translate = (0., 0., 0.)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient"]
}
This led to a difference compared to the previous simulations. However, the simulation was again indifferent to whether I specified the rotation in (w,x,y,z) or (x,y,z,w) convention.
For the MuJoCo simulation, using the different quaternions made a noticeable difference in simulation outcome.
So I wonder, is Isaac Sim treating the off-diagonal elements at all? And how are nested bodies treated by the simulator?