xxxxxxxxxx
该案例需要启动Dofbot对应的Docker运行!
一、API简介
1.打开或者关闭总线舵机扭矩对应的API为:Arm_serial_set_torque(enable)
参数解释:
enable:enable=0关闭扭矩,机械臂可以手动掰动舵机的角度,不接收电平信号;enable=1打开扭矩,舵机接收电平信号维持当前的角度,发命令才可以改变角度。
返回值:无。
Arm_serial_servo_write_offset_switch(id)
参数解释:
id:id=0时,清空所有舵机的中位调整,恢复默认;id=1~6,对应六个舵机的ID号,底层单片机在接收到此命令后,会读取对应ID的舵机的角度数据,如果在合理的范围内,则保存起来,超过范围或者查不到舵机ID则不保存。
返回值:无。
Arm_serial_servo_write_offset_state()
参数解释:
返回值:返回设置中位偏差的状态state,state=0表示没有检测到该舵机;state=1表示设置中位成功;state=2表示超过设置中位的范围值。
二、代码内容
代码路径:/root/Dofbot/2.sys_settings/2.Offset/offset.ipynb
此代码不能一次按顺序全部执行,必须分步骤执行,这样才可以保证正确调整。调整的结果是让机械臂保持直立的状态。
注意:此程序仅在需要调整中位的时候才能使用,不可随意使用,否则导致中位不准影响抓取效果。
x#!/usr/bin/env python3
#coding=utf-8
import time
from Arm_Lib import Arm_Device
# 创建机械臂对象
Arm = Arm_Device()
time.sleep(.1)
xxxxxxxxxx
#让舵机归中直立状态
Arm.Arm_serial_servo_write6(90, 90, 90, 90, 90, 180, 1000)
time.sleep(2)
xxxxxxxxxx
# 关闭扭矩,此时可以用手掰动舵机的角度
Arm.Arm_serial_set_torque(0)
xxxxxxxxxx
# 调节好了某个舵机的角度后,可以单独设置某个舵机中位偏差
id = 6
Arm.Arm_serial_servo_write_offset_switch(id)
time.sleep(.1)
state = Arm.Arm_serial_servo_write_offset_state()
if state == 1:
print("set offset ok!")
elif state == 2:
print("error! set offset overrun !")
elif state == 0:
print("error! set offset error !")
xxxxxxxxxx
# 也可以一次性设置全部舵机(1-6号)中位偏差
for i in range(6):
id = i + 1
Arm.Arm_serial_servo_write_offset_switch(id)
time.sleep(.1)
state = Arm.Arm_serial_servo_write_offset_state()
if state == 1:
print("id:%d set offset ok!" % id)
elif state == 2:
print("error!id:%d set offset overrun !" % id)
elif state == 0:
print("error!id:%d set offset error !" % id)
xxxxxxxxxx
# 调整完成后,打开扭矩
Arm.Arm_serial_set_torque(1)
xxxxxxxxxx
# 清除所有舵机设置的中位偏差,恢复默认状态.
# 如果需要清除所有舵机的中位偏差,请删除下方的#再运行此单元
#Arm.Arm_serial_servo_write_offset_switch(0)
xxxxxxxxxx
del Arm # 释放掉Arm对象