幻尔六轴串联机械臂二次开发 SDK
armpi_common 是一个用于控制幻尔六轴串联机械臂的 Python SDK。该 SDK 提供了完整的舵机通信协议实现,支持舵机的各种控制功能,包括位置控制、电机控制、参数配置等。
-
✅ 完整的写指令支持 (14/14)
- 舵机位置和电机模式控制
- 角度和时间控制运动
- 电压和温度限制设置
- LED 控制和错误处理
- 紧急停止功能
-
✅ 读指令支持 (14/14)
- 舵机状态读取
- 位置、温度、电压监控
- 配置参数读取
-
🛠️ 工具函数
- 校验和计算
- 字节操作工具
- 协议解析工具
- Python >= 3.8
- 支持串口通信的硬件设备
# 使用 PDM 安装依赖
pdm install
# 或者使用 pip
pip install pyserial-asyncio>=0.6from armpi_common.robot_arm_controller import RobotArmController
# 创建控制器实例
controller = RobotArmController(device='/dev/ttyUSB0', baudrate=115200)
# 设置舵机为位置控制模式
controller.set_joint_mode(1, 0, 0)
# 设置舵机角度和时间
controller.set_joint_angle_use_time(1, 300, 1000) # 关节1,角度300,时间1000ms
# 启动运动
controller.set_joint_move_start(1)
# 紧急停止
controller.set_joint_emergency_stop(1)# 设置为电机控制模式,正转速度500
controller.set_joint_mode(1, 1, 500)
# 设置为电机控制模式,反转速度-500
controller.set_joint_mode(1, 1, -500)# 设置电压限制
controller.set_joint_vin_limit(1, 6000, 12000) # 6V-12V
# 设置温度限制
controller.set_joint_temp_limit_range(1, 85) # 85°C
# 设置角度限制
controller.set_joint_angle_limit(1, 0, 1000) # 0-1000度
# 设置LED控制
controller.set_joint_led(1, 0) # LED常亮# 启用数据接收功能(读指令需要)
controller.enable_reception(True)
# 读取关节位置
position = controller.get_joint_position(1)
print(f"关节1位置: {position}")
# 读取关节温度
temp = controller.get_joint_temp(1)
print(f"关节1温度: {temp}")
# 读取关节电压
voltage = controller.get_joint_input_voltage(1)
print(f"关节1电压: {voltage}")
# 读取关节模式和速度
mode_speed = controller.get_joint_mode_and_speed(1)
print(f"关节1模式和速度: {mode_speed}")主要的机械臂控制器类。
RobotArmController(device='/dev/ttyUSB0', baudrate=115200, timeout=0)参数:
device: 串口设备路径baudrate: 波特率,默认115200timeout: 超时时间
set_joint_angle_use_time(joint_id, angle, time): 设置关节角度和运动时间set_joint_angle_with_time_after_start(joint_id, angle, delay_time): 设置延迟运动set_joint_move_start(joint_id): 启动关节运动set_joint_emergency_stop(joint_id): 紧急停止
set_joint_mode(joint_id, servo_mode, speed): 设置舵机工作模式servo_mode: 0-位置控制模式,1-电机控制模式speed: 转动速度,范围-1000~1000
set_joint_vin_limit(joint_id, vin_min, vin_max): 设置电压限制set_joint_temp_limit_range(joint_id, temp_limit): 设置温度限制set_joint_angle_limit(joint_id, angle_min, angle_max): 设置角度限制set_joint_angle_offset_adjust(joint_id, angle_offset): 临时角度偏移调整set_joint_angle_offset_write(joint_id, angle_offset): 永久角度偏移设置
set_joint_load_or_unload(joint_id, load_or_unload): 设置负载状态set_joint_led(joint_id, led_ctrl): 设置LED控制set_joint_led_error(joint_id, led_error): 设置LED错误报警
set_joint_id(joint_id, new_id): 设置舵机ID
get_joint_position(joint_id): 获取关节当前位置get_joint_temp(joint_id): 获取关节温度get_joint_input_voltage(joint_id): 获取关节输入电压get_joint_mode_and_speed(joint_id): 获取关节模式和速度get_joint_load_or_unload(joint_id): 获取关节负载状态
get_joint_move_and_time(joint_id): 获取最后一次角度参数和时间get_joint_move_and_wait_time(joint_id): 获取最后一次角度参数和延迟启动时间get_joint_angle_offset(joint_id): 获取角度偏移量get_joint_angle_limit(joint_id): 获取角度限制get_joint_vin_limit(joint_id): 获取电压限制get_joint_temp_max_limit(joint_id): 获取温度限制
get_joint_id(joint_id): 获取舵机IDget_joint_led_ctrl(joint_id): 获取LED控制状态get_joint_led_error(joint_id): 获取LED错误配置
指令有两种,写指令和读指令。写指令:后面一般带有参数,将相应功能的参数写进舵机,来完成某种动作。读指令:后面一般不带参数,舵机接收到读指令后会立即返回相应数据,返回的指令值和发送给舵机的"读指令"值相同,并且带有参数。
| 帧头 | ID | 数据长度(length) | 指令(cmd) | 参数(parm小端) | 校验和 |
|---|---|---|---|---|---|
| 0x55 0x55 | 0x01 | 0x07 | 0x01 | 0x1f4 0x3e8 | 0x16 |
Checksum = ~(ID + Length + cmd + Parm 1 + parm N)
若括号內的计算和超出 255 则取最低的一个字节,"~" 表示按位取反
完整的指令表请参考 src/armpi_common/cmdTable.py
- ✅ 写指令接口:100% 完成 (14/14)
- ✅ 读指令接口:100% 完成 (14/14)
- ✅ 工具函数:完成
- ✅ 协议解析:完成
欢迎提交 Issue 和 Pull Request!
MIT License