如何在 ROS2 中构建和运行

概述

在 ROS2 环境下使用雷达驱动,需要安装 ROS2 相关依赖库。

  • Ubuntu 16.04 - 不支持

  • Ubuntu 18.04 - ROS2 Eloquent desktop

  • Ubuntu 20.04 - ROS2 Foxy desktop

  • Ubuntu 22.04 - ROS2 Humble desktop

安装方法请参考 https://index.ros.org/doc/ros2/Installation/Eloquent/Linux-Install-Debians/

请不要在一台电脑上同时安装 ROS 和 ROS2,以避免可能的版本冲突,和手工安装其他库(如 Yaml)的麻烦。

安装依赖

安装 Yaml(必需)

版本号: >= v0.5.2

若已安装 ROS desktop-full, 可跳过

安装方法如下:

$ sudo apt-get update
$ sudo apt-get install -y libyaml-cpp-dev

安装 libpcap(必需)

版本号: >= v1.7.4

安装方法如下:

$ sudo apt-get install -y  libpcap-dev

基于 ROS2-colcon 编译

(1) 打开工程内的 CMakeLists.txt 文件,将文件顶部的变量 COMPILE_METHOD 改为 COLCON

#=======================================
# Compile setup (ORIGINAL,CATKIN,COLCON)
#=======================================
set(COMPILE_METHOD COLCON)

(2) 将 aglidar_sdk 工程目录下的 package_ros2.xml 文件重命名为 package.xml

(3) 新建一个文件夹作为工作空间,然后再新建一个名为 src 的文件夹,将 SDK 工程放入 src 文件夹内。或者在 clone 的时候进行重命名,例如:

$ mkdir Asensing_LiDAR_ROS && cd Asensing_LiDAR_ROS # 工作空间
$ git clone git@gitlab.ag.com:fusionposition/software/lidar/lidar_sdk/asensing_lidar_ros2.git src

(4) 返回工作空间目录,执行以下命令即可编译、运行。如果使用 .zsh,将第二行替换为 source install/setup.zsh

$ source /opt/ros/humble/setup.bash
$ colcon build
$ source install/setup.bash
$ ros2 launch aglidar_sdk start.py

此时,会启动 Rviz,如果正确连接 LiDAR 或者提供预先录制好的数据文件,将会看到点云,如下图所示。

../../_images/ros2-rviz-test.png

(5) 若需要使用深度图,重新打开一个命令行窗口,执行以下命令即可编译、运行该节点。

$ source install/setup.bash
$ ros2 run depth_make depth_make

提示:若 colcon build 时提示 CMake Error at CMakeLists.txt:45(if),执行 source /opt/ros/humble/setup.bash 即可。

另外,不同 ROS2 版本 start.py 的格式可能不同,请使用对应版本的 start.py。如 ROS2 Elequent,请使用 elequent_start.py。

FAQs

(1)使用 colcon build 编译 SDK 时出现如“ fatal error: ros/package.h: 没有那个文件或目录”的错误,怎么解决?

这个错误通常是由于你的系统同时安装了 ROS1 和 ROS2 导致的,ros/package.h 是 ROS1 特有的文件,在 ROS2 中找不到。因为目前 CMake 是通过查找文件的方式来判断当前系统是否安装了 ROS 或 ROS2,后续将修复该问题。

如果你使用旧版本的 SDK,可以通过修改 CMakeLists.txt 文件的方式来解决,具体来说,打开 aglidar_sdk/CMakeLists.txt 文件,找到第 81 行(附近)的 add_definitions(-DROS_FOUND),在前面加上 # 符将其注释掉即可。

#add_definitions(-DROS_FOUND)