Skip to content
  • Home
  • About the Blog
  • About the Author
  • Sitemap

Abdur Rosyid's Blog

Just a few notes on mechanical engineering and robotics

MoveIt: Concept

July 20, 2021 by Abdur Rosyid

MoveIt (previously MoveIt!) is a very popular, and probably the most popular, ROS package for motion planning, particularly motion planning of manipulators. Although MoveIt is commonly used for manipulators, it is sometimes used for other robot types, including unmanned aerial vehicles (UAV). For example:

  • https://www.wilselby.com/research/ros-integration/3d-mapping-navigation/ and https://github.com/wilselby/ROS_quadrotor_simulator
  • https://github.com/tahsinkose/hector-moveit
  • https://www.theconstructsim.com/robotigniteacademy_learnros-3/ros-courses-library/ros-courses-programming-drones-ros/

The concept of MoveIt can be found here: https://moveit.ros.org/documentation/concepts/. The main purpose of MoveIt is actually motion planning with obstacle avoidance. The obstacle avoidance here includes avoiding collision with the robot’s body (self-collision) and avoiding collision with the environment.

The high-level architecture of MoveIt can be seen in the following figure:

Picture Credit: https://moveit.ros.org/documentation/concepts/

It can be seen in the figure that the main components of MoveIt are the following:

  • Interface to the user
  • move_group node
  • Interface to the robot controller: which uses JointTrajcetoryAction (FollowJointTrajectoryAction).
  • Planning Scene: which describes the current state of the robot and the environment representation (occupancy map of the environment).
  • Motion Planner and Collision Checking: which plans the feasible planning trajectory (not just path) subject to collision avoidance.

Other ROS packages required by MoveIt (but not part of MoveIt) include:

  • URDF package: which serves as the base of kinematics, tf/tf2, and SRDF. In fact, the URDF package is included in the ROS core packages.
  • Kinematics package (not shown in the figure above): which solves the kinematics of the robot. The KDL kinematics package is included by default.
  • ros_control and friends (particularly the joint_state_controller and joint_trajectory_action controller in ros_controller).
  • Occupancy map package
  • Motion planner package

How the “move_group” node is using the other components can be seen in the following figure:

Picture Credit: https://moveit.ros.org/documentation/concepts/

It can be seen that the “move_group” node can interface with the user by using any of the following user interfaces:

  • move_group_interface (written in C++)
  • moveit_commander (written in Python)
  • RViz GUI (Motion Planning pallet)

The “move_group” node interacts with the user interface through:

  • actions (indicated by the red lines on the left side)
  • services (indicated by the blue lines on the left side)
  • user setup inputs (indicated by the green lines on the left side)

The “move_group” node is configured based on:

  • robot URDF (taken from the “robot_description” parameter)
  • robot SRDF
  • configuration files

Both the SRDF and configuration files can be conveniently created by using the GUI-based MoveIt Setup Assistant. This GUI-based tool will create the robot SRDF and the required configuration files. After the completion of MoveIt Setup Assistant, one may still need to modify some of the configuration files created by the tool.

The “move_group” node interacts with ros_control through JointTrajectoryAction (one of the controllers in ros_controller). It gets the joints’ states from the joint_state_controller, gets the transforms of all the robot links from the robot_state_publisher and tf/tf2, and gives the control commands to the joint_trajectory_action controller.

The “move_group” node also receive the information about the information through topics published by sensors, such as 3D pointcloud topic and depth image topic. The 3D perception in MoveIt is handled by the “occupancy map monitor” which uses Octomap to maintain the occupancy map of the environment. Currently, MoveIt has two inbuilt occupancy map updaters to handle the following data inputs:

  • Point clouds: handled by the point cloud occupancy map updater plugin
  • Depth images: handled by the depth image occupancy map updater plugin

Modularity in MoveIt

MoveIt is extensible due to its modular architecture which incorporate the inclusion of plugins, such as:

  • The kinematics in MoveIt can be handled by a kinematics plugin. The default kinematics solver in Moveit is KDL. But one can also use other kinematics solvers, such as IKFast and TRAC-IK.
  • The motion planner in MoveIt can be handled by a motion planner plugin. The default motion planner in MoveIt is OMPL. However, one may also use other planners such as the Pilz industrial motion planner, CHOMP, and STOMP.

The official documentation on the plugin interfaces can be found here: https://moveit.ros.org/documentation/plugins/

Official MoveIt Webpages

  • Main page: https://moveit.ros.org/
  • MoveIt tutorial for ROS Melodic: http://docs.ros.org/en/melodic/api/moveit_tutorials/html/index.html

Post navigation

Previous Post:

ROS Controllers for Mobile Robot

Next Post:

How to Use MoveIt

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Categories

  • STEM 101
  • Robotics
  • Kinematics
  • Dynamics
  • Control
  • Robot Operating System (ROS)
  • Robot Operating System (ROS2)
  • Software Development
  • Mechanics of Materials
  • Finite Element Analysis
  • Fluid Mechanics
  • Thermodynamics

Recent Posts

  • Pull Request on Github
  • Basics of Git and Github
  • Conda vs Docker
  • A Conda Cheat Sheet
  • Installing NVIDIA GPU Driver on Ubuntu

Archives

  • June 2025
  • July 2021
  • June 2021
  • March 2021
  • September 2020
  • April 2020
  • January 2015
  • April 2014
  • March 2014
  • March 2012
  • February 2012
  • June 2011
  • March 2008
© 2026 Abdur Rosyid's Blog | WordPress Theme by Superbthemes