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厘米。然后下一秒又恢复正常。

数据跳变的原因,我总结下来主要有三个:

  1. 多径反射:激光打到玻璃、镜面或者墙角,反射路径变长,产生虚假点云。
  2. 电机转速不稳:雷达内部的旋转电机如果轴承磨损,转速波动会导致角度数据不准。
  3. 电磁干扰:电机驱动器、大功率设备离雷达太近,信号被干扰。

注意:数据跳变和真实障碍物是两码事。跳变点通常孤立出现,而且不会连续几帧都在同一个位置。你可以用 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 图像模糊

图像模糊分两种:运动模糊和对焦模糊。

  • 运动模糊:机器人移动速度太快,曝光时间太长。说白了就是快门速度跟不上运动速度。
  • 对焦模糊:镜头没对准,或者镜头上有污渍、雾气。

我遇到过最离谱的一次,图像一直模糊,擦镜头也没用。最后发现是相机保护膜没撕掉。嗯,别笑,真事。

排查步骤:

  1. 先看图像是不是整体模糊。如果是,检查镜头清洁度和对焦环。
  2. 如果只有运动时模糊,降低曝光时间。比如把 exposure_time 从30ms降到10ms。
  3. 检查帧率是否匹配。如果帧率只有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、编码器、超声波这些“小角色”出问题时的排查方法。它们虽然不起眼,但闹起脾气来一样让你头疼。


专注资料整理