![73a1793f6b560dbada179a83484fa05e.png](https://i-blog.csdnimg.cn/blog_migrate/a32e0580a9fb6f586786abf2635c2b36.png)
RAA (1.00a) ( Robot Arm Algorithms 1.00a 六轴算法机软件使用说明 :
作者觉得,在实际应用中,正逆解求解工具可以理解为一个类似数学计算器的
东西:不需要每个研究者都花几个月来钻正逆解,而把精力花在更高级的机械臂
应用领域,比如视觉抓取、人机协同等场景。
![5a43305e53ed159ebaba5af290231b64.png](https://i-blog.csdnimg.cn/blog_migrate/06d0a13dd2980a9e6a828093bc9e0b8e.png)
为了让这款“计算器”更加方便,本软件增加了直线和折线路径规划功能,作者承诺以后会不断开发完善,实现更多的功能,解决所有可能的 BUG,比如说更多更方便的路径模式、移动基座模式下的抓取等,都有待开发。
本款软件适合大家拿来作基础逆解和路径规划,可以用于二次开发的基础计算软件。它计算速度较快,可以满足较高的实时性需求。软件使用 socket 网络接口对外通信,附赠客户端例程,方便客户开发使用。
软件介绍
• 本软件适用于 win7 等 windows 系统,采用 C/S 模式进行运算服务:
主要算法功能由可执行文件“RAA100A.EXE ” 实现,文件运行后,开启一个 socket 网络服
务器,端口 号 9001,用户通过客户端与之进行数据计算请求和交互。
服务端代码:
server = socket.socket()
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind(('127.0.0.1', 9001))
客户端推荐使用代码:
client = socket.socket()
socket.socket.settimeout(client,0.50)
client.connect(('127.0.0.1', 9001))
软件下载时,用户可以一并得到附赠的客户端例程源码,供用户二次开发时参考使用。
例程系 Python 代码编写,附有详细的注释。
• 软件涵盖四个主要功能模块:
1. UR 型(以下简称‘U型’?结构机械臂正逆解。
2. U 型机械臂实时控制和路径规划,包含直线路径插值和折线路径插值。
3. ABB 型(以下简称‘A型’?机械臂正逆解。
4. 附带机械臂部分奇异位姿的 A 级解决方案,让插值化的实时控制可以路过奇异点而不
必刻意筛选规避。
• 应用细节说明:
可以将客户端和服务器放到一台电脑上使用,也可以放到不同的电脑上,放到不同的电脑时,
客户端软件的连接语句中的 127.0.0.1 应改为服务器所在电脑的 IP 地址。
路径规划中,客户端可以通过位置姿态控制指令(本表下面会提到,比如 361
号包?让 RAA 服务器返回一些控制数据,根据这些控制数据,客户端可以让
机械臂处于某些特定的位姿并让服务器一一记下这些不同的点对应的位姿矩阵,
这些位姿点形成的点集 可以成为一条折线路径的规划依据(当然也可以只有两
个点被记下来,此时路径规划简化为直线路径?。然后客户端可以在让服务器
记住所有必要的点后,让 RAA 开始规划路径并发回。
客户端也可以自己记下这些点并一起发给 RAA,让 RAA 拿到这些点后一并把规划路径发
回来。实现方式是,客户把这些点作为求逆的原数据,把这些点的位姿矩阵用表 2中的
350/351 号包组合 按照顺序依次发给 RAA 服务器。服务器会自动按照发来的顺序自动产生
一个点集,这个点集与路径规划中 RAA 服务器自己记下来的那个点集是一模一样的模式。
发完以后,直接向服务器发出路径规划请求,也就是向 RAA 发送一个表 2中
的 303 包,那么就可以接收到路径规划的路径序列*。
需要注意的是,在发送第一个矩阵之前,为了防止有其它点被预先记录
在 RAA 的当前点集里面,可以县发送 302包对其进行清空。
路径发回的方式是,约每隔 50ms RAA 发给客户端一个‘1’号包(‘1’号
包的含义请参阅下面表格:‘表 1 RAA 服务器发出的:’?,客户端
根据包 data2~data7 里面的浮点数,让机械臂进行运动。
b) 逆解和正解 C/S 沟通逻辑介绍:
逆解时,客户端发给 RAA 服务器‘350’‘351’两个配对包,RAA 根据这两个包的 12 个数据
重新组装出一个位姿矩阵;
然后逆解,把计算结果中的优选解发给客户端,发给客户端时用的是‘11’号包。
正解时,客户端发给 RAA 服务器‘352’号包,提供正解需要的六个角度,RAA 服务器逆解
以后,用两个配对包‘12’‘13’发回客户端一个位姿矩阵。
C/S 沟通数据包模式(请对照例程阅读,直观理解?:
所有 RAA 服务器和客户端之间的数据包都是下面这个模式,一共八个字段,占用尺寸为 56
的一个 buffer。当需要传送六个角度信息的时候,使用一个包,data2~data7 来承载六个浮点
数,当需要传送一个 4*4 矩阵时,因为矩阵前三行 12个数有意义,就用两个包一共 12 个浮
点数来传送,两个包使用 data1 的数字来配对。
data0 data1 date2 data3 data4 data5 data6 data7
以 99 号确认包为例,打包的典型的语句为:*
data_confirm=struct.pack('?hdddddd',False,99,0,0,0,0,0,0)
接收方的解包指令为:
struct.unpack('?hdddddd',data_confirm)
数据包各字段在 C 语言概念下的数据类型:
bool short double double double double double double
数据包各字段在 Python 语言概念下的数据类型:
bool int float float float float float float
data2~data7:一共六个浮点数,用来承载六轴角度信息或者矩阵位姿信息,承载矩阵位姿
信息时,连续使用两个数据包刚好发出矩阵里的前三行 12个有效数据。发送方将矩阵的前
三行 12 个数字依次放入两个数据包里面,做好配对标识发送两个数据包出去;接收方收到
两个成对的信息后,可以将其组合成发送方的原始矩阵。 信息的配对依靠 data2 的标识数字。
比如 12 和 13 被规划为一对,收到两个数据包以后,就可以组合了。
data0:在服务器向客户端传送一系列数据包的时候(比如路径规划信息,是需要在一定时
间内不断的向客户端发送关节角度信息?,该数据为 True 表示没有传送完毕,False表示传
送完毕了。 客户端可以根据这个字段来判断是否需要中断接收的循环进入下一个工作环节。
data2:信令字段,是一个整数,RAA 和客户端之间交流指令和请求用的。