第1章 激光雷达基础:从原理到ROS实战

各位同学,欢迎来到《激光雷达路径规划与避障实战》的第一章。我是你们这门课的老朋友,一个在机器人导航领域摸爬滚打了十来年的工程师。今天咱们不聊虚的,直接切入正题——激光雷达。

你可能会问,为什么第一课就要讲激光雷达?说白了,激光雷达就是机器人的“眼睛”。没有它,路径规划和避障就是盲人摸象。我刚开始做机器人那会儿,用的还是超声波,那体验,啧啧……后来换了激光雷达,整个世界都清晰了。

1.1 激光雷达工作原理:TOF vs 三角测距

激光雷达怎么测距的?其实就两大流派:TOF(飞行时间法)和三角测距法。咱们一个一个说。

1.1.1 TOF(飞行时间法)

TOF的原理特别简单:激光发射器发出一束光,打到物体上反射回来,接收器收到。记下这段时间差,乘以光速,再除以2,就是距离。

公式长这样:

距离 = (光速 × 飞行时间) / 2

嗯,这里要注意:光速是3×10⁸ m/s,时间差通常以纳秒计。所以TOF雷达对计时电路要求极高。我当年调试一个TOF雷达,因为PCB走线长了那么几毫米,测距就偏了十几厘米……后来老老实实重新画板子。

TOF核心特点:

  • 测量范围远:室内外都能用,几十米到上百米
  • 精度高:厘米级甚至毫米级
  • 抗干扰强:不受环境光影响太大
  • 成本高:因为需要高精度计时芯片

1.1.2 三角测距法

三角测距就有点意思了。它利用激光发射点和接收摄像头之间的固定基线,通过几何三角关系算距离。激光打到物体上,在摄像头成像平面上的位置会变化——物体越近,光斑偏移越大。

公式也不复杂:

距离 = (基线长度 × 焦距) / 成像偏移量

你想想看,这个方法的精度跟基线长度和成像分辨率直接挂钩。所以三角测距雷达通常短小精悍,适合室内近距离使用。

我的经验之谈:如果你做室内扫地机器人、服务机器人,三角测距完全够用,性价比高。但要做自动驾驶、户外巡检,老老实实上TOF。我曾经在一个户外项目中硬用三角测距,结果大太阳底下直接“瞎”了——环境光太强,成像点都找不到了。

两种方法对比一下:

对比项 TOF 三角测距
测距原理 光飞行时间 几何三角
测量范围 远(10-100m+) 近(0.1-10m)
精度 高(cm级) 中等(cm-dm级)
环境光影响 小 大
成本 高 低
典型代表 Velodyne、Hesai RPLIDAR、Slamtec

1.2 单线与多线雷达区别

聊完原理,咱们说说线数。单线雷达和多线雷达,名字听着像,但完全是两个物种。

1.2.1 单线激光雷达

单线雷达,就是只有一个激光发射器和一个接收器。它旋转一圈,只能扫出一个平面的点云。说白了,就是在一个二维平面上画轮廓。

  • 优点:结构简单、成本低、数据处理快
  • 缺点:只能感知一个平面,无法获取三维信息
  • 典型应用:室内导航、SLAM建图、避障

我记得刚入行时,用单线雷达做室内SLAM,效果出奇的好。但一遇到斜坡、台阶,它就傻了——因为它只能看到同一高度上的东西。

1.2.2 多线激光雷达

多线雷达,顾名思义,有多个激光发射器(16线、32线、64线甚至128线)。每个发射器对应一个不同的垂直角度,旋转一圈就能扫出一个三维点云。

  • 优点:三维感知、目标识别、地形建模
  • 缺点:贵、数据量大、处理复杂
  • 典型应用:自动驾驶、无人机、户外机器人

避坑指南:我曾经帮一个学生选型,他非要用16线雷达做室内小机器人。结果数据量太大,树莓派直接卡死。后来换成单线雷达,跑得飞起。记住:杀鸡不要用牛刀,选型要匹配场景。

