20210828日志 多线程和socket的问题可能合并处理了,在boost下

 

Boost程序库完全开发指南 罗剑锋.pdf

boost/thread库编译使用,thread多线程创建和中断;

boost:asio库管理IO,

1在示教盒下自由编码

2rtde有未知,但socket常用有明确解

UR机械臂与PC通讯程序(socket).docx

 

3终于找到程序树(.urp示教盒程序)的转移功能了,不想用U盘转移了

 请教高人,思路如下:百度搜索UR机器人FTP

3.3 FTP
Users may want the capability to move programs, installation files, and scripts between the robot and
their PC. This could allow them to maintain better version control than natively on the robot where this
control is limited to good naming convention. To do so, an FTP program like Filezilla needs to be used. See
the PDF “FTP Filezilla” for instructions on how to install it and connect to the robot. By default the user
will connect to the root folder of the robot. Navigate up a level to find all programs and installations shown
in Figure 9:

 

 

 Figure 9: FTP Filezilla client after connecting to the robot

From here programs, installations, and scripts can be dragged and dropped between the robot and PC.
WARNING: Take EXTREME caution when moving files between the robot and PC. Moving files not
in “Programs” out of their folders can cause Polyscope to crash and require a brand-new SD card.

 

 

 

 

 09:2b:99:a1:43:bc:19:d5:fb:e0:c1:93:68:53:63:09:b4:eb:0e:75

d9:87:d7:cb:81:57:3a:be:6c:e7:4b:da:8d:5d:b0:17:92:82:70:cc:a6:03:df:0e:5d:10:0d:4d:a9:c6:36:b2

 

 

 一个服务器可以多个客户端,我们浏览多个网页就是多个客户端。所以我们整合机器人尤其多机器人多传感器时,我们电脑端应该一个服务器(主机)才能整合多个机器人。

 

4虚拟机URSim篇

1打开虚拟机软件VMware workstation12

2打开虚拟机文件:URSim3.3.0.145文件

 还是在大一点的台式机上安装吧

 

关键词:动机器人某关节(重新标定零位,升级部件,更改ID号)前提是该关节上电

generral:上电与否

univer图标左到右化一下,输入密码:lightbot进入专家模式专用密码

Lowlevel control两个关节ID号:

calibration标定当前关节的零位,标定所有关节位置的零位(以当前状态为零位)

firmware:光标所在关节部件的更新

jointID:更改关节ID号

 

手腕三后盖板打开,把来自手腕2的通讯线直接短接,使手腕三物理断电,

重新在专家模式general选项卡里turnpoweron

 

 

把光标移到J3上,换关节ID为J5

自动关机掉电

手腕三后盖板打开,把来自手腕2的通讯线恢复接好,使手腕三物理通电

重新在专家模式general选项卡里turnpoweron,go to idle

六个关节全部显示待机

change 关节ID,exchangeJ3和J5的ID,点set it

 

FileZilla  client是指

 

 

在该过程中filezila主动去连接UR机器人的IP(比如我的192.168.10.10)和端口22,用户名root,密码easybot

看起来这好用的filezila完全像是客户端。也安装了filezila server但没用明白。

下载反之PC可以从PC本地目录上传文件至机器人polyscope的程序。

而且该过程没有删除文件,只要不删除文件就行。

 

 

 

二、

 

 

 

 

6 PloyScope 程序树(Demo.urp

 

 

 

 

7 PolyScope 程序树生成的其他文件

 

UR 机器人程序树文件(.urp) 是用户直接创建和编辑的程序, 而其余的两个文件

1 2.script, .txt)则是 PolyScope 自动生成的, 无需用户去操作。 每次开始运行程序之前,

PolyScope 会根据最新的程序树文件自动生成脚本程序(.script).txt 文件,然后将脚本程序

发送给 URControl 进行执行。

6 程序树中只有几条指令,但是生成的脚本程序确有很多(图 7), 因为 PolyScope

首先会根据安装设置自动生成脚本(图 7 脚本区域 1), 用于初始化操作,然后再根据程序树生成相应的脚本(图 7 区域 2)。

对于 URCap 来说, 其在 PolyScope GUI 上的显示包括两块,即安装设置节点和程序树

节点, 如图 8。 对应的, URCap 可以用于生成需要的脚本到图 7 脚本区域 1,实现初始化、变量或函数声明等; 也可以通过程序树节点生成运行脚本到图 7 区域 2,实现函数调用等。

除了生成脚本, URCap 还可以完成普通 Java 程序一样的功能, 与外界设备和机器人控制体URControl 通讯、 简单计算等工作。 上述脚本生成是在启动运行程序时完成, 然后交由URControl 执行; 而如果想使 URCap 设置立即生效, 则需要将设置直接发送给 URControl 来立即执行。 URCap 如何与 URControl 通讯将在下一章介绍。

 

5 socket-ur示教盒内容编写的踩坑:在工件坐标系下移动

5.1等待1秒

 

 

 

5.2赋值工件坐标系变量基座

5.3单位米还是毫米?

示教盒图形界面显示单位(移动选项卡)是毫米,其实UR示教盒程序位姿都是米。getActualpose()返回值也是米弧度。

5.4实物构型是UR10的哪一构型啊?构型5啊,一模一样肯定是构型5

为什么是构型五?在构型五下,同一个末端UR位姿

[  -205.451897,-521.805186,14.976295,-2.001034,-0.096355,1.179964 ]在基座和特征参考系下会有两个不同形态

在实物和仿真各有两个,两对形态重合了,印证了实物构型是构型五。

5.5即使赋值基座=特征坐标系,实物仍然是基座参考系啊?

