Make constraint island discovery on by default.
Also fix latent bug in mjData serialization. PiperOrigin-RevId: 799505349 Change-Id: I299e7cc8133fa2ec0b339a7ff3d02543e06778b1
This commit is contained in:
committed by
Copybara-Service
parent
4cf5c37211
commit
ec94bb49aa
@@ -723,7 +723,7 @@ void mj_fwdConstraint(const mjModel* m, mjData* d) {
|
||||
mju_zeroInt(d->solver_niter, mjNISLAND);
|
||||
|
||||
// check if islands are supported
|
||||
int islands_supported = mjENABLED(mjENBL_ISLAND) &&
|
||||
int islands_supported = !mjDISABLED(mjDSBL_ISLAND) &&
|
||||
nisland > 0 &&
|
||||
m->opt.noslip_iterations == 0 &&
|
||||
(m->opt.solver == mjSOL_CG || m->opt.solver == mjSOL_NEWTON);
|
||||
|
||||
@@ -411,7 +411,7 @@ void mj_island(const mjModel* m, mjData* d) {
|
||||
int nv = m->nv, nefc = d->nefc, ntree=m->ntree;
|
||||
|
||||
// no constraints: quick return
|
||||
if (!mjENABLED(mjENBL_ISLAND) || !nefc) {
|
||||
if (mjDISABLED(mjDSBL_ISLAND) || !nefc) {
|
||||
d->nisland = d->nidof = 0;
|
||||
return;
|
||||
}
|
||||
@@ -454,7 +454,7 @@ void mj_island(const mjModel* m, mjData* d) {
|
||||
return;
|
||||
}
|
||||
|
||||
// count ni: total number of dofs in islands
|
||||
// count nidof: total number of dofs in islands
|
||||
int nidof = 0;
|
||||
for (int i=0; i < nv; i++) {
|
||||
nidof += (tree_island[m->dof_treeid[i]] >= 0);
|
||||
|
||||
@@ -62,7 +62,8 @@ const char* mjDISABLESTRING[mjNDISABLE] = {
|
||||
"Midphase",
|
||||
"Eulerdamp",
|
||||
"AutoReset",
|
||||
"NativeCCD"
|
||||
"NativeCCD",
|
||||
"Island"
|
||||
};
|
||||
|
||||
|
||||
@@ -72,8 +73,7 @@ const char* mjENABLESTRING[mjNENABLE] = {
|
||||
"Energy",
|
||||
"Fwdinv",
|
||||
"InvDiscrete",
|
||||
"MultiCCD",
|
||||
"Island"
|
||||
"MultiCCD"
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -643,7 +643,6 @@ class ModelWriter {
|
||||
|
||||
const std::vector<std::pair<pxr::TfToken, int>> enable_flags = {
|
||||
{MjcPhysicsTokens->mjcFlagMulticcd, mjENBL_MULTICCD},
|
||||
{MjcPhysicsTokens->mjcFlagIsland, mjENBL_ISLAND},
|
||||
{MjcPhysicsTokens->mjcFlagFwdinv, mjENBL_FWDINV},
|
||||
{MjcPhysicsTokens->mjcFlagEnergy, mjENBL_ENERGY},
|
||||
{MjcPhysicsTokens->mjcFlagOverride, mjENBL_OVERRIDE},
|
||||
@@ -669,7 +668,8 @@ class ModelWriter {
|
||||
{MjcPhysicsTokens->mjcFlagMidphase, mjDSBL_MIDPHASE},
|
||||
{MjcPhysicsTokens->mjcFlagEulerdamp, mjDSBL_EULERDAMP},
|
||||
{MjcPhysicsTokens->mjcFlagAutoreset, mjDSBL_AUTORESET},
|
||||
{MjcPhysicsTokens->mjcFlagNativeccd, mjDSBL_NATIVECCD}};
|
||||
{MjcPhysicsTokens->mjcFlagNativeccd, mjDSBL_NATIVECCD},
|
||||
{MjcPhysicsTokens->mjcFlagIsland, mjDSBL_ISLAND}};
|
||||
for (const auto &[token, flag] : disable_flags) {
|
||||
create_flag_attr(token, flag, false);
|
||||
}
|
||||
|
||||
@@ -617,6 +617,10 @@ void ParseUsdPhysicsScene(mjSpec* spec,
|
||||
mjc_physics_scene.GetAutoResetFlagAttr().Get(&autoreset_flag);
|
||||
spec->option.disableflags |= (!autoreset_flag ? mjDSBL_AUTORESET : 0);
|
||||
|
||||
bool island_flag;
|
||||
mjc_physics_scene.GetIslandFlagAttr().Get(&island_flag);
|
||||
spec->option.disableflags |= (!island_flag ? mjDSBL_ISLAND : 0);
|
||||
|
||||
bool override_flag;
|
||||
mjc_physics_scene.GetOverrideFlagAttr().Get(&override_flag);
|
||||
spec->option.enableflags |= (override_flag ? mjENBL_OVERRIDE : 0);
|
||||
@@ -637,10 +641,6 @@ void ParseUsdPhysicsScene(mjSpec* spec,
|
||||
mjc_physics_scene.GetMultiCCDFlagAttr().Get(&multiccd_flag);
|
||||
spec->option.enableflags |= (multiccd_flag ? mjENBL_MULTICCD : 0);
|
||||
|
||||
bool island_flag;
|
||||
mjc_physics_scene.GetIslandFlagAttr().Get(&island_flag);
|
||||
spec->option.enableflags |= (island_flag ? mjENBL_ISLAND : 0);
|
||||
|
||||
// Compiler attributes
|
||||
auto auto_limits_attr = mjc_physics_scene.GetAutoLimitsAttr();
|
||||
if (auto_limits_attr.HasAuthoredValue()) {
|
||||
|
||||
@@ -121,7 +121,7 @@ const char* MJCF[nMJCF][mjXATTRNUM] = {
|
||||
{"flag", "?", "23", "constraint", "equality", "frictionloss", "limit", "contact",
|
||||
"passive", "gravity", "clampctrl", "warmstart",
|
||||
"filterparent", "actuation", "refsafe", "sensor", "midphase", "eulerdamp", "autoreset",
|
||||
"override", "energy", "fwdinv", "invdiscrete", "multiccd", "island", "nativeccd"},
|
||||
"nativeccd", "island", "override", "energy", "fwdinv", "invdiscrete", "multiccd"},
|
||||
{">"},
|
||||
|
||||
{"size", "*", "14", "memory", "njmax", "nconmax", "nstack", "nuserdata", "nkey",
|
||||
@@ -1199,6 +1199,7 @@ void mjXReader::Option(XMLElement* section, mjOption* opt) {
|
||||
READDSBL("eulerdamp", mjDSBL_EULERDAMP)
|
||||
READDSBL("autoreset", mjDSBL_AUTORESET)
|
||||
READDSBL("nativeccd", mjDSBL_NATIVECCD)
|
||||
READDSBL("island", mjDSBL_ISLAND)
|
||||
#undef READDSBL
|
||||
|
||||
#define READENBL(NAME, MASK) \
|
||||
@@ -1211,7 +1212,6 @@ void mjXReader::Option(XMLElement* section, mjOption* opt) {
|
||||
READENBL("fwdinv", mjENBL_FWDINV)
|
||||
READENBL("invdiscrete", mjENBL_INVDISCRETE)
|
||||
READENBL("multiccd", mjENBL_MULTICCD)
|
||||
READENBL("island", mjENBL_ISLAND)
|
||||
#undef READENBL
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1056,6 +1056,7 @@ void mjXWriter::Option(XMLElement* root) {
|
||||
WRITEDSBL("eulerdamp", mjDSBL_EULERDAMP)
|
||||
WRITEDSBL("autoreset", mjDSBL_AUTORESET)
|
||||
WRITEDSBL("nativeccd", mjDSBL_NATIVECCD)
|
||||
WRITEDSBL("island", mjDSBL_ISLAND)
|
||||
#undef WRITEDSBL
|
||||
|
||||
#define WRITEENBL(NAME, MASK) \
|
||||
@@ -1066,7 +1067,6 @@ void mjXWriter::Option(XMLElement* root) {
|
||||
WRITEENBL("fwdinv", mjENBL_FWDINV)
|
||||
WRITEENBL("invdiscrete", mjENBL_INVDISCRETE)
|
||||
WRITEENBL("multiccd", mjENBL_MULTICCD)
|
||||
WRITEENBL("island", mjENBL_ISLAND)
|
||||
#undef WRITEENBL
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user