Skip to content

100 个真实故障诊断 (Troubleshooting)

怎么用这张表

每条 case 都按 症状 → 根因 → 排查 → 修复 写。先看症状对得上 → 直接跳修复。先看不上 → 用 Ctrl+F 搜关键词(报错文本 / 现象 / 设备 都搜得到)。

故障地图

flowchart TD
    Start[你的故障在哪?]
    Start --> A[机械臂 / 关节]
    Start --> B[移动底盘]
    Start --> C[电池 / 电源]
    Start --> D[视觉 / 相机]
    Start --> E[ROS 2 / 通信]
    Start --> F[仿真 / Sim2Real]
    Start --> G[VLA 模型]
    Start --> H[智能家居]
    Start --> I[嵌入式 / 飞控]
    Start --> J[网络 / 远程]
    A --> A1[10 cases]
    B --> B1[10 cases]
    C --> C1[8 cases]
    D --> D1[10 cases]
    E --> E1[12 cases]
    F --> F1[15 cases]
    G --> G1[10 cases]
    H --> H1[10 cases]
    I --> I1[8 cases]
    J --> J1[7 cases]

1. 机械臂 / 关节 (10)

Case 01:SO-100 机械臂不响应指令

  • 症状lerobot-calibrate 后发 move 命令,关节纹丝不动
  • 根因:舵机总线 ID 冲突 / 供电不足 / 波特率错
  • 排查lsusb 看串口 → stty -F /dev/ttyUSB0 看波特率 → 用厂家 SDK 单独 ping
  • 修复:检查 ID(SO-100 通常 1-6)· 换 12V/3A 电源 · 波特率锁 1,000,000

Case 02:Dynamixel 舵机红灯闪烁

  • 症状:上电后红灯常亮 / 闪烁
  • 根因:过热 / 电压低 / 位置超限
  • 排查:读 present_temperature / present_voltage
  • 修复:降负载 · 补供电 · 重启

Case 03:关节到位但末端抖

  • 症状:机械臂能到目标,但来回小幅度振动 0.5-2 mm
  • 根因:PID 参数过激 / 减速比与负载不匹配
  • 排查:单独测每个关节的 present_position 是否稳
  • 修复:降低 P · 增大 D · 改柔顺控制

Case 04:力矩模式下报 overload

  • 症状status_return_level=1 时频报 overload
  • 根因:扭矩限位设小 / 末端碰撞
  • 排查:看 present_current 波形
  • 修复:放宽 torque_limit (SO-100 默认 800) · 检查机械干涉

Case 05:USB 串口插上没反应

  • 症状/dev/ttyUSB* 不出现
  • 根因:USB 权限 / 线材问题 / FTDI 驱动缺
  • 排查lsusb -t · dmesg | tail · sudo chmod 666 /dev/ttyUSB0
  • 修复:装 brltty 卸载(常冲突)· 加 udev 规则

Case 06:机械臂校准数据漂移

  • 症状:跑 30 分钟后零点偏移 1-2 度
  • 根因:齿轮间隙 / 温度漂移 / 编码器分辨率低
  • 排查:静止 10 分钟看 present_position 是否稳
  • 修复:用绝对编码器型号 (XM/XH 系列) · 加温度补偿

Case 07:双臂 SO-100 同步丢拍

  • 症状:遥操作时主从臂错位 1-2 帧
  • 根因:USB 带宽不够 / 帧间隔不一致
  • 排查htop 看 CPU · time 测单帧耗时
  • 修复:两臂分两个 USB 控制器 · 降 fps 到 30

Case 08:夹爪夹不紧

  • 症状:抓 100g 物体滑落
  • 根因:摩擦垫磨损 / 夹持力不够 / 物体表面太滑
  • 排查:看 gripper_force 实际值
  • 修复:换橡胶垫 · 增大 gripper_force · 物体去光面

Case 09:G1/H1 宇树机械臂零位漂移

  • 症状:断电后重新上电,关节位置偏移
  • 根因:宇树 SDK2 重启后默认回零位,与实际不一致
  • 排查dds_loggerlow_stateq
  • 修复:每次启动先 ZeroCalibration · 断电前归位

