From c66d79409c2e5861bdbf3fef991e3e275bd202c3 Mon Sep 17 00:00:00 2001 From: Yuval Tassa Date: Wed, 24 May 2023 13:50:32 -0700 Subject: [PATCH] Change `mj_ray` behaviour to match geom visualisation conventions: - Planes and height-fields respect `mj_ray`'s `geom_group` argument. - The `flg_static` argument now applies to all static geoms, not only those directly in the world body. Before this change: - Rays always intersected with height fields and planes, unless `flg_static` was set to 0. - `flg_static` only applied to static geoms that were direct children of the world, but not geoms that were children of static bodies. PiperOrigin-RevId: 534969091 Change-Id: I8dc7c320c63d6af95709b9f5e83a3c50e1c199fa --- doc/changelog.rst | 37 ++++++++++++++++++---------------- src/engine/engine_ray.c | 7 +------ test/engine/engine_ray_test.cc | 4 ++-- 3 files changed, 23 insertions(+), 25 deletions(-) diff --git a/doc/changelog.rst b/doc/changelog.rst index 8844f301..653cb75a 100644 --- a/doc/changelog.rst +++ b/doc/changelog.rst @@ -5,27 +5,29 @@ Changelog Upcoming version (not yet released) ----------------------------------- -.. youtube:: hqIMTNGaLF4 +.. youtube:: ZppeDArq6AU :align: right :width: 240px +Models +^^^^^^ + +- Added `3x3x3 cube `__ example model. See + `README `__ for details. Bug fixes -^^^^^^^ +^^^^^^^^^ - Fixed a bug that was causing an incorrect computation of the mesh bounding box and coordinate frame if the volume was - invalid. In such case, now MuJoCo only accepts a non-watertight geometry if :ref:`shellinertia` - is equal to ``true``. - + invalid. In such case, now MuJoCo only accepts a non-watertight geometry if + :ref:`shellinertia` is equal to ``true``. - Fixed the sparse Jacobian multiplication logic that is used to compute derivatives for tendon damping and fluid force, which affects the behaviour of the :ref:`implicit and implicitfast integrators`. +- Fixes to :ref:`mj_ray`, in line with geom visualisation conventions: -Plugins -^^^^^^^ - -- Added touch-grid sensor plugin. See `documentation `_ - for details, and associated `touch_grid.xml `_ - example model. The plugin includes `in-scene visualisation `_. + - Planes and height-fields respect the `geom_group` and `flg_static` arguments. Before this change, rays would + intersect planes and height-fields unconditionally. + - ``flg_static`` now apllies to all static geoms, not just those which are direct children of the world body. General ^^^^^^^ @@ -55,16 +57,17 @@ General model, within a range of width tausmooth. See :ref:`Muscle actuators` for more details. Relatedly, :ref:`mju_muscleDynamics` now takes 3 parameters instead of 2, adding the new smoothing-width parameter. - -.. youtube:: ZppeDArq6AU +.. youtube:: hqIMTNGaLF4 :align: right :width: 240px -Models -^^^^^^ +Plugins +^^^^^^^ + +- Added touch-grid sensor plugin. See `documentation `_ + for details, and associated `touch_grid.xml `_ + example model. The plugin includes `in-scene visualisation `_. -- Added `3x3x3 cube `__ example model. See - `README `__ for details. Version 2.3.5 (April 25, 2023) ------------------------------ diff --git a/src/engine/engine_ray.c b/src/engine/engine_ray.c index 0ac2ec6e..f382754c 100644 --- a/src/engine/engine_ray.c +++ b/src/engine/engine_ray.c @@ -82,15 +82,10 @@ static int ray_eliminate(const mjModel* m, const mjData* d, int geomid, } // static exclusion - if (!flg_static && m->geom_bodyid[geomid]==0) { + if (!flg_static && m->body_weldid[m->geom_bodyid[geomid]]==0) { return 1; } - // plane and hfield inclusion - if (m->geom_type[geomid]==mjGEOM_PLANE || m->geom_type[geomid]==mjGEOM_HFIELD) { - return 0; - } - // no geomgroup inclusion if (!geomgroup) { return 0; diff --git a/test/engine/engine_ray_test.cc b/test/engine/engine_ray_test.cc index 20fff235..362d600f 100644 --- a/test/engine/engine_ray_test.cc +++ b/test/engine/engine_ray_test.cc @@ -39,10 +39,10 @@ static constexpr char kSingleGeomModel[] = R"( static constexpr char kRayCastingModel[] = R"( - + +