If inertia is being visualised, draw body frames at the inertial frame.

PiperOrigin-RevId: 532458388
Change-Id: Ie58cea8dee4215ad9e40ef827361bc3793c8f449
This commit is contained in:
Yuval Tassa
2023-05-16 07:54:34 -07:00
committed by Copybara-Service
parent b81793371b
commit 4ea8218466
+6 -8
View File
@@ -776,6 +776,9 @@ void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* vopt,
continue;
}
mjtNum* xmat = vopt->flags[mjVIS_INERTIA] ? d->ximat+9*i : d->xmat+9*i;
mjtNum* xpos = vopt->flags[mjVIS_INERTIA] ? d->xipos+3*i : d->xpos+3*i;
// draw the three axes (separate geoms)
for (int j=0; j<3; j++) {
START
@@ -784,16 +787,11 @@ void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* vopt,
for (int k=0; k<3; k++) {
axis[k] = (j==k ? sz[1] : 0);
}
mju_mulMatVec(vec, d->xmat+9*i, axis, 3, 3);
mju_mulMatVec(vec, xmat, axis, 3, 3);
// create a cylinder
mjv_makeConnector(thisgeom, mjGEOM_CYLINDER, sz[0],
d->xpos[3*i+0],
d->xpos[3*i+1],
d->xpos[3*i+2],
d->xpos[3*i+0] + vec[0],
d->xpos[3*i+1] + vec[1],
d->xpos[3*i+2] + vec[2]);
mjv_makeConnector(thisgeom, mjGEOM_CYLINDER, sz[0], xpos[0], xpos[1], xpos[2],
xpos[0] + vec[0], xpos[1] + vec[1], xpos[2] + vec[2]);
// set color: R, G or B depending on axis
for (int k=0; k<3; k++) {