Do not delete pending keyframes during body detachment.
PiperOrigin-RevId: 685670895 Change-Id: Iadd0ba8ca7e74a280559168ac0ac855405a1cfd9
This commit is contained in:
committed by
Copybara-Service
parent
c5a677a9de
commit
c84f35b425
@@ -462,11 +462,8 @@ mjCModel& mjCModel::operator-=(const mjCBody& subtree) {
|
|||||||
ProcessLists(/*checkrepeat=*/false);
|
ProcessLists(/*checkrepeat=*/false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: carry over pending keyframes
|
|
||||||
key_pending_.clear();
|
|
||||||
StoreKeyframes();
|
|
||||||
|
|
||||||
// all keyframes are now pending and they will be resized
|
// all keyframes are now pending and they will be resized
|
||||||
|
StoreKeyframes();
|
||||||
DeleteAll(keys_);
|
DeleteAll(keys_);
|
||||||
|
|
||||||
// remove body from tree
|
// remove body from tree
|
||||||
|
|||||||
@@ -1456,10 +1456,12 @@ TEST_F(MujocoTest, ReplicateKeyframe) {
|
|||||||
EXPECT_THAT(m->nbody, 2);
|
EXPECT_THAT(m->nbody, 2);
|
||||||
|
|
||||||
// check that the keyframe is resized
|
// check that the keyframe is resized
|
||||||
EXPECT_THAT(m->nkey, 1);
|
EXPECT_THAT(m->nkey, 2);
|
||||||
EXPECT_THAT(m->nq, 1);
|
EXPECT_THAT(m->nq, 1);
|
||||||
EXPECT_THAT(m->key_qpos[0], 0);
|
EXPECT_THAT(m->key_qpos[0], 1);
|
||||||
EXPECT_STREQ(mj_id2name(m, mjOBJ_KEY, 0), "keyframe");
|
EXPECT_THAT(m->key_qpos[1], 0);
|
||||||
|
EXPECT_STREQ(mj_id2name(m, mjOBJ_KEY, 0), "keyframe0");
|
||||||
|
EXPECT_STREQ(mj_id2name(m, mjOBJ_KEY, 1), "keyframe");
|
||||||
|
|
||||||
mj_deleteModel(m);
|
mj_deleteModel(m);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1304,9 +1304,14 @@ TEST_F(XMLReaderTest, ParseReplicate) {
|
|||||||
EXPECT_EQ(m->body_quat[4*n+2], 0);
|
EXPECT_EQ(m->body_quat[4*n+2], 0);
|
||||||
EXPECT_EQ(m->body_quat[4*n+3], 1);
|
EXPECT_EQ(m->body_quat[4*n+3], 1);
|
||||||
|
|
||||||
// check that the pending keyframes are lost while detaching
|
// check that the keyframe is resized
|
||||||
EXPECT_THAT(m->nkey, 0);
|
EXPECT_THAT(m->nkey, 102);
|
||||||
EXPECT_THAT(m->nq, 101);
|
EXPECT_THAT(m->nq, 101);
|
||||||
|
for (int i = 0; i < m->nkey; i++) {
|
||||||
|
for (int j = 0; j < m->nq; j++) {
|
||||||
|
EXPECT_THAT(m->key_qpos[i*m->nq+j], i == j ? 1 : 0) << i << " " << j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
mj_deleteModel(m);
|
mj_deleteModel(m);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user