4所示。司机<一个类="headerlink" href="#drivers" title="¶">¶

真正一个机器人驱动程序可以控制一个机器人,是连接到一台电脑。机器人驱动程序使用特定的软件接口控制和监视特定机器人控制器,使计算机能够直接控制机器人的手臂。

机器人司机提供另一种选择:裁判:“离线编程<后处理程序>”(一个程序模拟,生成的,然后,转移到raybet雷竞app下载机器人和执行)。与机器人司机你可以移动机器人虽然是模拟(在线编程)。

本文展示了一个示例的在线编程项目使用机器人驱动程序:<一个href="//www.jasonament.com/blog/online-programming/" class="reference external">//www.jasonament.com/blog/online-programming/

在RoboDK任何机器人仿真程序可以使用一个机器人在机器人执行驱动程序。机器人运动模拟器然后与真正的机器人,可以同步实时调试机器人项目。

更多的信息在我们的文档:<一个类="reference external" href="//www.jasonament.com/doc/en/Robot-Drivers.html">//www.jasonament.com/doc/en/Robot-Drivers.html RobotDrivers

4.1。司机命令和响应<一个类="headerlink" href="#driver-commands-and-responses" title="¶">¶

RoboDK沟通的司机使用控制台或标准输入/输出。的命令和响应是一个空格分隔的字符串格式的参数列表。共同价值观是度,遵循轴机器人的数量。提出了使用XYZRPW格式(毫米/度)。

可用命令列表从RoboDK司机:

连接连接请求。RoboDK提供IP、端口和景深。即连接192.168.0.100 10000 6断开断开连接请求。即断开停止/退出停止司机(过程终止)。即停止192.168.0.100暂停暂停运行。RoboDK提供时间在500年即暂停女士MOVJ执行联合行动。RoboDK提供关节和姿势。例如MOVJ -36.3 30.2 -15.3 0.0 75.1 -36.3 156.0 -114.8 187.5 -180.0 0.0 180.0 MOVL执行线性移动。RoboDK提供关节和姿势。例如MOVL 18.6 16.8 3.8 0.0 69.3 18.6 156.0 52.7 187.5 -180.0 0.0 180.0 MOVLSEARCH执行线性搜索行动。 RoboDK provides joints and pose. i.e. MOVLSEARCH 18.6 16.8 3.8 0.0 69.3 18.6 156.0 52.7 187.5 -180.0 0.0 180.0 MOVC Execute a circular move. RoboDK provides joints 1, joints 2, pose 1 and pose 2. i.e. MOVC -4.3 43.0 -36.4 0.0 83.3 -4.3 -36.3 30.2 -15.3 0.0 75.1 -36.3 215.1 -16.3 187.5 -180 0.0 180 156.0 -114.8 187.5 -180 0.0 180 CJNT Request to retrieve the current joint position of the robot. i.e. CJNT SPEED Set the speeds. RoboDK provides mm/s, deg/s, m/s2 and deg/s2. i.e. SPEED 1000.0 200.0 1500.000 150.000 SETROUNDING Set the rounding/smoothing/blending value. Sub-zero values means accurate. i.e. SETROUNDING -1 or SETROUNDING 10 SETDO Set a digital output on the controller. RoboDK provides the IO name and value. i.e. SETDO 5 1 5 1, or SETDO 0 0 VARNAME VALUE WAITDI Wait for a digital input on the controller. RoboDK provides the IO name and value. i.e. WAITDI 5 1 5 1, or WAITDI 0 0 VAR VALUE SETTOOL Set the Tool Center Point. RoboDK provides the pose. i.e. SETTOOL 0.0 0.0 0.0 0.0 0.0 0.0 RUNPROG Run a program call on the controller. RoboDK provides the program ID (if any) and the program name. i.e. RUNPROG 10 Program_10 or RUNPROG -1 ProgramCall POPUP Display a pop-up message on the teach-pendant (if applicable). RoboDK provides the message. i.e. POPUP This is a message

从司机RoboDK可用响应列表:

