一、课程导论:激光雷达路径规划概述

大家好,欢迎来到《激光雷达实时路径规划算法实战》。我是这门课的主讲,一个在机器人行业摸爬滚打了十来年的老兵。

先聊聊为什么开这门课。我见过太多同学,手里拿着激光雷达,跑着开源SLAM,但一到让机器人自己走起来就卡壳。路径规划这块,说白了就是“怎么走”的问题。但“怎么走”这三个字背后,藏着传感器噪声、动态障碍、实时性要求这些硬骨头。

我个人习惯把路径规划比作开车。你有了地图(SLAM建图),知道了自己在哪(定位),接下来就是找一条路到目的地。但这条路不是随便画的——你得避开坑洼、绕开堵车、还得保证不撞到行人。激光雷达就是你的“眼睛”,实时告诉周围有什么。

1.1 激光雷达路径规划是什么

激光雷达路径规划,简单讲就是:利用激光雷达的点云数据,实时计算出一条从起点到终点的无碰撞路径。

它和视觉路径规划最大的区别在哪?激光雷达直接给你三维空间的距离信息,不需要像摄像头那样去“猜”深度。你想想看,一个点云数据扔过来,每个点都带着精确的(x,y,z)坐标,这比从图像里算深度要靠谱得多。

我在项目中遇到过一件事:用视觉SLAM的AGV在仓库里跑,阳光从窗户照进来,地面反光导致深度估计直接崩了,车差点撞上货架。换成激光雷达后,这种问题再没出现过。嗯,这就是激光雷达的硬实力。

核心要点:激光雷达路径规划 = 实时感知 + 无碰撞路径搜索 + 运动控制指令生成。三者缺一不可。

1.2 应用场景:从自动驾驶到扫地机器人

激光雷达路径规划的应用场景,比你想象的更广。我按“环境复杂度”和“实时性要求”两个维度,整理了一张表:

应用场景 环境复杂度 实时性要求 典型传感器 我的经验
自动驾驶(L4级) 极高(城市道路、高速) 10-50ms 多线激光雷达(64/128线) 动态障碍物预测是关键,我踩过“只做反应式规划”的坑
AGV/AMR(工业物流) 中等(仓库、工厂) 100-200ms 单线/多线激光雷达 人车混行场景最头疼,我建议加装安全触边
扫地机器人 低-中(家庭、办公室) 200-500ms 单线激光雷达(LDS) 低矮障碍物(拖鞋、电线)是老大难
无人机/巡检机器人 高(室外、复杂地形) 50-100ms 固态激光雷达 三维空间规划比二维复杂一个量级

你看,不同场景对实时性的要求差了一个数量级。自动驾驶要求10-50ms做出决策,扫地机器人可以放宽到500ms。这直接决定了你选什么算法——是A*、Dijkstra,还是RRT*、Hybrid A*。

自动驾驶

这是最“卷”的场景。车辆以60km/h行驶,每秒跑16.7米。你想想看,如果路径规划延迟100ms,车已经冲出去1.67米了。所以自动驾驶必须用预测+规划联合优化的方法。我曾经在高速场景测试过纯反应式规划,结果一个急弯差点没转过来——从那以后,我再也不敢轻视预测模块。

AGV与AMR

工业场景的特点是“重复性高,但容错率低”。AGV每天在固定路线上跑几百趟,但一旦撞到人就是大事故。我建议在AGV上同时部署全局规划(静态地图)和局部规划(实时避障)两层。全局规划用A*找最优路径,局部规划用DWA(动态窗口法)处理突发障碍。

避坑指南:我曾经在AGV项目里只用了全局规划,结果一个临时堆放的纸箱让车卡了半小时。后来加了局部规划,问题才解决。记住:静态地图永远赶不上动态变化。

扫地机器人

这个场景看似简单,其实坑很多。家庭环境里,拖鞋、电线、宠物都是“隐形杀手”。单线激光雷达只能扫到一个平面,低矮物体经常漏掉。我见过一个扫地机把充电线卷进去,差点起火。所以现在高端扫地机都开始用3D结构光+激光雷达融合的方案。

1.3 课程目标与学习路径

这门课的目标很明确:让你从零搭建一套可用的激光雷达实时路径规划系统。不是只讲理论,而是带着你一行一行写代码。

我设计了30章的内容,分成四个阶段:

  1. 基础篇(第1-8章):激光雷达原理、点云处理、坐标系变换、占据栅格地图。这些是地基,打不牢后面全白搭。
  2. 核心算法篇(第9-18章):A*、Dijkstra、RRT、RRT*、DWA、TEB、MPC。每个算法我都会给完整的C++实现,并对比它们的优劣。
  3. 实战篇(第19-25章):ROS2集成、多传感器融合、动态避障、路径平滑。这部分我会分享我在项目里踩过的坑和解决方案。
  4. 进阶篇(第26-30章):学习型规划(模仿学习、强化学习)、多机器人协同、高性能优化(CUDA加速)。

学习路径我建议这样走:

  • 如果你刚入门:从基础篇开始,把A*和DWA吃透。这两个算法能解决80%的常见问题。
  • 如果你有基础:直接跳到核心算法篇,重点看RRT*和MPC。这两个是工业级项目的标配。
  • 如果你想搞研究:进阶篇的学习型规划值得深挖,但前提是前面的算法你都手写过一遍。

重要提醒:不要只调库!不要只调库!不要只调库!我见过太多人用ROS的nav2调参调了一周,最后连A*的启发函数是什么都不知道。这门课要求你手写核心算法,只有亲手写过,你才知道哪里会出bug。

1.4 知识体系总览

下面这张图,是我对这门课知识体系的总结。你可以把它当作学习地图:

激光雷达实时路径规划知识体系 激光雷达实时路径规划知识体系 激光雷达点云输入 点云预处理与滤波 占据栅格地图构建 全局路径规划 A* / Dijkstra / RRT* 局部路径规划 DWA / TEB / MPC 全局+局部路径融合 运动控制指令输出 输入层 预处理层 地图层 规划层 融合层 输出层

这张图展示了从激光雷达点云输入到最终运动控制指令输出的完整流程。你会发现,路径规划不是孤立的模块,它和预处理、地图构建、全局/局部规划紧密耦合。任何一个环节出问题,机器人都可能“撞墙”。

1.5 你需要准备什么

在开始之前,我建议你准备好以下工具和环境:

  • 编程语言:C++17(主)、Python3.8+(辅助可视化)
  • 操作系统:Ubuntu 20.04 或 22.04
  • 依赖库:PCL 1.12+、Eigen 3.3+、OpenCV 4.5+
  • 仿真环境:Gazebo + ROS2 Humble(可选,但强烈推荐)
  • 硬件:一台带独显的电脑(CPU i5以上,内存16G+)

我的建议:如果你没有激光雷达硬件,完全可以用仿真数据跑通所有算法。Gazebo里模拟的激光雷达数据,和真实数据在算法层面没有本质区别。等算法调通了,再上真机测试。

好了,第一章就到这里。记住:路径规划不是玄学,是数学和工程的结合。接下来的29章,我会带着你一步步把这张知识体系图变成可运行的代码。准备好了吗?我们开始吧。