Case 10:Franka 报反射时间超时

  • 症状libfranka: Realtime deadline missed
  • 根因:CPU 抢占 / 核隔离没做
  • 排查journalctl -u franka.service
  • 修复:用 isolcpus 隔离核 · 关 preempt · 升 kernel-rt

2. 移动底盘 (10)

Case 11:差速底盘直走偏

  • 症状:发 vx=0.5, w=0 实际弧线走
  • 根因:两轮直径不一致 / 编码器分辨率不同
  • 排查:测 10 m 直线实际距离
  • 修复wheel_separation_multiplier 校准 · 换同批次轮胎

Case 12:阿克曼转向底盘打角误差大

  • 症状steering_angle=0.2 实际转 0.15 rad
  • 根因:转向电机减速比误差 / 几何参数不对
  • 排查:左右各打 30 度看实际转角
  • 修复:URDF 中改 wheelbasesteering_link 长度

Case 13:四足狗腿打滑

  • 症状:Go2 在瓷砖上原地踏步不走
  • 根因:足端摩擦不足 / 地面识别失败
  • 排查UnitreeLegged SDKfootForce
  • 修复:换橡胶足垫 · 调 gait 参数

Case 14:底盘上电后不动但 ROS 节点正常

  • 症状/cmd_vel 发布正常,电机不响应
  • 根因:使能信号没拉 / 急停按下
  • 排查:测 enable_pin GPIO · 看急停触点
  • 修复:拉高 enable · 释放急停

Case 15:IMU 漂移严重

  • 症状:静止时航向角每分钟漂 1-2 度
  • 根因:磁力计干扰 / IMU 没标定
  • 排查imu_toolsmag_heading 是否跳
  • 修复:远离电机/电池 · 重做 imu_calibration

Case 16:建图反复卡墙角

  • 症状:Cartographer / SLAM 在某区域反复失败
  • 根因:回环检测距离设小 / 特征点不足
  • 排查:RViz 看稀疏地图
  • 修复:增大 loop_closure_search_radius · 加反光柱

Case 17:底盘过门槛翻车

  • 症状:跨 5 cm 门槛翻倒
  • 根因:质心太高 / 越障姿态不对
  • 排查:调低 CoM · 加俯仰控制
  • 修复:URDF 加配重 · 加主动俯仰

Case 18:导航到目标 0.5 m 处停住

  • 症状:A* 规划成功,执行到 0.5 m 不动
  • 根因:到达判定阈值太大 / 局部代价图膨胀
  • 排查ros2 topic echo /local_plan 看终点
  • 修复:调小 xy_goal_tolerance 到 0.1

Case 19:里程计漂移 > 5%/10m

  • 症状:走 10 m 实际位置偏 0.5 m+
  • 根因:轮径误差 / 编码器精度
  • 排查:标定 wheel_radius
  • 修复:跑 calibrate_linear 工具 · 换光电编码器

Case 20:多底盘协同冲突

  • 症状:两台 AGV 在交叉口互让死锁
  • 根因:交通管制没做
  • 排查:看 traffic_manager 日志
  • 修复:加中央调度 (ROS 2 nav2 + traffic) · 调优先级

3. 电池 / 电源 (8)

Case 21:电池容量腰斩 50%

  • 症状:标称 5000 mAh 实际 2500
  • 根因:单体电压差 > 100 mV / 老化
  • 排查:测每节电压 · 看循环次数
  • 修复:手动均衡 · 换电芯

Case 22:低温充电后起火

  • 症状:0°C 充电后冒烟
  • 根因:BMS 没禁低温充电
  • 排查:看 BMS 是否支持低温保护
  • 修复:换 Daly / JBD 智能 BMS

Case 23:急加速电压骤降

  • 症状:5C 加速时母线电压掉 20%
  • 根因:电芯内阻大 / 线径太细
  • 排查:用示波器测母线波形
  • 修复:换低内阻电芯 · 加粗 8 AWG 线

