From c65e046043d35f67812b2edc8e30cff420abe370 Mon Sep 17 00:00:00 2001 From: Yuval Tassa Date: Thu, 30 Mar 2023 06:59:19 -0700 Subject: [PATCH] Don't save actdim="{0,1}" for state{less,ful} actuators, respectively. actdim has a default value of -1 (==unset), which means it currently gets saved for all actuators. After this change, it will only be saved if the value is > 1, errors are thrown for stateful actuators with actdim=0 and stateless actuators with actdim>0. PiperOrigin-RevId: 520627313 Change-Id: Ia498dae5c7314cfaa0995f8077d297c2339a5c35 --- src/xml/xml_native_writer.cc | 8 +++++++- test/xml/xml_native_writer_test.cc | 4 ++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/xml/xml_native_writer.cc b/src/xml/xml_native_writer.cc index df2a1ef7..fbfd2261 100644 --- a/src/xml/xml_native_writer.cc +++ b/src/xml/xml_native_writer.cc @@ -640,7 +640,13 @@ void mjXWriter::OneActuator(XMLElement* elem, mjCActuator* pact, mjCDef* def) { // non-plugins: write actuator parameters else { - WriteAttrInt(elem, "actdim", pact->actdim, def->actuator.actdim); + // special handling of actdim which has default value of -1 + if (writingdefaults) { + WriteAttrInt(elem, "actdim", pact->actdim, def->actuator.actdim); + } else { + int default_actdim = pact->dyntype == mjDYN_NONE ? 0 : 1; + WriteAttrInt(elem, "actdim", pact->actdim, default_actdim); + } WriteAttrKey(elem, "dyntype", dyn_map, dyn_sz, pact->dyntype, def->actuator.dyntype); WriteAttrKey(elem, "gaintype", gain_map, gain_sz, pact->gaintype, def->actuator.gaintype); WriteAttrKey(elem, "biastype", bias_map, bias_sz, pact->biastype, def->actuator.biastype); diff --git a/test/xml/xml_native_writer_test.cc b/test/xml/xml_native_writer_test.cc index 6c9d6470..1527b201 100644 --- a/test/xml/xml_native_writer_test.cc +++ b/test/xml/xml_native_writer_test.cc @@ -844,6 +844,8 @@ TEST_F(XMLWriterTest, Actdim) { + + )"; @@ -851,6 +853,8 @@ TEST_F(XMLWriterTest, Actdim) { ASSERT_THAT(model, NotNull()); std::string saved_xml = SaveAndReadXml(model); EXPECT_THAT(saved_xml, HasSubstr("actdim=\"2\"")); + EXPECT_THAT(saved_xml, Not(HasSubstr("actdim=\"1\""))); + EXPECT_THAT(saved_xml, Not(HasSubstr("actdim=\"0\""))); mj_deleteModel(model); }