Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
793 commits
Select commit Hold shift + click to select a range
3b801da
Explicitly disable tendon range limits and actuator force limits in r…
yuvaltassa Aug 19, 2022
5db4e15
Output attr="false" from PyMJCF when False is explicitly specified.
nimrod-gileadi Aug 19, 2022
bee80fe
Add `insert` method to `mjcf.element`.
yuvaltassa Aug 22, 2022
af21ef4
Add two new attributes to weld constraints:
a-googler Aug 22, 2022
0007bb2
Add two new attributes to weld constraints:
a-googler Aug 22, 2022
968db40
Add a disable flag for sensors.
yuvaltassa Aug 23, 2022
e7c75d6
Add two new attributes to weld constraints:
a-googler Aug 25, 2022
62518df
Cartesian end-effector control using site transmission.
yuvaltassa Sep 1, 2022
3ee9a41
Lower `protobuf` version requirement.
saran-t Sep 5, 2022
4e6426a
Fix rendering context cleanup logic.
saran-t Sep 5, 2022
154e039
Don't infer limited attributes automatically by default.
nimrod-gileadi Sep 6, 2022
7ed22bf
Add scene callbacks to viewer/renderer.py and viewer/viewer.py
a-googler Sep 6, 2022
60e18a5
Bump version number to 1.0.6.
saran-t Sep 7, 2022
d05e627
Enable back face culling in `dm_control.viewer`.
saran-t Sep 7, 2022
ecdf4c8
Implement plugin mechanism for actuators and sensors.
saran-t Sep 16, 2022
1d3263a
Ensure Viewer respects free camera settings.
kevinzakka Sep 20, 2022
f755f68
Add `dog_v2/` directory and `build_dog` script to `locomotion/walkers…
yuvaltassa Sep 22, 2022
5ce1273
Add all of Camera's constructor args to MovableCamera's constructor, …
a-googler Sep 30, 2022
f14b37a
Add `assetdir` compiler option.
kevinzakka Oct 1, 2022
8ecf4a1
Dynamically allocate `contact` and `efc_` arrays on a new memory arena.
saran-t Oct 6, 2022
49cb4ab
Rename time, position, and speed to times, positions, and speeds as t…
a-googler Oct 7, 2022
5cb6b1d
Replaced deprecated @abstractproperty decorator that was causing lint…
a-googler Oct 13, 2022
18a96ba
Preserve the stack trace when raising exceptions within exception han…
a-googler Oct 14, 2022
644b3c6
Bump version number to 1.0.8 for MuJoCo 2.3.0.
saran-t Oct 18, 2022
880fadb
Silence some pytype errors.
rchen152 Oct 21, 2022
db8b87a
Allow tendon `springlength` attribute to take two values between whic…
yuvaltassa Oct 28, 2022
4ec1a9e
Delete unused globals in `mujoco/wrapper/core.py`
alimuldal Nov 1, 2022
50f3326
Add per-body gravity compensation (buoyancy) passive force.
a-googler Nov 1, 2022
f411460
Allow more than 1 activation state per actuator, but only for dyntype…
yuvaltassa Nov 7, 2022
822cd01
Create a substep method that calls the before and after substep hooks…
a-googler Nov 7, 2022
e3d4c0a
Stop requiring stateful actuators to come after stateless ones.
saran-t Nov 9, 2022
f2e246b
Make sure that `contact_force` always returns the correct values.
saran-t Nov 25, 2022
68c603e
Rename `EGL_DEVICE_ID` to `MUJOCO_EGL_DEVICE_ID` to be consistent wit…
saran-t Dec 5, 2022
8105cb1
Update to pyparsing 3.0.0. Fixes #359.
a-googler Dec 5, 2022
3c67a42
Bump version number to 1.0.9 for MuJoCo 2.3.1.
a-googler Dec 7, 2022
d07e7c1
fix deprecation warning
jjshoots Dec 12, 2022
2ae5f57
make oneline
jjshoots Dec 12, 2022
28cd5eb
Exclude `needstage` from triggering dirty physics.
sbohez Dec 13, 2022
73f1607
Use `mj_versionString` to report version in dm_control.
saran-t Dec 14, 2022
ae85a28
Add math module to variation package and make sequence variation eval…
sbohez Dec 16, 2022
093524a
Correctly activate free camera on `esc` key hit.
kevinzakka Jan 4, 2023
321717b
Modify mjcf schema to work better with MuJoCo plugins.
a-googler Jan 9, 2023
d5d054b
Update state items to include plugin state in mujoco engine.
a-googler Jan 9, 2023
ed0361d
Increase the font scale if a high-DPI (e.g. retina) display is detected.
kevinzakka Jan 23, 2023
0b11adb
Internal change.
yuvaltassa Jan 25, 2023
8277d15
Update MJCF schema for plugins
JeanElsner Feb 1, 2023
20048ac
separated build_dog in different files to increase readability; added…
vittorione94 Nov 28, 2022
885e8f7
Added copyright headers; reformat file to use 2-space indent with 80-…
vittorione94 Jan 17, 2023
a835bd9
dm_control: Import of refs/pull/366/head
copybara-github Feb 6, 2023
b84d0a4
dm_control: Import of refs/pull/372/head
copybara-github Feb 6, 2023
fdb8fe1
dm_control: Import of refs/pull/371/head
copybara-github Feb 6, 2023
bc4b064
dm_control: Import of refs/pull/336/head
copybara-github Feb 6, 2023
774f461
Bump version number to 1.0.10.
saran-t Feb 7, 2023
cc74770
Rename `<required>` tag to `<plugin>`.
saran-t Feb 13, 2023
c467f60
Rename `inteval` attribute in `mjLROpt` to `interval`.
saran-t Feb 13, 2023
9d2805e
Add size.memory to MJCF schema.
sbohez Feb 15, 2023
83336b4
Removed deprecated `abc.abstractproperty` decorator.
francesco-romano Feb 23, 2023
1cd211b
Add missing muscle gaintype dyntype and biastype to dm_control schema.
kevinzakka Mar 6, 2023
461bed9
Add option to step the physics with `mj_step` instead of `mj_step2`->…
kevinzakka Mar 7, 2023
de21947
Fix `sensor/user` element's attribute defaults
a-googler Mar 7, 2023
8278a3e
Allow custom composer Arena XMLs.
kevinzakka Mar 9, 2023
f391104
Add `implicitfast` integrator to PyMJCF schema.
yuvaltassa Mar 16, 2023
87c695c
Fix msan errors.
saran-t Mar 20, 2023
690b2cf
Make sure fields in mjData are initialized in `index_test`.
nimrod-gileadi Mar 20, 2023
5dec889
Bump version number to 1.0.11.
nimrod-gileadi Mar 21, 2023
6817b67
Add equivalent inertia ellipsoid visualization.
kevinzakka Mar 24, 2023
9c06314
Allow renderers to build with pytype.
nimrod-gileadi Mar 28, 2023
8f145c6
dm_control: Import of refs/pull/394/head
genericdata Apr 3, 2023
c40340f
Expose a handle for the Python viewer.
saran-t Apr 20, 2023
f3ae36a
Bump version number to 1.0.12.
saran-t Apr 20, 2023
330c91f
Update MuJoCo version to 2.3.5.
saran-t Apr 25, 2023
0cb8fcb
Silence some pytype errors.
rchen152 May 2, 2023
6137223
Allow custom spec types to be passed through in composer obs updater.
a-googler May 10, 2023
1bee111
Removed key for visualizing the mesh tree.
a-googler May 18, 2023
6fce666
Add `mjContact.solreffriction`, `mjModel.pair_solreffriction` and rel…
yuvaltassa Jun 7, 2023
2af59a1
[NumPy] Fix uses of functions deprecated in NumPy 1.25.
hawkinsp Jun 8, 2023
4f262a0
expose skin group to python
vittorione94 Jun 15, 2023
ccaf796
dm_control: Import of refs/pull/403/head
vittorione94 Jun 15, 2023
0991878
Add missing Nvidia ICD file for glvnd to enable GPU rendering on Colab.
saran-t Jun 19, 2023
ccbaf91
Bump version number to 1.0.13.
saran-t Jun 20, 2023
73002e4
[NumPy] Fix uses of the np.stack() family of functions under NumPy 1.25.
hawkinsp Jun 23, 2023
38e052b
Drop support for Python 3.7.
saran-t Jun 27, 2023
47a5fd7
Bump dependency versions.
saran-t Jul 18, 2023
d6f9cb4
Bump dm_control version to 1.0.14 for MuJoCo 2.3.7 release.
saran-t Jul 20, 2023
601f8ed
Add filterexact and actearly options to MuJoCo.
nimrod-gileadi Aug 7, 2023
7d22d7b
Add constraint island discovery
yuvaltassa Aug 15, 2023
20bf733
Rename `nstack` to `narena`, change it and `pstack` to count bytes.
saran-t Aug 29, 2023
37cb390
Add options for controlling early termination criteria of CG/Newton l…
a-googler Sep 6, 2023
f7bd7a8
Change GitHub org name to `google-deepmind`.
saran-t Sep 7, 2023
ec994b9
Remove `mjOption.collision` and associated `option/collision` attribute.
yuvaltassa Sep 18, 2023
94bc51d
Add jointactuatorfrc to schema.xml
nimrod-gileadi Sep 27, 2023
d7af7ad
Specify camera parameters using standard robotics conventions.
a-googler Sep 28, 2023
af46387
Make fruitfly (v2) walker and model files public.
yuvaltassa Sep 28, 2023
14a6e37
Increase image golden test tolerance.
saran-t Oct 3, 2023
dc50409
Accelerate inertia computation for simple bodies.
a-googler Oct 6, 2023
c9deca6
Update this test, the previous way of mocking makes this test fail on…
yilei Oct 9, 2023
878c812
Add Flex component.
a-googler Oct 12, 2023
b6bde40
Update dm_control dependencies.
saran-t Oct 17, 2023
4d356d3
Bump dm_control version and depend on mujoco 3.0.0.
nimrod-gileadi Oct 18, 2023
6fdcda2
Fix flex constraint Jacobian for edges belonging to a single body.
a-googler Oct 20, 2023
f2f0e23
Add missing plugin sections in dm_control schema. Fixes #434.
a-googler Oct 30, 2023
d4e76b3
Add sdf test to physics_test
quagla Oct 31, 2023
cb2edaf
Make use of the new MjData.model attribute to avoid unnecessary copies.
nimrod-gileadi Nov 13, 2023
8cc69fc
Add flex to dm_control schema.
quagla Nov 14, 2023
634d885
Add new actuator plugin XML attributes to dm_control schema.
nimrod-gileadi Nov 23, 2023
c2959e6
Enable 2 changes to composer environment resets:
a-googler Nov 28, 2023
35f72f1
Fix a crash in dm_control Python viewer during perturbations.
nimrod-gileadi Dec 1, 2023
a883b77
Adjust imports to match google-internal code and open source code.
nimrod-gileadi Dec 1, 2023
bce984a
dm_control: Import of refs/pull/440/head
JeanElsner Dec 2, 2023
620ab9b
Add `kv` damping attribute to `position` and `intvelocity` actuator s…
yuvaltassa Dec 6, 2023
1622af5
Internal change
alimuldal Dec 14, 2023
5fe49a4
Bump dm_control version to 1.0.16.
nimrod-gileadi Dec 19, 2023
7a938bd
Mark "count" attribute on "composite" as non-required.
nimrod-gileadi Dec 20, 2023
60c32e1
Update EGL init code for Python 3.12.
nimrod-gileadi Jan 5, 2024
241851f
Update pymjcf schema to support SDF geoms in worldbody.
a-googler Jan 12, 2024
cc26855
Update Pillow dependency of dm_control.
nimrod-gileadi Jan 30, 2024
9e360bf
Expose CameraMatrices type from dm_control.mujoco.
nimrod-gileadi Feb 1, 2024
895d25f
Provide a Blender plugin to export models as MuJoCo MJCF XML files wi…
a-googler Feb 9, 2024
3adfe8c
Provide a Blender plugin to export models as Mujoco MJCF XML files.
a-googler Feb 9, 2024
b002aa3
Never return None from Physics.bind.
nimrod-gileadi Mar 6, 2024
f11982b
dm_control: Import of refs/pull/442/head
Mar 21, 2024
2e98b86
dm_control: Import of refs/pull/452/head
nsk126 Mar 21, 2024
5e8eac1
internal change
a-googler Mar 21, 2024
5c155e1
Add assetdir functionality to pymjcf.
a-googler Mar 22, 2024
3d4f11d
dm_control release for 1.0.7
a-googler Mar 28, 2024
31762b7
Silence some deprecation warnings from finger.py.
nimrod-gileadi Mar 28, 2024
ab94ecf
Bump version number to 1.0.17.
a-googler Mar 28, 2024
b72eaa4
Make VFS filename length limit match MuJoCo's.
kevinzakka Mar 31, 2024
7b10246
Update mjcf/schema.xml
yuvaltassa Apr 10, 2024
af0aa74
Bump version number to 1.0.18 following the MuJoCo 3.1.4 release.
a-googler Apr 11, 2024
7a6a530
Add `actuatorgravcomp` to schema.
kevinzakka Apr 12, 2024
554ad27
Return zip file name after export with assets.
erez-tom Apr 22, 2024
b3f7658
dm_control: Import of refs/pull/463/head
JeyRunner May 1, 2024
abcccbb
Add missing attributes to pymjcf schema.
yuvaltassa May 1, 2024
f3e1114
dm_control: Import of refs/pull/467/head
louisgevers May 1, 2024
ad0824f
PyMJCF: Don't replace `'/' -> '\'` in attributes that may contain fil…
erez-tom May 7, 2024
db4a392
Bump version number to 1.0.19
a-googler May 7, 2024
19f7f68
dm_control: Import of refs/pull/468/head
charleslin4 May 8, 2024
04ff055
Add position actuator's timeconst attribute to PyMJCF schema.
erez-tom May 19, 2024
515e568
Add `inheritrange` attribute to schema.
kevinzakka Jun 1, 2024
0a0bf57
Add `dampratio` attribute to `position` and `intvelocity` elements in…
yuvaltassa Jun 3, 2024
ed42450
Bump version number to 1.0.20 for dm_control following mujoco release…
a-googler Jun 4, 2024
0d35c66
Fix type-related issues in dependent code. Remove hardcoded mjUSEDOUB…
yuvaltassa Jun 19, 2024
6028058
dm_control: Import of refs/pull/476/head
sibocw Jun 20, 2024
f4ecec8
Don't normalize `mjData->qpos` quaternions in-place.
yuvaltassa Jun 29, 2024
e537a6a
Explicitly specify actdim on PID plugin actuators, to allow them to b…
nimrod-gileadi Jul 9, 2024
85f0510
dm_control: Import of refs/pull/479/head
blueshrapnel Jul 12, 2024
a495469
Bump version number to 1.0.21, update some formatting.
a-googler Jul 17, 2024
1608629
Allow multiple textures per material in MJCF.
erez-tom Jul 22, 2024
9c295be
dm_control: Import of refs/pull/487/head
kevinzakka Jul 30, 2024
c710837
Bump version number to 1.0.22.
a-googler Aug 6, 2024
cb4e11f
Fix a couple of tests that break under numpy>=2.0.
nimrod-gileadi Aug 21, 2024
bdb1ab5
Rename mpr_tolerance and mpr_iterations to ccd_tolerance and ccd_iter…
yuvaltassa Aug 22, 2024
e3d9427
dm_control: Import of refs/pull/490/head
hartikainen Aug 28, 2024
33789b0
dm_control: Import of refs/pull/492/head
kevinzakka Aug 28, 2024
0fd3d48
Allow connect constraints to be specified using sites.
yuvaltassa Aug 29, 2024
ba71e7d
Remove name attribute from most plugin tags in dm_control.
nimrod-gileadi Sep 2, 2024
40043f0
Add compiler/alignfree and freejoint/align attributes to the mjcf sch…
yuvaltassa Sep 5, 2024
afa4ccf
fix: Added "actuatorgravcomp" to schema.xml
Sep 11, 2024
b3df0f5
Add site semantics to weld constraint. Fixes #1896
thowell Sep 16, 2024
a19c166
Update dm_control to version 1.0.23.
a-googler Sep 18, 2024
2c86de5
Update schema.xml to include `maxhullvert`
a-googler Sep 26, 2024
a41e9f0
Update option/flag in mjcf/schema.xml
yuvaltassa Sep 26, 2024
2456cfa
Add flex elasticity to the MJCF schema.
quagla Sep 30, 2024
a2ad4e3
Variation broadcaster that allows a variation to be broadcasted to mu…
Oct 7, 2024
d7f3ac0
Fix invalid model in randomizers_test.py.
yuvaltassa Oct 14, 2024
6fe299c
Remove support for Python 3.8 from dm_control.
nimrod-gileadi Oct 15, 2024
b264408
dm_control: Import of refs/pull/496/head
barikata1984 Oct 16, 2024
1e1fbb1
Update dm_control to v1.0.24 following the MuJoCo v3.2.4 release.
Oct 17, 2024
94629d2
Move mesh inertia specification from global <compiler> to <asset/mesh>.
quagla Oct 23, 2024
272efa3
Rename exactmeshinertia to inertia in mjcf schema.
quagla Oct 23, 2024
bce0621
Allow conflict and set associated behaviour for `zfar` and `znear`.
sbohez Oct 24, 2024
073e955
Reset physics time after settling physics in PropPlacer.
nimrod-gileadi Oct 25, 2024
6f0f150
Refactor PBR texture layers from separate sub-elements to a single la…
yuvaltassa Oct 26, 2024
1bcdb82
Remove the `convexhull` compiler option.
yuvaltassa Oct 27, 2024
e3f93b0
Remove deprecated mjv_makeConnector function.
yuvaltassa Oct 28, 2024
8eb70f8
Add ability to set references with numpy unicode strings. This allows…
Oct 28, 2024
8358f6d
Don't use `actuator_moment` in `lqr_solver.py`
yuvaltassa Nov 1, 2024
d25bb88
Remove box, cylinder and ellipsoid composite types.
quagla Nov 2, 2024
5037fd2
Update dm_control to v1.0.25 following the MuJoCo v3.2.5 release.
a-googler Nov 5, 2024
b7283a3
Automated Code Change
Nov 14, 2024
94f7407
Move layer element to the right place (from texture to material).
yuvaltassa Nov 20, 2024
f44c219
Add `mjv_copyModel` to copy `mjModel`, skipping large arrays not requ…
yuvaltassa Nov 22, 2024
5028701
Bump version number to 1.0.26 following the MuJoCo 3.2.6 release.
Dec 3, 2024
c52f954
Add "camprojection" sensor to schema.xml
a-googler Dec 16, 2024
884bbbb
Auto-generate 3D mesh from convex OBJ if dim=3 in flex.
quagla Jan 6, 2025
a8e6aff
Bump version number to 1.0.27 following the MuJoCo v3.2.27 release.
Jan 15, 2025
b2484ee
Fix schema definition of `springlength`, fixes #508
yuvaltassa Jan 16, 2025
07b0688
Add sensors for potential and kinetic energy.
yuvaltassa Jan 17, 2025
3634882
Free the Physics object when Environment.close is called.
nimrod-gileadi Jan 20, 2025
316e0f1
Throw EpisodeInitializationError instead of raw RuntimeError when pro…
nimrod-gileadi Jan 22, 2025
405f74c
Add `QuatRotate` variation and use `dm_control.utils.transformations`…
sbohez Jan 24, 2025
0aae21d
Fix typo in the documentation.
agesmundo Jan 26, 2025
a4b9b31
Introduce trilinear flex parametrization.
quagla Jan 29, 2025
02be546
Changes to inertia inference from meshes.
powertj Feb 12, 2025
40a01ab
fix schema for meshes with shell inertia
powertj Feb 17, 2025
39a3bc8
Remove the particle composite (replaced by `replicate`).
quagla Feb 23, 2025
905077b
Improve composite docs and changelog.
quagla Feb 24, 2025
aaca103
Set nativeccd as default.
kbayes Feb 26, 2025
8a6824d
Copy texture coordinates from OBJ into flex. Fixes #2464.
quagla Feb 28, 2025
2378d7f
Update test image golden files for new MuJoCo version.
nimrod-gileadi Mar 5, 2025
13c9be9
Bump version number to 1.0.28 following MuJoCo v3.3.0 release
a-googler Mar 5, 2025
4f2ef4c
Move image flipping to render context base class.
quagla Mar 6, 2025
4274678
Rename "facetexcoord" to "elemtexcoord" in mjsFlex element for consis…
quagla Mar 6, 2025
6504caf
Convert internal representation of vertices to double. Also replace r…
kbayes Mar 7, 2025
46390cf
Implement repr and equality for all stateless variations in dm_control.
nimrod-gileadi Mar 17, 2025
adbaa72
Allow orientation for user composite.
quagla Mar 26, 2025
433e8dc
Add XML `compiler/saveinertial` flag. Fixes #2405
yuvaltassa Apr 3, 2025
5bdf8a8
Add `mjModel.tendon_armature` (in preparation, not yet implemented)
yuvaltassa Apr 3, 2025
17db233
Install timers by default in Python bindings
yuvaltassa Apr 7, 2025
259f25c
Add tendon actuator force limits and tendon actuator force sensor.
thowell Apr 8, 2025
4abacf2
Update dm_control to version 1.0.29 following the MuJoCo 3.3.1 release.
Apr 10, 2025
04970f6
allow weld using sites in PyMjcf. Fixes #515
yuvaltassa Apr 17, 2025
cab6d38
Fix 'deformable/flex' types in the pymjcf schema.
quagla Apr 24, 2025
e810ecc
Increment dm_control version following mujoco release.
a-googler Apr 30, 2025
e496eec
Minor fix for manipulator.xml.
thowell May 9, 2025
654410e
Add `vertcollide` option for adding spheres at flex vertices.
quagla May 12, 2025
75b054e
Add `intensity` and `range` parameters to lights.
a-googler May 14, 2025
4bf23b4
Include game-play video links for Emergent Coordination through Compe…
liusiqi43 May 14, 2025
4eb68b3
Move bending stiffness from plugin to the compiler.
quagla May 14, 2025
f9d7ae7
Add deformable/flex/elasticity to dm_control schema.
quagla May 15, 2025
399ef41
Remove the Shell plugin and integrate it into the engine.
quagla May 19, 2025
ac437db
Adds color space to textures.
a-googler May 22, 2025
c40d983
Convert light `directional` boolean into a `type` enum.
a-googler May 22, 2025
e47ee0d
dm_control: Import of refs/pull/519/head
dependabot[bot] May 27, 2025
676f6bd
Add `texture` attribute to lights.
a-googler May 27, 2025
bfc27f9
Add content_type to hfield and texture schema.
kbayes May 28, 2025
9a220fc
bump dm_control version
a-googler Jun 11, 2025
890c054
Add "cameraid" attribute to `visual/global` specifying the default ca…
yuvaltassa Jun 20, 2025
d5a2a39
Add `insidesite` sensor for detecting when an object is inside the vo…
yuvaltassa Jul 9, 2025
ad0e008
Bump dm_control version
a-googler Jul 13, 2025
5ba8bd7
Add mjs_makeMesh to create a builtin mesh.
quagla Jul 29, 2025
66bd49a
Add ability to specify a material assignment to a mesh asset.
a-googler Aug 22, 2025
ee9ed51
Update requirements.txt and setup.py.
saran-t Aug 28, 2025
0dd9dc2
Bump dm_control version
a-googler Aug 28, 2025
f6476e5
Update `mjcf` schema to replace `passive` disable flag with `spring` …
yuvaltassa Aug 29, 2025
05f6475
Add `passive` collision mode for flexes.
quagla Sep 1, 2025
f3f5bad
Refactor `MJMODEL_POINTERS` into category-specific macros.
yuvaltassa Sep 2, 2025
8d3cde9
Allow full model-relative paths to be used as keys in asset dicts.
Sep 15, 2025
3831fa5
Bump dm_control version
a-googler Sep 18, 2025
696bc70
Normalize asset paths before looking them up in the asset dict.
Sep 21, 2025
55d2a5c
Add `from_zip` to `parser`.
Sep 21, 2025
9e3d96c
Remove unused `mjOption.apirate`.
yuvaltassa Oct 6, 2025
049656f
Update dm_control following the MuJoCo 3.3.7 release.
Oct 15, 2025
783b386
Allow dm_control.Physics.{get,set}_state to accept a sig parameter.
saran-t Oct 23, 2025
04ba92d
Add sleep related data structures
yuvaltassa Nov 6, 2025
830a3c9
Avoid exposing symbols from the timing library to avoid ODR issues.
jbcoe Nov 11, 2025
e3a2483
[numpy] Replace uses of np.in1d with np.isin(...).ravel().
hawkinsp Dec 4, 2025
3a1fec1
Allow material default classes to define texture layers.
a-googler Dec 4, 2025
f137381
Actualizar README.md
arsesito Dec 10, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
188 changes: 117 additions & 71 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,92 +1,138 @@
# `dm_control`: The DeepMind Control Suite and Package
# `dm_control`: Google DeepMind Infrastructure for Physics-Based Simulation.

