跳到主要内容

docs 11 激光雷达和在 ROS2 中发布雷达话题

在 Windows 中测试雷达

本节介绍在 Windows 中对雷达进行简单的测试,由于 ROS2 的使用相对来说比较复杂,所以提供了这个简单的方法来对雷达进行测试。

测试准备

测试方法

用 PH2.0 转 ZH1.5 4PIN 连接线连接 LD19 和驱动板,注意接口为 LiDAR(在 I2C 旁边),再用 USB 线连接驱动板和电脑,注意 USB 线接入驱动板的接口是旁边写有 LiDAR 的 Type-C 接口。

打开软件选择 LDS19,选择端口,点击开始,出现图像和数字,移动 LD19 图像和数字改变,测试通过。

在选择 COM 口时,如果不清楚要选择哪个 COM,可以记住在连接 USB 线前的 COM 口,然后再连接 USB 线,新出现的 COM 口就是雷达的 COM 口,如果连接 USB 线后没有反应,则需要安装 CP210x USB 转 UART 驱动

LD19 测试软件选择端口

LD19 测试软件开始测试

LD19 测试软件显示雷达数据

连接树莓派上位机

General Driver for Robots 板载一个激光雷达接口,用于连接激光雷达,并将激光雷达的串口数据通过 USB 发送给上位机。

默认配合 LD19 激光雷达 使用。如果需要连接其它雷达,可能需要重新制作连接线来适配其它雷达的 TX、5V 和 GND 引脚。

General Driver for Robots 默认本身并不会读取雷达数据,作用相当于激光雷达的转接板(串口转 USB),如果使用 General Driver for Robots 上面的 ESP32 模组来处理雷达信息,连接板子上面的 RX 和 LIDAR 引脚(位于扩展排针的最边缘),此 RX 引脚与 ESP32 模组的 UART0 的 RX 相连,LIDAR 引脚与激光雷达的 TX 相连,需要注意,处理雷达信息需要消耗比较多的算力会影响到 ESP32 作为机器人下位机的其它功能,所以本教程主要介绍如何在上位机上使用激光雷达的数据。

激光雷达与上位机连接示例如下:

LD19 通过 General Driver for Robots 连接树莓派

在 ROS2 中发布雷达话题

本章节使用树莓派作为上位机,可以在 Ubuntu 虚拟机中使用该方法来使用激光雷达,这里基于 ROS2,当作示例来演示如何在 ROS2 中发布雷达话题。

树莓派需要运行官方的系统,如果不知道如何制作镜像,可以参考 树莓派教程 来烧写镜像到 SD 卡中。

1. 安装 ROS2

树莓派开机,可以使用显示器也可以使用无头模式,安装 ROS2 系统和相关软件和工具,可以参考 ROS2 官方文档

确保 Ubuntu Universe repository 是可用的:

sudo apt install software-properties-common
sudo add-apt-repository universe

将 ROS2 GPG Key 添加到 apt:

sudo apt update && sudo apt install curl
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key

将软件库地址添加到 sources:

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] \
http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" \
| sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

更新软件库:

sudo apt update

软件更新:

sudo apt update

安装 ROS2、RViz、例子和教程:

sudo apt install ros-humble-desktop

安装开发工具,编译器和其它用以构建 ROS 包的工具:

sudo apt install ros-dev-tools

将 sourcing 添加到 shell,以后每次启动都不需要再手动设置环境:

cecho "source /opt/ros/humble/setup.bash" >> ~/.bashrc

关闭当前终端并重新打开,然后继续后续操作。

2. 下载并编译雷达包

1. 获取雷达的 ROS2 功能包

cd ~

mkdir -p ldlidar_ros2_ws/src

cd ldlidar_ros2_ws/src

git clone https://github.com/ldrobotSensorTeam/ldlidar_stl_ros2.git
# 或者
git clone https://gitee.com/ldrobotSensorTeam/ldlidar_stl_ros2.git

