VREP( Virtual Robot Experimentation Platform)是一款瑞士军刀级的机器人仿真软件,包含的功能众多,而且使用方便,在各种系统下都有相应的安装文件。
今天我们就来看看如何将ROS和vrep集成,把两个强大的平台结合到一起。
版本设定:Ubuntu16.04 + ROS Kinetic + vrep3.4
一、下载vrep
第一步当然是下载vrep软件啦!
登录vrep官网:http://www.v-rep.eu/downloads.html
找到相应版本的下载地址,然后选择Linux版本即可下载。这里选择的是3.4版本。
下载完成后的vrep是一个压缩文件,解压该文件后,放置到home路径下(可自定义),重命名为vrep。
ubuntu下的vrep不需要特意安装,直接在终端下运行如下命令即可启动:
$ cd vrep
$ ./vrep.sh
启动成功的界面如下图所示:
二、配置ROS接口
vrep提供了一个ROS接口——RosInterface,使用ROS插件搭建了一座vrep和ROS之间的桥梁,其原理如下:
不过该插件需要通过编译四个功能包来生成。
创建一个单独的工作空间,将 vrep/programming/ros_packages路径下的四个功能包拷贝到工作空间下,或者使用如下命令下载这四个功能包:
$ git clone https://github.com/CoppeliaRobotics/ros_bubble_rob2
$ git clone https://github.com/CoppeliaRobotics/vrep_skeleton_msg_and_srv.git
$ git clone https://github.com/CoppeliaRobotics/vrep_plugin_skeleton.git
$ git clone --recursive https://github.com/CoppeliaRobotics/v_repExtRosInterface.git
然后在终端设置vrep的路径,并且编译工作空间
$ export VREP_ROOT=~/path/to/v_rep/folder
$ catkin build
编译成功后,在/deve/lib/下找到以下两个库,拷贝到vrep根路径下即可。
三、启动vrep
ROS与vrep集成的配置工作已经完成,接下来就可以启动系统啦。
使用如下命令启动ros master和vrep:
$ roscore
$ ./vrep.sh
在启动vrep的终端中应该可以看到如下RosInterface加载的日志提示:
这个时候vrep和ROS已经连接成功,不信可以打印当前系统的话题看看:
vrep接口相关的话题赫然在目。
四、集成测试
最后就进入到激动人心的测试环节了。vrep中已经自带了几个测试例程。
先来加载第一个仿真场景:
然后在显示区会出现很多五颜六色的模型,点击工具栏中的开始按键,启动仿真。vrep场景中的会仿真一个摄像头,并且发布图像话题,在ROS中打开rqt_image_view,订阅图像话题,看看是不是已经有图像出现啦!
这里存在一个数据流的问题,导致vrep和ROS中的图像是相反的,可以在vrep端发布数据或者ROS端订阅数据时,对图像数据做一个倒置处理,即可解决问题。
从这个例程中,我们可以看到vrep中的数据可以顺利通过RosInterface发送到ROS端。
接下来将ROS端的数据发送到vrep,一样需要加载仿真场景:
场景中有几个可爱的小机器人,每个机器人对应于一个数据来源。开始仿真后,其他几个机器人就开始活跃起来,唯独下图中的红色机器人纹丝不动。
从机器人旁边的提示可以看到,“小红”需要通过ROS节点来控制。这让我们想起了ROS中的小海龟。
查看当前ROS系统的话题列表:
和小海龟订阅的Twist消息不同,“小红”订阅了两个话题,分别对应于两个驱动电机的速度,在终端中发布如下命令,即可控制“小红”移动,差速就要自己来控制啦。
$ rostopic pub /leftMotorSpeed2084567 std_msgs/Float32 "data: 1.0"
$ rostopic pub /rightMotorSpeed2084567 std_msgs/Float32 "data: 0.5"
OK!今天就测试到这里,后续我们再进一步通过ROS控制vrep中的机器人实现仿真。
注:以上内容,也可以查看vrep自带的帮助文档:/vrep/helpFiles/en/rosTutorial.htm