概述
本篇实践介绍如何读取设备静态信息和关节诊断状态。应用场景包括检查在线关节、排查温度异常和定位设备故障。 对应的 C 示例为 2_hand_info.c。 参数和诊断字段见 设备身份与诊断 和 关节诊断数据类型。Python 侧没有对应的独立示例,但相关能力都有:
hand.handedness()、hand.ip()、hand.online_joints_count()、hand.joints、hand.effort_limit(),以及订阅 joint_diagnostics 取诊断快照。前置条件
硬件
软件
数据流
在线位图是 32 位整数,第 N 位对应索引 N 的关节。20 关节全在线时为0x000FFFFF。
关节的两套编号
这是读懂本示例输出、也是读懂joint_states 的关键。
每根手指占用 5 个 nid 号段但只用前 4 个,所以 5、10、15、20 被跳过。两者的换算关系实测吻合全部 20 个关节:
拿
joint_states 里的 nid 直接当数组下标会整体错位。
集成步骤
1. 发现并连接设备
本篇对应 C 示例。先用wuji_init() 初始化 SDK,通过 wuji_scan() 找到 Wuji Hand 2,再将目标序列号传给 wuji_connect()。连接调用返回后释放扫描结果,成功连接后继续读取信息。
idx 是扫描结果中已确认的 Wuji Hand 2 下标。没有匹配设备或连接失败时直接进入清理路径。
2. 读取设备信息和关节上限
使用wuji_hand_2_get_handedness() 读取手性,wuji_hand_2_online_joints_count() 读取在线数量。IP 字符串使用 wuji_hand_2_get_ip() 两次调用:先查询缓冲区长度,再分配并读取。
wuji_hand_2_get_all_effort_limit() 同时返回上限数组和在线位图。只有位图中标为在线的条目可供读取。
3. 获取一帧诊断快照
注册joint_diagnostics 回调,在回调中将条目复制到应用持有的快照,再用原子标志通知主线程。示例最多等待约 1 秒,随后关闭订阅,读取复制后的数据。
diag_snapshot_t 和 on_diag 是示例定义的快照结构与回调,C 示例 包含字段复制和跨线程同步。超时未收到帧时不读取快照条目。
4. 释放设备和 SDK
完成信息读取后断开连接、释放设备句柄,最后关闭 SDK。错误路径使用同一清理顺序。运行与输出
实测输出
在 20 关节全在线的右手 Wuji Hand 2 上实跑:
静置未使能时电流在零附近小幅波动,温度稳定在 50 摄氏度上下,这是正常状态。
注意事项
扩展用法
判断关节是否在线
位图比逐个查询快。(bitmap >> i) & 1 为 1 表示索引 i 的关节在线。注意这里用的是数组索引,不是 nid。
温度与电压的参考范围
实测静置状态温度 49 到 59 摄氏度、母线电压 12.3 到 12.4 V。长时间大幅运动后温度会上升,持续偏高要检查散热与负载。故障码排查
err_code 非零时对照故障码表定位。清除故障用 clear_fault(),清不掉说明故障仍然存在。
定位某个具体关节
已知标签想找 nid,用上面的换算公式。已知 nid 想找标签,反推索引i = (nid - 1) // 5 * 4 + (nid - 1) % 5,注意 nid 为 5、10、15、20 时无对应关节。