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-8import timefrom 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 = 6Arm.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)xxxxxxxxxxdel Arm # 释放掉Arm对象