ROS2 - ashBabu/Utilities GitHub Wiki
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>
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
- link1, link2
pip install rosbags
rosbags-convert --src /path/to/ros1bag.bag --dst /path/to/destination/name-of-folder
-
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