Merge pull request #2249 from Balint-H:docs/unity-tutorial
PiperOrigin-RevId: 717294302 Change-Id: Ief98bd6cd4eac448062e331b6737043f12926ad2
This commit is contained in:
+32
-14
@@ -5,20 +5,27 @@ Unity Plug-in
|
|||||||
Introduction
|
Introduction
|
||||||
------------
|
------------
|
||||||
|
|
||||||
The MuJoCo `Unity plug-in <https://github.com/google-deepmind/mujoco/tree/main/unity>`_ allows the Unity Editor and
|
The MuJoCo `Unity plug-in <https://github.com/google-deepmind/mujoco/tree/main/unity>`__ allows the Unity Editor and
|
||||||
runtime to use the MuJoCo physics engine. Users can import MJCF files and edit the models in the Editor. The plug-in
|
runtime to use the MuJoCo physics engine. Users can import MJCF files and edit the models in the Editor. The plug-in
|
||||||
relies on Unity for most aspects -- assets, game logic, simulation time -- but uses MuJoCo to determine how objects
|
relies on Unity for most aspects -- assets, game logic, simulation time -- but uses MuJoCo to determine how objects
|
||||||
move, giving the designer access to MuJoCo's full API.
|
move, giving the designer access to MuJoCo's full API.
|
||||||
|
|
||||||
|
An example project using MuJoCo's Unity plugin in a set of introductory tutorials are also available as a `standalone
|
||||||
|
repository <https://github.com/Balint-H/mj-unity-tutorial>`__.
|
||||||
|
|
||||||
.. _UInstallation:
|
.. _UInstallation:
|
||||||
|
|
||||||
Installation instructions
|
Installation instructions
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
The plug-in directory (available at https://github.com/google-deepmind/mujoco/tree/main/unity) includes a
|
The `plug-in directory <https://github.com/google-deepmind/mujoco/tree/main/unity>`__ includes a
|
||||||
``package.json`` file. Unity's package manager recognizes this file and will import the plug-in's C# codebase to your
|
``package.json`` file. Unity's package manager recognizes this file and will import the plug-in's C# codebase to your
|
||||||
project. In addition, Unity also needs the native MuJoCo library, which can be found in the specific platform archive at
|
project. In addition, Unity also needs the native MuJoCo library, which can be found in the corrsponding `platform
|
||||||
https://github.com/google-deepmind/mujoco/releases.
|
archive <https://github.com/google-deepmind/mujoco/releases>`__. If you wish to simply use the plug-in and not
|
||||||
|
develop it, you should use one of the version-specific stable commits of the repository, identified by git tags. Check
|
||||||
|
out the relevant version of the cloned repository with git (``git checkout 3.X.Y`` where X and Y specify the engine
|
||||||
|
version). Simply using the ``main`` branch of the repository may not be compatible with the most recent release binary
|
||||||
|
of MuJoCo.
|
||||||
|
|
||||||
On Unity version 2020.2 and later, the Package Manager will look for the native library file and copy it to the package
|
On Unity version 2020.2 and later, the Package Manager will look for the native library file and copy it to the package
|
||||||
directory when the package is imported. Alternatively, you can manually copy the native library to the package directory
|
directory when the package is imported. Alternatively, you can manually copy the native library to the package directory
|
||||||
@@ -115,7 +122,7 @@ This design principle has several implications:
|
|||||||
- The layout of MuJoCo components in the GameObject hierarchy determines the layout of the resulting MuJoCo model.
|
- The layout of MuJoCo components in the GameObject hierarchy determines the layout of the resulting MuJoCo model.
|
||||||
Therefore, we adopt a design rule that **every game object must have at most one MuJoCo component**.
|
Therefore, we adopt a design rule that **every game object must have at most one MuJoCo component**.
|
||||||
- We rely on Unity for spatial configuration, which requires vector components to be `swizzled
|
- We rely on Unity for spatial configuration, which requires vector components to be `swizzled
|
||||||
<https://en.wikipedia.org/wiki/Swizzling_(computer_graphics)>`_ since Unity uses left-handed frames with Y as the
|
<https://en.wikipedia.org/wiki/Swizzling_(computer_graphics)>`__ since Unity uses left-handed frames with Y as the
|
||||||
vertical axis, while MuJoCo uses right-handed frames with Z as the vertical axis.
|
vertical axis, while MuJoCo uses right-handed frames with Z as the vertical axis.
|
||||||
- Unity transform scaling affects positions, orientations, and scale of the entire game object subtree. However, MuJoCo
|
- Unity transform scaling affects positions, orientations, and scale of the entire game object subtree. However, MuJoCo
|
||||||
doesn’t support collision of skewed cylinders and capsules (skewed spheres are supported via the ellipsoid primitive).
|
doesn’t support collision of skewed cylinders and capsules (skewed spheres are supported via the ellipsoid primitive).
|
||||||
@@ -145,10 +152,6 @@ effects:
|
|||||||
material assets for geom RGBA specification.
|
material assets for geom RGBA specification.
|
||||||
- It allows the importer to handle :ref:`\<include\> <include>` elements without replicating MuJoCo’s file-system
|
- It allows the importer to handle :ref:`\<include\> <include>` elements without replicating MuJoCo’s file-system
|
||||||
workflow.
|
workflow.
|
||||||
- The current version of MuJoCo generates MJCF files with explicit :ref:`\<inertial\> <body-inertial>` elements, even when
|
|
||||||
the original model uses geoms for implicit definition of the body inertia. If you plan to change geom properties of
|
|
||||||
an imported model, remove these auto-generated ``MjInertial`` components manually. We plan to address this in a
|
|
||||||
future release of MuJoCo.
|
|
||||||
|
|
||||||
In Unity, there is no equivalent to MJCF’s “cascading” :ref:`\<default\> <default>` clauses. Therefore, components in
|
In Unity, there is no equivalent to MJCF’s “cascading” :ref:`\<default\> <default>` clauses. Therefore, components in
|
||||||
Unity reflect the corresponding elements’ state after applying all the relevant default classes, and the class structure
|
Unity reflect the corresponding elements’ state after applying all the relevant default classes, and the class structure
|
||||||
@@ -177,9 +180,10 @@ Scene recreation maintains continuity of physics and state in the following way:
|
|||||||
persisted.
|
persisted.
|
||||||
4. The MuJoCo state (for the joints that persisted) is set from the cache, and Unity transforms are synchronized.
|
4. The MuJoCo state (for the joints that persisted) is set from the cache, and Unity transforms are synchronized.
|
||||||
|
|
||||||
Because the MuJoCo library doesn’t (yet) expose an API for scene editing, adding and removing MuJoCo components causes
|
MuJoCo has functionality for dynamic scene editing (through :ref:`mjSpec`), however, this is not yet
|
||||||
complete scene recreation. This can be expensive for large models or if it happens frequently. We expect this
|
supported in the Unity plugin. Therefore, adding and removing MuJoCo components causes complete scene recreation. This
|
||||||
performance limitation to be lifted in future versions of MuJoCo.
|
can be expensive for large models or if it happens frequently. We intend to lift this performance limitation to be in a
|
||||||
|
future versions of the plugin.
|
||||||
|
|
||||||
Global Settings
|
Global Settings
|
||||||
_______________
|
_______________
|
||||||
@@ -323,12 +327,26 @@ The plug-in allows using arbitrary Unity meshes for MuJoCo collision. At model
|
|||||||
<http://www.qhull.org/>`__ to create a convex hull of the mesh, and uses that for collisions. Currently the computed
|
<http://www.qhull.org/>`__ to create a convex hull of the mesh, and uses that for collisions. Currently the computed
|
||||||
convex hull is not visible in Unity, but we intend to expose it in future versions.
|
convex hull is not visible in Unity, but we intend to expose it in future versions.
|
||||||
|
|
||||||
|
Height fields
|
||||||
|
_____________
|
||||||
|
|
||||||
|
MuJoCo hfields are represented in Unity through terrain gameobjects. This allows the use of the terrain editing tools
|
||||||
|
available in Unity to generate shapes for collisions with MuJoCo. When selecting hfield type in the Unity geom
|
||||||
|
component, the right click context menu provides utility to add the corresponding Unity terrain to the scene. The data
|
||||||
|
from the terrain is dynamically kept in sync with the simulation.
|
||||||
|
|
||||||
|
MuJoCo plugins
|
||||||
|
______________
|
||||||
|
|
||||||
|
The current version of the Unity package does not support loading MJCF scenes that use :ref:`MuJoCo plugins<exPlugin>` such as
|
||||||
|
`elasticity <https://github.com/google-deepmind/mujoco/tree/main/plugin/elasticity#readme>`__ . Adding basic functionality to do this will be part of an upcoming release.
|
||||||
|
|
||||||
Interaction with External Processes
|
Interaction with External Processes
|
||||||
___________________________________
|
___________________________________
|
||||||
|
|
||||||
Roboti’s `MuJoCo plug-in for Unity <https://roboti.us/download.html>`_ steps the simulation in an external Python
|
Roboti’s `MuJoCo plug-in for Unity <https://roboti.us/download.html>`__ steps the simulation in an external Python
|
||||||
process, and uses Unity only for rendering. In contrast, our plug-in relies on Unity to step the simulation. It should
|
process, and uses Unity only for rendering. In contrast, our plug-in relies on Unity to step the simulation. It should
|
||||||
be possible to use our plug-in while an external process "drives" the simulation, for example by setting ``qpos``,
|
be possible to use our plug-in while an external process "drives" the simulation, for example by setting ``qpos``,
|
||||||
calling ``mj_kinematics``, synchronizing the transforms, and then using Unity to render or compute game logic. In order
|
calling ``mj_kinematics``, synchronizing the transforms, and then using Unity to render or compute game logic. In order
|
||||||
to establish communication with an external process, you can use Unity's `ML-Agents
|
to establish communication with an external process, you can use Unity's `ML-Agents
|
||||||
<https://github.com/Unity-Technologies/ml-agents>`_ package.
|
<https://github.com/Unity-Technologies/ml-agents>`__ package.
|
||||||
|
|||||||
Reference in New Issue
Block a user