外观
踩坑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
解决办法
- 在上层控制循环中周期性调用SDK的
isOk函数检测总线健康状态,若返回False则判定为总线无数据或异常。 - 当检测到
isOk为False时,主动执行CAN接口关闭与重新初始化操作,替代等待内部自动恢复。 - 避免依赖已注释掉的内部重连逻辑,在应用层实现外部看门狗机制监控
isOk返回值并触发复位流程。 - 针对
ReadCan线程异常退出问题,在应用层封装独立监控线程,一旦发现读取停止即重建CAN连接实例。
讨论原作者:@rphly 等,版权归原作者所有。
来源
本页事实对应的公开页面,以原文为准。