【V-REP自学笔记(七)】Matlab/Python远程控制
导语
在这一系列的V-REP自学笔记中,我们定了一个小目标,完成一个Demo。使用官方提供的KUKA公司的YouBot机器人模型来实验机器人的感知和控制过程,控制机器人从A点抓取物品,然后移动到B点将物品放置在B点的工作台上,这其中涉及到V-REP环境中的机器人感知和控制过程。没有看过前期学习笔记的读者,可以在文末找到往期文章地址。
在上一期的自学笔记中,我们讲述了使用Dummy、Path和V-REP自带的逆运动学模块来对YouBot的机械臂运动进行轨迹规划。在本期笔记中,我们将学习如何基于V-REP提供的RemoteAPI来使用Matlab/Python来远程控制V-REP中的机器人模型。话不多说,先放一个最终效果的演示视频:
众所周知,想做机器学习和机器人相关的算法开发,相比于Lua语言,Matlab、Python和C/C++还是要通用一些,毕竟有大量现有的库(机器学习算法库、矩阵运算库等)都是使用这些语言编写的。基于这个考虑,V-REP也提供了接口给这些语言,通过共享内存或网络通信(Socket)来完成,提供了一系列的RemoteAPI,允许用户进行远程的操作和控制。本文选用了Socket通信接口的方式来学习如何通过Matlab和Python编程来控制V-REP中的机器人。V-REP的官网上已经提供了基本的函数用法说明给用户,用户可以在以下网址上查询到对应函数的用法:
- 查阅Matlab的远程控制函数:https://www.coppeliarobotics.com/helpFiles/en/remoteApiFunctionsMatlab.htm;
- 查阅Python的远程控制函数:https://www.coppeliarobotics.com/helpFiles/en/remoteApiFunctionsPython.htm。
Remote API函数与Lua语言的API在使用方法和命名规则上基本一致,使用非常简单,使用它们可以在基本不用使用本地Lua接口的基础上完成大部分的工作了。当然,Matlab和Python等也可以配合着Lua运行,我们可以混合多种方式来控制V-REP中的机器人模型,怎么好用怎么来,不拘泥于形式。在本文中,我们就分别使用Matlab编程来控制YouBot的底盘运动,使用Python编程来控制YouBot的机械臂运动。
1. 拷贝API函数文件
为了使得Matlab和Pyhon在运行时可以找到V-REP提供的API函数定义,我们可以将API函数从V-REP的安装目录中拷贝到Matlab和Python源码所在的地方。以Windows为例,API函数的路径为:
"安装目录/CoppeliaSimEdu/programing/remoteApiBingdings"。
将该目录下的matlab和python文件夹拷贝到我们源码所在地方即可直接开始使用。
2. 拷贝库文件
库文件所在路径:安装目录/CoppeliaSimEdu/programming/remoteApiBindings/lib/lib,如果电脑安装的是32bit的V-REP,请选择32bit的库文件,如果电脑安装的是64bit的V-REP,请选择64bit的库文件。
根据电脑的操作系统拷贝库文件到对应的源码目录下,与API函数放在同一个位置,其中根据电脑操作系统的不同选择不同的库文件:
- Windows:remoteApi.dll
- Mac:remoteApi.dylib
- Linux:remoteApi.so
API函数和库文件拷贝完成以后,我们就可以开始编程了。
3. 在V-REP中启动服务
使用Matlab和Python进行远程控制的时候,V-REP中不需要编写实质的控制代码,我们需要做的就是在包含机器人模型的Scene的Main script中的初始化代码里面调用一行代码来启动远程的控制服务即可,如下图所示:
图中指定了通信的端口19999,除此之外就不用编写别的代码了。
4. 使用Matlab或Python编写程序
在Matlab或Python中编写控制代码时,首先要做的就是初始化,包括本地服务初始化,指定端口19999、指定连接超时时间、通信速率等,获取一个ClientID,这个ClientID在后续的每一个Remote API调用时都需要使用。
vrep_sim=remApi('remoteApi');
vrep_sim.simxFinish(-1); % just in case, close all opened connections
clientID=vrep_sim.simxStart('127.0.0.1',19999,true,true,5000,5);
接下来就是编写实质的控制代码了,包括获取YouBot机器人的句柄,YouBot的底盘轮子和机械臂各个关节的控制句柄等,这里不再一一列举,完整详细的代码见本文文末的代码仓库。在代码中,我们分别使用Matlab和Python编写了YouBot机器人的底盘控制代码和机械臂控制代码示例,分别控制底盘的运动和机械臂的运动。
5. 仿真过程
仿真的时候,用户需要手动点击V-REP的启动仿真按钮,然后分别在Python和Matlab的客户端运行控制代码即可完成对YouBot机器人的控制,控制代码的编写方式与在V-REP中使用Lua语言编写没有太大差别。
本文附带的代码在Windows平台的Matlab2018a和Python3.6上已经验证通过,有了Matlab和Python这两个利器,后续编写控制算法就方便多了,我们可以利用许多现有的工具包代码根据自己的需求和应用编写更复杂的代码,例如结合Peter Corke老爷子在Matlab平台上的RoboticsToolBox(地址:https://github.com/petercorke/robotics-toolbox-matlab)。
到此为止,使用Matlab/Python编写控制程序远程控制V-REP中的机器人就已经介绍完了,读者可以基于这个项目Demo编写自己的算法代码。本项目涉及到的代码已发布在Github上,欢迎大家Star和下载使用。
项目地址:https://github.com/chauby/V-REP-YouBot-Demo.git
参考
V-REP官方API说明文档:
- Matlab控制函数:https://www.coppeliarobotics.com/helpFiles/en/remoteApiFunctionsMatlab.htm;
- Python控制函数:https://www.coppeliarobotics.com/helpFiles/en/remoteApiFunctionsPython.htm。
往期回顾
【V-REP自学笔记(五)】YouBot底盘运动学与路径规划
【V-REP自学笔记(六)】基于V-REP逆运动学模块的机械臂轨迹规划
作者知识有限,有不正确的地方还望读者能够指出来,大家共同学习和进步,不胜感激!
- D-Link 路由器信息泄露和远程命令执行漏洞分析及全球数据分析报告
- Wordpress安全架构分析
- CVE-2017-5123 漏洞利用全攻略
- 简单分析shared pool(三) (r5笔记第94天)
- OpenCV在车道线查找中的使用
- ESP32 DevKitC 编译烧写 AliOS Things
- 使用R完成K近邻分类
- 使用R完成逻辑斯蒂回归分类 直接上代码,如下:
- 基于时间点的不完全恢复的例子(r6笔记第9天)
- R-正太分布,检验
- R完成--决策树分类 一个使用rpart完成决策树分类的例子如下:
- Apollo的数据开放平台介绍
- 手把手教你运行apollo
- 归档模式下四种完全恢复的场景(r6笔记第8天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法