MoveIt, the Motion Planning Framework for ROS, has been successfully used in numerous industrial and research applications where complex collision-free robot motions are needed to complete manipulation tasks. In recent months, a great deal of effort has gone into migrating MoveIt into ROS2.
As a result, the new MoveIt2 framework already provides access to many of the core features and functionality available in its predecessor. While some of the very useful setup tools are still a work in progress (mainly the MoveIt setup assistant), I was able to integrate MoveIt2 into the Collaborative Robotic Sanding Application (CRS) to plan trajectories, which were then executed on a Gazebo-simulated UR10 robot arm.
My ROS2 setup involved building the MoveIt2 repository from source as described in github. I then overlaid that colcon workspace on top of my existing CRS application workspace. I also built and ran the simple demo, which worked right out of the gate and was very helpful in helping me understand how to integrate MoveIt2 into my own application.
The C++ integration was very straightforward and only needed the use of two new classes: MoveItCpp and PlanningComponent. In this architecture, MoveItCpp is used to load the robot model, configure the planning pipeline from ROS2 parameters and initialize defaults; then there’s the PlanningComponent class, which is associated to a planning group and is used to setup the motion plan request and call the low-level planner.
Furthermore, the PlanningComponent class has a similar interface to the familiar MoveGroupInterface class from MoveIt. But one of the big changes here is that the methods in the PlanningComponent class aren’t just wrappers to various services and actions provided by the move_group node. Instead, they make direct function calls to the various motion planning capabilities.
I think this is a welcome change, since this architecture will allow creating MoveIt2 planning configuration on the fly that can adapt to varying planning situations that may arise in an application.
On the other hand, the launch/yaml integration wasn’t as clean as many ROS2 concepts are still relatively new to me. To properly configure MoveIt2, it is necessary to load a URDF file as well as a number of parameters residing in several yaml files into your MoveIt2 application. Fortunately, most of the yaml files generated by the MoveIt Setup Assistant from the original MoveIt can be used with just minor modifications and so I ran the Setup Assistant in ROS1 and generated the needed config files.
The ability to assemble ROS2 launch files in python really came in handy here as it allowed me to instantiate a python dictionary from a YAML file and pass its elements as parameters for my ROS2 application. Beyond learning about MoveIt2, going through this exercise showed me how to reuse the same yaml file for initializing parameters in different applications, which I thought was a feature that was no longer available in ROS2.
My overall impression of MoveIt2 was very positive. I feel that the architectural changes aren’t at all disruptive to existing MoveIt developers, and it’ll lead to new interesting ways in which the framework gets used. I sure look forward to the porting of other very useful MoveIt components.
The branch of project that integrates MoveIt2 can be found here and above is a short clip of the planning that I was able to do with it. In this application, the robot has to move the camera to three scan positions. MoveIt2 is used to plan collision-free motions to those positions.
Editor’s Note: This article was republished from the Southwest Research Institute.
About the Author
Jorge Nicho is a Research Engineer at the Southwest Research Institute (SwRI). He graduated with a Master’s degree in Mechanical engineering from the University of Texas at San Antonio in December of 2010. Nicho joined SwRI in 2011 as an engineer for the Manufacturing and Robotics Technologies Department. One of his strengths is intelligent robot motion planning. Nicho has participated in the development of several intelligent robotic systems built with the ROS framework.