编写ROS2(C++语言)软件包的步骤

0 简介

介绍编写ROS2(C++语言)软件包的步骤;

0.1 前置条件

参考x.1,和x.2,安装ROS2和编译工具;

1 创建ROS2软件包

以下的指令,创建一个名为mtuav-sns-radar-ros2的ROS2软件包,使用ament_cmake作为构建系统,许可证类型为Apache-2.0,并包含一个名为radar_node的节点;

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
ros2 pkg create --build-type ament_cmake --license Apache-2.0 --node-name radar_node mtuav-sns-radar-ros2

可以通过ros2 pkg create --help,查看初始化ROS2软件包的可用选项:

~$ ros2 pkg create --help
usage: ros2 pkg create [-h] [--package-format {2,3}] [--description DESCRIPTION] [--license LICENSE]
                       [--destination-directory DESTINATION_DIRECTORY] [--build-type {cmake,ament_cmake,ament_python}]
                       [--dependencies DEPENDENCIES [DEPENDENCIES ...]] [--maintainer-email MAINTAINER_EMAIL]
                       [--maintainer-name MAINTAINER_NAME] [--node-name NODE_NAME] [--library-name LIBRARY_NAME]
                       package_name

Create a new ROS 2 package

positional arguments:
  package_name          The package name

options:
  -h, --help            show this help message and exit
  --package-format {2,3}, --package_format {2,3}
                        The package.xml format.
  --description DESCRIPTION
                        The description given in the package.xml
  --license LICENSE     The license attached to this package; this can be an arbitrary string, but a LICENSE file will only be
                        generated if it is one of the supported licenses (pass '?' to get a list)
  --destination-directory DESTINATION_DIRECTORY
                        Directory where to create the package directory
  --build-type {cmake,ament_cmake,ament_python}
                        The build type to process the package with
  --dependencies DEPENDENCIES [DEPENDENCIES ...]
                        list of dependencies
  --maintainer-email MAINTAINER_EMAIL
                        email address of the maintainer of this package
  --maintainer-name MAINTAINER_NAME
                        name of the maintainer of this package
  --node-name NODE_NAME
                        name of the empty executable
  --library-name LIBRARY_NAME
                        name of the empty library

2 编译ROS2软件包

# Release版本
(cd ~/ros2_ws/ && colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release --packages-select mtuav-sns-radar-ros2)

# Debug版本
(cd ~/ros2_ws/ && colcon build --cmake-args -DCMAKE_BUILD_TYPE=Debug --packages-select mtuav-sns-radar-ros2)

3 使用gdb调试debug版本的程序

3.1 启动gdb时传入参数

gdb --args ~/ros2_ws/build/mtuav-sns-radar-ros2/radar_node /dev/ttyUSB0 921600

3.2 启动gdb后设置参数

gdb ~/ros2_ws/build/mtuav-sns-radar-ros2/radar_node
# 之后在gdb中设置参数
set args /dev/ttyUSB0 921600

image

4 添加依赖

4.1 创建ROS2软件包时,指定依赖

如果你在创建ROS2软件包时,已经知道需要的全部或者部分依赖,那么,你可以通过传入--dependencies选项指定依赖:

ros2 pkg create --dependencies rclcpp sensor_msgs message_filters --build-type ament_cmake --license Apache-2.0 --node-name radar_node mtuav-sns-radar-ros2

和不指定依赖相比,文件变动如下:

mtuav-sns-radar-ros2/package.xml

image

mtuav-sns-radar-ros2/CMakeLists.txt

image

4.2 创建ROS2软件包后,添加依赖

参考4.1,以添加pcl_msgs为例;

在package.xml,增加: pcl_msgs

在CMakeLists.txt,增加:

find_package(pcl_msgs REQUIRED)
# ...
# 在定义radar_node之后
ament_target_dependencies(radar_node
  # ...
  "pcl_msgs"
)

这种使用ament_target_dependencies添加第三方依赖的方式,并不局限于ROS2的功能软件包,对于能够使用find_package找到的第三方依赖,都可以尝试使用;

可以认为ament_target_dependencies实现了以下功能:

find_package(PCL REQUIRED common)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})

ament_target_dependencies是官方推荐的方式去添加依赖项。它将使依赖项的库、头文件和自身的依赖项被正常找到;

x 参考文档

x.1 Ubuntu (Debian packages) — ROS 2 Documentation: Iron documentation

x.2 Using colcon to build packages — ROS 2 Documentation: Iron documentation

x.3 Creating a package — ROS 2 Documentation: Iron documentation

x.4 ROS 2编写包并用colcon编译_ros2 cmakelists 规则-CSDN博客

x.5 详细分析一个ROS2 CMakeLists.txt文件 | 首飞的博客

x.6 How do I run a program with commandline arguments using GDB within a Bash script? - Stack Overflow

x.7 io features related to pcap will be disabled · Issue #2651 · PointCloudLibrary/pcl

posted on 2024-04-17 12:57  _bob  阅读(93)  评论(0编辑  收藏  举报