Replace margin/gap max with sum.
PiperOrigin-RevId: 868842521 Change-Id: Ia4a4ca5c6821c5a7b3ba7b0af7f71d981c2866c1
This commit is contained in:
committed by
Copybara-Service
parent
336e1026a4
commit
6af0d4c823
@@ -357,5 +357,38 @@ TEST_F(MjCollisionTest, PinchingSucceeds) {
|
||||
mj_deleteModel(m);
|
||||
}
|
||||
|
||||
TEST_F(MjCollisionTest, MarginSumming) {
|
||||
// Two spheres with size 0.1, placed 0.21 apart (distance of 0.01).
|
||||
// With margin summing, margin1 + margin2 = 0.00999 + 0.00999 = 0.01998 > 0.01
|
||||
// so a contact should be generated.
|
||||
constexpr char xml[] = R"(
|
||||
<mujoco>
|
||||
<worldbody>
|
||||
<body>
|
||||
<geom name="sphere1" type="sphere" size=".1" margin="0.00999"/>
|
||||
<joint type="slide" axis="1 0 0"/>
|
||||
</body>
|
||||
<body pos=".21 0 0">
|
||||
<geom name="sphere2" type="sphere" size=".1" margin="0.00999"/>
|
||||
<joint type="slide" axis="1 0 0"/>
|
||||
</body>
|
||||
</worldbody>
|
||||
</mujoco>
|
||||
)";
|
||||
char error[1024];
|
||||
mjModel* m = LoadModelFromString(xml, error, sizeof(error));
|
||||
ASSERT_THAT(m, NotNull()) << error;
|
||||
mjData* d = mj_makeData(m);
|
||||
ASSERT_THAT(d, NotNull());
|
||||
|
||||
mj_fwdPosition(m, d);
|
||||
|
||||
// With margin summing, we expect 1 contact
|
||||
EXPECT_EQ(d->ncon, 1);
|
||||
|
||||
mj_deleteData(d);
|
||||
mj_deleteModel(m);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace mujoco
|
||||
|
||||
@@ -57,15 +57,15 @@ TEST_F(SolverTest, IslandsEquivalent) {
|
||||
mjData* data_noisland = mj_makeData(model);
|
||||
|
||||
// Below are 3 tolerances associated with 3 different iteration counts,
|
||||
// they are only moderately tight, 10x higher than x86-64 failure on Linux,
|
||||
// i.e. in that case the test fails with rtol smaller than {5e-3, 5e-4, 5e-5}.
|
||||
// they are only moderately tight, 12x higher than x86-64 failure on Linux,
|
||||
// i.e. in that case the test fails with rtol smaller than {6e-3, 6e-4, 6e-5}.
|
||||
// The point of this test is to show that CG convergence is actually not very
|
||||
// precise, simply changing whether islands are used changes the solution by
|
||||
// quite a lot, even at high iteration count and zero {ls_}tolerance.
|
||||
// Increasing the iteration count higher than 60 does not improve convergence.
|
||||
constexpr int kNumTol = 3;
|
||||
mjtNum maxiter[kNumTol] = {30, 40, 60};
|
||||
mjtNum rtol[kNumTol] = {5e-2, 5e-3, 5e-4};
|
||||
mjtNum rtol[kNumTol] = {6e-2, 6e-3, 6e-4};
|
||||
|
||||
for (int i = 0; i < kNumTol; ++i) {
|
||||
model->opt.iterations = maxiter[i];
|
||||
|
||||
Reference in New Issue
Block a user