故障管理
L6 灵巧手的故障检测与清除功能。
概述
通过 hand.fault 访问故障管理功能:
- 清除故障码
- 读取故障状态(阻塞式、缓存)
故障码表
| 故障码 | 值 | 说明 |
|---|---|---|
NONE | 0 | 无故障 |
PHASE_B_OVERCURRENT | 1 | B 相过流 |
PHASE_C_OVERCURRENT | 2 | C 相过流 |
PHASE_A_OVERCURRENT | 4 | A 相过流 |
OVERLOAD_1 | 8 | 过载等级 1 |
OVERLOAD_2 | 16 | 过载等级 2 |
MOTOR_OVERTEMP | 32 | 关节电机过温 |
MCU_OVERTEMP | 64 | MCU 过温 |
清除故障
hand.fault.clear_faults()
清除所有关节的故障码。
读取故障
阻塞式读取
data = hand.fault.get_blocking(timeout_ms=500)
参数:
timeout_ms:超时时间(毫秒),默认 100
返回值:FaultData 对象,包含:
faults:L6Fault故障数据timestamp:时间戳
异常:
TimeoutError:超时未收到响应
缓存读取
data = hand.fault.get_snapshot()
返回最近缓存的故障数据,无数据时返回 None。
流式读取
通过顶层 hand.stream() 统一接收所有传感器事件:
from linkerbot.hand.l6 import SensorSource, FaultEvent
hand.start_polling({SensorSource.FAULT: 0.2})
for event in hand.stream():
match event:
case FaultEvent(data=data):
if data.faults.has_any_fault():
for code in data.faults.to_list():
if code.has_fault():
print(code.get_fault_names())
hand.stop_polling()
hand.stop_stream()
故障数据
L6Fault 属性
| 属性 | 说明 |
|---|---|
thumb_flex | 拇指弯曲 |
thumb_abd | 拇指侧摆 |
index | 食指 |
middle | 中指 |
ring | 无名指 |
pinky | 小指 |
L6Fault 方法
# 检查是否有任何故障
faults.has_any_fault() # -> bool
# 转为列表
faults.to_list() # -> list[FaultCode]
# 索引访问
faults[0] # thumb_flex
FaultCode 方法
# 检查单个关节是否有故障
faults.thumb_flex.has_fault() # -> bool
# 获取故障名称
faults.thumb_flex.get_fault_names() # -> list[str]
示例
检查并清除故障
from linkerbot import L6
with L6(side="left", interface_name="can0") as hand:
# 读取故障状态
data = hand.fault.get_blocking(timeout_ms=500)
if data.faults.has_any_fault():
print("检测到故障:")
if data.faults.thumb_flex.has_fault():
print(f" 拇指弯曲:{data.faults.thumb_flex.get_fault_names()}")
if data.faults.index.has_fault():
print(f" 食指:{data.faults.index.get_fault_names()}")
# 清除故障
hand.fault.clear_faults()
else:
print("无故障")
持续监控
from linkerbot import L6
from linkerbot.hand.l6 import SensorSource, FaultEvent
with L6(side="left", interface_name="can0") as hand:
hand.start_polling({SensorSource.FAULT: 0.2})
try:
for event in hand.stream():
match event:
case FaultEvent(data=data):
if data.faults.has_any_fault():
for code in data.faults.to_list():
if code.has_fault():
print(code.get_fault_names())
except KeyboardInterrupt:
pass
finally:
hand.stop_polling()
hand.stop_stream()