Case 24:充电 80% 跳绿灯

  • 症状:充到 80% 立刻停
  • 根因:充电 IC 误判 / 温度保护
  • 排查:查 NTC 温度 · 查 CV 阈值
  • 修复:校准 NTC · 改 charger profile

Case 25:48V 电池组上电烧保险

  • 症状:上电瞬间 40A 保险丝熔断
  • 根因:母线短路 / 控制器击穿
  • 排查:断负载测电池内阻
  • 修复:换 MOS / IGBT · 改保险到 50A

Case 26:CAN 报 BMS 数据不更新

  • 症状soc 一直显示 -1 / 0
  • 根因:CAN 终端电阻没接 / ID 错
  • 排查candump can0 看是否有报文
  • 修复:CANH/CANL 各加 120Ω · 改 CAN ID

Case 27:充电桩通信失败

  • 症状:插枪后不充电
  • 根因:CAN 不通 / 协议错
  • 排查can-utils 看报文
  • 修复:GB/T 27930 vs OCPP 1.6 协议对齐

Case 28:储能系统 SOC 跳变

  • 症状:SOC 从 80% 突然跳 30%
  • 根因:库仑计标定错 / 电流传感器漂移
  • 排查:满充满放一次校准
  • 修复:重置 SOC · 换霍尔传感器

4. 视觉 / 相机 (10)

Case 29:RealSense 启动报 no device

  • 症状rs-enumerate-devices
  • 根因:USB 供电不足 / 驱动没装
  • 排查lsusb | grep Intel
  • 修复:用 USB 3.0 端口 · 装 librealsense2

Case 30:深度图大面积黑洞

  • 症状:深度图中央 1/3 全 0
  • 根因:IR 投影器被遮挡 / 测距超限
  • 排查:拿手挡住测一下
  • 修复:清镜头 · 保持 0.3-3 m 距离

Case 31:ZED 2i 启动报 “INIT_ERROR”

  • 症状:ZED 报错相机没找到
  • 根因:USB 3.0 协商失败 / 固件旧
  • 排查dmesg 看 USB 错误
  • 修复:换 USB 线 · ZED_Update 升固件

Case 32:鱼眼相机标定后畸变更严重

  • 症状:标定后画面边缘比原来更弯
  • 根因:标定板角度不够 / 模型选错
  • 排查:用 kalibr 重做
  • 修复:用 pinhole-radtan 模型 · 标定板 30+ 角度

Case 33:夜间 RGB 全黑

  • 症状:晚上拍出来全黑
  • 根因:曝光时间设短 / 增益低
  • 排查v4l2-ctl -d /dev/video0 --get-ctrl exposure
  • 修复:自动曝光 · 加 IR 补光

Case 34:相机帧率掉到 5 fps

  • 症状:标称 30 fps 实际 5 fps
  • 根因:USB 带宽 / 编码耗时
  • 排查v4l2-ctl --stream-mmap
  • 修复:降分辨率到 720p · 用 MJPG 格式

Case 35:双相机时间不同步

  • 症状:两路图差 50-100 ms
  • 根因:硬件触发没接
  • 排查:看 manufacturer 触发
  • 修复:用 GPIO 触发 · PTP 同步

Case 36:3DGS 重建有黑边

  • 症状:训练后新视角边缘糊
  • 根因:训练视角不全 / 球谐阶数低
  • 排查:看训练日志
  • 修复:补 360° 视角 · 升 SH=4

Case 37:LiDAR 点云丢包

  • 症状:机械式 LiDAR 偶发整圈空
  • 根因:电机转速不稳 / 编码器错
  • 排查ros2 topic hz /scan
  • 修复:换 12V 稳压电源 · 改 baud rate

Case 38:VSLAM 跟踪丢失

  • 症状:ORB-SLAM3 突然 Reset
  • 根因:快速运动 / 光照突变
  • 排查:看 Tracking: LOST 时刻
  • 修复:降速 · 用 IMU 融合

5. ROS 2 / 通信 (12)

