Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

故障管理

L20Lite 灵巧手的故障检测功能。

概述

通过 hand.fault 访问故障管理功能:

  • 读取故障状态(阻塞式、缓存)

故障码表

故障码说明
NONE0无故障
VOLTAGE_ABNORMAL1过压/欠压
ENCODER_ABNORMAL2磁编码器异常
OVERTEMPERATURE4温度过热
OVERCURRENT8电流过流
OVERLOAD32负载过载

读取故障

阻塞式读取

from linkerbot.exceptions import TimeoutError

try:
    data = hand.fault.get_blocking(timeout_ms=500)
except TimeoutError:
    print("读取超时")

参数

  • timeout_ms:超时时间(毫秒),默认 100

返回值FaultData 对象,包含:

  • faultsL20liteFault 故障数据
  • timestamp:时间戳

异常

  • TimeoutError:超时未收到响应

缓存读取

data = hand.fault.get_snapshot()
if data:
    print(f"有故障:{data.faults.has_any_fault()}")

返回最近缓存的故障数据,无数据时返回 None

故障数据

L20liteFault 属性

属性说明
thumb_flex拇指弯曲
thumb_abd拇指侧摆
index_flex食指弯曲
middle_flex中指弯曲
ring_flex无名指弯曲
pinky_flex小指弯曲
index_abd食指侧摆
ring_abd无名指侧摆
pinky_abd小指侧摆
thumb_yaw拇指旋转

L20liteFault 方法

# 检查是否有任何故障
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 L20lite

with L20lite(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_flex.has_fault():
            print(f"  食指弯曲:{data.faults.index_flex.get_fault_names()}")
    else:
        print("无故障")

遍历所有关节故障

from linkerbot import L20lite

with L20lite(side="left", interface_name="can0") as hand:
    data = hand.fault.get_blocking(timeout_ms=500)

    if data.faults.has_any_fault():
        for i, code in enumerate(data.faults.to_list()):
            if code.has_fault():
                print(f"关节 {i} 故障:{code.get_fault_names()}")