UR机械臂TCP/IP通讯控制

一、准备工作(机器人连接、外部控制)

参考: http://t.csdnimg.cn/D0Wmy

二、通过tcp/ip控制机器人

        URScript是UR公司基于Python语言编写的编程语言

1.tcp/ip通信协议/通信端口

参考:http://t.csdnimg.cn/lR6bC

2.URScript脚本例程

(1)30001端口

参考文章:http://t.csdnimg.cn/0wo2k,如果想一次性发送一段程序给机器人,需要将发送的程序按照如下格式发送:

程序演示:设置socket通信,选择TCP通信协议,设置机器人ip端口,发送目标程序

import socket
import struct
def test_move():
    mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # change the robot IP address here
    host = '192.168.55.101'
    port = 30001

    mySocket.connect((host, port))

    script_text="def test_move():\n" \
                "   global P_start_p=p[.6206, -.1497, .2609, 2.2919, -2.1463, -.0555]\n" \
                "   global P_mid_p=p[.6206, -.1497, .3721, 2.2919, -2.1463, -.0555]\n" \
                "   global P_end_p=p[.6206, -.1497, .4658, 2.2919, -2.1463, -.0555]\n" \
                "   while (True):\n" \
                "     movel(P_start_p, a=1.2, v=0.25)\n" \
                "     movel(P_mid_p, a=1.2, v=0.25)\n" \
                "     movel(P_end_p, a=1.2, v=0.25)\n" \
                "   end\n" \
                "end\n"

    mySocket.send((script_text + "\n").encode())
    mySocket.close()

(2)30003端口:

1)movej

URScript的movej可以控制机械臂运动到给定的目标关节角度,其中运动的时间可以通过速度加速度控制,也可以通过设定时间来控制机械臂运动,时间t优先于速度加速度。参考官方文档如下:

程序演示:设置socket通信,选择TCP通信协议,设置机器人ip端口,发送目标程序

import socket
import struct
import numpy as np

def degree_to_rads(joints):
    rads = [angle * np.pi / 180 for angle in joints]
    return rads

def ur5_movej(joints,a,v,t):
    IP = '192.168.55.101'
    PORT = 30003
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((IP, PORT))
    joints_str = ",".join(map(str, joints))
    strL = "movej([{0}], a={1}, v={2}, t={3}, r=0)\n".format(joints_str,a,v,t).encode()
    print(strL)
    s.send(strL)
    s.close()

if __name__ == '__main__':
    q0 = degree_to_rads([90, -70, 70, -40, 0, 0])
    ur5_movej(joints=q0,a=0.9,v=0.9,t=2)
2)movel

URScript的movel可以控制机械臂在笛卡尔空间坐标系运动,通过给定机械臂笛卡尔空间坐标系下的(x,y,z,rx,ry,rz)  运动到给定的目标位姿,其中运动的时间可以通过速度加速度控制,也可以通过设定时间来控制机械臂运动,时间t优先于速度加速度。参考官方文档如下:

程序演示:设置socket通信,选择TCP通信协议,设置机器人ip端口,发送目标程序

import socket
import struct
import numpy as np

def degree_to_rads(joints):
    rads = [angle * np.pi / 180 for angle in joints]
    return rads

def ur5_movel(pose,a,v,t):
    IP = '192.168.55.101'
    PORT = 30003
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((IP, PORT))
    pose_str = ",".join(map(str, pose))
    strL = "movel(p[{0}], a={1}, v={2}, t={3}, r=0)\n".format(pose_str,a,v,t).encode()
    print(strL)
    s.send(strL)
    s.close()

if __name__ == '__main__':
    pose1=[0.55275006,-0.09083575,0.485071,2.73019624,-1.12719368,0.15573756]
    ur5_movel(pose=pose1,a=0.5,v=0.5,t=0)
3)get_current_pos()

get_current_pos():获取机械臂当前的关节角度

下表为30003实时反馈端口机器人信息1044字节数据格式,来源官方文档,根据30003反馈的信息可以知道通过socket通讯返回的recv(1116)信息中,32-37位置为实际机械臂关节角度,即data[252:300]

程序演示:

def get_current_pos():
    IP = '192.168.55.101'
    PORT = 30003
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((IP, PORT))
    data = s.recv(1116)
    pos = struct.unpack('!6d',data[252:300]) #解析32-37位置实际机械臂关节角度
    npPos = np.asarray(pos)
    s.close()
    return npPos
4)get_current_tcp()

get_current_tcp():获取机械臂在末端工具坐标系的当前位姿(x,y,z,rx,ry,rz)

根据30003实时反馈端口机器人信息1044字节数据格式,及30003反馈的信息可以知道通过socket通讯返回的recv(1116)信息中,56-61位置为实际机械臂在末端工具坐标系的当前位姿(x,y,z,rx,ry,rz),即data[444:492]

程序演示:

def get_current_tcp():
    IP = '192.168.55.101'
    PORT = 30003
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((IP, PORT))
    data = s.recv(1116)
    position = struct.unpack('!6d',data[444:492]) #解析56-61位置实际末端坐标系位置,前三位为x,y,z位置信息,
                                                  #后三位为rx,ry,rz旋转向量信息
    npPosition = np.asarray(position)
    s.close()
    return npPosition

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值