Case 39:节点之间看不到 topic

  • 症状ros2 topic list 看不到对方
  • 根因ROS_DOMAIN_ID 不一致 / 防火墙
  • 排查ros2 doctor · iptables -L
  • 修复:统一 ROS_DOMAIN_ID · 关闭 multicast 阻断

Case 40:发布频率上不去

  • 症状:写 rclpy 发布 100 Hz 实际 20 Hz
  • 根因QoS 不匹配 / 同步锁
  • 排查ros2 topic hz
  • 修复:用 BEST_EFFORT · 去掉 print

Case 41:跨主机 DDS 通信失败

  • 症状:两台机器 ros2 topic 互相看不见
  • 根因:默认 multicast 走不通 / FastDDS discovery 失败
  • 排查tcpdump udp port 7400-7500
  • 修复:用 CycloneDDS + initial peer · 改用 Zenoh

Case 42:节点 OOM kill

  • 症状:跑 2 小时后被 SIGKILL
  • 根因:图像 topic 累积 / 内存泄漏
  • 排查dmesg | grep -i oom
  • 修复:用 image_transport 压缩 · 检查 subscriber queue

Case 43:launch 文件报找不到包

  • 症状ResourceNotFound: my_pkg
  • 根因colcon 没 build / install
  • 排查ros2 pkg list | grep my_pkg
  • 修复colcon build --symlink-install --packages-select my_pkg

Case 44:URDF 加载报 joint 错

  • 症状robot_state_publisher 报 joint 找不到
  • 根因:URDF 拼写错 / 父子 link 关系乱
  • 排查urdf_to_graphiz my.urdf
  • 修复:检查 <joint name="..."><link name="..."> 一致

Case 45:TF 报 lookup error

  • 症状Lookup would require extrapolation into the past/future
  • 根因tf2 时间不同步 / 时间戳错
  • 排查ros2 run tf2_tools view_frames
  • 修复:用 use_sim_time · 修正 stamp

Case 46:TF tree 出现环

  • 症状:两个 frame 互相指
  • 根因:URDF 写错 / 静态发布写错
  • 排查ros2 run tf2_tools view_frames -o
  • 修复:移除冲突的 static_transform_publisher

Case 47:ROS 2 bridge (ROS1 ↔ ROS2) 频繁断

  • 症状ros1_bridge 每 1 分钟掉
  • 根因:两边时钟漂移 / ROS1 节点 OOM
  • 排查:bridge 日志
  • 修复:用 dynamic_bridge 替代 · 拆 topic

Case 48:micro-ROS 节点跑飞

  • 症状:串口发了 1 s 后 ESP32 不响应
  • 根因:看门狗没启 / 内存爆
  • 排查ros2 node info /micro_ros_node
  • 修复:启 heartbeat · 调小 msg payload

Case 49:ROS_DOMAIN_ID=0 多机冲突

  • 症状:实验室 5 台机器互相串扰
  • 根因:默认 0 = 公网
  • 排查ros2 topic list 看陌生 topic
  • 修复:改 ID 到 1-232 不同值

Case 50:service call 超时

  • 症状rclpy call_async 一直不返回
  • 根因:service server 没启 / 节点 crash
  • 排查ros2 service list · ros2 node list
  • 修复:用 watchdog 监控 · 加 retry

6. 仿真 / Sim2Real (15)

Case 51:MuJoCo 启动报 cuInit err

  • 症状mujoco.FatalError: could not initialize CUDA
  • 根因:驱动不匹配
  • 排查nvidia-smi · nvcc --version
  • 修复:重装 nvidia-driver 535+ · CUDA 12

Case 52:Isaac Sim 卡在 loading scene

  • 症状:开 USD 场景卡 5 分钟
  • 根因:GPU 不够 / 资产未加载
  • 排查nvidia-smi 看显存
  • 修复:用更小 USD · 关 nucleus

Case 53:DR 训练不收敛

  • 症状:随机化范围 ±50% 后 reward = 0
  • 根因:DR 范围过大 / 状态空间发散
  • 排查:看 reward 曲线
  • 修复:缩小到 ±10% 起步 · 加 reward shaping

