教程十一 激光雷达和在ROS2中发布雷达话题
各模块使用教程
- 序章 安装Arduino IDE
- 教程一 带编码器电机控制例程一
- 教程二 带编码器电机控制例程二
- 教程三 带编码器电机控制例程三
- 教程四 无编码器电机控制例程
- 教程五 ST3215总线舵机控制例程
- 教程六 PWM舵机控制例程
- 教程七 IMU数据读取例程
- 教程八 SD卡读取例程
- 教程九 INA219电压电流监测例程
- 教程十 OLED屏幕控制例程
- 教程十一 激光雷达和在ROS2中发布雷达话题
- General Driver for Robots 主页
- UGV01 主页
在Windows中对雷达进行简单测试
第一章节为在Windows中对雷达进行简单的测试,由于ROS2的使用相对来说比较复杂,所以我们提供了这个简单的方法来对雷达进行测试。
测试软件准备
测试硬件准备
- General Driver for Robots
- LD19激光雷达(包含里面的PH2.0 4P转ZH1.5 4P连接线)
- USB线type A公口转Type C公口
测试方法
用PH2.0转ZH1.5 4PIN连接线连接LD19和驱动板,注意接口为LiDAR(在IIC旁边),再用USB线连接驱动板和电脑,注意USB线接入驱动板的接口是旁边写有LiDAR的Type-C接口。
打开软件选择LDS19,选择端口,点击开始,出现图像和数字,移动LD19图像和数字改变,测试通过。
在选择COM口时,如果你不清楚要选择哪个COM,可以记住在连接USB线前的COM口,然后再连接USB线,新出现的COM口就是雷达的COM口,如果连接USB线后没有反应,则需要安装CP2102驱动: 下载地址
树莓派上位机的雷达连接
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作为机器人下位机的其它功能,所以本教程主要介绍如何在上位机上使用激光雷达的数据。
激光雷达与上位机连接示例如下:
在ROS2中发布雷达话题
本章节使用树莓派作为上位机,你也可以在Ubuntu虚拟机中使用该方法来使用激光雷达,我们这里基于ROS2,当作示例来演示如何在ROS2中发布雷达话题。
树莓派需要运行官方的系统,如果你不知道如何制作镜像,可以参考这篇教程来烧写镜像到SD卡中。
安装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 sudo curl -sSL
将软件库地址添加到sources:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu/ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http
更新软件库:
sudo apt update
软件更新:
sudo apt upgrade
安装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
关闭掉当前的终端窗口,开启一个新的,再进行后续的教程。
下载并编译雷达包
0. 获取雷达的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
1.系统设置
- 第一步,通过板载串口或者USB转串口模块(例如,cp2102模块)的方式使雷达连接到你的系统主板.
- 第二步,设置雷达在系统中挂载的串口设备-x权限(以/dev/ttyUSB0为例)
- 实际使用时,根据雷达在你的系统中的实际挂载情况来设置,可以使用ls -l /dev命令查看.
1 cd ~/ldlidar_ros2_ws 2 3 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
2. 编译方法
使用colcon编译.
1 cd ~/ldlidar_ros2_ws 2 3 colcon build
3. 运行方法
3.1. 设置功能包环境变量
- 编译完成后需要将编译生成的相关文件加入环境变量,便于 ROS 环境可以识别, 执行命令如下所示, 该命令是临时给终端加入环境变量,意味着您如果重新打开新的终端,也需要重新执行如下命令.(建议打开一个新的终端,通常来说编译和运行需要在不同的终端窗口执行,否则可能会有问题)
1 cd ~/ldlidar_ros2_ws 2 3 source install/setup.bash
- 为了重新打开终端后,永久不用执行上述添加环境变量的命令,可以进行如下操作.
1 echo source ~/ldlidar_ros2_ws/install/setup.bash >> ~/.bashrc 2 3 source ~/.bashrc
3.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
4.测试
代码支持ubuntu20.04 ROS2 foxy版本及以上测试,使用rviz2可视化。
- 新打开一个终端 (Ctrl + Alt + T),运行命令:
rviz2,并通过Rviz2工具打开readme文件所在目录的rviz2文件夹下面的ldlidar.rviz文件
rviz2