This section specifies the differences between ROS-1 and ROS-2 so that you can understand what upgrades are targeted in ROS-2. For ease of understanding, they're represented in the following table:
ROS-1 | ROS-2 | |
Platforms |
Continuous Integration for Ubuntu 16.04 Community support: macOS. |
Continuous Integration for Ubuntu 16.04 and 18.04, OS X EL Capitan, and Windows 10. |
OS layers | Linux and macOS. | Linux, macOS, Windows, and RTOS. |
Languages |
C++ 03 Python 2. |
C++ 11, 14, and 17 Python 3.5. |
Build system | catkin. | ament and colcon. |
Environment setup | Here, the build tool generates scripts that would need to be sourced into the environment to use the packages built in the workspace. | Here, the build tool generates package-specific and workspace-specific scripts so that only those specific packages are sourced into the environment for usage. |
Build multiple packages | Multiple packages are built in a single CMake context, hence the possibility of colliding target names. | Isolated builds are supported where each package is built separately. |
Node initiation | Only one node per process. |
Multiple nodes allowed per process. |
Apart from the preceding changes, there are other changes, all of which can be found at http://design.ros2.org/articles/changes.html.
Now that we have covered the fundamentals of ROS-2, let's look at the ROS-2 client libraries.