2、传感器故障排查(上):激光雷达数据异常与视觉传感器故障
传感器是AMR的“眼睛”。眼睛出了问题,车就等于瞎了。
这一章我们专门聊聊激光雷达和深度相机/视觉传感器的常见故障。我这些年调试过的机器人,十有八九的“抽风”问题都出在这两个家伙身上。咱们一个一个来拆解。
核心思路:遇到传感器问题,先别急着拆硬件。先看数据,再查驱动,最后动硬件。这个顺序能帮你省下至少一半的排查时间。
2.1 激光雷达数据异常
激光雷达这东西,说白了就是靠发射激光束来感知周围环境。它要是闹脾气,机器人基本就废了。我见过最夸张的一次,雷达数据全是NaN,机器人直接原地转圈,还以为自己在跳探戈。
2.1.1 无数据输出
现象很简单:rostopic echo /scan 出来一片空白,或者全是0。为什么会这样?
- 物理连接问题:网线松了、USB口供电不足。我遇到过一台车,雷达时好时坏,最后发现是网线水晶头卡扣断了,颠簸一下就松脱。
- 驱动未启动或崩溃:ros2 launch 的时候驱动节点没跑起来,或者跑着跑着挂了。
- IP/端口配置错误:很多工业雷达走的是UDP协议,IP地址配错了,数据根本过不来。
我的排查习惯:先敲一句 ifconfig 看看网口有没有数据包。如果RX packets一直为0,那基本就是物理层的问题。别急着改代码,先检查线。
举个例子,你用的是思岚A1/A2雷达,走串口。无数据时我一般这么查:
# 检查串口设备是否存在
ls -l /dev/ttyUSB*
# 检查权限
sudo chmod 666 /dev/ttyUSB0
# 用minicom直接读原始数据
sudo minicom -D /dev/ttyUSB0 -b 115200
如果minicom里能看到乱码或数据流,说明硬件没问题,是驱动解析的问题。如果啥都没有,嗯,换根串口线试试。
2.1.2 数据跳变
这个最让人头疼。地图建着建着,突然墙上冒出一个点,离机器人只有10厘米。然后下一秒又恢复正常。
数据跳变的原因,我总结下来主要有三个:
- 多径反射:激光打到玻璃、镜面或者墙角,反射路径变长,产生虚假点云。
- 电机转速不稳:雷达内部的旋转电机如果轴承磨损,转速波动会导致角度数据不准。
- 电磁干扰:电机驱动器、大功率设备离雷达太近,信号被干扰。
注意:数据跳变和真实障碍物是两码事。跳变点通常孤立出现,而且不会连续几帧都在同一个位置。你可以用 rviz2 把点云显示出来,肉眼观察跳变点的分布规律。
我曾经在一个仓库项目里,机器人每次经过货架通道就疯狂报警。排查了两天,最后发现是货架上的金属反光条在搞鬼。解决方案?在雷达配置里把那个角度的敏感度降低,或者加个物理遮光罩。
2.1.3 数据偏移
数据偏移比跳变更隐蔽。你明明站在机器人正前方1米处,雷达显示你在0.8米或者1.2米。整个点云像是被“平移”了。
常见原因:
- 时间戳不同步:雷达数据和IMU数据的时间戳没对齐,导致融合时出现偏移。
- 外参标定不准:雷达在机器人上的安装位置和角度没标定好。我见过有人用卷尺量安装位置,结果差了2厘米,整个地图都歪了。
- 雷达内部时钟漂移:长时间运行后,雷达内部的计时器会慢慢偏移。
怎么排查?我一般用这个笨办法:
# 在雷达前方1米处放一个纸箱
# 用 rostopic echo /scan 查看最近点的距离
# 如果偏差超过5cm,基本就是标定或同步问题
# 检查时间戳对齐情况
ros2 topic hz /scan
ros2 topic hz /imu/data
如果两个话题的频率对不上,或者时间戳差值在毫秒级以上,那就得考虑用 tf2_echo 检查坐标变换链了。
避坑指南:我曾经在调试时发现数据偏移了15cm,折腾了一下午。最后发现是雷达的安装支架被叉车撞歪了,肉眼根本看不出来。所以,物理检查永远不要跳过。
2.2 深度相机/视觉传感器故障
视觉传感器比激光雷达更“娇气”。它对光照、纹理、温度都很敏感。我常说一句话:激光雷达是硬汉,视觉传感器是艺术家。艺术家闹情绪的方式五花八门。
2.2.1 图像模糊
图像模糊分两种:运动模糊和对焦模糊。
- 运动模糊:机器人移动速度太快,曝光时间太长。说白了就是快门速度跟不上运动速度。
- 对焦模糊:镜头没对准,或者镜头上有污渍、雾气。
我遇到过最离谱的一次,图像一直模糊,擦镜头也没用。最后发现是相机保护膜没撕掉。嗯,别笑,真事。
排查步骤:
- 先看图像是不是整体模糊。如果是,检查镜头清洁度和对焦环。
- 如果只有运动时模糊,降低曝光时间。比如把
exposure_time从30ms降到10ms。 - 检查帧率是否匹配。如果帧率只有5fps,机器人跑起来肯定糊。
# 以Intel RealSense为例,调整曝光
ros2 param set /camera/camera depth_module.exposure 100
ros2 param set /camera/camera depth_module.gain 16
2.2.2 曝光异常
图像过亮或过暗,都是曝光没控制好。视觉SLAM最怕这个——过曝的区域特征点全丢了。
原因分析:
- 自动曝光算法太慢:机器人从室内走到室外,亮度突变,AE来不及调整。
- 手动曝光参数固定:你设了一个固定值,结果环境变了。
- 红外补光灯太强或太弱:深度相机通常有红外补光,调不好就会过曝。
我的建议:在室内环境,用手动曝光+固定增益。在室外或光照变化大的场景,用自动曝光但把AE的响应速度调快。RealSense里有个 auto_exposure_priority 参数,设成true可以优先保证帧率。
2.2.3 帧率不稳定
帧率忽高忽低,视觉里程计直接崩溃。为什么?
- USB带宽不足:深度相机数据量很大,USB 3.0如果被其他设备抢带宽,帧率就会掉。
- CPU过载:图像处理太吃CPU,导致驱动丢帧。
- 触发模式设置错误:有些相机需要外部触发信号,没配好就时断时续。
怎么查?我一般用这个命令:
# 查看相机话题的实际发布频率
ros2 topic hz /camera/color/image_raw
# 如果频率波动超过20%,就要排查了
# 检查USB设备
lsusb -t
如果发现是USB带宽问题,试试把相机插到独立的USB控制器上,别跟鼠标键盘挤在一起。
重要提醒:帧率不稳定有时候是驱动版本问题。我踩过坑——用ROS2 Humble配老款RealSense D415,帧率死活上不去。后来把 realsense2_camera 从3.2.0升级到4.5.0,问题就解决了。所以,先检查驱动版本。
2.3 本章小结
传感器故障排查,说白了就是“望闻问切”。望——看数据;闻——听电机声音;问——问日志;切——动手测电压、换线缆。
激光雷达的问题多半出在物理层和驱动层。视觉传感器的问题则更多跟环境光和参数配置有关。记住一个原则:先软件后硬件,先数据后代码。
下一章我们继续聊传感器故障的下半部分——IMU、编码器、超声波这些“小角色”出问题时的排查方法。它们虽然不起眼,但闹起脾气来一样让你头疼。