第2章:激光雷达基础
各位同学好,我是你们的机器人导航课讲师。今天我们来聊聊激光雷达——这个在机器人感知系统中堪称「眼睛」的关键传感器。
说实话,我最早接触激光雷达是在2018年做AGV项目的时候。那时候市面上能选的国产雷达还不多,价格也贵。现在不一样了,几百块钱就能买到不错的入门款。嗯,技术发展确实快。
2.1 激光雷达工作原理
激光雷达的核心任务就一个:测距。但怎么测,这里头有讲究。目前主流的有两种方法:TOF法和三角法。
2.1.1 TOF(飞行时间法)
TOF的原理特别直白——发射一束激光,等它打到物体上反射回来,记录这段时间差。光速是已知的,距离 = 光速 × 时间 / 2。
我打个比方:你对着山谷喊一声,听回声的时间就能估算距离。TOF就是干这个的,只不过用的是激光。
TOF的优势:
- 测量距离远,室内外都能用
- 精度高,误差通常在厘米级
- 受物体颜色影响小
但TOF也有短板。它需要精密的计时电路,成本相对高。另外,在强光环境下,太阳光里的红外成分会干扰测量。我去年做一个户外巡检项目时就吃过这个亏——大中午的,雷达数据直接飘了。
2.1.2 三角法
三角法的思路不一样。它用摄像头接收反射回来的激光光斑,通过光斑在成像平面上的位置偏移,结合激光器和摄像头的几何关系,用三角公式算出距离。
说白了,就是利用「视差」来测距。你想想看,物体离得近,光斑偏移就大;离得远,偏移就小。
个人经验:三角法雷达在短距离(0.1-6米)内精度很高,甚至能做到毫米级。但超过8米,精度就断崖式下降。所以它特别适合室内扫地机器人这类场景。
我曾经帮朋友调试一台三角法雷达,发现它测白色墙壁和黑色地毯的结果差了将近2厘米。原因很简单——黑色物体吸光,反射回来的光斑太弱,算法算不准。嗯,这是三角法的先天局限。
2.1.3 两种方法对比
| 对比项 | TOF法 | 三角法 |
|---|---|---|
| 测距范围 | 0.1-40米+ | 0.1-8米 |
| 精度 | 厘米级 | 毫米级(短距) |
| 抗环境光 | 一般 | 较弱 |
| 成本 | 较高 | 较低 |
| 典型应用 | 自动驾驶、户外导航 | 室内扫地机、服务机器人 |
2.2 常见型号与选型建议
市面上消费级激光雷达,绕不开两个品牌:思岚(RPLIDAR)和镭神(YDLIDAR)。我两个都用过,说说我的感受。
2.2.1 RPLIDAR系列
思岚的A系列是经典款。A1是入门,A2是主力,A3是高端。我个人最常用的是A2M8,性价比确实不错。
- RPLIDAR A1:三角法,6米范围,8000次/秒采样。适合预算有限的入门项目
- RPLIDAR A2M8:三角法,8米范围,16000次/秒。我目前的主力雷达
- RPLIDAR A3:TOF,25米范围,户外可用。适合需要室外导航的场景
避坑指南:我曾经在一个项目中选了A1做AGV导航,结果发现6米范围根本不够用——AGV速度稍快,转弯时雷达扫不到前方障碍物。后来换了A2M8才解决问题。选型时一定要留足余量。
2.2.2 YDLIDAR系列
镭神的产品线也很丰富。G系列主打性价比,X系列主打高性能。
- YDLIDAR G4:三角法,10米范围,采样率可调。价格比RPLIDAR A2便宜
- YDLIDAR X4:三角法,8米范围,360度扫描。适合做教学平台
- YDLIDAR TG15:TOF,15米范围,抗光能力强
我个人觉得,如果预算有限,YDLIDAR G4是个不错的选择。它的采样率虽然不如A2,但胜在便宜,做原型验证完全够用。
2.2.3 选型决策树
我一般按这个逻辑选雷达:
- 先看场景:室内还是室外?室外必须上TOF
- 再看距离:机器人最大速度 × 2 作为最小测距要求
- 最后看预算:500以内选三角法,1000以上考虑TOF
2.3 ROS2驱动安装与测试
好,理论说完了,咱们来点实际的。怎么让激光雷达在ROS2里跑起来?
2.3.1 安装驱动
以RPLIDAR为例,官方提供了ROS2驱动包。安装很简单:
# 创建工作空间
mkdir -p ~/lidar_ws/src
cd ~/lidar_ws/src
# 克隆驱动
git clone https://github.com/Slamtec/rplidar_ros.git
# 编译
cd ~/lidar_ws
colcon build --packages-select rplidar_ros
# 配置环境
source install/setup.bash
YDLIDAR的驱动也类似:
git clone https://github.com/YDLIDAR/ydlidar_ros2_driver.git
colcon build --packages-select ydlidar_ros2_driver
小技巧:我习惯把雷达的USB设备权限提前配好,不然每次都要sudo。执行 sudo chmod 666 /dev/ttyUSB0 或者写个udev规则,一劳永逸。
2.3.2 启动雷达
驱动装好后,启动雷达节点:
# RPLIDAR A2
ros2 launch rplidar_ros rplidar_a2m8_launch.py
# YDLIDAR G4
ros2 launch ydlidar_ros2_driver ydlidar_launch.py
启动后,用 ros2 topic list 应该能看到 /scan 话题。这就是雷达数据。
2.3.3 可视化测试
光看数据不够直观,咱们用RViz2看看:
ros2 run rviz2 rviz2
在RViz2里添加一个 LaserScan 显示,Topic选 /scan。如果一切正常,你会看到一圈红色的点云——那就是雷达扫出来的环境轮廓。
我第一次看到这个画面时还挺激动的。你想想看,一个旋转的小东西,就能把整个房间的轮廓画出来,确实神奇。
常见问题:如果RViz2里看不到点云,先检查雷达的USB线是否插牢。我遇到过好几次,线松了导致数据断断续续。另外,确认一下雷达的波特率设置——RPLIDAR A2默认是115200,YDLIDAR G4是512000,别搞混了。
2.4 本章知识体系
下面这张图总结了本章的核心逻辑,我画成了SVG,方便你理解:
这张图把本章内容串起来了。你从「激光雷达」出发,先理解两种工作原理,再根据场景选型,最后动手装驱动做测试。每一步都有坑,但每一步也都有方法。
好了,这一章就到这里。记住:雷达是机器人的眼睛,选对了、配好了,导航就成功了一半。
可可精品资料库