基于COPPeliasiin与MATLAB的机器人建模与运动仿真
2021-11-30李杨张华良王军
李杨 张华良 王军
关键词:机器人;Coppeliasim仿真;LuaSocket;D-H模型
随着机器人建模与仿真在工业技术领域占有比重越来越大,在机器人设计与制造过程中,能够提前解决机器人运行中出现的问题,并避免在实操中呈现的各种安全隐患问题也变得尤为重要。根据不同的仿真目标选择仿真工具成为开发机器人的关键。L Pitonakova等人提出了V-REP,Gazebo和ARGOS机器人模拟器的功能和性能比较。2019年11月,V-REP被重新命名为Coppeliasim,Coppeliasim在V-REP的基础上重写计算例程、碰撞处理检测、最短路径计算、超频树、近似传感器模拟以及点云方面,显著提高了运行速度。但Coppeliasim仿真运动过程只能根据脚本执行,可操作性能差。祁若龙等人指出MATLAB在机器人仿真领域应用广泛,但是MATLAB仿真在三维空间构型能力差,不能完整清晰的各个连杆与末端问的姿态。
本文针对以上的不足,提出了结合Coppeliasim与MATLAB通过LuaSocket通信使用控制器对机械臂控制,并得到机器人运动的关节角以及运动轨迹曲线。为当代机器人的使用与有效通信协议的开发提供必要参考。
1建立模型过程
各类机器人在仿真之前均需要建立机器人模型。本部分主要介绍使用3D建模软件SolidWorks建模,并采用D-H参数法建模对所研究的机器人进行运动学分析。
1.1 D-H模型
为了准确描述机器人运动,D-H模型最初是由Denavit和Hartenberg于1956年提出,原理是依赖坐标变换:利用a(x轴移动距离)、a(基于x轴旋转角度)、d(z轴移动距离)、(基于z轴旋转角度)四个变量来描述并实现最小线性表示约定。该模型的出现,使得精确描述机器人运动轨迹,变得更为简便化、具体化。D-H参数法建模要根据机器人的各个连杆分别创建坐标系,通过使用坐标的齐次变换表示两个不同连杆之间的坐标变换与位姿状态,根据此方法可以建立起多个连杆之间串联系统中首末位置坐标系的变换关系。
1.2机器人正运动学的D-H表示方法
图1是机器人关节简图,利用(基于z轴自身旋转角度)、d(z轴上两条公垂线之间的长度)、a(公垂线的长度)、a(基于两条临近z轴问的角度)四个变量表述机器人中各个角度与距离。通常,只有角和d是关节变量。
D-H建模方法主要思路:络石机器人XB7具有六个自由度,对图2所示的模型进行三维建模,对其进行具体分析。建立三维坐标系。建立机器人连杆坐标系如图2所示。
根据D-H参数表1,机器人在其每个关节处均可建立属于自己的参考坐标系。每个关节指定一个参考坐标系,确定各个关节转换至下一个关节处的每一步,也就是从上一个参考坐标系转至下一个参考坐标系的详细步骤。重复以上所述,并结合各个关节变换,从而得出机器人的总变换矩阵。
根据以上D-H参数表确定并写出络石机器人XB7的总变换矩阵。方法如下:
2 LuaSocket通信
LuaSocket作为Lua的网络拓展库,类比Python中第三方库概念,LuaSocket可理解为Lua的扩展库,与第三方库区别为,LuaSocket更为强大,可以实现平台跨越,如Win、Unix、Mac等系统均可使用。在windows操作系统中,LuaSocket使用14个头文件。通信由两部分组成:第一个部分的核心代码使用c语言编写,能够对TCP与UDP传输层的访问提供相应支持。第二个部分是一组Lua模块,这组模块中添加了对SMTP、HTTP的支持和FTP协议以及处理Intemet的应用程序通常需要的其他功能。
在控制脚本中編写控制程序与通信接口,远程API函数通过socket通信与Coppeliasim进行交互,最大程度上减少了延迟和网络负载。一个或多个外部应用程序与Coppe-liasim进行交~[12J。机器人运动时不问断接收MATLAB中控制程序所发出的指令。通信体系选择Client-Server模式,将Coppeliasim作为Client端,MATLAB中控制程序为Server端。这个通信模式下,Coppdiasim接收MATLAB发送的相关控制指令,能准确对机器人的运动仿真进行控制。
MATLAB与Coppeliasim通过使用Luasocket进行通信。二者进行联合仿真时,Coppeliasim客户端需要对通信协议进行初始化,与MATLAB服务器端绑定的端口号相连,双方构建连接后,可继续进行通信及控制命令的发送与接收。服务器收到指令后对信息进行处理,随机发送响应信息给客户端,双方成功构建链接,指定成功发送并执行后关闭此次通信。
3 XB7机器人运动仿真
XB7机器人是络石公司研发的新一代机器人,与以往开发的机器人相比具有以下优点:
(1)速度更快。使用基于机器人动力学控制的轨迹规划,实现高度精确动力学建模与参数辨识,并建立动态惯量模型,使机器人在运动过程中保持以最大加速度进行运动。
(2)准确度更高。对运动学参数进行分析时,存在与精确数据存在一定误差的情况,XB7通过全局误差补偿和高精度误差标定等一系列手段,机器人在运动过程中能精确运动轨迹与运动姿态平滑。
(3)柔顺性更好。使用算法替代传感器,实现准确的机器人力学控制与拖动示教。
(4)开放性更高。支持c++语言与Python语言、逻辑性指令、实时对接底层接口。
依据络石机器人XB7的各项规格,创建准确的连杆坐标系,获取连杆参数,根据机器人各个关节之间约束与相互运动联系,将各个关节依次约束到对应的上层关节上,进而完成建模过程。图3中七个部件使用六个关节连接,其层级如图3所示。
建模及仿真具體做法:
联合仿真开始时,在客户端建立控制脚本文件,提供控制体对象模型、搭建仿真环境,以及解析来自MATLAB的socket控制命令,MATLAB负责对控制命令的编写。由MATLAB输出控制命令,实现控制机器人运动。MATLAB将生成的.txt文件导人数据,生成图像如图4所示:
仿真过程中,控制程序通过simxGetObjectHandle()函数获取控制命令发送给执行句柄。MATLAB经控制程序计算后,通过socket下发控制命令给Coppeliasim并对socket控制命令进行解析后,机器人按照其控制命令进行运动。
仿真结束时,MATLAB控制程序通过simxFinish()函数中断其与Coppeliasim的通信联系。
Coppeliasim与MATLAB联合仿真过程中重要的代码如下所示:
(1)vrep=remApi("remoteApi,).在控制语句中添加本条语句,目的是在MATLAB控制程序中调用vrep=remApi(”remoteApi”)来构建对象并加载库函数。
(2)vrep.simxFinsh(一1);这条语句执行时,会断开之前打开的所有连接程序。
(3)clientID=vrep.simxStart(127.O.0.1,19999,true,true,5000,5);建立相应的端口号。
4结论
本文提出了基于LuaSocket的机器人建模与运动仿真的方法,在SolidWorks软件中生成STL文件,并导入Cop-peliasim中。通过使用Lua语言编写控制程序。使MATLAB通过LuaSocket远程控制XB7机器人运动。
经过对机器人运动控制的调试和实验,证实了通过LuaSocket通信让MATLAB与Coppeliasim联合仿真的可行性,为以后的机器人编程打下基础。本文所述的络石机器人XB7属于六轴,本文提出的方法,可以开发出其他多轴机器人、轮式机器人等。在此基础上,通过修改内部脚本程序以及外部控制命令代码,能够对机器人运动仿真进行深层次的优化。本文对机器人建模与运动仿真后续研究中,需要在命令程序中添加更多控制模块以及优化Coppe-liasim脚本库方面做更多努力。