Skip to content

romainreignier/share_ros1_ros2_lib_demo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Share a library between ROS 1 and ROS 2 projects

ROS 1 and ROS 2 are using different build systems (catkin and colcon) that are not compatible.

So a catkin library cannot be directly built with colcon and vice-versa.

For a C++ library that is ROS agnostic, the solution seems to create a pure CMake library that can be used in both build system.

In this demo repository, there is:

  • A common lib_foo library
  • A bar_ros1 ROS 1 node
  • A bar_ros2 ROS 2 node

To allow to have ROS 1 and ROS 2 packages in the same workspace, the catkin_FOUND and ament_cmake_FOUND variables are checked in the CMakeLists.txt.

In the common library, it is possible to differentiate separate dependencies for ROS 1 and ROS 2 by using packege.xml version 3 and the condition attribute (see REP-149):

<buildtool_depend condition="$ROS_VERSION == 1">catkin</buildtool_depend>
<buildtool_depend condition="$ROS_VERSION == 2">ament_cmake</buildtool_depend>

Test the demo

With ROS 1 (using catkin-tools):

git clone https://github.com/romainreignier/share_ros1_ros2_lib_demo.git
cd share_ros1_ros2_lib_demo
source /opt/ros/melodic/setup.bash
catkin init
catkin build
source devel/setup.bash
rosrun bar_ros1 bar_ros1_node
catkin clean

With ROS 2:

Create a new terminal window to get a clean environment and not mix ROS 1 and ROS 2

source /opt/ros/dashing/setup.bash
colcon build
source install/setup.bash
ros2 run bar_ros2 bar_ros2_node

Acknowledgements

Thanks to @gavanderhoorn for the help.

Based on the work of @Levi-Armstrong on opw_kinematics

About

A demo to show how to share a C++ library between ROS 1 and ROS 2

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published