超声波与红外传感器——近距离避障的低成本方案
上篇讲了GPS/RTK定位原理,从距离交会到载波相位模糊度解算,再到NMEA协议解析和ROS2集成。今天讲两种最便宜的近距离传感器——超声波和红外,它们虽然精度不高,但在机器人避障、悬崖检测、液位测量等场景中不可替代。
面试时候被问"超声波和红外传感器有什么区别",很多人会说"一个用声波一个用光"。但面试官想听的是更工程化的内容:超声波的盲区怎么解决?红外的距离-电压曲线怎么标定?两种传感器怎么互补?在ROS2中怎么集成?多传感器之间的串扰怎么处理?
超声波传感器原理
超声波传感器通过压电换能器发射和接收超声波脉冲。发射时,压电陶瓷片在电信号激励下振动,产生频率通常在40kHz左右的超声波。超声波遇到障碍物后反射回来,接收器检测到回波,通过测量发射到接收的时间差计算距离:距离 = 声速 × 时间 / 2。
声速和温度有关:v = 331.4 + 0.6 × T(T为摄氏温度)。如果不做温度补偿,夏天(35°C)和冬天(0°C)的声速差了21m/s,距离误差会达到6%左右。所以工业级超声波传感器都会内置温度传感器做补偿。
import numpy as np
class UltrasonicSensor:
"""超声波传感器模型"""
def __init__(self, min_range=0.02, max_range=4.0,
beam_angle=15.0, temperature=25.0):
self.min_range = min_range # 最小测量距离(m)
self.max_range = max_range # 最大测量距离(m)
self.beam_angle = beam_angle # 波束角(度)
// ... (代码省略)
return None # 表面太倾斜,无法检测
return max(valid) - min(valid) # 距离差异越大,表面越倾斜
超声波传感器有几个显著的特点。优点:不受光照条件影响(黑暗中也能工作),能检测透明物体(玻璃、薄膜),价格极低(几块钱一个)。缺点:波束角大(15-30度),空间分辨率低;对吸声材料(泡沫、布料)检测困难;存在盲区(通常2-5cm);多传感器之间容易串扰。
盲区是超声波传感器最大的限制之一。超声波传感器在发射脉冲后需要一段时间才能切换到接收模式("余振"时间),这段时间内无法接收回波,形成了盲区。普通超声波传感器的盲区在2-5cm,特殊设计的"窄盲区"传感器可以做到1cm以内。
实际安装超声波传感器有几个注意事项。第一,传感器前方不能有遮挡物——安装支架、线缆、机器人外壳,任何在波束锥角内的物体都会产生虚假回波。波束锥角通常是标称波束角的1.5-2倍(标称15度的传感器,实际有效波束可能到30度)。安装前一定要看传感器的数据手册,确认波束图的形状。
第二,多超声波传感器的串扰问题。如果两个超声波传感器同时工作,A发射的脉冲可能被B的接收器检测到(经过物体反射后),导致B的读数异常。解决方法是分时复用——让传感器轮流发射,每次只有一个传感器在工作。比如4个超声波传感器,每个发射周期10ms,总周期就是40ms(25Hz)。
class UltrasonicMultiplexer:
"""超声波传感器分时复用控制器"""
def __init__(self, num_sensors, cycle_time_ms=10):
self.num_sensors = num_sensors
self.cycle_time = cycle_time_ms / 1000.0
self.current_sensor = 0
self.last_switch_time = 0.0
def get_active_sensor(self, current_time):
// ... (代码省略)
self.last_switch_time = current_time
return self.current_sensor
第三,超声波传感器对表面材质很敏感。光滑坚硬的表面(金属、玻璃、塑料)反射效果好。柔软多孔的表面(泡沫、布料、地毯)会吸收超声波,导致检测距离大幅缩短甚至检测不到。在设计避障系统时,不能假设所有障碍物都能被超声波检测到——这就是为什么还需要红外或者激光雷达作为补充。
超声波和红外的融合策略
实际避障系统中,超声波和红外传感器通常配合使用,取长补短。
超声波擅长检测中距离(0.1-3m)的障碍物,不受物体颜色影响,但波束角大、空间分辨率低。红外擅长检测近距离(0.02-0.8m)的障碍物,空间分辨率高,但受物体颜色和光照影响。两者融合时,可以构建一个分层的距离检测模型:红外负责近距离精确测距,超声波负责中距离预警,激光雷达负责远距离建图。
数据融合的方法可以很简单:取两种传感器读数的最小值作为障碍物距离估计。也可以更复杂:用贝叶斯估计融合两种传感器的概率分布。对于避障这种安全相关的功能,保守策略更合适——宁可误报(虚警)也不要漏报。
面试中怎么聊
面试官问超声波和红外传感器,按这个顺序回答:先说超声波原理(压电换能器+ToF)和特点(盲区、波束角、温度补偿),再说红外原理(三角测距/反射强度)和特点(受颜色影响、环境光干扰),然后说两者的互补关系和融合策略,最后说ROS2集成和串扰处理。
如果面试官追问"为什么不用激光雷达代替超声波",你可以说:成本。一个激光雷达几百到几千块,一个超声波传感器几块钱。在只需要"检测前方有没有障碍物"的简单场景中,超声波完全够用。另外,超声波能检测透明物体(玻璃门),激光雷达对透明物体的检测不稳定(激光可能穿透或者被折射)。但如果是需要精确建图的场景,激光雷达的优势就体现出来了。
如果面试官追问"悬崖检测用什么传感器",你可以说:红外对射传感器(发射器和接收器分开安装)。朝地面发射红外光,如果地面存在,反射光被接收器检测到。如果接收不到反射光,说明前方是悬崖。这种方案简单可靠,扫地机器人都在用。超声波不适合做悬崖检测,因为超声波的波束角太大,朝地面发射时反射信号太分散。
如果面试官追问"扫地机器人的传感器方案",你可以展开说:扫地机器人是近距离传感器应用的经典案例。它通常包含:底部3-4个悬崖检测红外传感器(防止跌落楼梯),前端6-8个超声波或红外传感器(检测墙壁和家具),顶部一个激光雷达(SLAM建图和导航),侧面一两个接触式 bumper 传感器(最后的物理保护)。这些传感器形成一个完整的感知层次:bumper是最后一道防线(距离0),红外/超声波负责近距离避障(0.02-1m),激光雷达负责中远距离建图和定位(0.1-10m)。这种分层设计在面试中说出来,会让面试官觉得你对系统架构有整体理解。
如果面试官追问"红外传感器怎么标定",你可以说:三角测距型红外传感器的标定很简单。在已知距离(比如20cm、40cm、60cm)处测量传感器的输出电压,然后用最小二乘法拟合距离-电压曲线(通常是V = a/d + b的形式)。标定完成后,在几个验证距离上测试,误差应该在标称精度以内。需要注意的是,标定要在典型工作环境下进行——如果机器人会在不同光照条件下工作,标定数据应该在室内和室外分别采集,取最坏情况的参数。
补充一个超声波传感器在实际项目中的踩坑经验。当时我们在仓库里部署AGV,用了8个超声波传感器做近距离避障。测试时发现一个奇怪的现象:有时候明明前方没有障碍物,传感器却报告有物体在0.3米处。排查后发现是超声波的串扰——对面另一台AGV的超声波传感器在同一时间发射,两台AGV的超声波信号互相干扰。解决办法是错开各传感器的发射时间,给每个传感器分配不同的时隙(比如8个传感器分成4组,每组间隔5毫秒轮流发射)。改完之后误报就消失了。这个经验说明多超声波系统的时序设计很重要,不能简单地同时触发所有传感器。
下一篇讲多传感器时间同步——硬件触发/PTP/软件时间戳的工程实践。前面讲了这么多传感器,它们的数据怎么在时间上对齐,是多传感器融合的关键前提。
如果这篇文章对你有帮助,欢迎点赞、在看、转发三连。 你的支持是我持续更新的最大动力。
「机器人软件开发面试·从入门到精通」连载系列 上一篇:第162篇 GPS/RTK定位原理——室外机器人的定位方案 下一篇预告:第164篇 多传感器时间同步——硬件触发/PTP/软件时间戳的工程实践
有任何问题欢迎评论区留言,我会尽量回复。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)