Add body/simple attribute to control simple body optimization.
PiperOrigin-RevId: 942164766 Change-Id: I1e83bb99b6a1955917eb9b2e9bed0dc7b8e6a161
This commit is contained in:
committed by
Copybara-Service
parent
4ecfe5c1f3
commit
5618666a7d
@@ -1287,6 +1287,55 @@ TEST_F(MjCJointTest, AlignFree) {
|
||||
mj_deleteSpec(s);
|
||||
}
|
||||
|
||||
TEST_F(MjCJointTest, BodySimpleFalse) {
|
||||
constexpr char xml[] = R"(
|
||||
<mujoco>
|
||||
<worldbody>
|
||||
<body name="B1">
|
||||
<joint type="slide"/>
|
||||
<geom size=".1"/>
|
||||
</body>
|
||||
</worldbody>
|
||||
</mujoco>
|
||||
)";
|
||||
|
||||
constexpr char xml_nosimple[] = R"(
|
||||
<mujoco>
|
||||
<worldbody>
|
||||
<body name="B1" simple="false">
|
||||
<joint type="slide"/>
|
||||
<geom size=".1"/>
|
||||
</body>
|
||||
</worldbody>
|
||||
</mujoco>
|
||||
)";
|
||||
|
||||
char error[1024];
|
||||
|
||||
// compile default model: body should be simple
|
||||
MjModelPtr m = LoadModelFromString(xml, error, sizeof(error));
|
||||
ASSERT_THAT(m.get(), NotNull()) << error;
|
||||
int b = mj_name2id(m.get(), mjOBJ_BODY, "B1");
|
||||
EXPECT_GT(m->body_simple[b], 0);
|
||||
EXPECT_GT(m->dof_simplenum[0], 0);
|
||||
|
||||
// compile with simple="false": body should not be simple
|
||||
MjModelPtr m_ns = LoadModelFromString(xml_nosimple, error, sizeof(error));
|
||||
ASSERT_THAT(m_ns.get(), NotNull()) << error;
|
||||
EXPECT_EQ(m_ns->body_simple[b], 0);
|
||||
EXPECT_EQ(m_ns->dof_simplenum[0], 0);
|
||||
|
||||
// forward kinematics should produce identical results
|
||||
MjDataPtr d = MakeData(m);
|
||||
MjDataPtr d_ns = MakeData(m_ns);
|
||||
d->qpos[0] = d_ns->qpos[0] = 0.5;
|
||||
mj_forward(m.get(), d.get());
|
||||
mj_forward(m_ns.get(), d_ns.get());
|
||||
EXPECT_THAT(d_ns->xpos[3*b+0], MjNear(d->xpos[3*b+0], 1e-10, 1e-6));
|
||||
EXPECT_THAT(d_ns->xpos[3*b+1], MjNear(d->xpos[3*b+1], 1e-10, 1e-6));
|
||||
EXPECT_THAT(d_ns->xpos[3*b+2], MjNear(d->xpos[3*b+2], 1e-10, 1e-6));
|
||||
}
|
||||
|
||||
// ------------- test height fields --------------------------------------------
|
||||
|
||||
using MjCHFieldTest = MujocoTest;
|
||||
|
||||
Reference in New Issue
Block a user