Case 54:真机 0% 成功率但 sim 100%

  • 症状:sim 跑得 6,真机一动就跪
  • 根因:URDF 质量 / 惯量错 3-5 倍
  • 排查:称重 / 测惯量
  • 修复:用 meshlab + pybullet 重测

Case 55:相机内参没标定

  • 症状:sim 训练的视觉策略真机全错
  • 根因:用了 sim 默认内参
  • 排查Kalibr 标定
  • 修复:棋盘格 30+ 角 · 标定内参 + 畸变

Case 56:DR 视觉但没随机化背景

  • 症状:换场景就崩
  • 根因:只 DR 物体没 DR 背景
  • 排查:放新背景测
  • 修复:加 ImageNet 1k 随机纹理

Case 57:训练 12h 但策略全是抖动

  • 症状:动作高频震
  • 根因:动作平滑项没加 / 频率过高
  • 排查:看 action 序列 FFT
  • 修复:加 action smoothing · 降 30 → 10 Hz

Case 58:域随机化范围小但真机仍差

  • 症状:±10% DR 仍 30% 成功率
  • 根因:动力学 gap 太大(齿轮 / 线缆)
  • 排查:实测力矩响应
  • 修复:加 System ID · 用真机数据 fine-tune

Case 59:仿真碰撞穿模

  • 症状:抓取 sim 中手穿入物体
  • 根因:mesh collision 没用 trimesh
  • 排查:看 collision geometry
  • 修复:用 <collision><geometry><mesh>

Case 60:Isaac Lab GPU 利用率 < 30%

  • 症状:4090 跑 1024 env 显存 30%
  • 根因:envs 数太少 / batch size 小
  • 排查nvidia-smi · tensorboard
  • 修复:升 envs 到 4096+ · 改 vec env wrapper

Case 61:Sim2Real 数据格式不一致

  • 症状:真机 obs 格式 vs sim 不匹配
  • 根因:图像尺寸 / joint 顺序错
  • 排查:保存一帧对比
  • 修复:用统一 obs wrapper

Case 62:训练 reward hack

  • 症状:reward 涨但真机无意义
  • 根因:reward shaping 漏洞
  • 排查:分析 reward 各项
  • 修复:用 sparse reward · 加 imitation loss

Case 63:act_norm 错位

  • 症状:推理时动作维度对不上
  • 根因:训练时 mean/std 没保存
  • 排查torch.load 看 state_dict
  • 修复:保存 norm stats 一起 export

Case 64:仿真帧率与真机不同步

  • 症状:sim 100 Hz 真机 30 Hz 部署策略崩
  • 根因:dt 假设错
  • 排查:看 control 频率
  • 修复:在 policy 中加 time wrapper

Case 65:仿真多机干扰

  • 症状:多 agent 训练时 GPU OOM
  • 根因:物理引擎多份拷贝
  • 排查nvidia-smi
  • 修复:用 PhysX GPU · Isaac Lab 的 GPU pipeline

7. VLA 模型 (10)

Case 66:OpenVLA 推理慢 (1 Hz)

  • 症状:单帧推理 1 s
  • 根因:未量化 / batch=1
  • 排查torch.profiler
  • 修复:用 bitsandbytes 4-bit · batch=8 · TensorRT

Case 67:VLA 输出动作超出关节限位

  • 症状:策略输出 [10, 10, …] 超过 SO-100 范围
  • 根因:action head 没 clip
  • 排查:看 action 范围
  • 修复:加 torch.clamp · action space 归一化

Case 68:VLA 任务指令改了不响应

  • 症状:“pick apple” 改 “pick orange” 输出不变
  • 根因:prompt 模板没换
  • 排查:看 tokenize 输出
  • 修复:用 LLaMA-3 模板 · 验证 tokenizer

Case 69:VLA 在新场景完全失效

  • 症状:换房间布局就崩
  • 根因:训练数据同质
  • 排查:分析 train set 场景分布
  • 修复:加场景泛化 (Domain Random) · 多位置采集

