5.3.1 故障处理

故障处理子模块由健康诊断系统(HDS, Health Diagnostic System)实现,提供机器人运行时的诊断码、告警码、后处理信号的实时订阅能力,以及历史事件的查询接口。

核心功能

  • 实时订阅当前诊断码信息

  • 实时订阅当前告警码信息

  • 实时订阅后处理信号信息

  • 查询历史告警/诊断事件记录

完整的对二开用户开放的诊断码清单见 诊断码参考表。


话题接口

诊断码信息

话题名称

数据类型

描述

QoS

频率

/aima/hds/diag_code_list

aimdk_msgs/msg/DiagnosticInfoArray

当前诊断码列表

BEST_EFFORT+TRANSIENT_LOCAL

20Hz

  • DiagnosticInfoArray ros2-msg @ hds/msg/DiagnosticInfoArray.msg

    # 当前诊断码列表
    # 话题名称: /aima/hds/diag_code_list
    
    MessageHeader header          # 消息头
    DiagnosticInfo[] diagnostics
    
    • DiagnosticInfo ros2-msg @ hds/msg/DiagnosticInfo.msg

      uint64 timestamp        # 时间戳(单位:ns)
      uint64 first_timestamp  # 异常类型首次发生的时间戳(单位:ns)
      DiagnosticType type     # 异常类型(type.value:0 (NORMAL 常规-周期上报), 1 (TRIGGER_APPEAR 正触发-出现时上报), 2 (TRIGGER_DISAPPEAR 负触发-消失时上报))
      uint8 module_id         # 模块ID
      uint32 code             # 模块诊断码
      uint64 diag_code        # 完整诊断码(module_id + code 组合)
      string info             # 诊断信息描述
      

告警码信息

话题名称

数据类型

描述

QoS

频率

/aima/hds/alert_code_list

aimdk_msgs/msg/AlertCodeArray

当前告警码列表

BEST_EFFORT+TRANSIENT_LOCAL

20Hz

  • AlertCodeArray ros2-msg @ hds/msg/AlertCodeArray.msg

    # 当前告警码列表
    # 话题名称: /aima/hds/alert_code_list
    
    MessageHeader header  # 消息头
    AlertCode[] list
    
    • AlertCode ros2-msg @ hds/msg/AlertCode.msg

      uint64 timestamp        # 时间戳(单位:ns)
      uint64 first_timestamp  # 告警第一次发生的时间戳(单位:ns)
      string code             # 告警码,字符串形式
      

alert_code_list 是 diag_code_list 的子集,仅包含达到一定严重程度的诊断码:越紧急、越危险的故障越不会被过滤掉,而预留级和更低优先级事件只出现在 diag_code_list 中,不会进入 alert_code_list。


后处理信号信息

话题名称

数据类型

描述

QoS

频率

/aima/hds/post_proc/signal

aimdk_msgs/msg/PostProcSigArray

后处理信号列表

BEST_EFFORT+TRANSIENT_LOCAL

事件驱动(见下方说明)

  • PostProcSigArray ros2-msg @ hds/msg/PostProcSigArray.msg

    # 后处理信号列表
    # 话题名称: /aima/hds/post_proc/signal
    
    MessageHeader header        # 消息头
    PostProcSig[] post_proc_sig
    
    • PostProcSig ros2-msg @ hds/msg/PostProcSig.msg

      uint64 timestamp  # 时间戳
      uint64 diag_code  # 诊断码
      SigSet sig_set    # 信号集合
      
    • SigSet ros2-msg @ hds/msg/SigSet.msg

      int32 robot_sig         # 整机行为后处理信号(255 (恢复默认), 其他值见下表)
      uint8 motion_sig        # 运动行为信号(预留,始终为 0)
      uint8 sound_sig         # 声音行为信号(预留,始终为 0)
      uint8 led_sig           # 灯行为信号(预留,始终为 0)
      uint8 facial_sig        # 表情行为信号(预留,始终为 0)
      uint32 reserve          # 预留信号(始终为 0)
      uint64 funcdisable_sig  # 功能禁用信号
      

    robot_sig 取值参考(X2 Ultra 旗舰版/旗舰焕新版):

    robot_sig 值

    十六进制

    含义

    触发动作

    17

    0x11

    PMU 急停

    PMU 触发急停,机器人下电

    19

    0x13

    SDCU 急停

    SDCU 对关节执行掉电 + TTS 提示:“当前已处于安全急停模式,机器人关节已卸力,请注意安全”

    18

    0x12

    SDCU 急停恢复中

    关节上电,机器人正在初始化

    26

    0x1A

    PMU 急停恢复完成

    HAL_EtherCAT、DCU、关节上电

    31

    0x1F

    急停恢复完成

    TTS 提示:“当前安全急停已恢复,机器人进入阻尼模式”

    42

    0x2A

    阻尼倒地保护

    运控进入阻尼模式(仅重启恢复)+ TTS 提示:“抱歉,我没办法站立了,请立即关机并前往客户端查看故障原因”

    52

    0x34

    摔倒保护

    机器人停止运动 + TTS 提示:“检测到机器摔倒,已切换到摔倒保护模式,请注意周边安全”

    90

    0x5A

    上肢失能

    上肢关节掉使能(仅重启恢复),下肢仍可站立 + TTS 提示:“抱歉,我没办法做动作,请暂停使用并前往客户端查看故障原因”

    131

    0x83

    下肢一级过温

    限制高负载功能和性能,禁止高负载动作,可能打断当前动作 + TTS 提示下肢过温

    132

    0x84

    腰部一级过温

    限制高负载功能和性能,禁止高负载动作,可能打断当前动作 + TTS 提示腰部过温

    136

    0x88

    电池一级过温

    限制高负载功能和性能,禁止高负载动作,可能打断当前动作 + TTS 提示电池过温

    154

    0x9A

    停止导航应用

    导航任务被中断 + TTS 提示:“抱歉,检测到系统存在故障,不能进行自主导航任务了。请前往客户端查看故障原因”

    161

    0xA1

    电量异常提醒

    TTS 提示:“电量显示异常,请在使用完成后检查电池连接线”(每 300 秒重复)

    193

    0xC1

    灵创数据异常

    灵创平台文件加载失败或数据异常,运控无法响应 + TTS 提示动作文件异常

    209

    0xD1

    交互相机遮挡

    TTS 提示:“我的摄像头好像被遮挡了,视觉功能将会有影响,请帮我检查一下吧”

    210

    0xD2

    内置麦异常

    TTS 提示:“我的内置麦克风故障了,没办法听到声音,请及时联系售后”

    255

    0xFF

    恢复默认

    恢复默认状态(所有告警清除后发送一次)

