16. 调试与故障排除
本节提供 VDA 5050 实现中的常见问题和解决方案。
16.1 常见问题与解决方案
问题 1:机器人不接收订单
症状:机器人没有响应订单消息
可能原因:
- MQTT 主题配置错误
- JSON 格式错误
- 必填字段缺失
排查步骤:
- 检查 MQTT 主题是否正确(
vda5050/v3/{manufacturer}/{serialNumber}/order) - 验证 JSON 格式(使用 JSON Schema)
- 确认必填字段:
headerId,timestamp,version,manufacturer,serialNumber,orderId,nodes - 检查
orderUpdateId是否正确
解决方案:
json
// 确保基本结构正确
{
"headerId": 1,
"timestamp": "2024-01-15T10:00:00.000Z",
"version": "3.0.0",
"manufacturer": "RobotCorp",
"serialNumber": "AGV-001",
"orderId": "order-001",
"orderUpdateId": 0,
"nodes": [...],
"edges": [...]
}问题 2:状态消息丢失
症状:车队控制看不到机器人的状态更新
可能原因:
- 订阅主题错误
- QoS 配置问题
- 网络连接不稳定
排查步骤:
- 确认订阅了正确的主题
- 检查 MQTT 连接状态
- 监控
connection主题
解决方案:
- 使用 MQTT 调试工具(如 MQTT Explorer)监控消息
- 实现消息重传机制
- 增加心跳检测
问题 3:动作执行失败
症状:机器人无法完成动作,状态停留在 RUNNING
可能原因:
- 参数不正确
- 设备故障
- 动作被阻塞
排查步骤:
- 检查动作参数是否符合 factsheet 中定义
- 查看错误消息
- 检查阻塞类型
解决方案:
- 使用
retry动作重试 - 使用
skipRetry跳过失败动作 - 检查
actionStates中的详细状态
问题 4:区域请求被拒绝
症状:RELEASE 区域请求始终被拒绝
可能原因:
- 区域不在机器人基线中
- 车队控制策略限制
- 区域被其他机器人占用
解决方案:
- 确保请求的区域在订单的基线中
- 与车队控制协调区域使用
- 实现回退行为(STOP/CONTINUE/EVACUATE)
问题 5:连接频繁断开
症状:机器人经常与 Broker 断开连接
可能原因:
- 网络不稳定
- 机器人休眠
- Broker 配置问题
解决方案:
- 配置 Last Will 消息
- 调整 MQTT KeepAlive 参数
- 检查机器人连接状态(
connection主题)
16.2 调试工具
MQTT 调试
bash
# 使用 mosquitto 订阅所有主题
mosquitto_sub -t "vda5050/v3/+/+/+" -v
# 使用 MQTT Explorer
# 下载: https://mqtt-explorer.com/JSON 验证
使用 JSON Schema 验证消息:
bash
# 安装 ajv
npm install -g ajv
# 验证订单
ajv -s order.schema.json -d your-order.json日志分析
关键日志点:
- 订单接收和解析
- 状态更新发送
- 动作状态转换
- 错误和警告
- 连接状态变化
16.3 错误代码详解
| 错误类型 | 级别 | 说明 | 解决方案 |
|---|---|---|---|
VALIDATION_FAILURE | WARNING | 订单格式错误 | 检查 JSON 格式 |
UNSUPPORTED_PARAMETER | CRITICAL | 不支持的参数 | 升级固件或使用支持的参数 |
LOCALIZATION_ERROR | FATAL | 定位丢失 | 重新初始化位置 |
OUTSIDE_OF_CORRIDOR | CRITICAL | 超出走廊 | 停止并等待新订单 |
BLOCKED_ZONE_VIOLATION | CRITICAL | 阻塞区域违规 | 退出阻塞区域 |
RELEASE_LOST | CRITICAL | 区域授权丢失 | 执行回退行为 |
16.4 性能优化
消息频率
- 状态消息:建议 1-10 Hz
- 可视化消息:可选,10-30 Hz
- 订单更新:按需,避免过于频繁
带宽优化
- 仅发送必要的字段
- 使用增量状态更新
- 压缩大消息(如果支持)
错误恢复
- 实现自动重连机制
- 缓存未确认的消息
- 状态持久化(断点恢复)
16.5 测试清单
功能测试
- [ ] 订单发送和接收
- [ ] 订单更新(扩展基线)
- [ ] 订单取消
- [ ] 即时动作
- [ ] 状态上报
- [ ] 连接管理
- [ ] 区域处理
- [ ] 错误报告
边界条件测试
- [ ] 空订单(无视界)
- [ ] 连续订单更新
- [ ] 并发多个订单
- [ ] 网络断开恢复
- [ ] 机器人重启
性能测试
- [ ] 高频状态消息
- [ ] 大订单(多节点)
- [ ] 长时间运行稳定性
- [ ] 多机器人同时运行