阅读背景:

使用python语言通过tcp控制优傲机械臂_SeventhBlue

来源:互联网 

直接上代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time        :2021/6/17 9:05
# @Author      :weiz
# @ProjectName :pycharmProject
# @File        :roboticArmControl.py
# @Description :
import socket
import struct
import math


def dataAnalysis(data):
    """
    解析优傲机器人数据。注意这个跟机器的版本和型号有关
    """
    # # 将机械臂返回值的保存到文件
    # f = open('data.txt', 'a')
    # f.write('\n'+str(data))
    # f.close()

    dic = {'MessageSize': 'i', 'Time': 'd', 'q target': '6d', 'qd target': '6d', 'qdd target': '6d', 'I target': '6d',
           'M target': '6d', 'q actual': '6d', 'qd actual': '6d', 'I actual': '6d', 'I control': '6d',
           'Tool vector actual': '6d', 'TCP speed actual': '6d', 'TCP force': '6d', 'Tool vector target': '6d',
           'TCP speed target': '6d', 'Digital input bits': 'd', 'Motor temperatures': '6d', 'Controller Timer': 'd',
           'Test value': 'd', 'Robot Mode': 'd', 'Joint Modes': '6d', 'Safety Mode': 'd', 'empty1': '6d',
           'Tool Accelerometer values': '3d',
           'empty2': '6d', 'Speed scaling': 'd', 'Linear momentum norm': 'd', 'SoftwareOnly': 'd', 'softwareOnly2': 'd',
           'V main': 'd',
           'V robot': 'd', 'I robot': 'd', 'V actual': '6d', 'Digital outputs': 'd', 'Program state': 'd',
           'Elbow position': '3d', 'Elbow velocity': '3d'}
    names = []
    ii = range(len(dic))
    for key, i in zip(dic, ii):
        fmtsize = struct.calcsize(dic[key])
        data1, data = data[0:fmtsize], data[fmtsize:]
        fmt = "!" + dic[key]
        names.append(struct.unpack(fmt, data1))
        if key == "Tool vector target":
            tcp_data = (float(struct.unpack(fmt, data1)[0]) * 1000, float(struct.unpack(fmt, data1)[1]) * 1000,
                        float(struct.unpack(fmt, data1)[2]) * 1000, float(struct.unpack(fmt, data1)[3]),
                        float(struct.unpack(fmt, data1)[4]), float(struct.unpack(fmt, data1)[5]))
            dic[key] = dic[key], tcp_data
        else:
            dic[key] = dic[key], struct.unpack(fmt, data1)

    return dic


def buildOrder(data):
    """
    组建指令
    """
    if data == '':
        return ''
    x1, x2, x3, x4, x5, x6 = data.split(' ')

    order = '''
        def endMovement():
            movej(p[{},{},{},{},{},{}])
        '''.format(float(x1) / 1000, float(x2) / 1000, float(x3) / 1000, x4, x5, x6)

    return order


def connectS(host, port, buf):
    """
    和服务端建立连接,进行通信
    """
    while True:
        inputData = input("请输入位置信息[x y z rx ry rz]或exit退出: ")
        if inputData == "exit":
            break
        order = buildOrder(inputData)

        # 只能按链接,接受数据并解析,发送数据,断开链接步骤进行,否则就会解析出错
        addr = (host, port)
        TCPSock = socket.socket()
        TCPSock.connect(addr)
        data = TCPSock.recv(buf)
        dataDic = dataAnalysis(data)
        print("机械臂末端坐标[毫米]及位姿[弧度]:", dataDic["Tool vector target"][1])
        if order == '':
            continue
        TCPSock.send(order.encode("utf-8"))
        TCPSock.close()


port = 30003
host = "192.168.207.128"  # 机械臂的ip地址
buf = 1140  # 大于发送的数据长度即可
# 输入案例:594.53 430.99 819.97 4.209 1.270 -0.384
#         924.48 507.74 628.57 3.618 -1.531 0.824
if __name__ == "__main__":
    connectS(host, port, buf)#!/usr/bin/env python
# -*- coding: ut



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: