2. 环境感知基础

各位同学,今天我们来聊聊环境感知。这是避障规划的第一步,也是整个系统的“眼睛”。

我个人习惯把环境感知比作“盲人摸象”——你摸到的每一块信息,都得拼起来才能知道大象长什么样。传感器就是你的手,而地图就是你对大象的理解。

传感器概览:三种主流方案

做避障规划,传感器选型是第一个坑。我见过不少团队,上来就堆一堆传感器,结果数据融合搞到崩溃。其实,搞清楚每种传感器的脾气,比盲目堆料重要得多。

1. 激光雷达(LiDAR)

激光雷达,说白了就是“用光来测距”。它发射激光束,打到物体上反射回来,通过时间差算出距离。

优点:

  • 精度高,毫米级误差
  • 不受光照影响,晚上也能用
  • 直接输出3D点云,处理起来直观

缺点:

  • 贵!好的机械式LiDAR动辄几万块
  • 怕雨雪雾,恶劣天气性能下降明显
  • 固态LiDAR虽然便宜,但视场角有限
我的经验: 做室内AGV(自动导引车)时,我建议用单线激光雷达就够了。别一上来就上64线,成本高不说,算力也扛不住。室外无人车,至少16线起步。

2. 摄像头

摄像头是“最像人眼”的传感器。它不直接测距,但能提供丰富的语义信息——比如识别出前面是个行人,还是个纸箱。

优点:

  • 便宜,一个工业相机几百块
  • 信息量大,能识别颜色、纹理、文字
  • 适合做目标检测、车道线识别

缺点:

  • 受光照影响大,逆光、暗光下表现差
  • 单目测距不准,需要双目或结构光辅助
  • 计算量大,跑个YOLO就得占不少算力
避坑指南: 我曾经在一个项目中只用摄像头做避障,结果傍晚阳光斜射,地面反光导致误检率飙升。后来加了激光雷达做融合,才稳住。记住:摄像头怕“眩光”,激光雷达怕“雨雾”,两者互补才是王道。

3. 超声波

超声波传感器,原理跟蝙蝠一样——发射声波,听回声。它很便宜,但精度有限。

优点:

  • 成本极低,几块钱一个
  • 对透明物体(如玻璃)有效,激光雷达反而测不到
  • 近距离(<2米)探测可靠

缺点:

  • 精度差,有盲区(近处测不到)
  • 容易受干扰,多个超声波同时工作会串扰
  • 响应慢,不适合高速场景
小结: 三种传感器各有千秋。我的建议是:
- 室内低速机器人:超声波 + 单线激光雷达
- 室外无人车:16线以上LiDAR + 双目摄像头
- 低成本方案:单目摄像头 + 超声波(但别指望太高的可靠性)

环境表示方法:让机器人“看懂”世界

传感器拿到原始数据后,怎么让机器人理解?这就需要环境表示了。说白了,就是把现实世界“翻译”成机器人能算的数学模型。

我常用的两种方法:栅格地图和拓扑地图。它们各有各的脾气。

1. 栅格地图(Occupancy Grid Map)

栅格地图,就是把空间划分成一个个小格子。每个格子存一个值:0表示空闲,1表示占用,0.5表示未知。

优点:

  • 直观,容易实现
  • 适合做路径规划(A*、Dijkstra直接跑)
  • 能处理动态障碍物(更新格子状态即可)

缺点:

  • 存储量大——一个100m×100m的区域,分辨率0.1m,就是100万个格子
  • 不适合大范围场景,内存会爆

下面是我画的一个栅格地图示意图,帮你理解它的结构:

机器人 目标 空闲 占用 未知

你看,机器人从绿色区域出发,要绕过红色障碍物,到达金色目标点。灰色区域是还没探索过的。这就是栅格地图最朴素的样子。

我的建议: 做栅格地图时,分辨率别设太高。0.1m对室内够用了,再细就是浪费内存。我曾经为了追求精度设到0.02m,结果一个房间就占了几个G,跑起来卡得要命。

2. 拓扑地图(Topological Map)

拓扑地图,不关心具体坐标,只关心“节点”和“连接关系”。就像地铁线路图——你不需要知道站台的具体经纬度,只要知道哪站能换乘就行。

优点:

  • 存储量极小,适合大范围场景
  • 路径规划快(图搜索算法直接跑)
  • 容易做语义标注(比如“这个节点是门口”)

缺点:

  • 精度低,无法处理精细避障
  • 构建拓扑图本身需要先有栅格地图或SLAM结果

下面是我画的拓扑地图示意图,帮你理解节点和边的概念:

A 起点 B 走廊 C 房间 D 出口 E 障碍

在这个拓扑图里,节点A是起点,B是走廊,C是房间,D是出口,E是障碍区域。机器人从A出发,可以走A→B→D,或者A→C→E→D。但E是障碍,所以最优路径是A→B→D。

核心对比:
- 栅格地图:适合精细避障,但存储大、计算慢
- 拓扑地图:适合全局导航,但无法处理局部细节
- 实际项目中,我通常两者结合:全局用拓扑,局部用栅格

传感器与地图的配合

你想想看,传感器和地图其实是“鸡生蛋、蛋生鸡”的关系。传感器数据用来构建地图,地图又反过来指导传感器该关注哪里。

我常用的流程是这样的:

  1. 激光雷达/摄像头采集原始数据
  2. 通过SLAM算法构建栅格地图
  3. 从栅格地图中提取拓扑结构(比如用Voronoi图)
  4. 全局规划用拓扑地图,局部避障用栅格地图
注意: 传感器数据融合是个大坑。不同传感器的坐标系、时间戳、数据频率都不一样。我曾经因为激光雷达和摄像头的时间戳没对齐,导致地图里出现“鬼影”——明明障碍物已经走了,地图上还留着。后来加了硬件同步才解决。

好了,环境感知的基础就聊到这里。记住:传感器选型要匹配场景,地图表示要兼顾精度和效率。这两点搞定了,后面的路径规划才能跑得稳。

一句话总结: 激光雷达看距离,摄像头看语义,超声波补盲区。栅格地图管局部,拓扑地图管全局。两者结合,才是王道。