From 6e004d7413bc003703d4e74eee7287b93cd83719 Mon Sep 17 00:00:00 2001 From: Yuval Tassa Date: Wed, 12 Oct 2022 13:44:17 -0700 Subject: [PATCH] Fix bugs in adhesion default parsing. - `gain` was not inherited, either from `` default or from `` default. - `dyntype` was not inherited from `` default. - Reported by @vaxenburg. PiperOrigin-RevId: 480707156 Change-Id: I0160531d48186e7658952e72923ceb6cb034be9b --- src/xml/xml_native_reader.cc | 6 ----- test/xml/xml_native_reader_test.cc | 38 +++++++++++++++++++++++++++--- 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/src/xml/xml_native_reader.cc b/src/xml/xml_native_reader.cc index 20d405af..e7bb5c11 100644 --- a/src/xml/xml_native_reader.cc +++ b/src/xml/xml_native_reader.cc @@ -1818,11 +1818,6 @@ void mjXReader::OneActuator(XMLElement* elem, mjCActuator* pact) { // adhesion else if (type=="adhesion") { - // clear bias, set default gain - mjuu_zerovec(pact->biasprm, mjNBIAS); - mjuu_zerovec(pact->gainprm, mjNGAIN); - pact->gainprm[0] = 1; - // explicit attributes ReadAttr(elem, "gain", 1, pact->gainprm, text); if (pact->gainprm[0]<0) @@ -1836,7 +1831,6 @@ void mjXReader::OneActuator(XMLElement* elem, mjCActuator* pact) { // implied parameters pact->ctrllimited = 1; - pact->dyntype = mjDYN_NONE; pact->gaintype = mjGAIN_FIXED; pact->biastype = mjBIAS_NONE; } diff --git a/test/xml/xml_native_reader_test.cc b/test/xml/xml_native_reader_test.cc index fad25d9a..a1d9bca3 100644 --- a/test/xml/xml_native_reader_test.cc +++ b/test/xml/xml_native_reader_test.cc @@ -804,9 +804,6 @@ TEST_F(ActuatorParseTest, IntvelocityDefaultsPropagate) { mj_deleteModel(model); } - -// ------------- test adhesion parsing ----------------------------------------- - TEST_F(ActuatorParseTest, AdhesionDefaultsPropagate) { static constexpr char xml[] = R"( @@ -880,6 +877,41 @@ TEST_F(ActuatorParseTest, DampersDontRequireRange) { mj_deleteModel(model); } +// make sure range requirement is not enforced at parse time +TEST_F(ActuatorParseTest, AdhesionInheritsFromGeneral) { + static constexpr char xml[] = R"( + + + + + + + + + + + + + + + )"; + + std::array error; + mjModel* model = LoadModelFromString(xml, error.data(), error.size()); + ASSERT_THAT(model, NotNull()) << error.data(); + + // expect that gainprm was inherited from the general default + EXPECT_EQ(model->actuator_gainprm[0], 5); + // expect that dynprm was inherited from the general default + EXPECT_EQ(model->actuator_dynprm[0], 123); + // expect that dyntype was inherited from the general default + EXPECT_EQ(model->actuator_dyntype[0], mjDYN_FILTER); + mj_deleteModel(model); +} + + +// ------------- test general parsing ------------------------------------------ + TEST_F(XMLReaderTest, ZnearZeroNotAllowed) { static constexpr char xml[] = R"(