SO-ARM101 Pro 第五个舵机(HX-30HM)位置编码异常及360°旋转控制问题咨询
一、产品名称
-
机械臂型号:SO-ARM101 Pro Follower
-
舵机型号:HX-30HM
-
舵机数量:6 个
-
控制板:Hiwonder 舵机总线控制板
-
通信方式:UART 总线通信
-
波特率:1 Mbps
二、硬件及软件版本
-
舵机固件版本:V3.15
-
操作系统:Ubuntu 20.04
-
Python 版本:3.8.10
-
ROS 版本:ROS Noetic
-
使用 SDK:Hiwonder Servo Python SDK
三、问题描述
目前已经完成 SO-ARM101 六个舵机的通信测试,能够正常识别全部六个舵机,并通过 Python SDK 读取舵机的位置、电压、温度、电流等信息。
六个舵机的 ID 对应关系如下:
| 舵机 ID | 对应关节 |
|---|---|
| ID 1 | shoulder_pan |
| ID 2 | shoulder_lift |
| ID 3 | elbow_flex |
| ID 4 | wrist_flex |
| ID 5 | wrist_roll |
| ID 6 | gripper |
目前发现第五个舵机(ID 5,wrist_roll)存在位置反馈数据异常的问题。
连续多次读取,得到的数据基本一致:
-
原始位置值:33745
-
十六进制:0x83D1
-
电压:约 12.3 V
-
温度:约 44 ℃
-
电流:约 42~43 mA
-
通信状态:正常
-
舵机状态:未运动,无硬件错误标志
其他五个舵机的位置反馈值均处于普通 0~4095 范围内。
由于第五个舵机的原始位置值为 33745,超过普通 12-bit 位置范围,因此目前无法确定其正确的位置解码方式。
我们查阅了一些 Hiwonder 相关资料,发现 HX-30HM 可能支持有符号位置及多圈位置控制。
按照一种候选的 16-bit 符号幅值编码方式,0x83D1 可以解释为 -977,但目前无法确认这种编码是否适用于本机 V3.15 固件。
四、具体咨询问题
希望官方技术人员帮助确认以下问题:
1. 关于位置反馈编码
-
HX-30HM V3.15 的当前位置寄存器(0x38)采用什么编码方式?
-
读取到的 33745(0x83D1)是否属于正常的位置反馈数据?
-
该数值是否应该按照有符号数解释为 -977?
-
是否存在其他位置偏置或多圈编码机制?
2. 关于 360° 旋转及多圈控制
-
ID 5 对应的 wrist_roll 舵机是否支持完整 360° 旋转?
-
是否支持超过 360° 的多圈位置控制?
-
360° 是指单圈连续旋转,还是能够进行多圈绝对位置控制?
-
多圈位置反馈是否会在断电或重新上电后保留?
3. 关于目标位置控制
-
HX-30HM V3.15 的目标位置寄存器(0x2A)采用什么数据编码?
-
负数目标位置应该如何转换为十六进制数据?
-
当前 SDK 中的
Servo.move_to(position)是否支持负数位置及多圈位置控制? -
如果支持,应该使用什么函数或具体通信指令?
4. 关于官方技术资料
是否可以提供 HX-30HM V3.15 对应的完整寄存器表及通信协议文档,尤其是当前位置、目标位置、位置偏置和多圈控制部分?
五、希望得到的帮助
目前六个舵机均可以正常通信,第五个舵机也可以正常读取数据。
希望能够确认 ID 5 的位置反馈编码方式,并获得适用于 V3.15 固件的正确控制方法,以便后续通过 Python SDK 和 ROS1 实现 SO-ARM101 六关节控制。
感谢技术人员的帮助!