Add visualisation groups to skins.

PiperOrigin-RevId: 458441645
Change-Id: I14324e8efda5142b2718a5cc9215228c7556dbf7
This commit is contained in:
Alessio Quaglino
2022-07-01 04:56:46 -07:00
committed by Copybara-Service
parent 040deb161f
commit 2d0995b47c
19 changed files with 256 additions and 115 deletions
+44
View File
@@ -0,0 +1,44 @@
<mujoco>
<asset>
<skin name="skin" rgba="1 0 1 1" inflate="0.01"
vertex="
-.5 -.5 -.5
.5 -.5 -.5
-.5 .5 -.5
.5 .5 -.5
-.5 -.5 .5
.5 -.5 .5
-.5 .5 .5
.5 .5 .5"
texcoord=".1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1"
face="0 1 4 4 1 5 5 1 3 5 3 7 7 3 2 7 2 6 6 2 0 6 0 4 4 5 7 4 7 6">
<bone body="box" bindpos="0 0 .5" bindquat="1 0 0 0" vertid="4 5 6 7" vertweight="1 1 1 1"/>
<bone body="world" bindpos="0 0 -.5" bindquat="1 0 0 0" vertid="0 1 2 3" vertweight="1 1 1 1"/>
</skin>
</asset>
<worldbody>
<geom type="plane" size="2 2 .01"/>
<light pos="0 1 3" dir="0 -1 -2"/>
<light pos="0 -1 3" dir="0 1 -2"/>
<body name="box" pos="0 0 .9">
<joint limited="true" range="-45 45"/>
<geom type="box" size=".5 .5 .1"/>
</body>
<body pos="1 -1 .6">
<freejoint/>
<composite prefix="B0" type="box" count="4 4 4" spacing=".2">
<geom group="4" size=".1"/>
<skin rgba="1 1 0 1" group="2"/>
</composite>
</body>
<body pos="-1 1 .6">
<freejoint/>
<composite prefix="B1" type="box" count="4 4 4" spacing=".2">
<geom group="2" size=".1"/>
<skin rgba="0 1 1 1" group="4"/>
</composite>
</body>
</worldbody>
</mujoco>
+51
View File
@@ -379,6 +379,57 @@ TEST_F(UserDataTest, PositiveControlRange) {
EXPECT_THAT(error.data(), HasSubstr("control range cannot be negative"));
}
TEST_F(UserDataTest, ReadsSkinGroups) {
static constexpr char xml[] = R"(
<mujoco>
<worldbody>
<body>
<composite prefix="B0" type="box" count="4 4 4" spacing=".2">
<geom size=".1" group="2"/>
<skin group="4"/>
</composite>
</body>
<body>
<composite prefix="B1" type="box" count="4 4 4" spacing=".2">
<geom size=".1" group="4"/>
<skin group="2"/>
</composite>
</body>
</worldbody>
</mujoco>
)";
std::array<char, 1024> error;
mjModel* model = LoadModelFromString(xml, error.data(), error.size());
ASSERT_THAT(model, NotNull());
int geomid1 = mj_name2id(model, mjOBJ_GEOM, "B0G0_0_0");
int geomid2 = mj_name2id(model, mjOBJ_GEOM, "B1G0_0_0");
EXPECT_THAT(model->geom_group[geomid1], 2);
EXPECT_THAT(model->skin_group[0], 4);
EXPECT_THAT(model->geom_group[geomid2], 4);
EXPECT_THAT(model->skin_group[1], 2);
mj_deleteModel(model);
}
TEST_F(UserDataTest, InvalidSkinGroup) {
static constexpr char xml[] = R"(
<mujoco>
<worldbody>
<body>
<composite prefix="B0" type="box" count="6 6 6" spacing=".2">
<geom size=".1"/>
<skin group="6"/>
</composite>
</body>
</worldbody>
</mujoco>
)";
std::array<char, 1024> error;
mjModel* model = LoadModelFromString(xml, error.data(), error.size());
ASSERT_THAT(model, IsNull());
EXPECT_THAT(error.data(), HasSubstr("skin group must be between 0 and 5\nElement 'skin', line 7"));
mj_deleteModel(model);
}
// ------------- test relative frame sensor parsing ----------------------------
using RelativeFrameSensorParsingTest = MujocoTest;