Enable multiccd by default.

PiperOrigin-RevId: 902752921
Change-Id: I8e2085ff17db0ac0db1641b8837415c458e5eca4
This commit is contained in:
Kyle Bayes
2026-04-20 11:59:24 -07:00
committed by Copybara-Service
parent 8e7787ad09
commit 6cb6e5a93f
22 changed files with 43 additions and 47 deletions
+2 -2
View File
@@ -828,7 +828,7 @@ static int maxContacts(const mjModel* m, const mjCCDObj* obj1, const mjCCDObj* o
// reduce mesh collisions to 4 contacts max
if (type1 == mjGEOM_BOX || type1 == mjGEOM_MESH) {
if (type2 == mjGEOM_BOX || type2 == mjGEOM_MESH) {
return mjENABLED(mjENBL_MULTICCD) ? 4 : 1;
return mjDISABLED(mjDSBL_MULTICCD) ? 1 : 4;
}
}
@@ -857,7 +857,7 @@ int mjc_Convex(const mjModel* m, mjData* d, mjContact* con, int g1, int g2, mjtN
}
// look for additional contacts
if (ncon == 1 && mjENABLED(mjENBL_MULTICCD) // TODO(tassa) leave as bitflag or make geom attribute (?)
if (ncon == 1 && !mjDISABLED(mjDSBL_MULTICCD) // TODO(tassa) leave as bitflag or make geom attribute (?)
&& m->geom_type[g1] != mjGEOM_ELLIPSOID && m->geom_type[g1] != mjGEOM_SPHERE
&& m->geom_type[g2] != mjGEOM_ELLIPSOID && m->geom_type[g2] != mjGEOM_SPHERE) {
// multiCCD parameters
+2 -2
View File
@@ -66,7 +66,8 @@ const char* mjDISABLESTRING[mjNDISABLE] = {
"Eulerdamp",
"AutoReset",
"NativeCCD",
"Island"
"Island",
"MultiCCD"
};
@@ -76,7 +77,6 @@ const char* mjENABLESTRING[mjNENABLE] = {
"Energy",
"Fwdinv",
"InvDiscrete",
"MultiCCD",
"Sleep"
};
@@ -649,7 +649,6 @@ class ModelWriter {
};
const std::vector<std::pair<pxr::TfToken, int>> enable_flags = {
{MjcPhysicsTokens->mjcFlagMulticcd, mjENBL_MULTICCD},
{MjcPhysicsTokens->mjcFlagFwdinv, mjENBL_FWDINV},
{MjcPhysicsTokens->mjcFlagEnergy, mjENBL_ENERGY},
{MjcPhysicsTokens->mjcFlagOverride, mjENBL_OVERRIDE},
@@ -677,7 +676,8 @@ class ModelWriter {
{MjcPhysicsTokens->mjcFlagEulerdamp, mjDSBL_EULERDAMP},
{MjcPhysicsTokens->mjcFlagAutoreset, mjDSBL_AUTORESET},
{MjcPhysicsTokens->mjcFlagNativeccd, mjDSBL_NATIVECCD},
{MjcPhysicsTokens->mjcFlagIsland, mjDSBL_ISLAND}};
{MjcPhysicsTokens->mjcFlagIsland, mjDSBL_ISLAND},
{MjcPhysicsTokens->mjcFlagMulticcd, mjDSBL_MULTICCD}};
for (const auto &[token, flag] : disable_flags) {
create_flag_attr(token, flag, false);
}
+1 -1
View File
@@ -1284,6 +1284,7 @@ void mjXReader::Option(XMLElement* section, mjOption* opt) {
READDSBL("autoreset", mjDSBL_AUTORESET)
READDSBL("nativeccd", mjDSBL_NATIVECCD)
READDSBL("island", mjDSBL_ISLAND)
READDSBL("multiccd", mjDSBL_MULTICCD)
#undef READDSBL
#define READENBL(NAME, MASK) \
@@ -1295,7 +1296,6 @@ void mjXReader::Option(XMLElement* section, mjOption* opt) {
READENBL("energy", mjENBL_ENERGY)
READENBL("fwdinv", mjENBL_FWDINV)
READENBL("invdiscrete", mjENBL_INVDISCRETE)
READENBL("multiccd", mjENBL_MULTICCD)
READENBL("sleep", mjENBL_SLEEP)
#undef READENBL
}
+3 -3
View File
@@ -1093,7 +1093,7 @@ void mjXWriter::Option(XMLElement* root) {
XMLElement* sub = InsertEnd(section, "flag");
#define WRITEDSBL(NAME, MASK) \
if( model->option.disableflags & MASK ) \
if (model->option.disableflags & MASK) \
WriteAttrKey(sub, NAME, enable_map, 2, 0);
WRITEDSBL("constraint", mjDSBL_CONSTRAINT)
WRITEDSBL("equality", mjDSBL_EQUALITY)
@@ -1114,16 +1114,16 @@ void mjXWriter::Option(XMLElement* root) {
WRITEDSBL("autoreset", mjDSBL_AUTORESET)
WRITEDSBL("nativeccd", mjDSBL_NATIVECCD)
WRITEDSBL("island", mjDSBL_ISLAND)
WRITEDSBL("multiccd", mjDSBL_MULTICCD)
#undef WRITEDSBL
#define WRITEENBL(NAME, MASK) \
if( model->option.enableflags & MASK ) \
if (model->option.enableflags & MASK) \
WriteAttrKey(sub, NAME, enable_map, 2, 1);
WRITEENBL("override", mjENBL_OVERRIDE)
WRITEENBL("energy", mjENBL_ENERGY)
WRITEENBL("fwdinv", mjENBL_FWDINV)
WRITEENBL("invdiscrete", mjENBL_INVDISCRETE)
WRITEENBL("multiccd", mjENBL_MULTICCD)
WRITEENBL("sleep", mjENBL_SLEEP)
#undef WRITEENBL
}