Improvements related to models where joint-actuator relationship is not one-to-one:

- Add `joint-actuatorforcerange` for clamping total actuator force at joints. Add `sensor-jointactuatorfrc` for sensing total actuator forces on a single joint.
See [documentation](https://mujoco.readthedocs.io/en/latest//modeling.html#actuator-force-clamping) for justification and use cases.
- Add simple car model to `model/`.
- Move actuation-related test models into `engine/testdata/actuation/`.

PiperOrigin-RevId: 549355941
Change-Id: I27f6c1f80426d73a2811ef5ae74684a228b2fbd1
This commit is contained in:
Yuval Tassa
2023-07-19 10:28:24 -07:00
committed by Copybara-Service
parent 7603b07a20
commit 51aa375af0
29 changed files with 453 additions and 105 deletions
+24 -23
View File
@@ -315,29 +315,30 @@ ENUMS: Mapping[str, EnumDecl] = dict([
('mjSENS_ACTUATORPOS', 12),
('mjSENS_ACTUATORVEL', 13),
('mjSENS_ACTUATORFRC', 14),
('mjSENS_BALLQUAT', 15),
('mjSENS_BALLANGVEL', 16),
('mjSENS_JOINTLIMITPOS', 17),
('mjSENS_JOINTLIMITVEL', 18),
('mjSENS_JOINTLIMITFRC', 19),
('mjSENS_TENDONLIMITPOS', 20),
('mjSENS_TENDONLIMITVEL', 21),
('mjSENS_TENDONLIMITFRC', 22),
('mjSENS_FRAMEPOS', 23),
('mjSENS_FRAMEQUAT', 24),
('mjSENS_FRAMEXAXIS', 25),
('mjSENS_FRAMEYAXIS', 26),
('mjSENS_FRAMEZAXIS', 27),
('mjSENS_FRAMELINVEL', 28),
('mjSENS_FRAMEANGVEL', 29),
('mjSENS_FRAMELINACC', 30),
('mjSENS_FRAMEANGACC', 31),
('mjSENS_SUBTREECOM', 32),
('mjSENS_SUBTREELINVEL', 33),
('mjSENS_SUBTREEANGMOM', 34),
('mjSENS_CLOCK', 35),
('mjSENS_PLUGIN', 36),
('mjSENS_USER', 37),
('mjSENS_JOINTACTFRC', 15),
('mjSENS_BALLQUAT', 16),
('mjSENS_BALLANGVEL', 17),
('mjSENS_JOINTLIMITPOS', 18),
('mjSENS_JOINTLIMITVEL', 19),
('mjSENS_JOINTLIMITFRC', 20),
('mjSENS_TENDONLIMITPOS', 21),
('mjSENS_TENDONLIMITVEL', 22),
('mjSENS_TENDONLIMITFRC', 23),
('mjSENS_FRAMEPOS', 24),
('mjSENS_FRAMEQUAT', 25),
('mjSENS_FRAMEXAXIS', 26),
('mjSENS_FRAMEYAXIS', 27),
('mjSENS_FRAMEZAXIS', 28),
('mjSENS_FRAMELINVEL', 29),
('mjSENS_FRAMEANGVEL', 30),
('mjSENS_FRAMELINACC', 31),
('mjSENS_FRAMEANGACC', 32),
('mjSENS_SUBTREECOM', 33),
('mjSENS_SUBTREELINVEL', 34),
('mjSENS_SUBTREEANGMOM', 35),
('mjSENS_CLOCK', 36),
('mjSENS_PLUGIN', 37),
('mjSENS_USER', 38),
]),
)),
('mjtStage',
+14
View File
@@ -1391,6 +1391,13 @@ STRUCTS: Mapping[str, StructDecl] = dict([
),
doc='does joint have limits (njnt x 1)',
),
StructFieldDecl(
name='jnt_actfrclimited',
type=PointerType(
inner_type=ValueType(name='mjtByte'),
),
doc='does joint have actuator force limits (njnt x 1)',
),
StructFieldDecl(
name='jnt_solref',
type=PointerType(
@@ -1433,6 +1440,13 @@ STRUCTS: Mapping[str, StructDecl] = dict([
),
doc='joint limits (njnt x 2)',
),
StructFieldDecl(
name='jnt_actfrcrange',
type=PointerType(
inner_type=ValueType(name='mjtNum'),
),
doc='range of total actuator force (njnt x 2)',
),
StructFieldDecl(
name='jnt_margin',
type=PointerType(