2. 系统设置

  • 第一步,通过板载串口或者 USB 转串口模块(例如 cp2102 模块)的方式使雷达连接到系统主板。

  • 第二步,设置雷达在系统中挂载的串口设备-x 权限(以 /dev/ttyUSB0 为例)

    • 实际使用时,根据雷达在系统中的实际挂载情况来设置,可以使用 ls -l /dev 命令查看。
    cd ~/ldlidar_ros2_ws

    sudo chmod 777 /dev/ttyUSB0
  • 第三步,修改 launch/目录下雷达产品型号对应的 lanuch 文件中的 port_name 值,以 ld06.launch.py/dev/ttyUSB0 为例,如下所示。

#!/usr/bin/env python3
from launch import LaunchDescription
from launch_ros.actions import Node

'''
Parameter Description:
---
- Set laser scan directon:
1. Set counterclockwise, example: {'laser_scan_dir': True}
2. Set clockwise, example: {'laser_scan_dir': False}
- Angle crop setting, Mask data within the set angle range:
1. Enable angle crop fuction:
1.1. enable angle crop, example: {'enable_angle_crop_func': True}
1.2. disable angle crop, example: {'enable_angle_crop_func': False}
2. Angle cropping interval setting:
- The distance and intensity data within the set angle range will be set to 0.
- angle >= 'angle_crop_min' and angle <= 'angle_crop_max' which is [angle_crop_min, angle_crop_max], unit is degress.
example:
{'angle_crop_min': 135.0}
{'angle_crop_max': 225.0}
which is [135.0, 225.0], angle unit is degress.
'''

def generate_launch_description():
# LDROBOT LiDAR publisher node
ldlidar_node = Node(
package='ldlidar_stl_ros2',
executable='ldlidar_stl_ros2_node',
name='LD06',
output='screen',
parameters=[
{'product_name': 'LDLiDAR_LD06'},
{'topic_name': 'scan'},
{'frame_id': 'base_laser'},
{'port_name': '/dev/ttyUSB0'},
{'port_baudrate': 230400},
{'laser_scan_dir': True},
{'enable_angle_crop_func': False},
{'angle_crop_min': 135.0},
{'angle_crop_max': 225.0}
]
)

# base_link to base_laser tf node
base_link_to_laser_tf_node = Node(
package='tf2_ros',
executable='static_transform_publisher',
name='base_link_to_base_laser_ld06',
arguments=['0','0','0.18','0','0','0','base_link','base_laser']
)

# Define LaunchDescription variable
ld = LaunchDescription()

ld.add_action(ldlidar_node)
ld.add_action(base_link_to_laser_tf_node)

return ld

3. 编译方法

使用 colcon 编译。

cd ~/ldlidar_ros2_ws

colcon build

4. 运行方法

4.1. 设置功能包环境变量
  • 编译完成后需要将编译生成的相关文件加入环境变量,便于 ROS 环境可以识别,执行命令如下所示,该命令是临时给终端加入环境变量,意味着您如果重新打开新的终端,也需要重新执行如下命令。(建议打开一个新的终端,通常来说编译和运行需要在不同的终端窗口执行,否则可能会有问题)

    cd ~/ldlidar_ros2_ws

    source install/setup.bash
  • 为了重新打开终端后,永久不用执行上述添加环境变量的命令,可以进行如下操作。

    echo source ~/ldlidar_ros2_ws/install/setup.bash >> ~/.bashrc

    source ~/.bashrc
4.2. 启动激光雷达节点
  • 产品型号为 LDROBOT LiDAR LD19
    • 启动 ld19 lidar node(如果没有连接显示器,到这一步就已经完成启动雷达节点和发布话题了):

      ros2 launch ldlidar_stl_ros2 ld19.launch.py
    • 启动 ld19 lidar node 并显示激光数据在 Rviz2 上(如果有连接显示器,可以通过这个方法再 rviz2 中显示扫描结果):

      ros2 launch ldlidar_stl_ros2 viewer_ld19.launch.py

5. 测试

代码支持 ubuntu20.04 ROS2 foxy 版本及以上测试,使用 rviz2 可视化。

  • 新打开一个终端 (Ctrl + Alt + T), 运行命令: rviz2,并通过 Rviz2 工具打开 readme 文件所在目录的 rviz2 文件夹下面的 ldlidar.rviz 文件

    rviz2