4. 激光雷达驱动接入:从原理到可视化

各位同学,欢迎来到第四章。今天我们来聊聊机器人感知中一个非常关键的传感器——激光雷达。说实话,激光雷达是我个人觉得最“性感”的传感器之一。它不像摄像头那样受光照影响大,也不像超声波那样精度有限。它直接给你一堆精确的距离点,干净利落。

这一章,我会带你从工作原理开始,一步步把激光雷达跑起来,最后在RViz2里看到那漂亮的点云。嗯,我们开始吧。

4.1 激光雷达工作原理:它到底是怎么“看”世界的?

激光雷达,英文叫LiDAR(Light Detection And Ranging)。说白了,就是“激光测距与探测”。它的核心原理其实很简单:发射一束激光,打到物体上反射回来,通过计算时间差或相位差,就能知道物体有多远。

你想想看,这就像你对着山谷喊一声,听到回声的时间越长,山谷就越远。激光雷达只是把“声音”换成了“激光”,而且速度快得多,精度高得多。

常见的激光雷达有两种测距方式:

  • TOF(飞行时间法):直接测量激光发射和返回的时间差。精度高,抗干扰能力强,但成本也高。我在项目中用过一款TOF雷达,在强光下依然表现稳定。
  • 三角测距法:激光发射后,用摄像头捕捉反射光斑的位置,通过几何三角关系计算距离。成本低,但近距离精度好,远距离会下降。RPLIDAR和YDLIDAR的入门款基本都是这种。

不管是哪种方式,雷达内部都有一个电机带动激光头旋转。每转一圈,就扫描出周围360度的一圈数据。这些数据点组合起来,就是所谓的“点云”。

核心概念:激光雷达输出的不是图像,而是一系列带有角度和距离信息的点。每个点可以表示为 (角度, 距离) 或 (x, y, z) 坐标。

下面这张图,帮你快速理解激光雷达的数据流:

激光雷达数据流 物理扫描 电机旋转 + 激光发射/接收 原始数据 角度 + 距离 (极坐标) 驱动节点 解析 & 发布 ROS2 话题 /scan sensor_msgs/LaserScan RViz2 可视化

4.2 常见激光雷达驱动:RPLIDAR 与 YDLIDAR

市面上消费级激光雷达,最主流的就是思岚科技的RPLIDAR系列和星网宇达的YDLIDAR系列。这两家我都用过,各有特点。

特性 RPLIDAR (如 A1/A2/A3) YDLIDAR (如 X4/G4/TG15)
测距方式 三角测距 (A1/A2), TOF (A3/S1) 三角测距 (X4/G4), TOF (TG系列)
最大测距 6m~40m 不等 8m~25m 不等
采样频率 典型 4000~8000 次/秒 典型 3000~5000 次/秒
ROS2 支持 官方有 ROS2 分支,社区活跃 官方有 ROS2 驱动,文档清晰
个人感受 生态好,资料多,入门首选 性价比高,抗干扰能力不错

我的建议:如果你是第一次接触激光雷达,我个人推荐从RPLIDAR A1或A2开始。原因很简单——遇到问题,网上随便一搜就有答案。我曾经带过一个学生,用YDLIDAR X4折腾了两天没搞定,换成RPLIDAR A1后半小时就跑起来了。不是说YDLIDAR不好,而是RPLIDAR的社区资源确实更丰富。

4.3 驱动节点启动:让雷达转起来

好,理论说完了,我们来动手。这里以RPLIDAR A1为例,在ROS2 Humble下操作。YDLIDAR的步骤几乎一样,只是包名不同。

4.3.1 安装驱动

首先,你需要把雷达的USB线插到电脑上。然后打开终端,安装驱动包:

# 安装 RPLIDAR ROS2 驱动
sudo apt install ros-humble-rplidar-ros