Case 70:Octo 微调后遗忘

  • 症状:在 SO-100 上微调后,Franka 任务全错
  • 根因:catastrophic forgetting
  • 排查:对比 fine-tune 前后 base task
  • 修复:用 LoRA · 保留原权重 · 加 replay buffer

Case 71:RT-2 推理胡说八道

  • 症状:输出与任务无关
  • 根因:vision tower 没 load
  • 排查model.state_dict() keys
  • 修复:检查 CLIP 是否加载 · 验证 image processor

Case 72:VLA 部署到 Jetson 报 OOM

  • 症状torch.cuda.OutOfMemoryError
  • 根因:Jetson 8GB 装不下 7B 模型
  • 排查tegrastats
  • 修复:4-bit 量化 · 用 OpenVLA-7B-OFT · Jetson Orin 64GB

Case 73:VLA 训练 NaN loss

  • 症状:loss 突然变成 NaN
  • 根因:lr 过大 / fp16 溢出
  • 排查:看 loss 曲线
  • 修复:降 lr · 用 bfloat16 · grad clip 1.0

Case 74:VLA 推理动作卡顿 (jitter)

  • 症状:动作 5 Hz 输出但帧间跳变
  • 根因:未做 temporal ensemble
  • 排查:画 action 序列图
  • 修复:滑动窗口平均 · 改成 30 Hz 输出

Case 75:Pi-0 API 401/403

  • 症状:调 Pi-0 API 报 auth 错
  • 根因:API key 失效 / 超 quota
  • 排查:看响应头
  • 修复:换 key · 切本地 OpenVLA

8. 智能家居 (10)

Case 76:Home Assistant 启动报 invalid config

  • 症状:HA 配置检查失败
  • 根因:YAML 缩进错 / 字段名错
  • 排查:用 yamllint 跑一遍
  • 修复:用集成 UI 添加设备

Case 77:Zigbee 设备掉线

  • 症状:1 周后某传感器离网
  • 根因:路由路径差 / 电池低
  • 排查:HA 路由表
  • 修复:加路由节点 · 换电池

Case 78:Matter 设备添加失败

  • 症状:扫码配对一直超时
  • 根因:WiFi 2.4G / 5G 分离
  • 排查:手机连 2.4G
  • 修复:合并 SSID · 改用 thread border router

Case 79:米家设备无响应

  • 症状:HA 中 token expired
  • 根因:MIoT 协议升级 / token 过期
  • 排查xiaomi_miot 集成日志
  • 修复:重新 auth · 用 miio 替代

Case 80:LLM 控制 HA 报 “tool not found”

  • 症状:Extended OpenAI Conversation 调不到 entity
  • 根因:entity 没 expose
  • 排查:HA 暴露列表
  • 修复:白名单添加 · 改 entity_id

Case 81:Piper TTS 没声音

  • 症状:HA 播报没声音
  • 根因:音频输出错 / Piper 模型路径错
  • 排查pulseaudio --check
  • 修复:选对 sink · 用 onnx 模型

Case 82:HomeKit 添加报”无法添加配件”

  • 症状:扫 HomeKit 二维码失败
  • 根因:HA 桥模式配置错
  • 排查:HA → 设置 → HomeKit
  • 修复:重启桥 · 用 IP 而非 Bonjour

Case 83:Z2M 转换器报 “device not supported”

  • 症状:新 Zigbee 设备没 converter
  • 根因:固件太新
  • 排查zigbee2mqtt 文档
  • 修复:找外部 converter · 降固件

Case 84:本地 LLM 推理慢(2 tok/s)

  • 症状:Qwen 14B 在树莓派跑 2 tok/s
  • 根因:CPU 推理 / 模型太大
  • 排查ollama ps
  • 修复:用 Llama 3.2 3B · 上 N100 mini PC

Case 85:HA 自动化不触发

  • 症状:写好 automation 不跑
  • 根因:trigger 类型错 / 时间窗不对
  • 排查dev-tools → events
  • 修复:用 UI trace 看为什么没 trigger

9. 嵌入式 / 飞控 (8)

