Need help with moveit_tutorials?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

308 Stars 591 Forks BSD 3-Clause "New" or "Revised" License 454 Commits 73 Opened issues


A sphinx-based centralized documentation repo for MoveIt

Services available


Need anything else?

Contributors list

MoveIt Tutorials

MoveIt 1 Live tutorials

These are the tutorials for MoveIt 1, for MoveIt 2 see MoveIt 2 Tutorials

This is the primary documentation for the MoveIt project. We strongly encourage you to help improve MoveIt's documentation. Please consider reading the guidelines below for writing the best documentation and tutorials. However, if you are uncomfortable with any of the approaches, simply adding documentation text to your pull requests is better than nothing.

These tutorials use the reStructuredText format commonly used in the Sphinx "Python Documentation Generator". This unfortunately differs from the common Markdown format, but its advantage is that it supports embedding code directly from source files for inline code tutorials.

All content in this repository is open source and released under the BSD License v3. Each individual source code file should contain a copy of the license.

This repository is currently built automatically by two systems. Github Actions builds the documentation for Noetic, and ROS Build Farm builds the documentation for older versions:


  • indigo-devel
    usage is discouraged
  • kinetic-devel
  • melodic-devel
  • master
    latest, changes should target this branch

Build Locally

If you want to test the tutorials by generating the html pages locally on your machine, you can use the

script. Run in the root of the moveit_tutorials package:
export ROS_DISTRO=kinetic # 16.04
export ROS_DISTRO=melodic # 18.04
export ROS_DISTRO=noetic  # 20.04

source /opt/ros/$ROS_DISTRO/setup.bash ./

The local website

should automatically open in your web browser.

ROS Build Farm Deployment

For deploying documentation changes to the web, Section 3 of rosdoc_lite wiki says that "rosdoc_lite is automatically run for packages in repositories that have rosinstall files listed in the rosdistro repository." This is done about once every 24 hours, overnight.


We rely on the community to keep these tutorials up to date and bug free. If you find an issue with the tutorials please open an issue on GitHub or open a PR with proposed changes.

Formatting and Style

Code Formatting

  • These tutorials use the same style guidelines as the MoveIt project. When modifying or adding to these tutorials, it is required that code is auto formatted using clang-format. To check and apply our style guidelines we use pre-commit.
  • Tutorials should exemplify best coding practices. If a contribution wouldn't pass review in the MoveIt project, then it shouldn't pass review in the tutorials.
  • Relevant code should be included and explained using the
    .. tutorial-formatter::
  • Irrelevant code should be excluded from the generated html using the
    , and
  • Whenever possible, links should be created using the
    dictionary defined in
  • All demo code should be runnable from within the
  • Python code should be run using


  • Each tutorial should be focused on teaching the user one feature or interface within MoveIt.
  • Tutorials should flow from show to tell with videos and demos at the beginning followed by explanations.
  • New tutorials should match the formatting, style and flow of existing tutorials whenever possible.


pre-commit is a tool that is used in

to check and apply style guidelines automatically. To install pre-commit into your system:
pip3 install pre-commit

In you catkin workspace, under

directory you can install the git hooks like this:
cd $CATKIN_WS/src/moveit_tutorials && pre-commit install

With this pre-commit will automatically run and check a list of styling including clang-format, end of files and trailing whitespaces whenever you run

git commit
. To run pre-commit any time other than
git commit
you can use the following command:
cd $CATKIN_WS/src/moveit_tutorials && pre-commit run -a

Directory Structure

  • Each tutorial should live in its own subdirectory within the
    ./doc/ <>
  • Add your tutorial to
    in the root directory.
  • Tutorials should use the following directory structure omitting unnecessary files and subdirectories:
└── /
    ├── _tutorial.rst
    ├── CMakeLists.txt
    ├── package.xml
    ├── images/
    │   └── _.png
    ├── include/
    │   └── /
    │       └── .h                      # Any custom C++ library header files
    ├── launch/
    │   └── _tutorial.launch
    ├── src/
    │   ├── _tutorial.cpp                # Main C++ executable
    │   ├── .cpp                        # Custom C++ library source files
    │   └── /
    │       ├──
    │       ├──             # Main Python executable
    │       └── .py                     # Custom Python libraries
    └── test/                                           # Ideally tutorials have their own integration tests
        ├── _tutorial.test               # Launch file for tests
        ├──            # Python tests for tutorial
        └── _tutorial_test.cpp           # C++ tests for tutorial

Including Images and Videos


The standard way to include an image in reStructuredText is

.. image:: filename.png
   :width: 700px

This assumes that

is in the same folder as the source
file. Images linked in this way will automatically be copied to the appropriate folder in the build.

External Documentation

Do not include animated gifs as the file format leads to very large files. Use a video format like

and see the section on local video below.

YouTube and other External Video

You can embed video with raw html, like in this example from the Pick and Place Tutorial. ``` .. raw:: html

This includes [Youtube's suggested embed html](

Local Video

To embed a video that is included in this repository, you also will use raw html, like this example from the Quickstart in RViz tutorial.

.. raw:: html

Note that the video file is in the `_static` folder instead of the same folder.

External Documentation on <video> tag

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.