ROS2 - ashBabu/Utilities GitHub Wiki

Use one ros2 pkg in another ros2 pkg

Let say the packages are pkg_A and pkg_B and we want to use pkg_B in pkg_A. The project structure of pkg_B is

utils/
├── include/
│   └── utils/
│       └── utils.hpp
|       └── ros2bag_reader.hpp
└── src/
    └── utils/
        └── utils.cpp
        └── ros2bag_reader.cpp

The CMakeLists.txt for pkg_B is as follows

cmake_minimum_required(VERSION 3.8)
project(project_B)

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  add_compile_options(-Wall -Wextra -Wpedantic)
endif()

find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)

include_directories(
  include
)

##########
add_library(utils SHARED src/utils/utils.cpp)
ament_target_dependencies(utils
  "laser_geometry"
  "pcl_ros"
)
target_include_directories(utils PUBLIC                             <--------!
  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
  $<INSTALL_INTERFACE:include>
)
install(DIRECTORY include/                                          <--------!
  DESTINATION include/
)
#########
add_library(ros2bag_reader SHARED 
  src/utils/ros2bag_reader.cpp
)
target_include_directories(ros2bag_reader PUBLIC
  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
  $<INSTALL_INTERFACE:include>
)
ament_target_dependencies(ros2bag_reader
  "rclcpp"
  "rosbag2_cpp"
  "sensor_msgs"
  "rosbag2_transport"
)
install(                                                          <--------!
  TARGETS 
    utils
    ros2bag_reader
  EXPORT utils               
  LIBRARY DESTINATION lib/${PROJECT_NAME}
  ARCHIVE DESTINATION lib/${PROJECT_NAME}
)
#########
add_executable(rosbag_to_video 
  src/utils/video_from_rosbag.cpp
)
ament_target_dependencies(rosbag_to_video
  cv_bridge
  OpenCV
)
target_link_libraries(rosbag_to_video
  ros2bag_reader
  yaml-cpp::yaml-cpp
  ${OpenCV_LIBS}
)

install(TARGETS
  rosbag_to_video 
  DESTINATION lib/${PROJECT_NAME}
)
###############
install(DIRECTORY
  config
  DESTINATION share/${PROJECT_NAME}/
)

ament_export_targets(utils HAS_LIBRARY_TARGET)                           <--------!
ament_export_include_directories(include)                                <--------!
ament_package()

Then in pkg_A, the package.xml needs

<depend>utils</depend>
<depend>ros2bag_reader</depend>

Then the CMakeLists.txt of pkg_A, should have

cmake_minimum_required(VERSION 3.8)
project(project_A)

set (CMAKE_CXX_STANDARD 17)

# find dependencies
find_package(ament_cmake REQUIRED)

find_package(project_B REQUIRED)                                  <--------!

include_directories(
  include
)

add_library(register_pointclouds SHARED 
  src/pointcloud_registration/register_pointclouds.cpp
)
ament_target_dependencies(register_pointclouds
  "pcl_ros"
  "utils"                                                           <--------!
)
target_link_libraries(register_pointclouds 
  ${PCL_LIBRARIES}
)
install(TARGETS
  register_pointclouds
  DESTINATION lib/${PROJECT_NAME}
)

ament_package()

The pkg_B can be included in pkg_A as follows

#include <project_B/utils.hpp>
#include <project_B/ros2bag_reader.hpp>

ROS2 bags to ROS1

First record ros2 bag in sqlite format. The current default format for recording ros2 bag is mcap

  • ros2 bag record --storage sqlite3 -o ros2-rs-okdo1 -a
  • rosbags-convert --src ros2-rs-okdo1 --dst ros2-rs-okdo1/ros1bag.bag

Play ros1 bag in ros2

  • link1, link2
  • pip install rosbags
  • rosbags-convert --src /path/to/ros1bag.bag --dst /path/to/destination/name-of-folder

Some common commands

  • ros2 node list ros2 topic list ros2 service list ros2 action list
  • sudo apt install ~nros-foxy-rqt*
  • Useful resource
  • ros2 run tf2_tools view_frames # this will be saved in the directory that it's running
  • ros2 run tf2_ros tf2_echo base_link sr_link1
  • ros2 topic pub /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}"
  • ros2 topic pub /ap/cmd_vel geometry_msgs/msg/TwistStamped '{header: {frame_id: "map"}, twist: {linear: {x: 0.0, y: 0.0, z: 0.1}}}'
  • ros2 topic echo /ap/cmd_vel geometry_msgs/msg/TwistStamped
  • ros2 topic pub /ap/joy sensor_msgs/Joy '{ header: { frame_id: "3"}, axes: [1.0, 0.0, 0.0, 0.0, 0.0, 0.0], buttons: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}'
  • ROS/ROS2 Navigation
  • Octomap in ROS/ROS2
⚠️ **GitHub.com Fallback** ⚠️