Case 86:Pixhawk 启动报 “PREARM: not healthy”

  • 症状:解锁前预检失败
  • 根因:IMU 校准未做 / GPS 没定位
  • 排查mavlink inspector
  • 修复accelerometer calibration · 等 GPS lock

Case 87:PX4 起飞后漂

  • 症状:解锁后直接横移
  • 根因:磁力计未校准 / 机架类型错
  • 排查mag_calibration
  • 修复:远离铁磁物 · 选对 frame

Case 88:ArduPilot 失控保护触发

  • 症状:信号丢后 3 s 切 RTL
  • 根因:RC 失联保护
  • 排查RSSI
  • 修复:换图传 / 加 RC 备份

Case 89:飞控日志写满 SD 卡

  • 症状:飞 1 小时后 SD 满
  • 根因:日志频率太高
  • 排查LOG_BACKEND_TYPE
  • 修复:改 BITMASK · 旧日志下载后清

Case 90:ESP32 看门狗复位

  • 症状:固件跑 10 分钟后重启
  • 根因:没喂狗 / 任务卡死
  • 排查esp_task_wdt_reset()
  • 修复:加 vTaskDelay · 启 task watchdog

Case 91:STM32 CAN 接收 FIFO 满

  • 症状:CAN 报文丢失
  • 根因:中断处理太慢
  • 排查CAN_IER 标志
  • 修复:用 DMA · 提优先级

Case 92:Jetson 突然关机

  • 症状:跑深度学习 1 小时后断电
  • 根因:过热 / 供电不足
  • 排查tegrastats · dmesg | grep thermal
  • 修复:加风扇 · 65W 电源

Case 93:飞控报 “GYRO CAL FAIL”

  • 症状:陀螺仪校准失败
  • 根因:震动 / 静止不够
  • 排查:云台晃
  • 修复:把飞机放稳桌面 · 减震垫

10. 网络 / 远程 (7)

Case 94:Tailscale 节点间延迟 200 ms

  • 症状:跨节点 ROS 2 巨慢
  • 根因:用了 DERP 中继
  • 排查tailscale status
  • 修复:用 P2P 直连 · 关闭 relay

Case 95:WebRTC 视频流卡顿

  • 症状:浏览器看机器人画面 5 fps
  • 根因:上行带宽不够
  • 排查iperf3 -c server
  • 修复:降 1080p → 480p · H.265 编码

Case 96:SSH 频繁掉线

  • 症状:30 分钟断 1 次
  • 根因ClientAliveInterval 默认 0
  • 排查/etc/ssh/sshd_config
  • 修复:改 ClientAliveInterval 60 · autossh

Case 97:MQTT broker 断连

  • 症状:客户端频繁 reconnect
  • 根因:心跳超时
  • 排查:broker 日志
  • 修复:调 keepalive 到 60s · 改 max_inflight_messages

Case 98:公网 ROS 2 通信被中间人攻击

  • 症状:数据被截获 / 伪造
  • 根因:UDP 明文
  • 排查tcpdump
  • 修复:用 Zenoh + TLS · WireGuard 隧道

Case 99:MQTT QoS 2 反复重传

  • 症状:消息一直 retry
  • 根因:客户端没回 PUBREC
  • 排查:broker 日志
  • 修复:换 paho-mqtt · 检查 client loop

Case 100:Tailscale Funnel 拒绝连接

  • 症状:公网 HTTPS 入站失败
  • 根因:没启 Funnel
  • 排查tailscale funnel status
  • 修复:先 tailscale serve 内网,再开 funnel

复现条件

类别必备
工具dmesg · ros2 doctor · candump · htop · nvidia-smi · 串口工具
环境Linux (Ubuntu 22.04+) · ROS 2 Jazzy / Humble
时间1 h 通读 + 4 h 实战 = 1 天
难度⭐⭐ 中

怎么贡献新 Case

发现新故障?用本站的项目 droidflight-author-guide skill 写到对应主题 doc 的末尾。症状 + 根因 + 排查 + 修复 四段式。

参考资料