该话题为事件驱动,发布规则如下:

  • 当存在触发后处理的告警时(robot_sig≠0 的告警存活),以约 20Hz 持续下发对应后处理信号;

  • 当所有后处理告警全部消失时,发送一帧 robot_sig=255 的恢复信号(仅一次);

  • 其余时间(无后处理告警且已发送过恢复信号)保持静默,不发布数据。

    注意:当 robot_sig=154 时,正在执行的导航任务会被自动中断。如需程序化获知,请订阅 /aima/pnc/pnc_task_response 话题,观察 task_status 是否变为 FAILED;或订阅 /task_master/state 话题,观察 main_state 是否从 PILOT 变为 IDLE。


服务接口

查询历史事件

服务名称

数据类型

描述

/aimdk_5Fmsgs/srv/GetHdsEventHistory

aimdk_msgs/srv/GetHdsEventHistory

查询历史告警/诊断事件记录

  • GetHdsEventHistory ros2-srv @ hds/srv/GetHdsEventHistory.srv

    # 查询历史告警/诊断事件记录
    # 服务名称: /aimdk_5Fmsgs/srv/GetHdsEventHistory
    
    RequestHeader header       # 请求头
    HdsEventQuery query        # 过滤条件
    ---
    ResponseHeader header      # 响应头
    HdsEventRecord[] records   # 历史事件记录
    uint32 total_count         # 满足过滤条件的总记录数
    bool has_more              # 是否还有更多数据
    
    • HdsEventQuery ros2-msg @ hds/msg/HdsEventQuery.msg

      uint64 start_time        # 起始时间戳(单位:ns), 0=不限制
      uint64 end_time          # 结束时间戳(单位:ns), 0=不限制
      uint64[] diag_codes      # 按诊断码过滤
      string[] alert_codes     # 按告警码过滤
      string[] alert_locations # 按告警部位过滤
      uint8 state              # 状态过滤(0 (STATE_ALL 全部), 1 (STATE_ACTIVE 活跃中), 2 (STATE_RECOVERED 已恢复))
      bool order_desc          # 是否按时间倒序
      uint32 offset            # 分页偏移
      uint32 limit             # 分页条数
      
    • HdsEventRecord ros2-msg @ hds/msg/HdsEventRecord.msg

      uint64 id                  # 历史事件记录 ID
      uint64 diag_code           # 诊断码
      string alert_code          # 告警码
      string alert_location      # 告警部位(预留)
      uint64 first_timestamp     # 首次发生时间戳(单位:ns)
      uint64 last_timestamp      # 最近发生时间戳(单位:ns)
      uint64 recover_timestamp   # 恢复时间戳(单位:ns), 0=未恢复
      uint64 duration_ns         # 持续时长(单位:ns)
      bool recovered             # 是否已恢复
      

历史记录仅含诊断码、时间戳与恢复状态,不含告警级别、故障描述、处理方案等详情;如需这些信息,请按 diag_code 查阅 诊断码参考表。

历史事件默认保留 30 天,存储总量不超过 1024 MB / 1000 万条记录,超限自动清理;查询超出保留范围的历史事件将返回空结果。

编程示例

详细的编程示例和代码说明请参考:

小心

ROS的服务(service)机制在跨板通信时存在一些待优化问题, 二次开发时请参考例程添加异常处理、快速重试等保护机制

机器人处于稳定站立 / 走跑模式时, 请勿批量快速启动 ROS 节点(建议不超过 2 个/秒), 短时间内大量节点参与 DDS 发现会造成通信拥塞、影响运控实时性, 存在机器人失稳摔倒风险