Merge branch 'main' into open3d-removal
This commit is contained in:
+3
-2
@@ -9,15 +9,16 @@ General
|
||||
^^^^^^^
|
||||
|
||||
1. Renamed ``mjModel.tex_rbg`` to ``mjModel.tex_data``.
|
||||
2. Added a new disable flag ``mjDSBL_AUTORESETNAN`` to disable automatic reset when NaNs or infinities are produced.
|
||||
|
||||
MJX
|
||||
^^^
|
||||
|
||||
2. Added more fields to ``mjx.Model`` and ``mjx.Data`` for further compatibility with the corresponding MuJoCo structs.
|
||||
3. Added more fields to ``mjx.Model`` and ``mjx.Data`` for further compatibility with the corresponding MuJoCo structs.
|
||||
|
||||
Python bindings
|
||||
^^^^^^^^^^^^^^^
|
||||
2. Added support for asset dictionary argument in ``mujoco.spec.from_file``, ``mujoco.spec.from_string`` and
|
||||
4. Added support for asset dictionary argument in ``mujoco.spec.from_file``, ``mujoco.spec.from_string`` and
|
||||
``mujoco.spec.compile``.
|
||||
|
||||
Version 3.2.0 (Jul 15, 2024)
|
||||
|
||||
@@ -418,8 +418,9 @@ typedef enum mjtDisableBit_ { // disable default feature bitflags
|
||||
mjDSBL_SENSOR = 1<<12, // sensors
|
||||
mjDSBL_MIDPHASE = 1<<13, // mid-phase collision filtering
|
||||
mjDSBL_EULERDAMP = 1<<14, // implicit integration of joint damping in Euler integrator
|
||||
mjDSBL_AUTORESETNAN = 1<<15, // automatic reset when numerical issues are detected
|
||||
|
||||
mjNDISABLE = 15 // number of disable flags
|
||||
mjNDISABLE = 16 // number of disable flags
|
||||
} mjtDisableBit;
|
||||
typedef enum mjtEnableBit_ { // enable optional feature bitflags
|
||||
mjENBL_OVERRIDE = 1<<0, // override contact parameters
|
||||
|
||||
@@ -61,8 +61,9 @@ typedef enum mjtDisableBit_ { // disable default feature bitflags
|
||||
mjDSBL_SENSOR = 1<<12, // sensors
|
||||
mjDSBL_MIDPHASE = 1<<13, // mid-phase collision filtering
|
||||
mjDSBL_EULERDAMP = 1<<14, // implicit integration of joint damping in Euler integrator
|
||||
mjDSBL_AUTORESETNAN = 1<<15, // automatic reset when numerical issues are detected
|
||||
|
||||
mjNDISABLE = 15 // number of disable flags
|
||||
mjNDISABLE = 16 // number of disable flags
|
||||
} mjtDisableBit;
|
||||
|
||||
|
||||
|
||||
+2
-1
@@ -42,7 +42,8 @@ ENUMS: Mapping[str, EnumDecl] = dict([
|
||||
('mjDSBL_SENSOR', 4096),
|
||||
('mjDSBL_MIDPHASE', 8192),
|
||||
('mjDSBL_EULERDAMP', 16384),
|
||||
('mjNDISABLE', 15),
|
||||
('mjDSBL_AUTORESETNAN', 32768),
|
||||
('mjNDISABLE', 16),
|
||||
]),
|
||||
)),
|
||||
('mjtEnableBit',
|
||||
|
||||
@@ -739,12 +739,18 @@ void MakePhysicsSection(mj::Simulate* sim) {
|
||||
for (int i=0; i<mjNDISABLE; i++) {
|
||||
mju::strcpy_arr(defFlag[0].name, mjDISABLESTRING[i]);
|
||||
defFlag[0].pdata = sim->disable + i;
|
||||
if ((1 << i) == mjDSBL_AUTORESETNAN) {
|
||||
defFlag[0].state = 0;
|
||||
} else {
|
||||
defFlag[0].state = 2;
|
||||
}
|
||||
mjui_add(&sim->ui0, defFlag);
|
||||
}
|
||||
mjui_add(&sim->ui0, defEnableFlags);
|
||||
for (int i=0; i<mjNENABLE; i++) {
|
||||
mju::strcpy_arr(defFlag[0].name, mjENABLESTRING[i]);
|
||||
defFlag[0].pdata = sim->enable + i;
|
||||
defFlag[0].state = 2;
|
||||
mjui_add(&sim->ui0, defFlag);
|
||||
}
|
||||
// add contact override
|
||||
|
||||
@@ -52,7 +52,9 @@ void mj_checkPos(const mjModel* m, mjData* d) {
|
||||
for (int i=0; i < m->nq; i++) {
|
||||
if (mju_isBad(d->qpos[i])) {
|
||||
mj_warning(d, mjWARN_BADQPOS, i);
|
||||
mj_resetData(m, d);
|
||||
if (!(m->opt.disableflags & mjDSBL_AUTORESETNAN)) {
|
||||
mj_resetData(m, d);
|
||||
}
|
||||
d->warning[mjWARN_BADQPOS].number++;
|
||||
d->warning[mjWARN_BADQPOS].lastinfo = i;
|
||||
return;
|
||||
@@ -67,7 +69,9 @@ void mj_checkVel(const mjModel* m, mjData* d) {
|
||||
for (int i=0; i < m->nv; i++) {
|
||||
if (mju_isBad(d->qvel[i])) {
|
||||
mj_warning(d, mjWARN_BADQVEL, i);
|
||||
mj_resetData(m, d);
|
||||
if (!(m->opt.disableflags & mjDSBL_AUTORESETNAN)) {
|
||||
mj_resetData(m, d);
|
||||
}
|
||||
d->warning[mjWARN_BADQVEL].number++;
|
||||
d->warning[mjWARN_BADQVEL].lastinfo = i;
|
||||
return;
|
||||
@@ -82,10 +86,14 @@ void mj_checkAcc(const mjModel* m, mjData* d) {
|
||||
for (int i=0; i < m->nv; i++) {
|
||||
if (mju_isBad(d->qacc[i])) {
|
||||
mj_warning(d, mjWARN_BADQACC, i);
|
||||
mj_resetData(m, d);
|
||||
if (!(m->opt.disableflags & mjDSBL_AUTORESETNAN)) {
|
||||
mj_resetData(m, d);
|
||||
}
|
||||
d->warning[mjWARN_BADQACC].number++;
|
||||
d->warning[mjWARN_BADQACC].lastinfo = i;
|
||||
mj_forward(m, d);
|
||||
if (!(m->opt.disableflags & mjDSBL_AUTORESETNAN)) {
|
||||
mj_forward(m, d);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,7 +57,8 @@ const char* mjDISABLESTRING[mjNDISABLE] = {
|
||||
"Refsafe",
|
||||
"Sensor",
|
||||
"Midphase",
|
||||
"Eulerdamp"
|
||||
"Eulerdamp",
|
||||
"AutoResetNaN"
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -3206,6 +3206,7 @@ mjModel* mjCModel::Compile(const mjVFS* vfs, mjModel** m) {
|
||||
bodies_[i]->subtreedofs = 0;
|
||||
}
|
||||
mjCBody* world = bodies_[0];
|
||||
ResetTreeLists();
|
||||
Clear();
|
||||
bodies_.push_back(world);
|
||||
}
|
||||
|
||||
@@ -186,6 +186,38 @@ TEST_F(PluginTest, RecompileCompare) {
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(PluginTest, RecompileEdit) {
|
||||
static constexpr char xml[] = R"(
|
||||
<mujoco>
|
||||
<worldbody>
|
||||
<body>
|
||||
<freejoint/>
|
||||
<geom size=".1"/>
|
||||
</body>
|
||||
</worldbody>
|
||||
</mujoco>
|
||||
)";
|
||||
|
||||
std::array<char, 1000> er;
|
||||
mjSpec *spec = mj_parseXMLString(xml, 0, er.data(), er.size());
|
||||
EXPECT_THAT(spec, NotNull()) << er.data();
|
||||
mjModel *m1 = mj_compile(spec, nullptr);
|
||||
EXPECT_THAT(m1, NotNull());
|
||||
|
||||
// add a geom
|
||||
mjsBody *world = mjs_findBody(spec, "world");
|
||||
mjsGeom *geom = mjs_addGeom(world, nullptr);
|
||||
geom->size[0] = 1;
|
||||
|
||||
// compile again
|
||||
mjModel *m2 = mj_compile(spec, nullptr);
|
||||
EXPECT_THAT(m2, NotNull());
|
||||
|
||||
mj_deleteModel(m1);
|
||||
mj_deleteModel(m2);
|
||||
mj_deleteSpec(spec);
|
||||
}
|
||||
|
||||
// ------------------- test cache with modified assets -------------------------
|
||||
|
||||
TEST_F(PluginTest, RecompileCompareObjCache) {
|
||||
|
||||
@@ -157,7 +157,8 @@ public enum mjtDisableBit : int{
|
||||
mjDSBL_SENSOR = 4096,
|
||||
mjDSBL_MIDPHASE = 8192,
|
||||
mjDSBL_EULERDAMP = 16384,
|
||||
mjNDISABLE = 15,
|
||||
mjDSBL_AUTORESETNAN = 32768,
|
||||
mjNDISABLE = 16,
|
||||
}
|
||||
public enum mjtEnableBit : int{
|
||||
mjENBL_OVERRIDE = 1,
|
||||
|
||||
Reference in New Issue
Block a user