Do not delete pending keyframes during body detachment.

PiperOrigin-RevId: 685670895
Change-Id: Iadd0ba8ca7e74a280559168ac0ac855405a1cfd9
This commit is contained in:
Alessio Quaglino
2024-10-14 05:22:50 -07:00
committed by Copybara-Service
parent c5a677a9de
commit c84f35b425
3 changed files with 13 additions and 9 deletions
+1 -4
View File
@@ -462,11 +462,8 @@ mjCModel& mjCModel::operator-=(const mjCBody& subtree) {
ProcessLists(/*checkrepeat=*/false);
}
// TODO: carry over pending keyframes
key_pending_.clear();
StoreKeyframes();
// all keyframes are now pending and they will be resized
StoreKeyframes();
DeleteAll(keys_);
// remove body from tree
+5 -3
View File
@@ -1456,10 +1456,12 @@ TEST_F(MujocoTest, ReplicateKeyframe) {
EXPECT_THAT(m->nbody, 2);
// check that the keyframe is resized
EXPECT_THAT(m->nkey, 1);
EXPECT_THAT(m->nkey, 2);
EXPECT_THAT(m->nq, 1);
EXPECT_THAT(m->key_qpos[0], 0);
EXPECT_STREQ(mj_id2name(m, mjOBJ_KEY, 0), "keyframe");
EXPECT_THAT(m->key_qpos[0], 1);
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);
}
+7 -2
View File
@@ -1304,9 +1304,14 @@ TEST_F(XMLReaderTest, ParseReplicate) {
EXPECT_EQ(m->body_quat[4*n+2], 0);
EXPECT_EQ(m->body_quat[4*n+3], 1);
// check that the pending keyframes are lost while detaching
EXPECT_THAT(m->nkey, 0);
// check that the keyframe is resized
EXPECT_THAT(m->nkey, 102);
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);
}