Skip to content

Commit d694373

Browse files
kbayescopybara-github
authored andcommitted
Fix bug in nativeccd multiccd.
PiperOrigin-RevId: 740495321 Change-Id: I7eaa0da8514e27c233d49567c276d1d238808d1f
1 parent 69f8349 commit d694373

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

src/engine/engine_collision_gjk.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -1546,7 +1546,7 @@ static mjtNum planeNormal(mjtNum res[3], const mjtNum v1[3], const mjtNum v2[3],
15461546
// find what side of a plane a point p lies
15471547
static int halfspace(const mjtNum a[3], const mjtNum n[3], const mjtNum p[3]) {
15481548
mjtNum diff[3] = {p[0] - a[0], p[1] - a[1], p[2] - a[2]};
1549-
return dot3(diff, n) > 0;
1549+
return dot3(diff, n) >= 0.0;
15501550
}
15511551

15521552

test/engine/engine_collision_gjk_test.cc

+40
Original file line numberDiff line numberDiff line change
@@ -951,6 +951,46 @@ TEST_F(MjGjkTest, BoxBoxMultiCCD9) {
951951
mj_deleteModel(model);
952952
}
953953

954+
TEST_F(MjGjkTest, BoxBoxMultiCCD10) {
955+
static constexpr char xml[] = R"(
956+
<mujoco>
957+
<worldbody>
958+
<geom name="geom1" type="box" pos="0 0 0" size="0.025 0.025 0.025"/>
959+
<geom name="geom2" type="box" pos="0 0 0" size="0.025 0.025 0.025"/>
960+
</worldbody>
961+
</mujoco>)";
962+
963+
std::array<char, 1000> error;
964+
mjModel* model = LoadModelFromString(xml, error.data(), error.size());
965+
ASSERT_THAT(model, NotNull()) << "Failed to load model: " << error.data();
966+
967+
mjData* data = mj_makeData(model);
968+
mj_forward(model, data);
969+
970+
mjtNum* xpos = data->geom_xpos;
971+
972+
xpos[0] = -0.1034859999999999946584949839234468527138;
973+
xpos[1] = -0.0765140000000000264357424839545274153352;
974+
xpos[2] = 0.1257628745456405572333835607423679903150;
975+
976+
xpos = data->geom_xpos + 3;
977+
978+
xpos[0] = -0.1034859999999999946584949839234468527138;
979+
xpos[1] = -0.0765140000000000264357424839545274153352;
980+
xpos[2] = 0.1751399999999999623767621415026951581240;
981+
982+
int geom1 = mj_name2id(model, mjOBJ_GEOM, "geom1");
983+
int geom2 = mj_name2id(model, mjOBJ_GEOM, "geom2");
984+
std::vector<mjtNum> dir, pos;
985+
mjtNum dist;
986+
int ncons = Penetration(dist, dir, pos, model, data, geom1, geom2, 0, 8);
987+
988+
EXPECT_EQ(ncons, 4);
989+
990+
mj_deleteData(data);
991+
mj_deleteModel(model);
992+
}
993+
954994
TEST_F(MjGjkTest, SmallBoxMesh) {
955995
static constexpr char xml[] = R"(
956996
<mujoco>

0 commit comments

Comments
 (0)