灵犀基础版Python SDK
1. 介绍
Gloria-D 基础版 SDK 是一套用于控制 灵犀 Gloria-D 基础版平行二指夹爪 的 Python 开发工具包。基础版采用位置控制模式,通过直接设定目标开口宽度和运动速度来控制夹爪动作,具有响应速度快、控制简单的特点,适用于对速度要求较高且不需要精确力矩控制的场景。
1.1 主要特性
核心能力
- 位置控制:支持毫米级精度的开口宽度设定
- 高速运动:速度范围 0 ~ 3000(3000 对应最大舵机转速 110rpm),满足高节拍场景需求
- 多型号适配:支持 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,速度 2000
servo.set_gripper_position(
servo_id=1,
gripper_type="100mm",
position_mm=50,
torque=0,
speed=2000
)
finally:
servo.close()
tip
基础版(非力控版本)的 torque 参数无效,建议始终设为 0。
4. 参数说明
4.1 核心控制参数
| 参数 | 范围 | 说明 |
|---|---|---|
position_mm | 0 ~ 夹爪最大行程 | 目标开口宽度(毫米) |
torque | 0 | 基础版无力矩控制,固定设为 0 |
speed | 0 ~ 3000 | 运动速度,数值越大越快(3000 对应最大舵机转速 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", 100, torque=0, speed=3000)
time.sleep(0.8)
# 快速闭合
servo.set_gripper_position(1, "100mm", 0, torque=0, speed=3000)
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=2000)
time.sleep(1)
# 低速闭合到目标位置
servo.set_gripper_position(1, "100mm", 25, torque=0, speed=500)
finally:
servo.close()
5.3 多级开口切换
在不同工位之间切换不同的夹持宽度。
import time
from Gloria_D import BusServo
servo = BusServo(port='COM5', baudrate=1000000)
try:
positions = [80, 50, 30, 10, 50, 100] # 毫米序列
for pos in positions:
print(f"移动到 {pos}mm")
servo.set_gripper_position(1, "100mm", pos, torque=0, speed=2000)
time.sleep(1)
# 读取实际位置
sensor = servo.read_sensor_data(1)
if sensor:
print(f" 实际位置值: {sensor['position']}")
finally:
servo.close()
5.4 传感器状态读取
基础版同样支持传感器数据读取,可用于监控运行状态。
import time
from Gloria_D import BusServo
servo = BusServo(port='COM5', baudrate=1000000)
try:
# 移动到指定位置
servo.set_gripper_position(1, "100mm", 50, torque=0, speed=2000)
time.sleep(1)
# 读取传感器数据
sensor = servo.read_sensor_data(1)
if sensor:
print(f"当前位置: {sensor['position']}")
print(f"当前速度: {sensor['speed']}")
print(f"当前负载: {sensor['load']}")
print(f"电压: {sensor['voltage'] * 0.1:.1f}V")
print(f"温度: {sensor['temperature']}℃")
finally:
servo.close()
5.5 循环夹放测试
import time
from Gloria_D import BusServo
servo = BusServo(port='COM5', baudrate=1000000)
try:
for i in range(10):
print(f"\n--- 第 {i+1} 次 ---")
# 张开
servo.set_gripper_position(1, "100mm", 80, torque=0, speed=2500)
time.sleep(0.8)
# 闭合
servo.set_gripper_position(1, "100mm", 5, torque=0, speed=2500)
time.sleep(0.8)
# 读取状态
sensor = servo.read_sensor_data(1)
if sensor:
print(f"位置: {sensor['position']}, 温度: {sensor['temperature']}℃")
finally:
servo.close()
6. API 参考
| 方法 | 说明 |
|---|---|
BusServo(port, baudrate, verbose) | 创建串口连接实例 |
ping(servo_id) | 检查舵机连接状态 |
set_gripper_position(id, type, mm, torque, speed) | 控制夹爪开口(核心接口,torque 设为 0) |
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. 基础版与力控版对比
| 特性 | 基础版(Standard) | 力控版(Force Control) |
|---|---|---|
| 速度范围 | 0 ~ 3000(最大 110rpm) | 0 ~ 150(最大 110rpm) |
| 力矩控制 | 不支持(torque=0) | 支持(0 ~ 1000,最大 35kg·cm) |
| 负载反馈 | 基本反馈 | 精确力矩反馈 |
| 典型场景 | 高速抓放、产线节拍 | 易碎品、柔性物体 |
| 控制复杂度 | 简单 | 较高 |
8. 注意事项
使用提示
- 速度范围:基础版速度范围为 0 ~ 3000(3000 对应最大舵机转速 110rpm),切勿与力控版混淆
- 力矩参数:基础版
torque无效,建议始终设为0 - 夹持保护:基础版无力矩反馈,闭合时注意避免过度挤压目标物体
- 通信间隔:连续发送指令之间建议加入
time.sleep(0.05)以上的延时 - 断电保护:操作完成后务必调用
servo.close()关闭连接