环境感知基础:扫地机如何“看见”世界
做扫地机路径规划,第一件事不是写代码,而是搞清楚一个问题:机器人到底怎么感知环境的?
我刚开始做这个方向时,也犯过傻。以为只要给个地图,机器人就能自己跑。结果第一次实测,机器直接撞墙上了。嗯,那时候我才意识到——感知是规划的前提,感知不准,规划全是白搭。
这一章,咱们就把扫地机上那些传感器挨个捋一遍。激光雷达、红外、碰撞、悬崖、陀螺仪、里程计,每个我都会讲讲原理,再聊聊实际项目中踩过的坑。
1. 激光雷达:扫地机的“眼睛”
激光雷达,说白了就是发射激光,测反射回来的时间,算出距离。扫地机上最常见的是单线激光雷达,旋转扫描一圈,得到360度的距离数据。
我个人习惯把激光雷达的数据叫做“点云”,虽然单线雷达的点云只有一圈,但足够建图用了。
核心原理:
- 发射激光脉冲
- 接收反射信号
- 根据飞行时间计算距离:
d = c * t / 2
我在项目中遇到过一个问题:激光雷达在阳光下会失效。因为太阳光里也有红外成分,会干扰接收器。所以如果你打算做户外扫地机,记得选带滤光片的雷达。
避坑指南:
我曾经以为激光雷达数据是完美的,后来发现玻璃墙、黑色物体、镜面都会导致数据丢失。黑色吸光,玻璃透光,镜面反射到别处去了。做SLAM时,这些“坏点”一定要先过滤掉。
2. 红外传感器:低成本测距方案
红外传感器,原理跟激光雷达有点像,但用的是红外LED,不是激光。成本低,精度也低。
扫地机上通常用红外做短距离避障,比如检测前方10厘米内有没有障碍物。我一般把它当作“保险丝”——激光雷达没检测到的,红外来兜底。
但红外有个毛病:受环境光影响大。阳光直射时,红外信号会被淹没。你想想看,大白天扫地,红外基本等于废了。
注意:
红外传感器不适合做精确测距,只适合做“有/无”检测。我在项目里吃过这个亏,想用红外做精确避障,结果数据跳得跟心电图似的。
3. 碰撞传感器:最后的防线
碰撞传感器,其实就是个机械开关。机器人撞到东西了,开关闭合,告诉主控:“我撞了!”
听起来很原始对吧?但说实话,这是最可靠的传感器。激光雷达可能漏掉细桌腿,红外可能被阳光干扰,但碰撞传感器永远不会骗你。
我习惯在代码里给碰撞传感器最高优先级。一旦触发,立即停车,然后后退转向。为什么?因为撞坏了家具,用户会骂人的。
实际经验:
碰撞传感器的安装位置很重要。我见过一些扫地机,碰撞条太硬,撞到东西也不触发。太软又容易误触。建议用弹性适中的橡胶条,触发力度控制在2-3牛顿。
4. 悬崖传感器:防止“跳楼”
悬崖传感器,其实就是朝下安装的红外或超声波传感器。检测地面是不是突然没了——比如楼梯边缘。
原理很简单:发射信号,看反射回来的强度。地面反射强,悬崖反射弱(因为信号跑远了)。
我在测试时遇到过一件尴尬事:黑色地毯导致悬崖传感器误触发。因为黑色吸光,反射信号弱,机器人以为下面是悬崖,死活不肯上地毯。
解决办法:
可以融合多个传感器的数据。比如悬崖传感器触发时,再查一下激光雷达的数据,如果激光雷达显示前方有地面,那就别停车。说白了,就是别让一个传感器说了算。
5. 陀螺仪与里程计:知道自己在哪
陀螺仪测角速度,里程计测位移。两者结合,就能估算机器人的位姿。
但这里有个大坑:误差会累积。陀螺仪有零偏,里程计有打滑。跑个几分钟,位置估计可能偏到姥姥家去了。
我刚开始做时,以为IMU数据很准。结果有一次让机器人直线前进,它愣是走出了个弧线。查了半天,发现是轮子打滑导致的里程计误差。
核心公式(简化版):
// 里程计推算位置
x += speed * cos(theta) * dt
y += speed * sin(theta) * dt
theta += gyro_z * dt
你想想看,如果陀螺仪有0.1度/秒的零偏,10秒后就偏了1度。看起来不多,但乘以移动距离,位置误差就大了。
重要提醒:
千万别只用里程计做定位。一定要融合激光雷达或视觉数据,用卡尔曼滤波或粒子滤波来修正。我见过有人只用里程计做路径规划,结果机器人越跑越偏,最后撞墙了。
6. 传感器融合:1+1 > 2
单个传感器都有缺陷。激光雷达怕玻璃,红外怕阳光,碰撞传感器只能事后补救,里程计会漂移。
所以,真正的工程方案是融合。
我个人习惯的做法是:
- 激光雷达做主传感器,建图和定位
- 红外做短距离补充,检测低矮障碍物
- 碰撞传感器做最后一道防线
- 悬崖传感器单独处理,优先级最高
- 陀螺仪+里程计做运动估计,但定期用激光雷达修正
说白了,就是让每个传感器干自己最擅长的事。别指望一个传感器搞定所有场景。
一个小技巧:
我在代码里给每个传感器分配一个“置信度”。激光雷达置信度0.9,红外0.6,碰撞传感器触发时置信度直接拉满。融合时按置信度加权,效果比简单平均好得多。
总结一下
这一章咱们聊了扫地机上常见的传感器。每个都有用,每个也都有坑。做路径规划之前,先把这些传感器的特性摸透,不然代码写得再漂亮,跑起来也是歪的。
下一章,咱们会讲地图表示方法。有了传感器数据,怎么把它变成机器人能理解的地图?到时候见。
公众号:蓝海资料掘金营,微信deep3321