Python编程方式实现实时监视机器人

       实时监视功能是在以太网通信机器中,通过以太网 UDP通信对机器人控制器的直交/关节位置数据等机器人的当前位置及前端速度等进行实时监视的功能。接下来以三菱机器人为例说明如何通过Python编程方式实现实时监视机器人位置数据。

实时监视功能可以监视的数据种类数据类型ID

实时通信功能通信报文格式

以太网通信机器与机器人控制器之间,在发送与接收时使用相同的分组结构。数据的保存方式为小字节序(从最低位字节开始保存)方式,实数数据为32位单精度实数,按照标准规格IEEE754方式进行存储。 分组数据尺寸为“196字节固定”,一旦弄错将无法正常动作,因此应务必符合尺寸。

常用机器人返回的数据格式

①POSE(直交)数据结构

JOINT(关节)数据结构

FORCEN/Nm)数据结构

ROBMON(机器人动作信息)数据结构

介绍完通信相关规格后,接下来具体演示实际操作步骤,需要分成以下3步:

①机器人通信参数设置

②发送通信监视开始/结束命令

监视机器人直交数据指令值( 角度RADIAN)为例进行说明。

开头第一个“01”为实时监视功能开始,第五个字节“01”表示监视直接数据指令值。

将下述数据发送机器人后,机器人将返回当前位置数据。

01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

由于发送完成后,机器人将以控制周期频率往上位机实时发送位置数据。由于通信数据量较大,如需关闭实时监视,需要开头发送“255”,并且固定256个字节。

③数据解析

由于是小字节序,解析方式为“IEEE 754浮点数十六进制相互转换32位 四字节 单精度”。因此对应的16进制浮点数表示为:4395D65C 对应的10进制数为299.67468261719。

最后以Python编程方式实现对机器人的实时监视,Python程序参考如下:

import socket, struct, time
sock=socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('0.0.0.0', 12001))
send_start=struct.pack('<H2x H2x40x 16x H2x40x H2x40x H2x40x', 1, 1001, 1002, 101, 15)
send_stop=struct.pack('<B195x', 255)
rcv_format='<8x 8f2I 20x 8f8x 4x 6f16x 4x 4f24x'
while True:
    sock.sendto(send_start, ('192.168.0.20', 12000))
    rcv_buf, addr=sock.recvfrom(196)
    sock.sendto(send_stop, ('192.168.0.20', 12000))
    (x,y,z,a,b,c,l1,l2,fl1,fl2,
     j1,j2,j3,j4,j5,j6,j7,j8,
     f1,f2,f3,f4,f5,f6,
     v1,v2,v3,v4)=struct.unpack(rcv_format, rcv_buf)
    print(F'{x=:9.3f},{y=:9.3f},{z=:9.3f},{a=:9.3f},{b=:9.3f},{c=:9.3f}')
    print(F'{j1=:9.3f},{j2=:9.3f},{j3=:9.3f},{j4=:9.3f},{j5=:9.3f},{j6=:9.3f}')
    print(F'{f1=:9.3f},{f2=:9.3f},{f3=:9.3f},{f4=:9.3f},{f5=:9.3f},{f6=:9.3f}')
    time.sleep(1)

程序解析如下所示:

Python返回数据示例如下:

以上为实时监视的整个实现过程及Python示例程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值