3. 环境感知与地图构建

各位同学,今天我们来聊聊机器人感知世界的第一步。说白了,就是让机器人「看见」周围的环境,并且把看到的东西存成一张它能读懂的地图。

我在做第一个移动机器人项目时,犯过一个低级错误——传感器数据没对齐,结果地图上出现了「鬼影墙」。嗯,从那以后,我对传感器选型和数据融合就格外上心。今天这章,我把这些年踩过的坑和总结的经验,一次性讲清楚。

3.1 传感器选型:你的眼睛、耳朵和平衡感

机器人感知环境,靠的是三种核心传感器。我习惯把它们比作人的感官:

  • 激光雷达(LiDAR):相当于「触觉+视觉」。它能精确测距,精度到厘米甚至毫米级。我在仓库AGV项目里用的就是单线激光雷达,建图又快又稳。
  • 相机(Camera):相当于「视觉」。它提供丰富的纹理和颜色信息,但深度信息需要靠算法算出来。说实话,纯视觉在光照变化大的场景下容易翻车。
  • IMU(惯性测量单元):相当于「内耳前庭」。它告诉你机器人的加速度和角速度,但有个致命缺点——积分漂移。你想想看,手机导航在隧道里乱飘,就是IMU在「放飞自我」。

核心结论:没有一种传感器是万能的。激光雷达怕玻璃和黑漆表面,相机怕暗光和强光,IMU怕长时间积分。所以,多传感器融合才是王道。

3.2 占据栅格地图:把世界切成小方块

地图构建,最经典的方法就是占据栅格地图(Occupancy Grid Map)。

原理很简单:把环境划分成一个个小格子(栅格)。每个格子有三种状态:

  • 占据(Occupied):有障碍物,用黑色表示
  • 空闲(Free):可以通行,用白色表示
  • 未知(Unknown):还没探测到,用灰色表示

我当年第一次手写栅格地图更新逻辑时,踩过一个坑——概率更新时忘记做对数赔率转换,结果地图越更新越模糊。后来才明白,用对数赔率(Log-Odds)来更新,才能保证数值稳定。

更新公式其实不复杂,我贴一段核心代码给你看:

// 伪代码:占据栅格更新
float log_odds = prior_log_odds;
for each measurement z:
    log_odds += inverse_sensor_model(z) - prior_log_odds;
    probability = 1.0 / (1.0 + exp(-log_odds));
    grid[x][y] = probability;

我的小技巧:实际项目中,我会把概率阈值设在0.7以上才算「占据」,0.3以下才算「空闲」。中间区域保持「未知」,这样路径规划时会更安全。

3.3 代价地图:给地图加上「风险值」

占据栅格地图只是「有没有障碍物」,但机器人真正导航时,还需要知道「哪里走起来更安全」。这就是代价地图(Costmap)的用武之地。

代价地图本质上是在占据栅格地图上,给每个格子赋予一个代价值。我习惯把它分成两层:

  • 静态代价层:来自预先构建的占据栅格地图。障碍物区域代价值最高(比如255),自由区域最低(0)。
  • 动态代价层:来自实时传感器数据。比如突然出现的人、移动的箱子,这些都会临时抬高代价值。

你可能会问:「为什么要分两层?」

嗯,我在做仓储机器人时遇到过这种情况:静态地图上有个货架,但今天货架被搬走了。如果只用静态代价层,机器人会绕远路;如果只用动态代价层,机器人又可能撞上临时堆放的货物。所以,两层叠加才是正解。

避坑指南:我曾经在代价地图的膨胀半径设置上吃过亏。膨胀半径设太大,机器人钻不过窄门;设太小,又容易擦墙。我的经验是:膨胀半径 = 机器人半径 + 安全余量(至少10cm)。

3.4 知识体系总览

下面这张图,是我自己梳理的本章知识结构。你看一眼,就能明白传感器、地图、代价地图之间的关系:

环境感知与地图构建知识体系 传感器层 激光雷达 · 相机 · IMU 数据融合层 坐标对齐 · 时间同步 地图层 占据栅格地图 代价地图层 静态代价层 + 动态代价层 路径规划层 A* · DWA · TEB 传感器 → 融合 → 地图 → 代价地图 → 路径规划(反馈闭环)

3.5 实战中的传感器配置建议

最后,我根据项目经验,给你一个传感器选型参考表。这不是标准答案,但能帮你少走弯路:

应用场景 推荐传感器组合 我的备注
室内仓储AGV 单线激光雷达 + IMU 性价比高,建图稳定
室内服务机器人 2D激光雷达 + 深度相机 + IMU 深度相机用于避障和识别
室外无人车 多线激光雷达 + 双目相机 + 高精度IMU + GPS 多线激光雷达是刚需,GPS辅助定位
无人机 单目/双目相机 + IMU + 超声波/激光测距 重量和功耗是硬约束

最后说一句:传感器不是越贵越好。我在一个项目中用过16线激光雷达,后来发现单线激光雷达+结构光相机组合,效果差不多,成本却降了一半。选型时,一定要结合你的实际场景和预算。

好了,环境感知和地图构建这部分,核心就是这些。记住:传感器是基础,地图是载体,代价地图是安全护栏。三者缺一不可。