一、Python语言开发环境
1.Win10系统下使用
开发环境
系统:win10
IDE:PyCharm
Python版本:python 3.11.2
由于机械臂相关软件版本不定期更新,如果你使用的软件接口或协议与本文有出入,请联系官方技术人员及时更新。
2.项目创建
创建python文件,可以通过多种方式,本文中以Pycharm为示例。详述从项目创建到实际运行控制机械臂。
创建Python项目。打开Pycharm软件,在右上角’File-->New Project’。打开新建项目界面,在界面中可选择项目路径及项目名称、Python版本等信息。最后点击界面右下角‘Create’按钮。
3.写入Python程序
本文基于医疗工作站运行过程开发demo。将以下程序写入Python程序中即可。代码如下:
import socket
import time
import json
client1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 左臂
Lift = '192.168.1.18'
# 右臂
Right = '192.168.1.19'
# 打开控制器RS485
controller_modbus1 = '{"command":"set_modbus_mode","port":0,"baudrate":115200,"timeout":2}\r\n'
# 夹爪2初始化
gripper2_init = '{"command":"write_registers","port":0,"address":1000,"num":1,"data":[0,0],"device":9}\r\n'
# 夹爪2上使能
gripper2_activate = '{"command":"write_registers","port":0,"address":1000,"num":1,"data":[0,1],"device":9}\r\n'
# 夹爪2全速张开
gripper2_open = '{"command":"write_registers","port":0,"address":1000,"num":3,"data":[0, 9, 0, 0,255, 255],"device":9}\r\n'
# 夹爪2全速闭合
gripper2_close = '{"command":"write_registers","port":0,"address":1000,"num":1,"data":[4,11],"device":9}\r\n'
# 打开末端RS485
controller_modbus3 = '{"command":"set_modbus_mode","port":1,"baudrate":115200,"timeout ":2}\r\n'
# 夹爪1初始化
gripper1_init = '{"command":"write_registers","port":1,"address":1000,"num":2,"data":[0, 0, 0 ,0],"device":9}\r\n'
# 夹爪1上使能
gripper1_activate = '{"command":"write_registers","port":1,"address":1000,"num":2,"data":[0,1,0,1],"device":9}\r\n'
# 夹爪1旋转使能
gripper1_activate1 = '{"command":"write_registers","port":1,"address":1004,"num":4,"data":[1,104,1,128,1,104,2,2],"device":9} \r\n'
# 夹爪1正转2圈
gripper1_turn1 = '{"command":"write_registers","port":1,"address":1004,"num":4,"data":[1,104,32,32,2,104,0,2],"device":9}\r\n'
# 夹爪1反转3圈
gripper1_turn2 = '{"command":"write_registers","port":1,"address":1004,"num":4,"data":[1,104,32,32,-3,104,0,2],"device":9}\r\n'
# 夹爪1全速张开
gripper1_open = '{"command":"write_registers","port":1,"address":1000,"num":1,"data":[1,11],"device":9} \r\n'
# 夹爪1半速闭合
gripper1_close = '{"command":"write_registers","port":1,"address":1000,"num":1,"data":[2,11],"device":9}\r\n'
# 灵巧手拇指抬起
dexterous_hands_up = '{"command":"set_hand_seq","seq_num":1}\r\n'
# 灵巧手拇指按下
dexterous_hands_down = '{"command":"set_hand_seq","seq_num":2}\r\n'
# 右臂初始点位(低速)
right_robot_first = '{"command":"movej","joint":[90000,-90000,90000,-90000,90000,-30000],"v":5,"r":0,"trajectory_connect":0}\r\n'
# 右臂初始点位(高速)
right_robot_first_50 = '{"command":"movej","joint":[90000,-90000,90000,-90000,90000,-30000],"v":50,"r":0,"trajectory_connect":0}\r\n'
# 左臂初始点位(低速)
lift_robot_first = '{"command":"movej","joint":[0,30000,-120000,0,90000,0],"v":5,"r":0,"trajectory_connect":0}\r\n'
# 左臂初始点位(高速)
lift_robot_first_50 = '{"command":"movej","joint":[0,30000,-120000,0,90000,0],"v":50,"r":0,"trajectory_connect":0}\r\n'
# 左臂夹取预备点
lift_robot_clamping_up = '{"command":"movej","joint":[689,23747,-137732,24724,86936,-67],"v":50,"r":0,"trajectory_connect":0}\r\n'
# 左臂夹取点
lift_robot_clamping_down = '{"command":"movej","joint":[671,20176,-140953,31515,86934,-87],"v":5,"r":0,"trajectory_connect":0}\r\n'
# 左臂夹取抬起点2
lift_robot_clamping_down2 = '{"command":"movej","joint":[692,24377,-135531,21888,86933,-68],"v":5,"r":0,"trajectory_connect":0}\r\n'
# 左臂夹取抬起点3
lift_robot_clamping_down3 = '{"command":"movej","joint":[685,27501,-127202,10439,86932,-70],"v":5,"r":0,"trajectory_connect":0}\r\n'
# 左臂放回抬起点3
lift_robot_clamping_down3_1 = '{"command":"movej","joint":[692,24794,-136119,22056,86934,-63],"v":1,"r":0,"trajectory_connect":0}\r\n'
# 左臂夹取抬起点4
lift_robot_clamping_down4 = '{"command":"movej","joint":[690,27714,-128872,11896,86940,-96],"v":5,"r":0,"trajectory_connect":0}\r\n'
# 左臂扫码点
lift_Scan_the_code = '{"command":"movej","joint":[-46458,38633,-129434,855,87540,-63],"v":50,"r":0,"trajectory_connect":0}\r\n'
# 左臂开盖预备点1
lift_Open_the_lid_up_1 = '{"command":"movej","joint":[-29259,86,-98931,8309,87449,-498],"v":50,"r":0,"trajectory_connect":0}\r\n'
# 左臂开盖预备点2
lift_Open_the_lid_up_2 = '{"command":"movej","joint":[-29264,-3738,-109940,23142,87449,-504],"v":5,"r":0,"trajectory_connect":0}\r\n'
# 左臂开盖抬起点
lift_Open_the_lid_raise = '{"command":"movej","joint":[-29264,-3738,-109940,23142,87449,-504],"v":1,"r":0,"trajectory_connect":0}\r\n'
# 左臂关盖抬起点
lift_Open_the_lid_raise_50 = '{"command":"movej","joint":[-29264,-3738,-109940,23142,87449,-504],"v":50,"r":0,"trajectory_connect":0}\r\n'
# 左臂开盖点
lift_Open_the_lid = '{"command":"movej","joint":[-29267,-7683,-115002,32150,87448,-506],"v":5,"r":0,"trajectory_connect":0}\r\n'
# 左臂关盖点
lift_Open_the_lid_2 = '{"command":"movej","joint":[-29267,-7683,-115002,32150,87448,-506],"v":4,"r":0,"trajectory_connect":0}\r\n'
# 右臂吸取预备点
right_learn_up = '{"command":"movej","joint":[96317,-90006,88564,-117973,89829,-30086],"v":50,"r":0,"trajectory_connect":0}\r\n'
# 右臂吸取点
right_learn_down = '{"command":"movej","joint":[96304,-117306,108029,-117726,86164,-37017],"v":50,"r":0,"trajectory_connect":0}\r\n'
# 右臂注入过度点
right_inject_excessive = '{"command":"movej","joint":[102384,-99187,99769,-64241,89869,-30038],"v":50,"r":0,"trajectory_connect":0}\r\n'
# 右臂注入点
right_inject_target = '{"command":"movej","joint":[129148,-99191,103572,-95559,92741,-30526],"v":50,"r":0,"trajectory_connect":0}\r\n'
def Robot_instruct(lr, instruct):
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = lr
port = 8080
client.connect((host, port))
print('Robot_right_connect--OK')
control = instruct
client.send(control.encode('utf-8'))
time.sleep(0.5)
result = client.recv(1024).decode()
print(result)
client.close()
if __name__ == "__main__":
while True:
# 右臂外部设备测试
Robot_instruct(Right, controller_modbus1)
Robot_instruct(Right, gripper2_init)
Robot_instruct(Right, gripper2_activate)
time.sleep(2)
Robot_instruct(Right, gripper2_open)
time.sleep(1)
Robot_instruct(Right, dexterous_hands_down)
time.sleep(1)
Robot_instruct(Right, dexterous_hands_up)
Robot_instruct(Right, right_robot_first)
# 左臂外部设备测试
Robot_instruct(Lift, controller_modbus3)
Robot_instruct(Lift, gripper1_init)
Robot_instruct(Lift, gripper1_activate)
Robot_instruct(Lift, gripper1_activate1)
time.sleep(2)
Robot_instruct(Lift, gripper1_open)
Robot_instruct(Lift, lift_robot_first)
# ---------------------------------------------------------------------------------------------------------------------
# 左臂夹取
Robot_instruct(Lift, gripper1_open)
time.sleep(1)
Robot_instruct(Lift, lift_robot_clamping_up)
Robot_instruct(Lift, lift_robot_clamping_down)
time.sleep(0.5)
Robot_instruct(Lift, gripper1_close)
time.sleep(0.5)
Robot_instruct(Lift, lift_robot_clamping_down2)
Robot_instruct(Lift, lift_robot_clamping_down3)
# Robot_instruct(Lift, lift_robot_clamping_down4)
Robot_instruct(Lift, lift_robot_first)
Robot_instruct(Lift, lift_Scan_the_code)
Robot_instruct(Lift, gripper1_turn1)
time.sleep(4)
Robot_instruct(Lift, lift_Open_the_lid_up_1)
Robot_instruct(Lift, lift_Open_the_lid_up_2)
Robot_instruct(Lift, lift_Open_the_lid)
time.sleep(0.5)
Robot_instruct(Right, gripper2_close)
time.sleep(0.5)
Robot_instruct(Lift, gripper1_open)
time.sleep(0.5)
Robot_instruct(Lift, gripper1_close)
time.sleep(0.5)
Robot_instruct(Lift, gripper1_turn2)
time.sleep(2)
Robot_instruct(Lift, gripper1_turn2)
time.sleep(1)
Robot_instruct(Lift, gripper1_turn2)
Robot_instruct(Lift, lift_Open_the_lid_raise)
Robot_instruct(Lift, lift_Open_the_lid_up_1)
Robot_instruct(Lift, lift_robot_first_50)
time.sleep(1)
# 右臂滴液
Robot_instruct(Right, right_robot_first)
Robot_instruct(Right, right_learn_up)
time.sleep(0.5)
Robot_instruct(Right, dexterous_hands_down)
time.sleep(0.5)
Robot_instruct(Right, right_learn_down)
time.sleep(0.5)
Robot_instruct(Right, dexterous_hands_up)
time.sleep(0.5)
Robot_instruct(Right, right_learn_up)
Robot_instruct(Right, right_robot_first_50)
Robot_instruct(Right, right_inject_excessive)
Robot_instruct(Right, right_inject_target)
time.sleep(0.5)
Robot_instruct(Right, dexterous_hands_down)
time.sleep(0.5)
Robot_instruct(Right, dexterous_hands_up)
time.sleep(0.5)
Robot_instruct(Right, right_inject_excessive)
Robot_instruct(Right, right_robot_first_50)
time.sleep(1)
# 左臂取回
Robot_instruct(Lift, lift_Open_the_lid_up_1)
Robot_instruct(Lift, lift_Open_the_lid_raise_50)
time.sleep(0.5)
Robot_instruct(Lift, gripper1_turn1)
Robot_instruct(Lift, lift_Open_the_lid_2)
Robot_instruct(Lift, gripper1_turn1)
time.sleep(2.5)
Robot_instruct(Lift, gripper1_close)
time.sleep(1)
Robot_instruct(Right, gripper2_open)
Robot_instruct(Lift, lift_Open_the_lid_up_2)
Robot_instruct(Lift, lift_Open_the_lid_up_1)
time.sleep(0.5)
Robot_instruct(Lift, lift_robot_first_50)
Robot_instruct(Lift, lift_robot_clamping_down4)
Robot_instruct(Lift, lift_robot_clamping_down3_1)
Robot_instruct(Lift, gripper1_open)
Robot_instruct(Lift, lift_robot_first_50)
time.sleep(5)
4.运行实例
运行结果展示:
医疗工作站Demo演示视频