/mujoco-simulink-blockset

Blocks for accessing MuJoCo physics engine within Simulink

Primary LanguageC++OtherNOASSERTION

Simulink Blockset for MuJoCo Simulator

This repository provides a Simulink® C-MEX S-Function block interface to the MuJoCo™ physics engine.

View <File Exchange Title> on File Exchange

Useful for,

  1. Robot simulation (mobile, biomimetics, grippers, robotic arm)
  2. Development of autonomous algorithms
  3. Camera (RGB, Depth) rendering

Installation Instructions

MathWorks® Products (https://www.mathworks.com)

  • MATLAB® (required)
  • Simulink® (required)
  • Computer Vision Toolbox™ (optional)
  • Robotics System Toolbox™ (optional)
  • Control System Toolbox™ (optional)
  • Simulink® Coder™ (optional)

MATLAB R2022b or newer is recommended. Install MATLAB with the above products and then proceed to set up MuJoCo blocks.

Note - You may need to rebuild the S-Function if you are using an older release of MATLAB.

Simulink Blockset for MuJoCo

  • (Linux users) Install GLFW library from Ubuntu terminal

    sudo apt update && sudo apt install libglfw3 libglfw3-dev

  • Download the latest release of this repository (MATLAB Toolbox - MLTBX file)

  • Open MATLAB R2022b or higher and install the downloaded MATLAB Toolbox file

  • Run the setup function packaged in the toolbox. MuJoCo (and GLFW for Windows users) library is downloaded and added to MATLAB path.

    >>mujoco_interface_setup

Usage

>>mj_gettingStarted

Open the example model and run it in normal simulation mode.

If the installation is successful, you should see a pendulum model running in a separate window and camera streams displayed by Video Viewer blocks (Computer Vision Toolbox).

A dedicated graphics card is recommended for the best performance. Disable Video Viewer blocks if the model runs slow

(Linux users) - In case MATLAB crashes, it may be due to a glibc bug. Please follow this bug report for a workaround!

Blocks

mjLib

MuJoCo Plant block steps MuJoCo engine, renders visualization window & camera, sets actuator data, and outputs sensor readings

It takes an XML (MJCF) as the main block parameter. It auto-detects the inputs, sensors, and cameras from XML to configure the block ports and sample time.

Inputs can either be a Simulink Bus or a vector.

Sensors are output as a Simulink Bus.

RGB and Depth buffers from cameras are output as vectors. These can be decoded to Simulink image/matrix using the RGB and Depth Parser blocks.

getting_started_clip1.mp4
getting_started_clip2.mp4

Build Instructions (optional)

Steps for building/rebuilding the C-MEX S-Function code. These instructions are only required if you are cloning the repository instead of downloading the release.

Windows:

  • Install one of the following C++ Compiler

  • Clone this repository

    $ git clone git@github.com:mathworks-robotics/mujoco-simulink-blockset.git

  • Launch MATLAB and open the repository folder

    • >> install
  • Open tools/

    • Open setupBuild.m. In case you are using MinGW compiler, edit the file and set selectedCompilerWin to "MINGW".
    • >> setupBuild
    • >> mex -setup c++
    • >> build

Ubuntu

  • Install the tools required for compiling the S-Function

    $ sudo apt update && sudo apt install build-essential git libglfw3 libglfw3-dev

  • Clone this repository

    $ git clone git@github.com:mathworks-robotics/mujoco-simulink-blockset.git

  • Launch MATLAB and open the repository folder. Run the install.m script.

    • >> install
  • Open tools/ and run the following commands in MATLAB command Windows

    • >> setupBuild
    • >> mex -setup c++
    • >> build

Tips and Tricks

  • Code generation - The MuJoCo Plant block supports code generation (Simulink Coder) and monitor and tune for host target. Refer to mj_monitorTune.slx for more info.
  • Performance improvement - In case you want to reduce the mask initialization overhead, you can directly use the underlying S-Function. Select the MuJoCo Plant block and Ctrl+U to look under the subsystem mask. Make sure to call the initialization functions (whenever the MJCF XML model changes).

License

The license is available in the license.txt file within this repository.

Acknowledgments

Cite this work as,

Manoj Velmurugan. Simulink Blockset for MuJoCo Simulator (https://github.com/mathworks-robotics/mujoco-simulink-blockset), GitHub. Retrieved date.

Refer to the MuJoCo repository for guidelines on citing the MuJoCo physics engine.

The sample codes and API documentation provided for MuJoCo and GLFW were used as reference material during development.

MuJoCo and GLFW libraries are dynamically linked against the S-Function and are required for running this blockset.

UR5e MJCF XML from MuJoCo Menagerie was used for creating demo videos.

Community Support

You can post your queries in the discussions section.

Copyright 2023 The MathWorks, Inc.