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