短信在连接日志窗口中显示一条消息,RoboDK连接状态栏。状态栏有颜色,例如,“准备好”将显示在绿色、蓝色的“等待”,“工作”在黄色和其他信息将显示为红色。推荐使用短,一句话。如短信:准备好了短信的状态栏中显示一条消息RoboDK的主窗口。如短信:等待司机控制器热身再保险报告状态为API驱动程序命令/响应。即。“职责=机器人。setParam(‘司机’,some_command)”。例如RE:好的CMDLIST显示可用的自定义列表命令RoboDK连接日志窗口中。如。 "CMDLIST:c Command1|This is a command|c Command2|This is a second command|" JNTS Report the robot joints to RoboDK with high accuracy (around 6 decimals). e.g. JNTS:0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 JNTS_MOVING Report the robot joints to RobDK while the robot is moving (less accurately). e.g. JNTS_MOVING:0.0, 0.0, 0.0, 0.0, 0.0, 0.0

4.2。司机的例子<一个类="headerlink" href="#driver-example" title="¶">¶

本节显示了一个示例Python库卡机器人IIWA司机。这个驱动程序使用TCP / IP远程Java服务器进行通信。这个例子也可以在/ RoboDK / api /机器人/文件夹。

apikukaiiwa。py,库卡IIWA
# - * -编码:utf - 8 - *# 2015 - 2022版权RoboDK公司——//www.jasonament.com/# Apache许可下的,2.0版本(“许可证”);#你可能不使用这个文件除了遵守许可证。#你可以获得许可证的副本# http://www.apache.org/licenses/license - 2.0#除非适用法律要求或书面同意,软件#在许可证下发布的分布在一个“目前的”基础上,#没有任何形式的保证或条件,明示或默示。#查看许可证的管理权限和特定的语言#限制下的许可。#####这是一个Python模块,允许驾驶KUKA IIWA机器人。#这个Python模块可以直接运行在控制台模式下测试其功能。#这个模块允许通过命令行与机器人交流。#使用相同的命令,我们可以手动输入RoboDK驱动机器人的电脑。# RoboDK司机都位于/ RoboDK / api /机器人/默认情况下。司机可以PY文件或EXE文件。##驱动程序模块化。他们不是RoboDK可执行的一部分,但他们必须放置在C: / RoboDK / api /机器人/,然后,连接的连接参数菜单:# 1。右键单击一个机器人在RoboDK,然后,选择“连接到机器人”。# 2。在“更多选项”菜单可以更新驱动程序的位置和名称。#驱动程序连接是目前可用的驱动程序自动。#关于机器人驱动程序可用的更多信息:# //www.jasonament.com/doc/en/Robot-Drivers.html RobotDrivers##或者标准的编程方法(生成一个程序,然后,转移到机器人和执行)可以运行一个程序直接仿真机器人#的机器人运动模拟器然后同步与真正的机器人。#项目产生RoboDK可以运行在机器人通过右键单击项目,然后选择“机器人”上运行。#的例子:# https://www.youtube.com/watch?v=pCD--kokh4s##在线编程项目的例子:# //www.jasonament.com/blog/online-programming/##可以控制机器人的运动从RoboDK API(例如,从一个Python或c#程序使用RoboDK API)。#相同的代码是用来模拟,选择真正的机器人。#的例子:# //www.jasonament.com/offline-programming##从RoboDK API建立连接:# //www.jasonament.com/doc/en/PythonAPI/robolink.html robolink.Item.ConnectSafe##在控制台模式下快速手动测试的例子:#用户条目:连接192.168.123.1 7000#反应:短信:机器人或连接故障的响应#反应:短信:准备好了#用户条目:MOVJ 10 20 30 40 50 60 70#反应:短信:工作…#反应:短信:准备好了#用户条目:CJNT#反应:短信:工作…#反应:JNTS: 10 20 30 40 50 60 70## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -进口套接字进口结构体进口sys进口再保险io进口BytesIO# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#设置最小数量预计的自由度nDOFs_MIN=7#设置驱动程序版本DRIVER_VERSION=“库卡RoboDK司机IIWA v1.0.1”# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#库卡IIWA命令MSG_CJNT=1MSG_SETTOOL=2MSG_SPEED=3MSG_ROUNDING=4MSG_MOVEJ=10MSG_MOVEL=11MSG_MOVEC=12MSG_MOVEL_SEARCH=13MSG_POPUP=20.MSG_PAUSE=21MSG_RUNPROG=22MSG_SETDO=23MSG_WAITDI=24MSG_GETDI=25MSG_SETAO=26MSG_GETAI=27MSG_MONITOR=127年MSG_ACKNOWLEDGE=128年MSG_DISCONNECT=999年# - - - - - - - - - - - -通信类库卡机器人IIWA - - - - - - - - - - - - -ComRobot:”“”通信类库卡IIWA机器人。这个类处理这个驱动程序(PC)和机器人之间的通信。”“”连接=#连接状态是已知的#这是创建对象时执行def__init__(自我):自我BUFFER_SIZE=512年#字节自我超时=5*60#秒:它必须足够的时间运动来完成自我袜子=没有一个def__del__(自我):自我断开连接()def断开连接(自我):断开与机器人。”“”“自我连接=如果自我袜子:试一试:自我袜子关闭()除了OSError:返回返回真正的def连接(自我,知识产权,港口=30000年):”““连接到机器人提供了连接参数”。“全球ROBOT_MOVING自我断开连接()print_message(“连接到机器人% s:%我%(知识产权,港口))#创建新的套接字连接自我袜子=套接字套接字(套接字AF_INET,套接字SOCK_STREAM)自我袜子settimeout(36000年)UpdateStatus(ROBOTCOM_WORKING)试一试:自我袜子连接((知识产权,港口))除了ConnectionRefusedError作为e:print_message(str(e))返回自我连接=真正的ROBOT_MOVING=自我send_line(DRIVER_VERSION)print_message(“等待欢迎消息…”)robot_response=自我recv_line()打印(robot_response)sysstdout冲洗()返回真正的defsend_b(自我,味精):”“向机器人发送一条直线通过通信端口(TCP / IP)”。“试一试:发送=自我袜子发送(味精)如果发送= =0:返回返回真正的除了ConnectionAbortedError作为e:自我连接=打印(str(e))返回defrecv_b(自我,buffer_size):”“从机器人接收一行通过通信端口(TCP / IP)”。“bytes_io=BytesIO()试一试:范围(buffer_size):bytes_io(自我袜子recv(1))b_data=bytes_iogetvalue()除了ConnectionAbortedError作为e:自我连接=打印(str(e))返回没有一个如果b_data= =b:返回没有一个返回b_datadefsend_line(自我,字符串=没有一个):“””发送一串字符\ \ n的机器人。”“字符串=字符串取代(\ n,“< br >”)如果sysversion_info(0]<3:返回自我send_b(字节(字符串+\ 0))# Python 2。x只其他的:返回自我send_b(字节(字符串+\ 0,“utf - 8”))Python 3 #。x只defrecv_line(自我):”““接收一个字符串的机器人。它读取到一个空字符串" "终止字符串=b沙里河=自我recv_b(1)沙里河! =b\ 0:#读到以空字符结尾字符串=字符串+沙里河沙里河=自我recv_b(1)返回str(字符串解码(“utf - 8”))# python 2和python 3兼容defsend_int(自我,全国矿工工会):“””发送int(32位)机器人。”“如果isinstance(全国矿工工会,浮动):全国矿工工会=(全国矿工工会)elifisinstance(全国矿工工会,int):全国矿工工会=全国矿工工会(0]返回自我send_b(结构体(>我的,全国矿工工会))defrecv_int(自我):”““收到一个int(32位)的机器人。”“缓冲=自我recv_b(4)全国矿工工会=结构体解压缩(>我的,缓冲)返回全国矿工工会(0]defrecv_double(自我):”““收到一个双(64位)的机器人。”“缓冲=自我recv_b(8)全国矿工工会=结构体解压缩(“> d ',缓冲)返回全国矿工工会(0]defrecv_acknowledge(自我):”““等待接收命令承认从机器人。”“真正的:stat_ack=自我recv_int()如果stat_ack= =MSG_MONITOR:jnts_moving=自我recv_array()print_joints(jnts_moving,真正的)elifstat_ack= =MSG_ACKNOWLEDGE:返回真正的其他的:print_message(“意想不到的反应机器人”)UpdateStatus(ROBOTCOM_CONNECTION_PROBLEMS)自我断开连接()返回defsend_array(自我,):”“向机器人发送一组双打。”“如果isinstance(,列表):#如果是垫与关节()=(tr())(0]n_values=len()如果自我send_int(n_values):返回如果n_values>0:缓冲=b范围(n_values):缓冲=缓冲+结构体(“> d ',(])返回自我send_b(缓冲)返回真正的defrecv_array(自我):”““接收一个数组的双打机器人。”“n_values=自我recv_int()# print_message (' n_values: %我' % n_values)=[]如果n_values>0:缓冲=自我recv_b(8*n_values)=列表(结构体解压缩(“>”+str(n_values)+' d ',缓冲))#打印(的值:+ str(值))返回defSendCmd(自我,cmd,=没有一个):””“向机器人发送一个命令。否则返回True,如果成功,则返回False。”“”#打印(SendCmd (cmd = ' + str (cmd) + '值= ' + str(如果其他值”值)+ ')')#跳过命令如果机器人不连接如果自我连接:UpdateStatus(ROBOTCOM_NOT_CONNECTED)返回如果自我send_int(cmd):print_message(“机器人连接断了”)UpdateStatus(ROBOTCOM_NOT_CONNECTED)返回如果没有一个:返回真正的elifisinstance(,列表):=(]如果自我send_array():print_message(“机器人连接断了”)UpdateStatus(ROBOTCOM_NOT_CONNECTED)返回返回真正的# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#通用RoboDK驱动机器人为一个特定的类机器人=ComRobot()ROBOT_IP=“172.31.1.147”# IP的机器人ROBOT_PORT=30000年#机器人的通信端口ROBOT_MOVING=# - - - - - - - - - - - -机器人连接- - - - - - - - - - - - - - - - - -#与机器人建立连接defRobotConnect():全球机器人全球ROBOT_IP全球ROBOT_PORT返回机器人连接(ROBOT_IP,ROBOT_PORT)#断开的机器人defRobotDisconnect():全球机器人机器人断开连接()返回真正的# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#通用RoboDK司机工具#注意,一个简单的print()将刷新信息到日志窗口RoboDK机器人连接的#发送print()可能不会刷新标准输出,除非缓冲达到一定大小defprint_message(消息):”“”在连接日志窗口中显示一条消息的连接状态栏RoboDK(短信:)。状态栏有颜色,例如,\“\”将显示在绿色、蓝色\“等待\”,\“\”在黄色和其他消息将显示为红色。推荐使用短,一句话。”“”打印(短信:“+消息)sysstdout冲洗()#尽快更新RoboDK非常有用defshow_message(消息):”“”显示一条消息在主窗口的状态栏RoboDK(短信:)”。“打印(短信:“+消息)sysstdout冲洗()#尽快更新RoboDK非常有用defprint_response(消息):”“”司机状态报告为API驱动程序命令/响应(RE:)。即\“resp =机器人。setParam(‘司机’,some_command) \”。”“”打印(“RE:”+消息)sysstdout冲洗()#尽快更新RoboDK非常有用defprint_commands(消息):”“”显示可用的自定义命令列表(c)在连接日志窗口RoboDK (CMDLIST:)。例如:\“c Command1 | |这是一个命令c Command2 |这是第二个命令| \””“”打印(”CMDLIST:“+消息)sysstdout冲洗()#尽快更新RoboDK非常有用defprint_joints(关节,is_moving=):”“”报告机器人关节RoboDK (JNTS:或者JNTS_MOVING:)。提供准确的关节值时,机器人是静态的(JNTS:),或少精密如果机器人目前移动(JNTS_MOVING:)。”“”如果is_moving:#显示反馈机器人关节的运动如果ROBOT_MOVING:打印(”JNTS_MOVING:“+”“加入(格式(x,“.3f”)x关节))其他的:打印(”JNTS:“+”“加入(格式(x,“.6f”)x关节))sysstdout冲洗()#尽快更新RoboDK非常有用# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#常量值显示状态使用UpdateStatus ()ROBOTCOM_UNKNOWN=- - - - - -1000年#:未知状态(红色)ROBOTCOM_CONNECTION_PROBLEMS=- - - - - -3#:机器人连接问题状态(红色)ROBOTCOM_DISCONNECTED=- - - - - -2#:机器人断开状态(红色)ROBOTCOM_NOT_CONNECTED=- - - - - -1#:机器人不连接状态(红色)ROBOTCOM_READY=0#:机器人准备状态(绿色),即短信:准备好了ROBOTCOM_WORKING=1#:机器人工作状态(黄色),即短信:工作ROBOTCOM_WAITING=2#:等待机器人状态(蓝色),即短信:等待#最后机器人状态保存状态=ROBOTCOM_DISCONNECTEDdefUpdateStatus(set_status=没有一个):”“”UpdateStatus将发送一个适当的消息RoboDK这将导致一个特定的颜色。例如,\“\”将显示在绿色、蓝色\“等待\”,\“\”在黄色和其他信息将显示为红色。如短信:准备好了”“”全球状态如果set_status没有一个:状态=set_status如果状态= =ROBOTCOM_CONNECTION_PROBLEMS:print_message(“连接问题”)elif状态= =ROBOTCOM_DISCONNECTED:print_message(“断开”)elif状态= =ROBOTCOM_NOT_CONNECTED:print_message(“未连接”)elif状态= =ROBOTCOM_READY:print_message(“准备好了”)elif状态= =ROBOTCOM_WORKING:print_message(“工作……”)elif状态= =ROBOTCOM_WAITING:print_message(“等……”)其他的:print_message(“未知状态”)# RoboDK提供的示例命令集,您可以通过命令行defTestDriver():RunCommand(“连接”)RunCommand(“速度250”)RunCommand(“SETTOOL -0.025 -41.046 50.920 60.000 -0.000 90.000)RunCommand(“CJNT”)RunCommand(“MOVJ -5.362010 46.323420 20.746290 74.878840 -50.101680 61.958500)RunCommand(“MOVEL 0 0 0 0 0 0 -5.362010 50.323420 20.746290 74.878840 -50.101680 61.958500”)RunCommand(“暂停1000”)RunCommand(“断开”)# - - - - - - - - - - - - - - - - - - - - - - - - - - - -主驱动循环- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# STDIN读取和处理每个命令(无限循环)#重要:这必须从RoboDK RoboDK可以通过STDIN正常饲料的命令#这个驱动程序也可以通过控制台运行在控制台模式提供命令的输入defRunDriver():”“”主要动力循环。STDIN读取和处理每个命令(无限循环)。”“”sysstdin:RunCommand()defRunCommand(cmd_line):”“”解析RoboDK命令字符串(STDIN或命令行)和适当的操作转发到机器人通信类。命令字符串前缀和一个命令,紧随其后的是它的参数(空格分隔)。共同价值观是度,遵循轴机器人的数量。提出了使用XYZRPW格式(毫米/度)。:param str cmd_line:命令字符串可用命令:. .代码块:文本连接连接请求。RoboDK提供IP、端口和景深。即连接192.168.0.100 10000 6断开断开请求。即断开停止/退出停止司机(过程终止)。即停止192.168.0.100暂停暂停运行。在女士RoboDK提供时间。例如500年暂停MOVJ执行联合行动。RoboDK提供关节和姿势。例如MOVJ -36.3 30.2 -15.3 0.0 75.1 -36.3 156.0 -114.8 187.5 -180.0 0.0 180.0MOVL执行线性移动。RoboDK提供关节和姿势。例如MOVL 18.6 16.8 3.8 0.0 69.3 18.6 156.0 52.7 187.5 -180.0 0.0 180.0MOVLSEARCH执行线性搜索行动。RoboDK提供关节和姿势。例如MOVLSEARCH 18.6 16.8 3.8 0.0 69.3 18.6 156.0 52.7 187.5 -180.0 0.0 180.0MOVC执行一个循环移动。RoboDK提供关节,关节2,体式1和2。例如MOVC -4.3 43.0 -36.4 0.0 83.3 -4.3 -36.3 30.2 -15.3 0.0 75.1 -36.3 215.1 -16.3 187.5 -180 0.0 180 156.0 -114.8 187.5 -180 0.0 180CJNT请求来检索当前机器人的关节位置。例如CJNT速度设置的速度。RoboDK提供mm / s,度/ s, m / s2和度/ s2。即速度1000.0 200.0 1500.000 150.000SETROUNDING设置圆角/平滑/混合值。零度以下的值意味着准确。即SETROUNDING 1或SETROUNDING 10SETDO设定一个数字输出的控制器。RoboDK提供了IO名称和值。例如SETDO 5 1 5 1,或SETDO 0 0 VARNAME值WAITDI等待一个数字输入控制器。RoboDK提供了IO名称和值。例如WAITDI 5 1 5 1,或WAITDI 0 0 VAR值SETTOOL设置工具中心点。RoboDK提供了姿势。即SETTOOL 0.0 0.0 0.0 0.0 0.0 0.0RUNPROG运行一个程序调用控制器。RoboDK提供程序ID(如果有的话)和项目名称。例如RUNPROG 10 Program_10 RUNPROG 1 ProgramCall在示教器弹出显示一个弹出消息(如果适用)。RoboDK提供了信息。即弹出这个消息”“”如果cmd_line()= =”“:#跳过如果没有提供命令返回全球ROBOT_IP全球ROBOT_PORT全球机器人全球ROBOT_MOVING#带进一行字一个数字列表defline_2_values():=[]:试一试:数量=浮动()附加(数量)除了ValueError:通过返回cmd_words=cmd_line分裂(' ')#“如果len = = 0cmd=cmd_words(0]cmd_values=line_2_values(cmd_words(1:])#[]如果len < = 1n_cmd_values=len(cmd_values)n_cmd_words=len(cmd_words)收到了=没有一个如果cmd_linestartswith(“连接”):#连接到机器人提供的IP和端口如果n_cmd_words> =2:ROBOT_IP=cmd_words(1]如果n_cmd_words> =3:ROBOT_PORT=int(cmd_words(2])收到了=RobotConnect()elifn_cmd_values> =nDOFs_MINcmd_linestartswith(“MOVJ”):UpdateStatus(ROBOTCOM_WORKING)#激活监控反馈ROBOT_MOVING=真正的#执行联合行动。j2 RoboDK提供j - 1,…,, j7, x, y, z, w, p, r如果机器人SendCmd(MSG_MOVEJ,cmd_values):#等待命令被执行如果机器人recv_acknowledge():#通知,我们用这个命令UpdateStatus(ROBOTCOM_READY)elifn_cmd_values> =nDOFs_MINcmd_linestartswith(“MOVLSEARCH”):UpdateStatus(ROBOTCOM_WORKING)#激活监控反馈ROBOT_MOVING=真正的#执行线性移动。j2 RoboDK提供j - 1,…,, x, y, z, w, p, r如果机器人SendCmd(MSG_MOVEL_SEARCH,cmd_values(0:n_cmd_values):#等待命令被执行如果机器人recv_acknowledge():#获取接触关节jnts_contact=机器人recv_array()print_joints(jnts_contact)elifn_cmd_values> =nDOFs_MINcmd_linestartswith(“MOVL”):UpdateStatus(ROBOTCOM_WORKING)#激活监控反馈ROBOT_MOVING=真正的#执行线性移动。j2 RoboDK提供j - 1,…,, j7, x, y, z, w, p, r如果机器人SendCmd(MSG_MOVEL,cmd_values):#等待命令被执行如果机器人recv_acknowledge():#通知,我们用这个命令UpdateStatus(ROBOTCOM_READY)elifn_cmd_values> =2*(nDOFs_MIN+6)cmd_linestartswith(“MOVC”):UpdateStatus(ROBOTCOM_WORKING)#激活监控反馈ROBOT_MOVING=真正的#执行一个循环移动。j2 RoboDK提供j - 1,…,, x, y, z, w, p, r为two targetsxyzwpr12=cmd_values(- - - - - -12:]如果机器人SendCmd(MSG_MOVEC,xyzwpr12):#等待命令被执行如果机器人recv_acknowledge():#通知,我们用这个命令UpdateStatus(ROBOTCOM_READY)elifcmd_linestartswith(“CJNT”):UpdateStatus(ROBOTCOM_WORKING)#获取机器人的当前位置如果机器人SendCmd(MSG_CJNT):收到了=机器人recv_array()print_joints(收到了)elifn_cmd_values> =1cmd_linestartswith(“速度”):UpdateStatus(ROBOTCOM_WORKING)#第一个值是线性速度mm / s#重要!我们只能发送一个“准备好”指令speed_values=(- - - - - -1,- - - - - -1,- - - - - -1,- - - - - -1]范围(马克斯(4,len(cmd_values))):speed_values(]=cmd_values(]# speed_values [0] = speed_values[0] #线速度mm / s# speed_values [1] = speed_values[1] #关节速度mm / s# speed_values [2] = speed_values[2] #线性加速度mm / s2# speed_values [3] = speed_values[3] #联合加速度/ s2如果机器人SendCmd(MSG_SPEED,speed_values):#等待命令被执行如果机器人recv_acknowledge():#通知,我们用这个命令UpdateStatus(ROBOTCOM_READY)elifn_cmd_values> =6cmd_linestartswith(“SETTOOL”):UpdateStatus(ROBOTCOM_WORKING)#设置工具坐标系提供了6 XYZWPR cmd_values RoboDK如果机器人SendCmd(MSG_SETTOOL,cmd_values):#等待命令被执行如果机器人recv_acknowledge():#通知,我们用这个命令UpdateStatus(ROBOTCOM_READY)elifn_cmd_values> =1cmd_linestartswith(“暂停”):UpdateStatus(ROBOTCOM_WAITING)#运行一个暂停如果机器人SendCmd(MSG_PAUSE,cmd_values(0):#等待命令被执行如果机器人recv_acknowledge():#通知,我们用这个命令UpdateStatus(ROBOTCOM_READY)elifn_cmd_values> =1cmd_linestartswith(“SETROUNDING”):#设置舍入/平滑值。也称为ZoneData ABB或对发那科问如果机器人SendCmd(MSG_ROUNDING,cmd_values(0):#等待命令被执行如果机器人recv_acknowledge():#通知,我们用这个命令UpdateStatus(ROBOTCOM_READY)elifn_cmd_values> =2cmd_linestartswith(“SETDO”):UpdateStatus(ROBOTCOM_WORKING)# dIO_id = cmd_values [0]# dIO_value = cmd_values [1]如果机器人SendCmd(MSG_SETDO,cmd_values(0:2):#等待命令被执行如果机器人recv_acknowledge():#通知,我们用这个命令UpdateStatus(ROBOTCOM_READY)elifn_cmd_values> =2cmd_linestartswith(“WAITDI”):UpdateStatus(ROBOTCOM_WORKING)# dIO_id = cmd_values [0]# dIO_value = cmd_values [1]如果机器人SendCmd(MSG_WAITDI,cmd_values(0:2):#等待命令被执行如果机器人recv_acknowledge():#通知,我们用这个命令UpdateStatus(ROBOTCOM_READY)elifn_cmd_values> =1n_cmd_words> =3cmd_linestartswith(“RUNPROG”):UpdateStatus(ROBOTCOM_WORKING)program_id=cmd_values(0]#程序ID自动提取程序的名字是程序ID代码=cmd_words(2]# % program_id“计划%我”=再保险搜索(r' ^ (? P < program_name >。*) \ ((? P <参数>。*)\)”,代码)code_dict=groupdict()program_name=code_dict(“program_name”]arg游戏=code_dict(“参数”]取代(' ',)分裂(”、“)打印(“program_name:”+program_name)打印(的参数:+str(arg游戏))机器人SendCmd(MSG_RUNPROG)机器人send_int(program_id)机器人send_line(program_name)一个arg游戏:机器人send_line(一个)#等待程序调用完成如果机器人recv_acknowledge():#通知,我们用这个命令UpdateStatus(ROBOTCOM_READY)elifn_cmd_words> =2cmd_linestartswith(“弹出”):UpdateStatus(ROBOTCOM_WORKING)消息=cmd_line(6:]机器人send_line(消息)#等待命令被执行如果机器人recv_acknowledge():#通知,我们用这个命令UpdateStatus(ROBOTCOM_READY)elifcmd_linestartswith(“断开”):#断开与机器人机器人SendCmd(MSG_DISCONNECT)机器人recv_acknowledge()机器人断开连接()UpdateStatus(ROBOTCOM_DISCONNECTED)elifcmd_linestartswith(“停止”)cmd_linestartswith(“退出”):#停止driverc机器人SendCmd(MSG_DISCONNECT)机器人断开连接()UpdateStatus(ROBOTCOM_DISCONNECTED)辞职(0)#停止司机elifcmd_linestartswith(“c”):#按原样定制命令转发通过elifcmd_line= =“t”:#调用自定义快速测试的过程TestDriver()其他的:打印(“未知的命令:“+str(cmd_line))如果收到了没有一个:UpdateStatus(ROBOTCOM_READY)#停止监控反馈ROBOT_MOVING=defRunMain():调用主程序”“”“#冲洗版本print_message(“库卡机器人控制器IIWA RoboDK司机v2.0”)#断开机器人是很重要的,如果我们强迫停止的过程进口atexitatexit注册(RobotDisconnect)#冲洗断开连接的消息print_message(DRIVER_VERSION)UpdateStatus()#运行司机从STDINRunDriver()#测试样本集的司机命令TestDriver()如果__name__= =“__main__”:调用主程序”“”“#重要,离开RunMain的主要过程RunMain()