优傲机器人UR ROBOT socket通信脚本解释

1.0socket通信介绍
Socket通讯常用于机器人和相机等设备交互数据,优傲机器人socket通信编程只能作为客户端。当打开机器人端口时需要给定服务端IP及端口号,机器人可以和多个服务端通讯。当仅连接一个服务端时可以省略socket_name参数。当机器人需要和多个服务端通讯时需要给端口指定名字,以便后续区分不同端口。两台机器人如果需要交互信号可以采用modbus连接。由于socket通信机器人可以作为客户端,说以机器人可以连接其他机器人发送dashboard指令,控制其他机器人。
本文档使用socket调试助手和机器人虚拟机测试。调试助手可以收发字符串(文本形式)以及字节流(16进制形式)。

2.0打开关闭脚本
2.1打开端口

socket_open(address, port, socket_name=’socket_0’) 
打开以太网通信。
试图打开端口连接,2秒后超时。
参数 
address:服务器地址(字符串) 
port:端口号(整数) 
socket_name:端口的名称(字符串) 
返回值 
如果失败,则为False;如果成功建立连接,则为True 

2.2关闭端口

socket_close(socket_name=’socket_0’) 
关闭以太网通信。
关闭与服务器的端口连接。
>>> socket_comm_close() 
参数 
socket_name:端口的名称(字符串)
下图是机器人打开和关闭端口脚本。


3.0接收脚本
3.1读ASCII字符串转换为浮点数

socket_read_ascii_float(number, socket_name=’socket_0’) 
读取来自所连接TCP/IP的多个ASCII格式化标记。一个命令中最多可读取30个数值。
>>> list_of_four_floats = socket_read_ascii_float(4) 
编号的格式应当在括号内,并且通过“,”隔开。四个编号的示例列表如下所述:“(1.414, 3.14159, 1.616, 0.0)”。
返回的列表含有读取的所有编号,然后每个编号依次排列。例如,上述示例的read_ascii_float应当返回[4, 1.414, 3.14159, 1.616, 0.0]。
读取失败或2秒后超时将返回如下所述的列表:以0作为第一元素,随后的元素中为“非编号(nan)”(例如,对于三个编号的读取:[0, nan., nan, nan])。
参数 
number:要读取的变量个数(整数) 
socket_name:端口的名称(字符串) 
返回值 
读取的编号列表(浮点数列表,长度=个数+1)

 

 

3.2读字符串

socket_read_string(socket_name=’socket_0’) 
读取来自所连接TCP/IP的字符串。字节为网络字节顺序。
>>> string_from_server = socket_read_string() 
返回(例如)“reply string from the server”(返回来自服务器的字符串),如果超时(2秒)或者回复无效,则返回空的字符串(“”)。您可以通过if语句测试字符串是否为空。
>>> if(string from server) : 
>>> popup("the string is not empty") 
>>> end 
参数 
socket_name:端口的名称(字符串) 
返回值 
字符串变量

3.3读每32位整数保存到列表
socket_read_binary_integer(number, socket_name=’socket_0’) 
读取来自所连接TCP/IP的多个32位整数。字节为网络字节顺序。一个命令中最多可读取30个数值。
>>> list_of_three_ints = socket_read_binary_integer(3) 
返回(例如)[3,100,2000,30000],如果超时(2秒)或者回复无效,则返回[0,-1,-1,-1],表示已经读取了0个整数。
参数 
number:要读取的变量个数(整数) 
socket_name:端口的名称(字符串) 
返回值 
读取的编号列表(整数列表,长度=个数+1) 
按照32位一个整数读取数据并存入列表变量。
3.4读每字节(8位)整数保存到列表

