教程 · 入门 · 阅读约 18 分钟
超声波与飞行时间(ToF)机器人传感器对比
比较机器人常用的超声波测距传感器与飞行时间测距传感器,然后讲如何安装、标定、滤波和验证它们,以实现可靠的避障。
一颗测距传感器给机器人的,是保险杠给不了的东西:接触之前的反应时间。它并不能取代保险杠——一个接触开关能抓住黑色椅腿、玻璃,以及每颗测距传感器都会漏掉的高度不对的障碍。两种常见的低成本选择是超声波声呐和光学飞行时间(ToF)。它们都报告距离,但与表面的相互作用方式不同。只按标称量程最大值来选,会产出脆弱的避障。
真正有用的问题是:面对这台机器人的目标、光照、几何、更新率和停车距离,哪颗传感器能给出有效测量?
先弄懂每颗传感器怎么量
超声波传感器发出一段人耳听不到的声波脉冲,并测量回波时间。距离大约等于往返行程时间的一半乘以声速。除以二,是因为声音要走到目标再走回来。
光飞行时间传感器发出调制的红外光,并从返回信号估计距离。VL53 系列的器件内部就包含了时序和信号处理,通常通过 I²C 暴露结果。
它们的失效模式不同:
- 声音会从有角度的、柔软的、窄的、吸声的目标上反射走。
- 多颗超声波传感器如果不在受控的调度下触发,会互相听到对方。
- 光学传感器在低反射率目标、强环境红外、盖板串扰,或视场外的目标上都可能吃力。
- 两种类型都不会自动知道一个结果是否可信;能用状态和信号质量数据时就要用。
按场景和控制环来选
超声波模块在成本要紧、目标相对宽、而且更宽的声束可以接受时有用。它们能探测到让某些光学方法为难的透明物体。它们的波束也可能报出一堵并不在机器人正前方的近处墙壁。
ToF 模块体积小,很多器件的时序可控,还能提供更窄的关注区。多颗相同的 I²C 传感器可能需要关断引脚或者一套地址分配流程。强阳光和深色表面必须在真实平台上测过。
买硬件之前,先写下四条要求:
- 最小和最大可用距离。
- 所需的更新周期。
- 必须能被探测到的最小障碍。
- 最坏的目标与环境:黑布、玻璃、斜墙、阳光,或者交叉人流。
然后拿这些要求去比厂家的数据手册,而不是电商页上的摘要。
为了你需要的那个测量去安装
把感知轴装在机器人需要间隙信息的地方,而不只是在“支架刚好装得下”的地方。装在底盘高处的传感器可能漏掉低矮障碍;装得太低则可能看到地面反射或轮子硬件。让保险杠和底盘留在视场之外。
对反应式转向来说,左前、正前、右前三个测量比一道向前的波束信息更多。不过三颗传感器不必同时开火。把超声波的 ping 错开调度,并留出足够时间让回波衰减。
刚性安装很重要。振动会改变指向,而线缆的移动会破坏本来将将就就的连接。如果光学传感器装在一片保护窗后面,就照厂家针对那个确切机械叠层给出的串扰标定流程做。
标定偏移并测重复性
在工作范围的几个准确测量距离上,放一块大的平面目标并与传感器垂直。每个点至少采集 50 个读数。记录:
- 报告距离的均值或中值;
- 离散度,例如最小/最大值或标准差;
- 无效状态的计数;
- 环境条件与目标材料。
一个近似恒定的差值就是偏移,理解其成因之后可以修正。随距离变化的误差需要一个更好的模型,或者一个更窄的可信范围。不要给一个松垮的支架或糟糕的电源去拟合一条复杂曲线。
对 ToF 模块,先跑规定的偏移标定,再跑串扰标定。如果器件 API 要求,就把标定数据存下来并在启动时加载。换了盖窗或安装几何之后要重新标定。
先滤掉无效读数,再做平滑
把超时、超量程码或低质量状态当作无效——而不是当作零厘米。零会触发一次急停指令,所以把通信错误变成零就是在制造不安全的行为。
对最近三到五个有效样本取中值,可以在不把它们平均进控制信号的前提下剔除孤立尖峰:
if (measurement.valid) {
window.push(measurement.distanceMm);
if (window.size() > 5) window.popOldest();
filteredDistance = median(window);
}
低通滤波能给出更平滑的显示,但会增加延迟。传感器滤波教程解释了这个取舍。日志里保留原始值和有效性状态,这样滤波就不会把一颗正在失效的传感器藏起来。
把距离变成一条安全的停车规则
避障必须把运动算进去。一条有用的阈值应当包含刹车距离、测量延迟、计算与执行器延迟,以及一个余量:
stopThreshold = speed² / (2 × deceleration) + speed × delay + margin
在真实表面上测出可达到的减速度,而不要假设——它是附着力上限 µg,不是电机决定的任何东西,那份算术的推导在这里。速度越高刹车项按速度平方增长,所以一个固定的 15 cm 阈值在每条指令下并不一样安全。
用迟滞来防抖动:低于一个阈值就进入停车态,只有高于一个更大的阈值才恢复。正常转向时要求少数几个一致的有效读数,而对可信的近距障碍则保留一份有意保守的响应。
在难目标上验证
搭一张测试矩阵:平墙、斜墙、窄杆、黑布、透明板,以及运动中的障碍。在最小量程附近、计划的停车阈值附近、以及最大工作量程附近各测一遍。如果机器人两种光照环境都会遇到,就在室内光照和阳光下各重复一次。
要量的是探测率和延迟,而不只是平均距离。一颗 90% 时间准确、却会周期性地冻结半秒的传感器,对一台快速机器人来说可能无法接受。
常见故障的诊断
- **到处都稳定偏移:**核对物理参考点,然后套用厂家的标定。
- **随机的偏短超声读数:**找串扰、电气噪声,或附近结构的晚回波。
- **ToF 在窗后读数变差:**针对那片盖板材料做偏移和串扰标定。
- **机器人在墙附近振荡:**先加迟滞、减小滤波延迟,再重新整定转向。
- **能检出墙却漏掉椅腿:**波束几何和安装没有覆盖所需的目标。
- **只在高速时停车太晚:**阈值逻辑忽略了刹车距离和延迟。
用避障模拟器实验量程、视场、转向和停车距离,然后再把阈值搬到硬件上。
探索关联图谱
本教程所属的搭建
包含本教程的项目和学习路线。
延伸阅读