2. 冲突上报机制设计
冲突上报机制是机器人功能冲突处理体系的“神经系统”。若上层对冲突一无所知,则任何排查都无从谈起。本章聚焦于如何构建一个高效、可追溯、不漏报的冲突上报方案,覆盖自动上报规则、日志触发条件与人工报修入口三大核心要素。
2.1 现象识别:从异常到上报信号的映射
任何冲突在机器人系统中最终都会表现为可观测的现象。设计上报机制的第一步,是将这些现象提炼为可配置的上报信号。
| 现象类别 | 典型表现 | 上报信号 | 优先级 |
|---|---|---|---|
| 运动冲突 | 关节超速、路径规划失败 | MOTION_CONFLICT | 高 |
| 资源冲突 | 共享内存读写争抢 | RESOURCE_CONTENTION | 高 |
| 策略冲突 | 逻辑决策层死循环 | POLICY_CONFLICT | 中 |
| 通信冲突 | 消息队列溢出、模板匹配异常 | COMM_CONFLICT | 中 |
| 配置冲突 | 参数模板不一致 | CONFIG_CONFLICT | 低 |
2.2 数据采集:日志触发条件配置
日志触发条件是上报机制的核心数据源。只有精确的触发条件才能确保“该报则报,不该报不干扰”。以下为推荐的关键触发条件配置清单:
- 时序条件:连续 N 个周期(≤100 ms)同一冲突信号出现 3 次以上。
- 阈值条件:电机电流 / 链路时延 / 内存使用率超过预定义上限。
- 状态机跳变条件:状态机无法在限定时间内完成预期跃迁(如 idle→move 超时 500 ms)。
- 校验失败条件:CMD_CHECKSUM 模块检测到周期指令校验码不匹配。
- 系统异常条件:Watchdog 重置、总线错误、ROS 节点异常退出。
日志触发条件配置示例(YAML)
conflict_report:
trigger_conditions:
- type: "timing"
param: { window_ms: 500, min_count: 3 }
- type: "threshold"
param: { metric: "current_A", upper: 15.0 }
- type: "state_machine"
param: { expected_duration_ms: 200 }
- type: "checksum"
param: { module: "cmd_checksum", action: "trigger_on_mismatch" }
- type: "system"
param: { watch_event: ["watchdog_reset", "bus_error"] }
2.3 原因定位:自动上报规则引擎
自动上报规则采用轻量级规则引擎,它将日志触发条件与预定义的冲突码进行匹配,并决定上报什么内容、上报到哪个管道。
规则结构采用 IF [触发条件] THEN [上报动作] 格式:
规则引擎定义表示例
RULE: "运动超限冲突"
IF 触发类型 == "threshold"
AND 指标 == "current_A"
AND 数值 > 15.0
AND 持续时间 >= 200 ms
THEN
冲突码: "MOTION_OVERLOAD_001"
上报管道: "high_pri_queue"
附带数据: [关节ID, 电流曲线最后200ms, 负载率]
自动重启计数器: +1
2.4 修复动作:人工报修入口设计
人工报修是自动上报的互补通道。当自动上报失效,或操作员观察到了异常但系统尚未察觉时,人工报修入口必须提供低门槛、结构化的报修能力。
| 入口位置 | 触发方式 | 必填数据 | 可选数据 |
|---|---|---|---|
| HMI 操作面板 | 触摸屏"报修"按钮 | 冲突现象描述 | 视频 / 日志文件 |
| ROS Service 接口 | | 节点名 + 冲突码 | 上下文 snapshot |
| CLI 终端工具 | | 冲突类型 | 附件路径 |
| API 远程触发 | | 机器人 ID + 时间戳 | 诊断日志 |
2.5 复测与预防:上报有效性检查清单
部署冲突上报机制后,需要定期进行复测验证。建议使用以下检查清单进行系统性测试:
上报机制有效性检查清单
- 手动注入一次已知冲突(如模拟电机电流超限),确认自动上报信号在 1 秒内被推送。
- 检查上报日志是否包含完整上下文(时间戳、节点 ID、冲突码、关键指标)。
- 触发所有日志触发条件,确认没有任何条件被“静默”跳过。
- 通过人工报修入口提交虚构冲突,验证工单系统能正确接收并持久化。
- 模拟网络中断后恢复,确认上报队列具备持久化和断点重传能力。
- 检查冲突上报对机器人实时任务的影响,确保上报过程不导致二次崩溃。
预防措施方面,应定期审查上报规则与日志触发条件的误报率,根据历史数据动态调整阈值。同时,为每个冲突码设计上报频率上限,防止同一冲突在短时间内的消息风暴压垮上报管道。