This is the first of a series of articles that will describe Acutronic Robotics' learning experience and contributions with MoveIt 2 and ROS 2 communities. Our work is happening at https://github.com/AcutronicRobotics/moveit2 and we're contributing directly to the official MoveIt 2 repository through pull requests.
The MoveIt! motion planning framework is an open source software for motion planning, manipulation, 3D perception, kinematics, control and navigation. It's built on top of the Robot Operating System (ROS) and altogether, according to its maintainers, remains the third most popular package in the ROS world. MoveIt! provides an easy-to-use platform for developing advanced robotics applications, evaluating new robot designs, and building integrated robotics products for industrial, commercial, R&D and other domains.
From ROS to ROS 2
As MoveIt! evolves beyond R&D environments and starts getting integrated into more and more commercial and industrial products, it's only natural to look for improvements and seek alignment with groups attempting to use ROS on industrial and commercial environments.
Over the last years some groups have extended ROS to obtain different degrees of determinism (e.g. [1]), however these attempts ended up with complex and use-case specific architectures that were never fully adopted by industry. As described at [2], ROS started in November 2007 as the development environment for the research-oriented Willow Garage PR2 robot. Due to its research nature, ROS did not considered many aspects relevant for industry. One of such was real-time compliance. ROS was never meant to guarantee deterministic responses, critical for an improved motion planning experience.
Why MoveIt 2?
With complete understanding of these limitations, around 2014, Open Robotics started designing a new version of ROS called ROS 2. Such version aimed to deliver upgraded features when compared to ROS 1 and was officially released the 8th of December, 2017. ROS 2 has been extended enabling support for teams of multiple robots (or robot modules), small embedded platforms or primitives to enable real-time robotic systems.
As one of the companies leading the transition to ROS 2 and as the company behind MARA, the first modular robotic arm that runs ROS 2 natively, the use of MoveIt! seemed natural to us. While MARA can be operated today with MoveIt! (see our documentation here) through the ros1_bridge
ROS package, it was always our desire to provide the best experience. And this brought us to ask ourselves: Why MoveIt 2?
Our motivation:
The use of ros1_bridge introduces additional latencies and technical complexity when operating MoveIt! over ROS 2. While this can be fine tuned, doing so is technically complex. Moreover, it generally requires to have a powerful-enough computer and, even in the best case, unnecessary latencies (due to the layers of abstraction) appear in the overall control chain.
MoveIt! on top of ROS 2, a standardized industry-grade motion planning framework. ROS 2 delivers upgraded features when compared to ROS 1. It has been extended including support for teams of multiple robots (or robot modules), small embedded platforms or primitives to enable real-time robotic systems. We can particularly highlight the following characteristics:
- Industry support: Supported by companies from all around the world that collaborate with open source contributions to make ROS 2 the de facto standard for robot application development.
- Designed for production: ROS 2 was built from the ground up to be industry-grade and used in production environments, including high reliability and safety critical systems.
- Multi-platform: first class support for Linux, Windows, and macOS plus a tiered support model that allows for seamless ports to new platforms, such as real-time and embedded OSs.
- No vendor lock-in: Layered architecture which allows for the co-existence of both open source and proprietary solutions while facilitating the comparison of different technologies for each layer.
- Multi-domain: ROS 2 is ready for use across a wide array of robotics applications, across several domains. From indoor to outdoor, home to automotive, underwater to space, and consumer to industrial.
- Built on open standards: The default communications method in ROS 2 uses the industry standards DDS and RTPS, which are already widely deployed in a variety of industrial applications, from factories to aerospace.
- Shorter time to market: ROS 2 provides the robotics tools, libraries, and capabilities needed to develop applications, allowing developers to focus on the work that is important for business.
- Permissive open source license: ROS 2 code is licensed under Apache 2.0 License, with ported ROS 1 code under the 3-clause (or “new”) BSD License. Both licenses allow permissive use of the software, without implications on the user’s intellectual property.
- Global community: Over 10+ years the ROS project has produced a vast ecosystem of software for robotics by nurturing a global community of hundreds of thousands of developers and users who contribute to and improve that software. ROS 2 is developed by and for that community, who will be its stewards into the future.
Fully distributed ROS 2-native control chain. Our H-ROS technology allows to build robots whose components are all ROS 2-native. It's only natural that we aim for a motion planning framework that can similarly also operate in a ROS 2-native manner.
Real-time distributed motion planning: Open Robotics performed an initial analysis [3,4] of the capabilities one could achieve with ROS 2 in terms of determinism. These articles already highlight the importance of the computer architecture, the underlying operating system or the communication middleware used. All these aspects need to be taken into account when designing a real-time distributed system.
This matter was further investigated by our group at [6,7,8,9] where we evaluated and characterized the ROS 2 responses on a (an embedded) system while researching and optimizing the underlying communications middleware (DDS), the Linux Networking Stack, the Linux operating system or the base link layer towards the creation of a firm-real-time capable distributed system based in ROS 2. Focused purely on ROS 2 layers (ROS Client Library (rcl), ROS middleware layer (rmw), etc.), Maruyama et al. [5] conducted an experimental study aimed at comparing the performance of ROS and a preliminary version of ROS 2, under different types of Data Distribution Services (DDSs).
More recently, member of Apex.AI wrote a short introduction[10] summarizing optimizations required in the ROS 2 layers such as the use of safe data types, split memory allocation in init and runtime phases, remove all blocking calls or implement real-time safe log output handler among others.
All these optimizations are pre-requirements to obtain real-time distributed motion planning over ROS 2. It's also required to optimize the motion planning framework itself. This will and end-to-end real-time motion planning experience. MoveIt 2 is the place where to do so. The adoption of ROS 2 facilitates the real-time optimization of the underlying layers and paves the path towards real-time motion planners. Preliminary work (though not connected to ROS 2 just yet) is available at https://github.com/ros-planning/moveit/pull/1360 (discussion).
MoveIt 2 migration will accelerate ROS 2 adoption. According to some of its core maintainers, "many companies and R&D teams report they will not migrate to ROS 2 until the MoveIt 2 port is complete". Looking at past releases of ROS, this was similarly true when Kinetic was released; months later, when MoveIt! was ready for Kinetic, adoption picked up dramatically.
MoveIt 2.0 development has begun!
Motivated by the technical and strategical benefits, our team announced a few weeks ago our commitment to port MoveIt! to ROS 2. We plan to deliver to the community a first working prototype of MoveIt 2 with MARA, as announced at discourse, and have partnered with PickNik to benefit from their expertise in motion planning.
Our work is happening at https://github.com/AcutronicRobotics/moveit2 and we're contributing directly to the official MoveIt 2 repository (https://github.com/ros-planning/moveit2) through pull requests. In barely a few weeks, the repository has about 60 starts and active involvement from members of the MoveIt maintainers group. We encourage everyone to jump in and contribute to MoveIt 2.
Acknowledgements
We'd like to credit our partners at PickNik for their support in the process. Similarly, we'd like to thank William Woodall, Dirk Thomas, Tully Foote or Robert Haschke for their insights and contributions in this first phase of the project.
Note
The unofficial MoveIt 2 logos are the result of https://github.com/AcutronicRobotics/moveit2/issues/33. We've made them available for everyone.
References
- [1] Wei, H., Shao, Z., Huang, Z., Chen, R., Guan, Y., Tan, J., & Shao, Z. (2016). RT-ROS: A real-time ROS architecture on multi-core processors. Future generation computer systems, 56, 171-178.
- [2] Gerkey, B., Why ROS 2.0? Retrieved from http://design.ros2.org/articles/why_ros2.html
- [3] Kay, J., Introduction to Real-time Systems. Retrieved from http://design.ros2.org/articles/realtime_background.html
- [4] Kay, J., Proposal for Implementation of Real-time Systems in ROS 2. Retrieved from http://design.ros2.org/articles/realtime_proposal.html
- [5] Maruyama, Y., Kato, S., & Azumi, T. (2016, October). Exploring the performance of ROS2. In Proceedings of the 13th International Conference on Embedded Software (p. 5). ACM.
- [6] Gutiérrez, C. S. V., Juan, L. U. S., Ugarte, I. Z., Goenaga, I. M., Kirschgens, L. A., & Vilches, V. M. (2018). Time Synchronization in modular collaborative robots. arXiv preprint arXiv:1809.07295.
- [7] Gutiérrez, C. S. V., Juan, L. U. S., Ugarte, I. Z., & Vilches, V. M. (2018). Real-time Linux communications: an evaluation of the Linux communication stack for real-time robotic applications. arXiv preprint arXiv:1808.10821.
- [8] Gutiérrez, C. S. V., Juan, L. U. S., Ugarte, I. Z., & Vilches, V. M. (2018). Towards a distributed and real-time framework for robots: Evaluation of ROS 2.0 communications for real-time robotic applications. arXiv preprint arXiv:1809.02595.
- [9] Gutiérrez, C. S. V., Juan, L. U. S., Ugarte, I. Z., Goenaga, I. M., Kirschgens, L. A., & Vilches, V. M. (2018). Time Synchronization in modular collaborative robots. arXiv preprint arXiv:1809.07295.
- [10] Pangercic, D., ROS 2 and Real-Time, Retrieved from https://gitlab.com/AutowareAuto/AutowareAuto/issues/65.
- [12] http://github.com/acutronicrobotics/moveit2
- [13] https://github.com/ros-planning/moveit2