Add visualisation flag for activations.
- Added illustrative model: `test/engine/testdata/activation.xml` PiperOrigin-RevId: 453628961 Change-Id: I061ec3d17e57c6baffa0fe446a0be3564c44519d
This commit is contained in:
committed by
Copybara-Service
parent
736e0b391b
commit
066367fcc8
@@ -99,8 +99,9 @@ typedef enum mjtVisFlag_ { // flags enabling model element visualization
|
|||||||
mjVIS_CONVEXHULL = 0, // mesh convex hull
|
mjVIS_CONVEXHULL = 0, // mesh convex hull
|
||||||
mjVIS_TEXTURE, // textures
|
mjVIS_TEXTURE, // textures
|
||||||
mjVIS_JOINT, // joints
|
mjVIS_JOINT, // joints
|
||||||
mjVIS_ACTUATOR, // actuators
|
|
||||||
mjVIS_CAMERA, // cameras
|
mjVIS_CAMERA, // cameras
|
||||||
|
mjVIS_ACTUATOR, // actuators
|
||||||
|
mjVIS_ACTIVATION, // activations
|
||||||
mjVIS_LIGHT, // lights
|
mjVIS_LIGHT, // lights
|
||||||
mjVIS_TENDON, // tendons
|
mjVIS_TENDON, // tendons
|
||||||
mjVIS_RANGEFINDER, // rangefinder sensors
|
mjVIS_RANGEFINDER, // rangefinder sensors
|
||||||
|
|||||||
+21
-20
@@ -584,26 +584,27 @@ ENUMS: Mapping[str, EnumDecl] = dict([
|
|||||||
('mjVIS_CONVEXHULL', 0),
|
('mjVIS_CONVEXHULL', 0),
|
||||||
('mjVIS_TEXTURE', 1),
|
('mjVIS_TEXTURE', 1),
|
||||||
('mjVIS_JOINT', 2),
|
('mjVIS_JOINT', 2),
|
||||||
('mjVIS_ACTUATOR', 3),
|
('mjVIS_CAMERA', 3),
|
||||||
('mjVIS_CAMERA', 4),
|
('mjVIS_ACTUATOR', 4),
|
||||||
('mjVIS_LIGHT', 5),
|
('mjVIS_ACTIVATION', 5),
|
||||||
('mjVIS_TENDON', 6),
|
('mjVIS_LIGHT', 6),
|
||||||
('mjVIS_RANGEFINDER', 7),
|
('mjVIS_TENDON', 7),
|
||||||
('mjVIS_CONSTRAINT', 8),
|
('mjVIS_RANGEFINDER', 8),
|
||||||
('mjVIS_INERTIA', 9),
|
('mjVIS_CONSTRAINT', 9),
|
||||||
('mjVIS_SCLINERTIA', 10),
|
('mjVIS_INERTIA', 10),
|
||||||
('mjVIS_PERTFORCE', 11),
|
('mjVIS_SCLINERTIA', 11),
|
||||||
('mjVIS_PERTOBJ', 12),
|
('mjVIS_PERTFORCE', 12),
|
||||||
('mjVIS_CONTACTPOINT', 13),
|
('mjVIS_PERTOBJ', 13),
|
||||||
('mjVIS_CONTACTFORCE', 14),
|
('mjVIS_CONTACTPOINT', 14),
|
||||||
('mjVIS_CONTACTSPLIT', 15),
|
('mjVIS_CONTACTFORCE', 15),
|
||||||
('mjVIS_TRANSPARENT', 16),
|
('mjVIS_CONTACTSPLIT', 16),
|
||||||
('mjVIS_AUTOCONNECT', 17),
|
('mjVIS_TRANSPARENT', 17),
|
||||||
('mjVIS_COM', 18),
|
('mjVIS_AUTOCONNECT', 18),
|
||||||
('mjVIS_SELECT', 19),
|
('mjVIS_COM', 19),
|
||||||
('mjVIS_STATIC', 20),
|
('mjVIS_SELECT', 20),
|
||||||
('mjVIS_SKIN', 21),
|
('mjVIS_STATIC', 21),
|
||||||
('mjNVISFLAG', 22),
|
('mjVIS_SKIN', 22),
|
||||||
|
('mjNVISFLAG', 23),
|
||||||
]),
|
]),
|
||||||
)),
|
)),
|
||||||
('mjtRndFlag',
|
('mjtRndFlag',
|
||||||
|
|||||||
@@ -68,8 +68,9 @@ const char* mjVISSTRING[mjNVISFLAG][3] = {
|
|||||||
{"Convex &Hull", "0", "H"},
|
{"Convex &Hull", "0", "H"},
|
||||||
{"Te&xture", "1", "X"},
|
{"Te&xture", "1", "X"},
|
||||||
{"&Joint", "0", "J"},
|
{"&Joint", "0", "J"},
|
||||||
{"Act&uator", "0", "U"},
|
|
||||||
{"Camera", "0", "Q"},
|
{"Camera", "0", "Q"},
|
||||||
|
{"Act&uator", "0", "U"},
|
||||||
|
{"Act&ivation", "0", ","},
|
||||||
{"Light", "0", "Z"},
|
{"Light", "0", "Z"},
|
||||||
{"Tendon", "1", "V"},
|
{"Tendon", "1", "V"},
|
||||||
{"Range Finder", "1", "Y"},
|
{"Range Finder", "1", "Y"},
|
||||||
|
|||||||
@@ -774,23 +774,26 @@ void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* vopt,
|
|||||||
if (vopt->actuatorgroup[mjMAX(0, mjMIN(mjNGROUP-1, m->actuator_group[i]))]) {
|
if (vopt->actuatorgroup[mjMAX(0, mjMIN(mjNGROUP-1, m->actuator_group[i]))]) {
|
||||||
// determine extended range
|
// determine extended range
|
||||||
mjtNum rng[3] = {-1, 0, +1};
|
mjtNum rng[3] = {-1, 0, +1};
|
||||||
|
mjtNum rmin = -1, rmax = 1, act;
|
||||||
if (m->actuator_ctrllimited[i]) {
|
if (m->actuator_ctrllimited[i]) {
|
||||||
mjtNum rmin = m->actuator_ctrlrange[2*i];
|
rmin = m->actuator_ctrlrange[2*i];
|
||||||
mjtNum rmax = m->actuator_ctrlrange[2*i+1];
|
rmax = m->actuator_ctrlrange[2*i+1];
|
||||||
|
} else if (vopt->flags[mjVIS_ACTIVATION] && m->actuator_actlimited[i]) {
|
||||||
if (rmin>=0) {
|
rmin = m->actuator_actrange[2*i];
|
||||||
rng[0] = -1;
|
rmax = m->actuator_actrange[2*i+1];
|
||||||
rng[1] = rmin;
|
}
|
||||||
rng[2] = rmax;
|
if (rmin>=0) {
|
||||||
} else if (rmax<=0) {
|
rng[0] = -1;
|
||||||
rng[0] = rmin;
|
rng[1] = rmin;
|
||||||
rng[1] = rmax;
|
rng[2] = rmax;
|
||||||
rng[2] = +1;
|
} else if (rmax<=0) {
|
||||||
} else {
|
rng[0] = rmin;
|
||||||
rng[0] = rmin;
|
rng[1] = rmax;
|
||||||
rng[1] = 0;
|
rng[2] = +1;
|
||||||
rng[2] = rmax;
|
} else {
|
||||||
}
|
rng[0] = rmin;
|
||||||
|
rng[1] = 0;
|
||||||
|
rng[2] = rmax;
|
||||||
}
|
}
|
||||||
|
|
||||||
// adjust small ranges
|
// adjust small ranges
|
||||||
@@ -801,8 +804,12 @@ void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* vopt,
|
|||||||
rng[2] = rng[1] + mjMINVAL;
|
rng[2] = rng[1] + mjMINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// clamp ctrl to extended range
|
// clamp act to extended range
|
||||||
mjtNum act = mjMIN(rng[2], mjMAX(rng[0], d->ctrl[i]));
|
if (vopt->flags[mjVIS_ACTIVATION] && m->actuator_dyntype[i]) {
|
||||||
|
act = mjMIN(rng[2], mjMAX(rng[0], d->act[i-(m->nu-m->na)]));
|
||||||
|
} else {
|
||||||
|
act = mjMIN(rng[2], mjMAX(rng[0], d->ctrl[i]));
|
||||||
|
}
|
||||||
|
|
||||||
// compute interpolants
|
// compute interpolants
|
||||||
float amin, amean, amax;
|
float amin, amean, amax;
|
||||||
|
|||||||
Vendored
+46
@@ -0,0 +1,46 @@
|
|||||||
|
<mujoco>
|
||||||
|
<option density="1000"/>
|
||||||
|
|
||||||
|
<worldbody>
|
||||||
|
<geom type="plane" size="10 10 .1" rgba="1 1 1 1"/>
|
||||||
|
<light pos="0 0 20"/>
|
||||||
|
<site name="anchor_tendon" pos="0 0 9" size="0.03" rgba="0 0 1 1"/>
|
||||||
|
<body name="body_hinge" pos="5 0 3">
|
||||||
|
<geom type="box" size="1.5 .1 .1" pos="0 0 2.0"/>
|
||||||
|
<joint name="hinge" type="hinge" pos="0 0 2.0" axis="0 1 0" range="-25 5"/>
|
||||||
|
</body>
|
||||||
|
<body name="body_tendon" pos="0 0 5">
|
||||||
|
<freejoint/>
|
||||||
|
<geom type="box" size=".5 .5 .5"/>
|
||||||
|
<site name="box_tendon" pos=".5 .5 .5" rgba="0 0 1 1" size="0.03"/>
|
||||||
|
</body>
|
||||||
|
<body name="body_slider" pos="5 -2 2">
|
||||||
|
<geom type="box" size=".5 .5 .5"/>
|
||||||
|
<joint name="slider" type="slide" pos=".5 0 0" axis="1 0 0" range="-25 5"/>
|
||||||
|
</body>
|
||||||
|
<body name="body_site" pos="2 2 .5">
|
||||||
|
<freejoint/>
|
||||||
|
<geom type="box" size=".5 .5 .5"/>
|
||||||
|
<site name="box_site" pos="0 0 .5" rgba="0 0 1 1" size="0.1"/>
|
||||||
|
</body>
|
||||||
|
<body name="body_stateless" pos="5 2 2">
|
||||||
|
<geom type="box" size=".5 .5 .5"/>
|
||||||
|
<joint name="stateless" type="slide" pos=".5 0 0" axis="1 0 0" range="-25 5"/>
|
||||||
|
</body>
|
||||||
|
</worldbody>
|
||||||
|
|
||||||
|
<tendon>
|
||||||
|
<spatial name="tendon" limited="true" range="0 4" damping="100" width="0.03">
|
||||||
|
<site site="anchor_tendon"/>
|
||||||
|
<site site="box_tendon"/>
|
||||||
|
</spatial>
|
||||||
|
</tendon>
|
||||||
|
|
||||||
|
<actuator>
|
||||||
|
<general name="stateless" joint="stateless" ctrllimited="true" ctrlrange="-20 20"/>
|
||||||
|
<general name="hinge" joint="hinge" dyntype="integrator" ctrllimited="true" ctrlrange="-20 20"/>
|
||||||
|
<muscle name="tendon" tendon="tendon" ctrllimited="true" ctrlrange="0 2"/>
|
||||||
|
<general name="slider" joint="slider" dyntype="integrator" ctrllimited="true" ctrlrange="-20 20"/>
|
||||||
|
<general name="site" site="box_site" dyntype="integrator" gear="0 0 1 0 0 0" ctrllimited="true" ctrlrange="0 10000"/>
|
||||||
|
</actuator>
|
||||||
|
</mujoco>
|
||||||
Reference in New Issue
Block a user