Rather than updating the existing ROS1 API’s, ROS developers thought it would be best to entirely redo the overall ROS Framework structure in order to address key issues from various users of the ROS framework. Here I will cover some highlights to new features which would feel different to those who have developed in ROS1.
One of the most notable changes overall to ROS is the transition to a Data Distribution Service (DDS) schema of transmitting data. This means that there is no longer a centralized ROS Master (roscore) or Parameter Server in which all Nodes have to register with. Instead, every Node can act on its own accord without a ROS Master.
This feature was a huge appeal to those who use ROS in applications that work with private/confidential data. This allows developers to create secure keys for their Nodes, such that without them the topics/data can not be discovered nor decrypted.
Launch files in ROS1 used to be XML based. Now they are Python based, in which you will need to import the roslaunch python module. Overall though the layout of organizing things into arguments, Nodes, etc, still exists, just now in a Python form.
Bag files also got a slight rework. Functionality pretty much works the same, although now data is saved into SQLite database files. It’s also worth noting that there is now a default ROS2 topic which monitors parameter events, which means you can take parameter change events into account with bag files now.
Although ROS Actions were always a highlighted feature, it always seemed to act as an external library (actionlib). In ROS2, actions now have their own dedicated functionality and terminal commands to help with development.
One of the biggest leaps in terms of usability of ROS by the general public was also making it available for use natively on Windows and MacOS. Although I feel there is still a long way to go to fix all the OS specific ROS2 bugs, it may pay off in the long run of making ROS a much more widely acceptable framework to use by those not familiar with Linux.
ROS2 offers the ROS1 bridge tool in order to allow you to develop new projects in ROS2 without having to compromise on utilizing existing systems you may have developed in ROS1.