灵犀力控版Python SDK
1. 介绍
Gloria-D 力控版 SDK 是一套用于控制 灵犀 Gloria-D 力控版平行二指夹爪 的 Python 开发工具包。力控版内置力矩传感与反馈机制,可在夹持过程中精确控制施加的力矩大小,适用于对夹持力有严格要求的场景(如易碎物品抓取、柔性物体操作等)。
1.1 主要特性
核心能力
- 力矩控制:支持 0 ~ 1000 范围力矩精确设定(1000 对应舵机最大扝矩 35kg·cm),实现柔顺抓取
- 位置控制:支持毫米级精度的开口宽度设定
- 力反馈读取:实时读取负载反馈,判断夹持状态
- 多型号适配:支持 50mm / 100mm 夹爪型号
- 状态读取:实时获取位置、速度、负载、电压、温度等传感器数据
2. 环境准备
2.1 依赖安装
- Python 3.10 及以上版本
- pyserial
pip install pyserial
2.2 硬件连接
- 将夹爪通过串口转接板(USB-TTL / RS485)连接至电脑
- 确认串口号:
- Windows:设备管理器中查看,如
COM5 - Linux:
/dev/ttyUSB0 - macOS:
/dev/tty.usbserial-xxx
- Windows:设备管理器中查看,如
- 确保夹爪供电正常
3. 快速开始
from Gloria_D import BusServo
# 创建连接(波特率默认 1000000)
servo = BusServo(port='COM5', baudrate=1000000, verbose=True)
try:
# 检查舵机连接
err = servo.ping(1)
if err == 0:
print("夹爪连接正常")
else:
print(f"连接异常,错误码: {err}")
# 控制夹爪张开到 50mm,力矩 200,速度 100
servo.set_gripper_position(
servo_id=1,
gripper_type="100mm",
position_mm=50,
torque=200,
speed=100
)
finally:
servo.close()
警告
力控版的 speed 范围为 0 ~ 150(150 对应最大舵机转速 110rpm),请勿使用基础版的速度值(0 ~ 3000),否则可能导致不可预期的行为。
4. 参数说明
4.1 核心控制参数
| 参数 | 范围 | 说明 |
|---|---|---|
position_mm | 0 ~ 夹爪最大行程 | 目标开口宽度(毫米) |
torque | 0 ~ 1000 | 夹持力矩,力控版核心参数(1000 对应最大扭矩 35kg·cm),0 表示不施加额外力矩 |
speed | 0 ~ 150 | 运动速度,力控版速度范围较小(150 对应最大舵机转速 110rpm) |
4.2 支持的夹爪型号
| 型号 | 开口范围 | 适用场景 |
|---|---|---|
"50mm" | 0 ~ 50 mm | 小型精密物体抓取 |
"100mm" | 0 ~ 100 mm | 中等尺寸物体抓取 |
5. 典型使用场景
5.1 柔性物体夹持(低力矩)
适用于抓取易碎或柔软物体,使用较低力矩防止损坏。
import time
from Gloria_D import BusServo
servo = BusServo(port='COM5', baudrate=1000000)
try:
# 先张开夹爪
servo.set_gripper_position(1, "100mm", 80, torque=0, speed=100)
time.sleep(1)
# 低力矩缓慢闭合夹持
servo.set_gripper_position(1, "100mm", 20, torque=150, speed=50)
finally:
servo.close()
5.2 刚性物体夹持(高力矩)
适用于抓取金属、塑料等硬质物体,施加较大夹持力确保稳固。
import time
from Gloria_D import BusServo
servo = BusServo(port='COM5', baudrate=1000000)
try:
# 张开夹爪
servo.set_gripper_position(1, "100mm", 80, torque=0, speed=100)
time.sleep(1)
# 高力矩闭合夹持
servo.set_gripper_position(1, "100mm", 10, torque=800, speed=80)
finally:
servo.close()
5.3 力反馈读取与夹持检测
力控版夹爪可实时读取负载反馈,用于判断是否成功夹持物体。
import time
from Gloria_D import BusServo
servo = BusServo(port='COM5', baudrate=1000000)
try:
# 执行夹持
servo.set_gripper_position(1, "100mm", 15, torque=300, speed=60)
time.sleep(1)
# 读取传感器数据
sensor = servo.read_sensor_data(1)
if sensor:
print(f"当前位置: {sensor['position']}")
print(f"当前负载: {sensor['load']}")
print(f"当前速度: {sensor['speed']}")
print(f"电压: {sensor['voltage'] * 0.1:.1f}V")
print(f"温度: {sensor['temperature']}℃")
# 判断是否夹到物体(负载非零说明有阻力)
if abs(sensor['load']) > 50:
print("检测到夹持物体")
else:
print("未检测到物体")
finally:
servo.close()
5.4 循环夹放测试
import time
from Gloria_D import BusServo
servo = BusServo(port='COM5', baudrate=1000000)
try:
for i in range(5):
print(f"\n--- 第 {i+1} 次 ---")
# 张开
servo.set_gripper_position(1, "100mm", 80, torque=0, speed=100)
time.sleep(1.5)
# 闭合夹持
servo.set_gripper_position(1, "100mm", 10, torque=400, speed=60)
time.sleep(1.5)
# 读取状态
sensor = servo.read_sensor_data(1)
if sensor:
print(f"负载: {sensor['load']}, 位置: {sensor['position']}")
finally:
servo.close()
6. API 参考
| 方法 | 说明 |
|---|---|
BusServo(port, baudrate, verbose) | 创建串口连接实例 |
ping(servo_id) | 检查舵机连接状态 |
set_gripper_position(id, type, mm, torque, speed) | 控制夹爪开口(力控核心接口) |
move_servo(id, position, torque, speed) | 直接控制舵机原始位置 |
read_sensor_data(servo_id) | 读取传感器综合数据 |
get_position(servo_id) | 读取当前位置值 |
set_servo_id(old_id, new_id) | 修改舵机 ID |
set_baudrate(servo_id, baudrate) | 设置通信波特率 |
set_servo_torque_enable(servo_id, enable) | 扭矩使能开关 |
close() | 关闭串口连接 |
7. 力控版与基础版对比
| 特性 | 力控版(Force Control) | 基础版(Standard) |
|---|---|---|
| 速度范围 | 0 ~ 150(最大 110rpm) | 0 ~ 3000(最大 110rpm) |
| 力矩控制 | 支持(0 ~ 1000,最大 35kg·cm) | 不支持(torque=0) |
| 负载反馈 | 精确力矩反馈 | 基本反馈 |
| 典型场景 | 易碎品、柔性物体 | 高速抓放、产线节拍 |
| 控制复杂度 | 较高 | 简单 |
8. 注意事项
使用提示
- 速度范围:力控版速度范围为 0 ~ 150(150 对应最大舵机转速 110rpm),切勿使用基础版的速度值(0 ~ 3000)
- 力矩设置:力矩值 0 表示不施加额外力矩(自由运动),根据目标物体选择合适的力矩值
- 操作顺序:建议先将夹爪张开到大于目标物体的位置,再闭合夹持
- 通信间隔:连续发送指令之间建议加入
time.sleep(0.05)以上的延时 - 断电保护:操作完成后务必调用
servo.close()关闭连接