# ![all domains](all_domains.png)
Google DeepMind's software stack for physics-based simulation and Reinforcement
Learning environments, using MuJoCo physics.

This package contains:
An **introductory tutorial** for this package is available as a Colaboratory
notebook:
[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/google-deepmind/dm_control/blob/main/tutorial.ipynb)

- A set of Python Reinforcement Learning environments powered by the MuJoCo
physics engine. See the `suite` subdirectory.
## Overview

- Libraries that provide Python bindings to the MuJoCo physics engine.
This package consists of the following "core" components:

If you use this package, please cite our accompanying accompanying [tech report](https://arxiv.org/abs/1801.00690).
- [`dm_control.mujoco`]: Libraries that provide Python bindings to the MuJoCo
physics engine.

## Installation and requirements
- [`dm_control.suite`]: A set of Python Reinforcement Learning environments
powered by the MuJoCo physics engine.

Follow these steps to install `dm_control`:
- [`dm_control.viewer`]: An interactive environment viewer.

1. Download MuJoCo Pro 1.50 from the download page on the [MuJoCo website](http://www.mujoco.org/).
MuJoCo Pro must be installed before `dm_control`, since `dm_control`'s
install script generates Python [`ctypes`](https://docs.python.org/2/library/ctypes.html)
bindings based on MuJoCo's header files. By default, `dm_control` assumes
that the MuJoCo Zip archive is extracted as `~/.mujoco/mjpro150`.
Additionally, the following components are available for the creation of more
complex control tasks:

2. Install the `dm_control` Python package by running
`pip install git+git://github.com/deepmind/dm_control.git`
(PyPI package coming soon) or by cloning the repository and running
`pip install /path/to/dm_control/`
At installation time, `dm_control` looks for the MuJoCo headers from Step 1
in `~/.mujoco/mjpro150/include`, however this path can be configured with the
`headers-dir` command line argument.
- [`dm_control.mjcf`]: A library for composing and modifying MuJoCo MJCF
models in Python.

3. Install a license key for MuJoCo, required by `dm_control` at runtime. See
the [MuJoCo license key page](https://www.roboti.us/license.html) for further
details. By default, `dm_control` looks for the MuJoCo license key file at
`~/.mujoco/mjkey.txt`.
- `dm_control.composer`: A library for defining rich RL environments from
reusable, self-contained components.

4. If the license key (e.g. `mjkey.txt`) or the shared library provided by
MuJoCo Pro (e.g. `libmujoco150.so` or `libmujoco150.dylib`) are installed at
non-default paths, specify their locations using the `MJKEY_PATH` and
`MJLIB_PATH` environment variables respectively.
- [`dm_control.locomotion`]: Additional libraries for custom tasks.

## Additional instructions for Linux
- [`dm_control.locomotion.soccer`]: Multi-agent soccer tasks.

Install `GLFW` and `GLEW` through your Linux distribution's package manager.
For example, on Debian and Ubuntu, this can be done by running
`sudo apt-get install libglfw3 libglew2.0`.
If you use this package, please cite our accompanying [publication]:

## Additional instructions for Homebrew users on macOS

1. The above instructions using `pip` should work, provided that you
use a Python interpreter that is installed by Homebrew (rather than the
system-default one).

2. To get OpenGL working, install the `glfw` package from Homebrew by running
`brew install glfw`.

3. Before running, the `DYLD_LIBRARY_PATH` environment variable needs to be
updated with the path to the GLFW library. This can be done by running
`export DYLD_LIBRARY_PATH=$(brew --prefix)/lib:$DYLD_LIBRARY_PATH`.

## Control Suite quickstart

```python
from dm_control import suite
import numpy as np
```
@article{tunyasuvunakool2020,
title = {dm_control: Software and tasks for continuous control},
journal = {Software Impacts},
volume = {6},
pages = {100022},
year = {2020},
issn = {2665-9638},
doi = {https://doi.org/10.1016/j.simpa.2020.100022},
url = {https://www.sciencedirect.com/science/article/pii/S2665963820300099},
author = {Saran Tunyasuvunakool and Alistair Muldal and Yotam Doron and Salvador Arturo Ortiz Gonzalez
Siqi Liu and Steven Bohez and Josh Merel and Tom Erez and
Timothy Lillicrap and Nicolas Heess and Yuval Tassa},
}
```

# Load one task:
env = suite.load(domain_name="cartpole", task_name="swingup")
## Installation

# Iterate over a task set:
for domain_name, task_name in suite.BENCHMARKING:
env = suite.load(domain_name, task_name)
Install `dm_control` from PyPI by running

# Step through an episode and print out reward, discount and observation.
action_spec = env.action_spec()
time_step = env.reset()
while not time_step.last():
action = np.random.uniform(action_spec.minimum,
action_spec.maximum,
size=action_spec.shape)
time_step = env.step(action)
print(time_step.reward, time_step.discount, time_step.observation)
```sh
pip install dm_control
```

See our [tech report](https://arxiv.org/abs/1801.00690) for further details.
> **Note**: **`dm_control` cannot be installed in "editable" mode** (i.e. `pip
> install -e`).
>
> While `dm_control` has been largely updated to use the pybind11-based bindings
> provided via the `mujoco` package, at this time it still relies on some legacy
> components that are automatically generated from MuJoCo header files in a way
> that is incompatible with editable mode. Attempting to install `dm_control` in
> editable mode will result in import errors like:
>
> ```
> ImportError: cannot import name 'constants' from partially initialized module 'dm_control.mujoco.wrapper.mjbindings' ...
> ```
>
> The solution is to `pip uninstall dm_control` and then reinstall it without
> the `-e` flag.

## Versioning

Starting from version 1.0.0, we adopt semantic versioning.

Prior to version 1.0.0, the `dm_control` Python package was versioned `0.0.N`,
where `N` was an internal revision number that increased by an arbitrary amount
at every single Git commit.

If you want to install an unreleased version of `dm_control` directly from our
repository, you can do so by running `pip install
git+https://github.com/google-deepmind/dm_control.git`.

## Rendering

The MuJoCo Python bindings support three different OpenGL rendering backends:
EGL (headless, hardware-accelerated), GLFW (windowed, hardware-accelerated), and
OSMesa (purely software-based). At least one of these three backends must be
available in order render through `dm_control`.

* Hardware rendering with a windowing system is supported via GLFW and GLEW.
On Linux these can be installed using your distribution's package manager.
For example, on Debian and Ubuntu, this can be done by running `sudo apt-get
install libglfw3 libglew2.0`. Please note that:

- [`dm_control.viewer`] can only be used with GLFW.
- GLFW will not work on headless machines.

* "Headless" hardware rendering (i.e. without a windowing system such as X11)
requires [EXT_platform_device] support in the EGL driver. Recent Nvidia
drivers support this. You will also need GLEW. On Debian and Ubuntu, this
can be installed via `sudo apt-get install libglew2.0`.

* Software rendering requires GLX and OSMesa. On Debian and Ubuntu these can
be installed using `sudo apt-get install libgl1-mesa-glx libosmesa6`.

By default, `dm_control` will attempt to use GLFW first, then EGL, then OSMesa.
You can also specify a particular backend to use by setting the `MUJOCO_GL=`
environment variable to `"glfw"`, `"egl"`, or `"osmesa"`, respectively. When
rendering with EGL, you can also specify which GPU to use for rendering by
setting the environment variable `MUJOCO_EGL_DEVICE_ID=` to the target GPU ID.

## Illustration video

Below is a video montage of solved Control Suite tasks, with reward
visualisation enabled.
## Additional instructions for Homebrew users on macOS

[![Video montage](https://img.youtube.com/vi/rAai4QzcYbs/0.jpg)](https://www.youtube.com/watch?v=rAai4QzcYbs)
1. The above instructions using `pip` should work, provided that you use a
Python interpreter that is installed by Homebrew (rather than the
system-default one).

2. Before running, the `DYLD_LIBRARY_PATH` environment variable needs to be
updated with the path to the GLFW library. This can be done by running
`export DYLD_LIBRARY_PATH=$(brew --prefix)/lib:$DYLD_LIBRARY_PATH`.

[EXT_platform_device]: https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_platform_device.txt
[Releases page on the MuJoCo GitHub repository]: https://github.com/google-deepmind/mujoco/releases
[MuJoCo website]: https://mujoco.org/
[publication]: https://doi.org/10.1016/j.simpa.2020.100022
[`ctypes`]: https://docs.python.org/3/library/ctypes.html
[`dm_control.mjcf`]: dm_control/mjcf/README.md
[`dm_control.mujoco`]: dm_control/mujoco/README.md
[`dm_control.suite`]: dm_control/suite/README.md
[`dm_control.viewer`]: dm_control/viewer/README.md
[`dm_control.locomotion`]: dm_control/locomotion/README.md
[`dm_control.locomotion.soccer`]: dm_control/locomotion/soccer/README.md
109 changes: 109 additions & 0 deletions dm_control/_render/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
# Copyright 2017-2018 The dm_control Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ============================================================================

"""OpenGL context management for rendering MuJoCo scenes.

By default, the `Renderer` class will try to load one of the following rendering
APIs, in descending order of priority: GLFW > EGL > OSMesa.

It is also possible to select a specific backend by setting the `MUJOCO_GL=`
environment variable to 'glfw', 'egl', or 'osmesa'.
"""

import collections
import os

from absl import logging
from dm_control._render import constants

BACKEND = os.environ.get(constants.MUJOCO_GL)


# pylint: disable=g-import-not-at-top
def _import_egl():
from dm_control._render.pyopengl.egl_renderer import EGLContext
return EGLContext


def _import_glfw():
from dm_control._render.glfw_renderer import GLFWContext
return GLFWContext


def _import_osmesa():
from dm_control._render.pyopengl.osmesa_renderer import OSMesaContext
return OSMesaContext


# Import removed.
# pylint: enable=g-import-not-at-top


def _no_renderer():
def no_renderer(*args, **kwargs):
del args, kwargs
raise RuntimeError('No OpenGL rendering backend is available.')
return no_renderer


_ALL_RENDERERS = (
(constants.GLFW, _import_glfw),
(constants.EGL, _import_egl),
(constants.OSMESA, _import_osmesa),
# Option removed.
)

_NO_RENDERER = (
(constants.NO_RENDERER, _no_renderer),
)


if BACKEND is not None:
# If a backend was specified, try importing it and error if unsuccessful.
import_func = None
for names, importer in _ALL_RENDERERS + _NO_RENDERER:
if BACKEND in names:
import_func = importer
BACKEND = names[0] # canonicalize the renderer name
break
if import_func is None:
all_names = set()
for names, _ in _ALL_RENDERERS + _NO_RENDERER:
all_names.update(names)
raise RuntimeError(
'Environment variable {} must be one of {!r}: got {!r}.'
.format(constants.MUJOCO_GL, sorted(all_names), BACKEND))
logging.info('MUJOCO_GL=%s, attempting to import specified OpenGL backend.',
BACKEND)
Renderer = import_func()
else:
logging.info('MUJOCO_GL is not set, so an OpenGL backend will be chosen '
'automatically.')
# Otherwise try importing them in descending order of priority until
# successful.
for names, import_func in _ALL_RENDERERS:
try:
Renderer = import_func()
BACKEND = names[0]
logging.info('Successfully imported OpenGL backend: %s', names[0])
break
except ImportError:
logging.info('Failed to import OpenGL backend: %s', names[0])
if BACKEND is None:
logging.info('No OpenGL backend could be imported. Attempting to create a '
'rendering context will result in a RuntimeError.')
Renderer = _no_renderer()

USING_GPU = BACKEND in constants.EGL + constants.GLFW
Loading