Skip to content

踩坑GitHub agilexrobotics/piper_sdk1 个月前

Piper SDK CAN总线Bus-Off后无自动恢复致机械臂失联 ​

本文由 AI 根据公开内容整理,可能有误,请以原文为准:No CAN bus recovery / failure state feedback — silent failure(GitHub agilexrobotics/piper_sdk #109)

状态:有绕过办法

问题 ​

Piper机械臂因电源不稳导致Linux SocketCAN进入bus-off或error-passive状态后,SDK仅记录错误日志而不尝试重置总线。SendCanMessage返回失败状态但调用方未处理恢复逻辑,ReadCan线程捕获异常后永久break退出,导致机械臂完全无响应,必须物理断电重连CAN接口才能恢复。

环境 ​

机型:agilex-piper;SDK:piper_sdk(piper_interface_v2.py, can_encapsulation.py);系统:Linux SocketCAN

解决办法 ​

  1. 在上层控制循环中周期性调用SDK的isOk函数检测总线健康状态,若返回False则判定为总线无数据或异常。
  2. 当检测到isOk为False时,主动执行CAN接口关闭与重新初始化操作,替代等待内部自动恢复。
  3. 避免依赖已注释掉的内部重连逻辑,在应用层实现外部看门狗机制监控isOk返回值并触发复位流程。
  4. 针对ReadCan线程异常退出问题,在应用层封装独立监控线程,一旦发现读取停止即重建CAN连接实例。

讨论原作者:@rphly 等,版权归原作者所有。

来源

本页事实对应的公开页面,以原文为准。

  1. GitHub agilexrobotics/piper_sdk #109:No CAN bus recovery / failure state feedback — silent failure访问 2026-10-23