(1)怎么看出来的啊?

在构型五下,同一末端位姿,实物形态与仿真的基座参考系形态重合,而不是特征参考系形态重合

怎么办呀怎么才能调整moveJ的参考系是基座啊?

(2)一个高手说赋值,基座(变量):=特证名

******是“基座(变量):=特证名(变量)”(XXX)奏效了,但movej下不奏效(报错显示无法解算路点,推测movej参数必须是关节角而不是UR位姿),在moveL奏效(推测因为moveL下可以选特征为基座坑踩得很难受)

而不是“基座(变量):=特证名(位姿)”(XXX_const),它没有奏效

5.6路点经常遇到奇异点,跑不了怎么办

奇异点是因为机械臂绷直了,一个高手说因为路点太远了所以绷直了,不妨找最近的工件部分作为最舒服的运动范围(在工作空间内)

5.7示教盒程序转移的必要性

为了加速程序编写,必须知道在PC和示教盒之间怎么烧录程序树,如果能在PC上以txt方式快捷编写并烧录到示教就能大大加快编写(原先只能在虚拟或真实示教盒手敲或鼠标编写)。目前没有解决,因为程序树文件urp无法直接编写,配套的txt和scrip脚本文件可以编写但不知道怎么转化为程序树

5.8这个大佬使用URsocket的指南里unicode显示和我的代码不相符我无法编译,socket各变量使用也和我见到的常见方式有区别,端口写8000报错但写6688就好使(正规的端口号不是6688)

5.9目前急需解决的问题:

通讯得到的是string字符,想画成图必须能逗号隔开,且是double的列表

通讯时容器设的过大,是1024,以至于得到的是p[0.3,0.1,0,0,0,0]烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫

查一下movej是不是必须以关节角而不能以UR位姿为参数

 5.8为什么urcontrol作为客户端断开与PC服务器连接(示教盒程序运行完毕即断开),会让PC进程报错要求中断?

分析:自从(在原来接收信息功能基础上)加入发送信息功能,就有这种中断bug,原先是自动跳出循环的

排查:先看看是PC的问题还是ur示教盒程序程序树的问题,用调试助手调试

    如下图1和图2代码设置只在前4次(序号0,1,2,3)发送数据和显示交互数据,但仍于4次之后成功持续接收,说明报错来源于客户端打开的时刻

    

图1 调试助手client端收发数据

 

图2 服务器收发数据的终端显示和服务器进程C++源代码

 验证:bug的确来自客户端断开,调试助手一旦断开,PC进程马上报错中断

分析和解决:发现解决bug需要在while(ture)的循环首行加入以下代码:

if (error == boost::asio::error::eof) //判断连接是否断开
break;
else if (error)
throw boost::system::system_error(error); // Some other error.

 

 

5.9被摆了一道啊关于get_actual_tcp_pose()。

经过控制变量反复实验记录,无论什么场合(不赋值b=f、在程序前赋值b=f、在move系列之前赋值b=f、在movej中赋值b=f、在moveL中赋值b=f),

get_actual_tcp_pose()都返回的是相对于基座的tcp位姿,采集部分是有问题的。不过幸好执行运动的moveL是相对于可变特征f的,执行部分是解决的。

之所以坚持用socket不用rtde,最重要是因为中断until问题,其次是因为rtde只能在PC端解算,而socket可以在示教盒端完成解算

补救解决办法

pose_trans(p_from, p_from_to)和pose_inv(p_from)的使用
例:b2t=pose_trans(b2ff2t)

解决:f2t=pose_trans(f2b,b2t)=pose_trans(pose_inv(b2f),b2t)

 

 

 

 

 

 

示教后采集的点

 

tcppose[0],p[0.0556585,0.247949,-0.0146147,-2.51002,-1.68042,-0.0595131]
tcppose[1],p[0.0556486,0.189149,-0.0146122,-2.50994,-1.68053,-0.0594805]
tcppose[2],p[0.0556513,0.121367,-0.0145977,-2.50997,-1.68049,-0.0594107]
tcppose[3],p[0.0556826,0.0799869,-0.014639,-2.51015,-1.68044,-0.0595541]

 

 

 

 将采集点发送执行然后再采集的点

 

 

tcppose[i],X,Y,Z,RX,RY,RZ
tcppose[0],p[0.0556852,0.247852,-0.0145542,-2.50997,-1.68024,-0.0595481]
tcppose[1],p[0.0556504,0.189298,-0.0145875,-2.50984,-1.6806,-0.0594116]
tcppose[2],p[0.0556373,0.121482,-0.0146235,-2.50997,-1.68056,-0.0593347]
tcppose[3],p[0.0556742,0.0800823,-0.014628,-2.50999,-1.68061,-0.0594238]

5.10

   引入了循环机制,PC端设定好路点数量,机器人端自动接收路点数量(     文件夹getnumofcycles)。并且设计路点在循环节中的执行位置(将相邻两个路点在算法中相邻),设置交融半径,使行程节约。

循环过程按顺序依次包括:

 

 

交融半径200mm的实验结果:

tcppose[i],X,Y,Z,RX,RY,RZ
tcppose[0],p[0.0557508,0.248197,-0.0608557,-2.51014,-1.68025,-0.0597747]
tcppose[1],p[0.055683,0.248066,-0.0608279,-2.50996,-1.68041,-0.0596817]
tcppose[2],p[0.0556857,0.248131,-0.060832,-2.50998,-1.68031,-0.0597232]

 

posted @ 2021-08-28 11:14  Lu_STEEL  阅读(231)  评论(0编辑  收藏  举报