Add XML compiler/saveinertial flag. Fixes #2405
PiperOrigin-RevId: 743607654 Change-Id: I1f2e61be89b79c1995e079f36aa285096f9fb441
This commit is contained in:
committed by
Copybara-Service
parent
8941f56e86
commit
f96f3e1c22
@@ -42,6 +42,7 @@ void mjs_defaultSpec(mjSpec* spec) {
|
||||
spec->compiler.usethread = 1;
|
||||
spec->compiler.inertiafromgeom = mjINERTIAFROMGEOM_AUTO;
|
||||
spec->compiler.inertiagrouprange[1] = mjNGROUP-1;
|
||||
spec->compiler.saveinertial = 0;
|
||||
mj_defaultLROpt(&spec->compiler.LRopt);
|
||||
|
||||
// engine data
|
||||
|
||||
@@ -97,10 +97,10 @@ static void UpdateString(string& psuffix, int count, int i) {
|
||||
const char* MJCF[nMJCF][mjXATTRNUM] = {
|
||||
{"mujoco", "!", "1", "model"},
|
||||
{"<"},
|
||||
{"compiler", "*", "19", "autolimits", "boundmass", "boundinertia", "settotalmass",
|
||||
{"compiler", "*", "20", "autolimits", "boundmass", "boundinertia", "settotalmass",
|
||||
"balanceinertia", "strippath", "coordinate", "angle", "fitaabb", "eulerseq",
|
||||
"meshdir", "texturedir", "discardvisual", "usethread",
|
||||
"fusestatic", "inertiafromgeom", "inertiagrouprange", "assetdir", "alignfree"},
|
||||
"meshdir", "texturedir", "discardvisual", "usethread", "fusestatic", "inertiafromgeom",
|
||||
"inertiagrouprange", "saveinertial", "assetdir", "alignfree"},
|
||||
{"<"},
|
||||
{"lengthrange", "?", "10", "mode", "useexisting", "uselimit",
|
||||
"accel", "maxforce", "timeconst", "timestep",
|
||||
@@ -1015,6 +1015,9 @@ void mjXReader::Compiler(XMLElement* section, mjSpec* spec) {
|
||||
if (MapValue(section, "alignfree", &n, bool_map, 2)) {
|
||||
spec->compiler.alignfree = (n == 1);
|
||||
}
|
||||
if (MapValue(section, "saveinertial", &n, bool_map, 2)) {
|
||||
spec->compiler.saveinertial = (n == 1);
|
||||
}
|
||||
|
||||
// lengthrange subelement
|
||||
XMLElement* elem = FindSubElem(section, "lengthrange");
|
||||
|
||||
@@ -1632,7 +1632,8 @@ void mjXWriter::Body(XMLElement* elem, mjCBody* body, mjCFrame* frame, string_vi
|
||||
WriteVector(elem, "user", body->get_userdata());
|
||||
|
||||
// write inertial
|
||||
if (body->explicitinertial && model->compiler.inertiafromgeom != mjINERTIAFROMGEOM_TRUE) {
|
||||
if (model->compiler.saveinertial ||
|
||||
(body->explicitinertial && model->compiler.inertiafromgeom != mjINERTIAFROMGEOM_TRUE)) {
|
||||
XMLElement* inertial = InsertEnd(elem, "inertial");
|
||||
WriteAttr(inertial, "pos", 3, body->ipos);
|
||||
WriteAttr(inertial, "quat", 4, body->iquat, unitq);
|
||||
|
||||
Reference in New Issue
Block a user