socket_read_byte_list(number, socket_name=’socket_0’) 
读取来自所连接TCP/IP的多个字节。字节为网络字节顺序。一个命令中最多可读取30个数值。
>>> list_of_three_ints = socket_read_byte_list(3) 
返回(例如)[3,100,200,44],如果超时(2秒)或者回复无效,则返回[0,-1,-1,-1],表示已经读取了0个字节。
参数 
number:要读取的变量个数(整数) 
socket_name:端口的名称(字符串) 
返回值 
读取的编号列表(整数列表,长度=个数+1) 
按照8位一个整数读取数据并存入列表变量。

4.0发送脚本
4.1将整数以字节长度发送到服务端
socket_send_byte(value, socket_name=’socket_0’) 
将字节发送给服务器。
通过端口发送字节<value>。预期无响应。可用于发送特殊的ASCII字符;10是换行,2是文本开始,3是文本结束。
参数 
value:要发送的编号(字节) 
socket_name:端口的名称(字符串)
4.2将整数以32位长度发送到服务端
socket_send_int(value, socket_name=’socket_0’) 
将整数(int32_t)发送给服务器。
通过端口发送整数<value>。以网络字节顺序发送。预期无响应。
参数 
value:要发送的编号(整数) 
socket_name:端口的名称(字符串) 

4.3发送以换行符结尾的字符串到服务端
socket_send_line(str, socket_name=’socket_0’) 
将带换行符的字符串发送给服务器– 适用于与UR仪表板服务器的通信。
通过端口以ASCII编码发送字符串<str>。预期无响应。
参数 
str:要发送的字符串(ASCII) 
socket_name:端口的名称(字符串)


4.4发送字符串到服务端

 socket_send_string(str, socket_name=’socket_0’) 
将字符串发送给服务器。
通过端口以ASCII编码发送字符串<str>。预期无响应。
参数 
str:要发送的字符串(ASCII) 
socket_name:端口的名称(字符串) 

 

 

 

  • 0
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个Lua语言机器人搬运脚本,包含详细的脚本解释: ```lua -- 设置起点和终点位置 local start_pos = {x = 10, y = 10, z = 0} -- 设置起点坐标,这里假设机器人的起点坐标为 (10, 10, 0) local end_pos = {x = 20, y = 20, z = 0} -- 设置终点坐标,这里假设需要将物品搬到 (20, 20, 0) 的位置上 -- 获取机器人对象 local robot = require("robot") -- 通过 require 函数获取机器人对象,这里假设机器人的 API 已经被加载 -- 定义搬运函数 local function move_to(pos) -- 定义一个名为 move_to 的函数,用于将机器人移动到指定位置 -- 判断当前位置与目标位置之间是否有障碍物,如果没有则一直朝前移动 while not (robot.detect() or robot.detectUp() or robot.detectDown()) do robot.forward() end -- 如果机器人前面有障碍物,则摆动手臂来破坏障碍物 if robot.detect() then robot.swing() end -- 判断当前位置与目标位置的高度差,如果高度差为正则向上移动,为负则向下移动 if pos.y > start_pos.y then while robot.detectUp() do robot.swingUp() robot.up() end elseif pos.y < start_pos.y then while robot.detectDown() do robot.swingDown() robot.down() end end -- 将机器人移动到目标位置的 x 轴上 while pos.x > start_pos.x do robot.turnRight() -- 先向右转 robot.forward() -- 再向前移动一格 robot.turnLeft() -- 最后向左转回原来的朝向 end -- 将机器人移动到目标位置的 y 轴上 while pos.y > start_pos.y do robot.up() -- 向上移动一格 end while pos.y < start_pos.y do robot.down() -- 向下移动一格 end -- 将机器人移动到目标位置的 z 轴上 while pos.z > start_pos.z do robot.forward() -- 向前移动一格 end while pos.z < start_pos.z do robot.back() -- 向后移动一格 end -- 如果机器人到达了目标位置的正前方,则摆动手臂来破坏前面的障碍物 if robot.detect() then robot.swing() end end -- 执行搬运操作,将物品从起点位置移动到终点位置 move_to(end_pos) ``` 注:以上代码只是一个示例,实际应用中需要根据具体情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菁特智能KingTech

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值