再给个直观对比:

维度 单线雷达 多线雷达
线数 1 16/32/64/128
输出数据 2D点云 3D点云
数据量 小(~10KB/s) 大(~MB/s)
价格 几百~几千 几千~几十万
适用场景 室内导航、SLAM 自动驾驶、3D感知

1.3 ROS驱动安装与点云可视化

理论讲完了,咱们来点实操。这部分我建议你跟着我一步步来,别跳步。

1.3.1 安装ROS驱动

以最常见的RPLIDAR A1为例(单线三角测距雷达),驱动安装其实就几条命令:

# 创建ROS工作空间
mkdir -p ~/lidar_ws/src
cd ~/lidar_ws/src

# 克隆驱动包
git clone https://github.com/Slamtec/rplidar_ros.git

# 编译
cd ~/lidar_ws
catkin_make

# 设置环境变量
echo "source ~/lidar_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

嗯,这里要注意:不同雷达的驱动包不一样。比如思岚的A系列用rplidar_ros,镭神的用lslidar_ros,Velodyne的用velodyne_driver。我建议你先查清楚自己雷达的型号,再找对应的驱动。

我的习惯:每次装新驱动前,我都会先跑一下 ls /dev/ttyUSB* 看看雷达有没有被系统识别。如果没识别,八成是USB转串口驱动没装。别问我怎么知道的……

1.3.2 启动雷达并可视化

驱动装好了,启动雷达:

# 启动RPLIDAR节点
roslaunch rplidar_ros rplidar.launch

# 新开终端,查看话题
rostopic list
# 你应该能看到 /scan 话题

# 可视化点云
rosrun rviz rviz

在RViz中,添加一个LaserScan显示,选择话题为/scan。如果一切正常,你就能看到雷达扫描出来的点云了——一圈一圈的,像雷达屏幕一样。

我第一次在RViz里看到点云时,说实话,挺激动的。那些小点就是机器人眼中的世界。

1.3.3 点云数据解读

点云数据长什么样?咱们看看话题消息结构:

rostopic echo /scan | head -20

输出大概是这样:

header:
  seq: 1234
  stamp:
    secs: 1695000000
    nsecs: 123456789
  frame_id: "laser"
angle_min: -3.14159
angle_max: 3.14159
angle_increment: 0.0174533
time_increment: 0.0001
scan_time: 0.1
range_min: 0.15
range_max: 12.0
ranges: [0.5, 0.52, 0.55, ...]
intensities: [10, 12, 15, ...]

关键字段解释:

  • angle_min/angle_max:扫描角度范围,这里是-π到π(360度)
  • angle_increment:角度分辨率,约1度
  • range_min/range_max:有效测距范围
  • ranges:每个角度对应的距离值
  • intensities:反射强度,可以用来区分不同材质

实战小技巧:如果你发现点云有大量NaN或Inf值,别慌。这通常是雷达没打到物体(超出量程)或者反射太弱。在代码里记得做滤波处理,不然路径规划会出问题。

本章知识体系总览

为了让你对本章内容有个整体把握,我画了一张结构图。你可以把它当作本章的“地图”。

第1章 激光雷达基础 · 知识体系 激光雷达基础 工作原理 单线 vs 多线 ROS驱动与可视化 TOF飞行时间法 三角测距法 单线(2D点云) 多线(3D点云) 驱动安装 RViz可视化 核心要点 • TOF适合远距离、户外;三角测距适合近距离、室内 • 单线雷达做SLAM性价比高;多线雷达做3D感知 • ROS驱动安装后务必检查 /scan 话题是否正常发布

这张图把本章的三个核心模块串起来了。你可以看到,从工作原理到选型对比,再到ROS实战,是一条完整的知识链。后面的章节,我们会在这个基础上,一步步深入路径规划和避障算法。