Wuji Hand 2 的 Python 语义化 API。统一模式:
hand.{resource}().{action}()。所有操作都针对整只手(20 关节)。wuji_sdk,pip install wuji-sdk)——通用的安装、设备连接与数据订阅模型见 Wuji SDK 文档,源码见 wuji-sdk 仓库。
连接
网络连接前提:Wuji Hand 2 使用静态 IP,不使用 DHCP。设备按左右手出厂分配固定地址——左手
192.168.1.110,右手 192.168.1.111,网关 192.168.1.1,子网掩码 255.255.255.0。首次连接前将电脑对应网卡设置为同一网段(如 192.168.1.50),再按地址连接。出厂 IP 可后续修改,见 ip(SET/GET)。通过 SdkManager 连接(推荐)
auto_connect 和 connect 的 device_name="wuji_hand_2" 重载会直接返回 WujiHand2 实例(带类型提示)。handedness 与 sn、address 互斥。多只同手性 Hand 2 在网时会抛 AmbiguousHandedness,请改用 sn 指定。
ConnectOptions
enable_bridge=False 切换成独占单客户端模式。
实例属性
hand.hw_version().get() 返回出厂硬件版本 HwVersion(major, minor, patch)。0.0.0 表示未在工厂端写入。
Hand 级资源
本节覆盖整手 API(20 关节)。单关节的读取与动作通过hand.joint(k) / hand.joints() 返回的 JointHandle 进行(见 关节遍历)。设备默认运行在 MIT 控制模式,控制模式不通过 Python API 设置。
handedness(GET)
获取左右手识别结果(left / right)。online_joints_count(GET)
获取在线关节数(0–20)。joint_diagnostics(SUB)
关节诊断流:订阅逐关节的状态字 / 电流 / 母线电压 / 温度 / 错误码。帧变长,仅含在线关节,用每条的nid 定位关节。本流与 joint_states 共用同一条设备流,调低其中一个的推送频率,另一个会同步降低,见 joint_states(SUB)。
error_code_current 用静态方法 WujiHand2.describe_error(code) 解码,返回对象含错误名、说明、severity(Warning / DeferredStop / ImmediateStop / Fatal)与 clear_policy(AutoClear / ManualClear / NonClearable),未知错误码返回 None。返回对象的 code 字段是整数,与传入的错误码相同。直接打印诊断条目对象时,错误码按 16 进制显示。
关节角请用
joint_states 流的 position,诊断流不含关节角。comm_diag(GET,1 Hz)
通信诊断:每秒返回 5 根手指的吞吐 / 错误率。effort_limit(SET/GET)
力矩限幅:读写各关节的力矩上限(A)。mit_params(SET/GET)
MIT 阻抗参数:读写各关节的 kp / kd。clear_fault(EXEC)
清除故障:直接动作,无参数时作用于整手。用户零点(origin)
把当前物理位置标定为关节侧零位。关节正在运动时延迟到下次 IDLE 才生效。使能 / 失能 / 急停
joint_states(SUB)
关节状态流:订阅 20 关节的实时状态帧,原生输出率 1000 Hz。可通过订阅句柄调低推送频率:sub.set_rate(hz) 返回实际生效值,传 0 恢复原生输出率,完整用法见 Wuji SDK 数据订阅。本流与 joint_diagnostics 共用同一条设备流,调低其中一个的推送频率,另一个会同步降低。
推送频率调节适用于
joint_states、joint_diagnostics、指尖触觉与 imu 流。固件与 Wuji SDK 需同批升级到支持该能力的版本,版本要求见对应发布记录。position 为关节侧角度(rad),velocity 为关节侧角速度(rad/s),这是获取关节角与关节速度的唯一推荐路径。帧变长、仅含在线关节,用每条的 nid 定位关节。joint_diagnostics 流不包含关节角。joint_command(PUB)
关节命令:发布 20 关节的位置 / 速度 / 力矩前馈。每次发送恰好 20 个JointCommand,每个携带该关节的 position / velocity / effort。
指尖触觉数据流(SUB)
指尖触觉需要配备指尖触觉传感器的 Wuji Hand 2.2 (Beta) 硬件,以及固件 v2.1.0 与 SDK v2026.7.21 及以上版本配套。
FingertipSensorInfo 元数据(其 format JSON 描述数据帧布局),再订阅该指的 FingertipSensorData 流并按 format 解码。拇指 40 个触点,其余手指 34 个,原生输出率 100 Hz,可通过订阅句柄调低。
examples/python/wuji_hand_2/ 下的 3.fingertip_typed.py 示例。
指尖触觉标定(EXEC)与状态查询(GET)
零基线重标定:一次调用对全部 5 个指尖做零基线重标定。tactile_status 为阻塞查询(最长约 1 s)。轮询到 state == TactileState.Ready 即标定完成。
Flash 日志导出(诊断)
out_dir 中写入一个 flash_<serial>_<YYYY-MM-DD_HHMMSS>.jsonl 文件。省略 out_dir 时,文件保存到 ~/.wuji/logs。
SDK 先写入临时文件,导出完成后再将其保存为 JSONL 文件。导出失败时,SDK 会自动清理临时文件,输出目录中不会出现残缺的导出结果。
多个会话同时导出同一设备的日志时,SDK 会自动重试。若重试后仍无法完成,本次导出会报设备忙。SDK 会清除临时文件,不会保留未完成的日志。
ip(SET/GET)
读写设备静态 IP 地址。set 把新 IP 写入设备 flash,固件不会热切换正在运行的以太网栈,新 IP 下次重启才生效。set 之后、重启之前,get 仍返回当前生效的 IP。
set 写入新地址、reboot 重启设备、按新 IP 重连、get 确认。
reboot(EXEC)
重启设备。设备会断连,重启后需重新连接。常与ip().set() 搭配,让写入 flash 的新 IP 生效。
imu(SUB)
板载 IMU 流:以 100 Hz 的原生输出率推送加速度与角速度,可通过订阅句柄调低。设备不做板载姿态融合,orientation 字段不可用,按 ROS sensor_msgs/Imu 约定以 orientation_covariance[0] = -1 标记朝向无效。数据按 IMU 传感器自身坐标系输出,各轴与手部结构的对应关系将随手部模型后续更新明确。
ImuData 是跨设备通用类型,字段定义见 Wuji SDK 数据类型参考。
关节遍历
JointHandle 提供 label / index(用于与 effort_limit() / mit_params() 等 20 元素返回数组做下标对应),以及单关节资源与动作。FingerHandle 用于按手指遍历关节。
JointHandle
关节句柄:提供 label / index、单关节资源与单关节动作。FingerHandle
手指句柄:遍历该手指的 4 个关节。数据类型
JointDiagnosticsFrame / JointDiagnosticsEntry
关节诊断帧:hand.joint_diagnostics().subscribe() 流的帧类型。变长,仅含在线关节。
MitParam
MIT 参数:mit_params().get() 返回元素。
set 接受单个 (kp, kd)(应用到全部关节)或长度 20 的列表(逐关节)。get 返回 20 个元素,离线关节为 None。
JointStateFrame
关节状态帧:hand.joint_states().subscribe().recv() 返回值。变长,仅含在线关节。
JointStateEntry
单关节状态。JointCommand
关节命令:joint_command().publish().send() 入参元素。
HandCommunicationDiagnostics
通信诊断数据。FingertipSensorInfo / FingertipSensorData
指尖传感器元数据与数据帧:get_fingertip_info(finger) 返回值与 fingertip_{finger}_data 订阅帧。
TactileStatus / TactileType / TactileState
触觉状态:hand.tactile_status(finger) 返回值。
TactileState.Calibrating == 1。
StatusWord
状态字:JointDiagnosticsEntry 的status_word 字段类型,SDK 暴露的公开状态视图。
Hand2CommSummary
帧级通信健康摘要:JointDiagnosticsFrame 的comm 字段类型,同时覆盖设备内部总线与 SDK 本地端到端(以太网)两段。设备内部快照由 SDK 常驻任务以 1 Hz 自动刷新,无需手动轮询。
设备内部字段的判读:
age_ms、tactile_* 以及每关节的 comm_* 字段同属一份快照,由 SDK 以 1 Hz 刷新。固件升级或触觉标定进行期间会有意跳过这次刷新,因此短暂的陈旧值属预期状态而非故障。用 comm_get_failures 区分两种情况:age_ms 增大而 comm_get_failures 不变 = 正在有意跳过,comm_get_failures 持续增加 = 刷新本身在失败。关节编号
标签格式:
{finger}_S{1..4}(如 thumb_S1、pinky_S4)。
异常处理
所有 SDK 操作错误统一抛WujiException,消息中携带错误类型前缀(Disconnected、Timeout、PathNotFound、SchemaMismatch、SerializeError、…)。业务侧按需 try / except 即可。