# 或者从源码编译(如果你喜欢最新版)
cd ~/ros2_ws/src
git clone https://github.com/Slamtec/rplidar_ros.git
cd ~/ros2_ws
colcon build --packages-select rplidar_ros
source install/setup.bash

注意:安装完成后,记得检查一下USB设备的权限。我曾经遇到过雷达插上后没反应,折腾了半天才发现是权限问题。执行以下命令给权限:

sudo chmod 666 /dev/ttyUSB0

如果你不想每次都手动改,可以把用户加到dialout组里:sudo usermod -a -G dialout $USER,然后注销重新登录。

4.3.2 启动驱动节点

驱动安装好,权限也搞定了,接下来就是启动节点。ROS2里启动一个激光雷达驱动,通常只需要一行命令:

ros2 launch rplidar_ros rplidar.launch.py

如果一切正常,你会看到终端里不断刷出雷达的数据信息。这时候,你可以打开另一个终端,看看话题是否发布成功:

ros2 topic list
# 你应该能看到 /scan 这个话题

ros2 topic echo /scan --once
# 这会打印一帧雷达数据,你会看到一堆角度和距离值

嗯,看到数据了,说明雷达已经在工作了。但光看数字太枯燥了,对吧?我们把它可视化出来。

4.4 扫描数据可视化:RViz2 里看点云

RViz2是ROS2里最常用的可视化工具。把雷达数据在RViz2里显示出来,是调试传感器最直观的方式。

4.4.1 启动 RViz2

确保雷达驱动节点已经在运行,然后新开一个终端:

rviz2

RViz2的界面会弹出来。第一次打开是空白的,我们需要手动添加显示组件。

4.4.2 添加 LaserScan 显示

操作步骤如下:

  1. 在RViz2界面左下角,点击 Add 按钮。
  2. 在弹出的对话框里,选择 By topic 标签页。
  3. 找到 /scan 话题,选中 LaserScan,点击 OK。

就这么简单。你应该立刻看到RViz2的中央视图中出现了一圈红色的点,那就是你的激光雷达扫描到的环境轮廓。

调试小技巧:如果你看到的点云是乱糟糟的一团,或者位置不对,先检查一下雷达的安装方向。我遇到过好几次,雷达装反了,导致点云和实际环境对不上。另外,RViz2里的 Fixed Frame 要设置为 laser_frame 或 base_scan,具体看你的雷达驱动里定义的frame_id。

4.4.3 调整显示效果

RViz2里还可以调整点云的颜色、大小、透明度等。在左侧的 Displays 面板里,展开 LaserScan,你可以:

  • 修改 Color:比如改成绿色或蓝色,更护眼。
  • 调整 Size (m):点的大小,默认0.03,可以改大一点方便观察。
  • 勾选 Auto Size:让RViz2自动根据距离调整点的大小。

我个人习惯把颜色设为渐变模式——距离近的偏红,远的偏蓝。这样一眼就能看出哪些物体离机器人近,哪些远。

避坑指南:我曾经在调试一款TOF雷达时,发现点云里总有一些“鬼影”——明明前面是空的,却显示有障碍物。后来排查发现,是雷达的玻璃罩上有灰尘,导致激光发生了散射。所以,如果你的点云出现异常,先擦擦雷达的“眼睛”。

4.5 本章小结

这一章,我们从激光雷达的工作原理讲起,了解了TOF和三角测距的区别。然后对比了RPLIDAR和YDLIDAR两款主流雷达的特点。接着,我们亲手安装了驱动,启动了节点,最后在RViz2里看到了实时的点云数据。

说实话,第一次在RViz2里看到自己雷达的点云时,我还是挺兴奋的。那种“机器人的眼睛被我点亮了”的感觉,很难用语言形容。希望你也能体会到这种乐趣。

好了,雷达已经转起来了,数据也看到了。下一章,我们会继续深入,聊聊如何对激光雷达数据进行处理和应用。不过那是后话了,先把今天的内容消化掉。