2018-01-17 16:26:25 philthinker 阅读数 6394

OS: Win10 x64
Matlab: R2016b
V-REP: V-REP PRO EDU v3.5.0

VREP

对V-REP有一定了解的读者可以直接跳到第三节Matlab环境准备。

下载、安装与支持

V-REP提供Windows、Linux和MacOS三个平台的应用程序支持,任意平台都提供教育版和专业版两个版本。教育版是免费的,因此后续教程我们均以教育版为例。安装方法也非常简单,Windows版按照正常的安装流程即可,Linux版本只要解压缩就行。

目前来说,V-REP是一个比较小众的仿真工具,尽管它功能非常强大。目前唯一的技术支持就是V-REP官方论坛。V-REP提供的技术手册可以解决大部分问题,功能细节介绍也非常详细。

V-REP操作基础

打开V-REP,V-REP会自动生成一个新的场景(Scene),该场景是空白的。然后你要做的是添加你的仿真对象。V-REP自带的Tutorial会领着你一步一步地从零开始添加一个机械臂,前提是你有CAD模型。

添加自定义仿真对象是基本教程中的内容,尽管大部分用户其实不需要自己做机械臂。但是看完后你会对V-REP的仿真原理有初步的了解,还是很有必要稍微看下的。
V-REP中的形状按照动态性能可以分成动态(dynamic)和静态(static)两种,也可分成可响应的(respondable)和不可响应的(non-respondable)两种:

  1. dynamic 形状会掉落并受到外部力/力矩的影响;static 形状只会跟着其parent移动。
  2. respondable 形状之间会触发碰撞响应,如果它们是dynamic的,这种响应会表现在运动上;而 non-respondable 形状之间即便碰到了也没有碰撞响应。

respondable形状在仿真的时候越简单越好,物理引擎在仿真时会按照5种不同类型的形状进行区分:

  1. pure shapes:物理引擎对这种形状的仿真效果是最稳定最高效的。但是这种类型的形状是收到几何限制的,只能是简单的几何形状,添加这种形状可以通过 [Menu bar –> Add –> Primitive shape] 。
  2. pure compound shapes:一个group的pure shapes,性质与pure shapes类似,创建这种形状可以通过 [Menu bar –> Edit –> Grouping/Merging –> Group selected shapes]。
  3. convex shapes:相比较而言,物理引擎处理这种形状的速度稍慢,稳定性也稍差。但是,只要是凸的几何形状都可以设定为这种类型。添加这种形状可以通过 [Menu bar –> Add –> Convex hull of selection] 或 [Menu bar –> Edit –> Morph selection into convex shapes]实现。
  4. compound convex shapes / convex decomposed shapes:一个group的convex shape。添加这种类型可以通过 [Menu bar –> Edit –> Grouping/Merging –> Group selected shapes], with [Menu bar –> Add –> Convex decomposition of selection…], 或 [Menu bar –> Edit –> Morph selection into its convex decomposition…]实现。
  5. random shapes:对于非凸且几何结构复杂的形状可以将其设定成这种类型。物理引擎处理这种形状的速度最慢,最不稳定。

多数情况下,你需要的仿真模型都可以在V-REP自带的模型浏览器中找到。
模型浏览器
找到后你只需要拖动到工作空间即可,你可以通过位置方向调整按钮来调整其位置和姿态。
位置和方向
V-REP的操作界面十分精简,默认添加了一部分用户交互按钮。你可以不借助菜单栏目完成绝大多数常用的操作,其它按钮的使用方法你可以自己体会,手册上也有详细说明。

V-REP仿真基础

仿真最简答的方式是使用 embedded scripts ,当然这种方式仅支持Lua语言。你也可以通过 pluginremote API clientROS nodeBlueZero nodeadd-on进行仿真。除此之外还有很多其它接口。关于这些接口的使用官方给出了示例

这里我们仅介绍 remote API 方式,不对其它的API进行介绍。官方手册中提供了三篇重要的说明:

  1. 远程API的使用方法
  2. 远程API服务器端(V-REP)使能方法
  3. 远程API用户端(Matlab)使能方法

强烈建议先阅读以上三篇说明。手册也提供了所有Matlab API的列表

关于仿真环境的设定官方手册也给出了几点建议

Matlab环境准备

V-REP与Matlab的通信可以通过 shareMemoryCommunicationPlugin ,也可通过 socket,这里我们仅介绍使用 Sockets的方法。

Step 1:新建你的Matlab项目文件夹,这是我的习惯,例如新建一个名为 vrep api的文件夹。

Step 2:在V-REP安装文件夹下找到 \programming\remoteApiBindings\matlab\matlab 文件夹,将该文件夹下的所有文件拷贝到项目文件夹 vrep api下。其实只有remApi.m 和 rempteApiProto.m 是有用的,其它可留作参考。

Step 3:在V-REP安装文件夹下找到 \programming\remoteApiBindings\lib\lib\Windows\64Bit 文件夹,将该文件夹下的所有文件拷贝到项目文件夹 vrep api下。当然只有一个文件。完成后你的项目文件夹下会有如下文件:
remApi
(readMe那个可以删除了)

如此,Matlab环境就准备完毕了。是不是挺简单的?

一个简单的例子

下面用一个简单的例子来测试一下V-REP与Matlab是否能够重新通信。

Step 1:打开V-REP,系统会自动创建一个新的scence。将UR5拖拽到工作空间。
scene01

Step 2:打开Matlab,将工作空间定位到vrep api文件夹下。并打开simpleTest.m文件。
scene02

Step 3:如simpleTest.m文件的注释所说,打开V-REP中UR5的脚本文件,在最顶端插入

simRemoteApi.start(19999)

UR5的脚本文件中已经自带了一个例子,可以删了,或者留着也行。
scene03

Step 4:运行V-REP仿真,再运行Matlab仿真,观测Matlab输出结果。在V-REP界面移动鼠标可以看到Matlab Command窗口输出的变化,直到Matlab程序执行完毕。
scene04

V-REP 与 Matlab 通信的关键脚本代码如下:

% V-REP脚本:

 simExtRemoteApiStart(19999)

% MATLAB端:

vrep=remApi('remoteApi'); % using the prototype file (remoteApiProto.m)
vrep.simxFinish(-1); % just in case, close all opened connections
clientID=vrep.simxStart('127.0.0.1',19999,true,true,5000,5);

好了,基本的介绍到此为止。

2016-06-22 23:06:07 ZhangRelay 阅读数 7929

ROS(indigo)国外开源示例包括多机器人的V-Rep和Gazebo仿真等

1 micros_swarm_framework

使用超级经典的stage。

http://wiki.ros.org/micros_swarm_framework
代码的详细解释参考上面网址。

启动stage:

roslaunch micros_swarm_framework swarm_in_stage.launch
<pre name="code" class="html">roslaunch micros_swarm_framework kernel.launch

两个示例:

roslaunch micros_swarm_framework app1.launch

roslaunch micros_swarm_framework app2.launch



2 Swarmathon(NASA)

[NASA Swarmathon](http://www.nasaswarmathon.com)
[iAnt robot swarms](http://swarms.cs.unm.edu)
[University of New Mexico](http://www.unm.edu/)
安装:

sudo apt-get install ros-indigo-robot-localization
sudo apt-get install ros-indigo-hector-gazebo-plugins
sudo apt-get install ros-indigo-joystick-drivers
详情参考:

https://github.com/BCLab-UNM/Swarmathon-ROS
启动:

~/rover_ws/Swarmathon_ROS$ ./run.sh


3 VRep-Ros Quadcopter Swarm

https://github.com/merosss/VRepRosQuadSwarm
编译完成后,分别在不同终端启动:

~$ roscore
~/V-REP_PRO_EDU_V3_3_1_64_Linux$ ./vrep.sh


4 vrep_ros_bridge

这个例子可以测试机械臂,四旋翼飞行器和先锋机器人,这里以先锋机器人跟随二维码为例。

~$ roscore
~/V-REP_PRO_EDU_V3_3_1_64_Linux$ ./vrep.sh
~$ roslaunch demo_pioneer demo-visual-servo-pioneer-simulation.launch 


5 vrep_youbot_plugin

带有机械手臂的移动机器人。安装使用说明请参考:

https://github.com/mfueller/vrep_youbot_plugin
用手机连接后,可以控制底盘移动,文档中有机械手臂说明等,可以愉快玩耍。




-End-

2019-03-16 19:51:20 qq_30637919 阅读数 673

目录

下边的大部分命令都是在终端里执行~致linux小白

安装ros kinetic版本:

参考:http://wiki.ros.org/kinetic/Installation/Ubuntu

sudo apt install ros-kinetic-desktop-full

ROS完整安装

sudo apt-get install ros-kinetic-gazebo-ros-pkgs ros-kinetic-gazebo-ros-control
sudo apt-get install ros-kinetic-joint-trajectory-controller
sudo apt-get install ros*controller*

安装 v-rep linux 64-bit:

cd ~/Downloads
wget http://coppeliarobotics.com/V-REP_PRO_EDU_V3_3_2_64_Linux.tar.gz
cd ~
tar zvxf ~/Downloads/V-REP_PRO_EDU_V3_3_2_64_Linux.tar.gz

将v-rep环境添加进 ./bashrc

echo 'export VREP_ROOT="$HOME/V-REP_PRO_EDU_V3_3_2_64_Linux"' >> ~/.bashrc # it's same to vrep3.5
source ~/.bashrc

安装一些Ubuntu包:

sudo apt install git cmake python-tempita python-catkin-tools python-lxml default-jre

安装 saxon:

cd ~/Downloads
wget http://downloads.sourceforge.net/project/saxon/Saxon-HE/9.7/SaxonHE9-7-0-8J.zip
cd ~
mkdir -p saxon/bin
cd saxon
unzip ~/Downloads/SaxonHE9-7-0-8J.zip
echo -e '#!/bin/sh\njava -jar "`dirname "$0"`/../saxon9he.jar" "$@"' > bin/saxon
chmod a+x bin/saxon

将环境添加进 .bashrc

echo 'export PATH="$PATH:$HOME/saxon/bin"' >> ~/.bashrc
source ~/.bashrc

安装 v_repStubsGen

参考:https://github.com/fferri/v_repStubsGen.git

mkdir ~/python-packages
cd ~/python-packages
git clone https://github.com/fferri/v_repStubsGen.git
echo 'export PYTHONPATH="$PYTHONPATH:$HOME/python-packages"' >> ~/.bashrc
source ~/.bashrc

制作 catkin 工作空间

rm -rf ~/catkin_ws
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
cd ..
catkin build
source devel/setup.bash
git clone https://github.com/fferri/v_repExtRosInterface.git vrep_ros_interface
catkin build

安装过程中可能出现的问题

编译所需的几个package位于VREP安装目录的programming/ros_packages下,将其复制到自己的catkin_ws/src中,用catkin工具进行编译。编译成功后将生成的.so库文件复制到V-rep安装目录中即可。
参考:https://blog.csdn.net/bamboocan/article/details/77942362

2018-10-29 15:44:34 philthinker 阅读数 2164

OS: Win10 x64
Python: Anaconda 3.X
V-REP: V-REP PRO EDU v3.5.0
V-REP

下载、安装与支持

V-REP提供Windows、Linux和MacOS三个平台的应用程序支持,任意平台都提供教育版和专业版两个版本。教育版是免费的,因此后续教程我们均以教育版为例。安装方法也非常简单,Windows版按照正常的安装流程即可,Linux版本只要解压缩就行。

就目前而言,V-REP是一个比较小众的仿真工具,尽管它功能非常强大。目前唯一的技术支持就是V-REP官方论坛。V-REP的在线技术手册可以解决大部分问题,说明也非常详细。

具体下载安装方法与V-REP的操作基础请参考此文

环境准备

这里使用 Visual Studio 2017 Community 作为编译器进行说明,其它优秀的编译器如 Pycharm 和 Spyder 也可以使用,不作详细介绍。安装官网说法,使用V-REP的Python远程接口需要准备以下文件:

这些文件均可以在安装目录下的“YOUR_INSTALL_PATH\programming\remoteApiBindings\python\python” 和“YOUR_INSTALL_PATH\programming\remoteApiBindings\lib\lib\Windows\64Bit”中找到,复制到你的工程文件夹中即可。

完成后,在该文件夹下新建你的工程即可。

一个简单的例子

下面用一个简单的例子来测试一下V-REP的Python远程接口。V-REP 安装路径下有多个Python测试文件,方便起见,这里直接用这些测试文件进行测试。

Step 1: 使用 Visual Studio 新建一个Python项目。将“vrep.py”、“vrepConst.py”两个文件添加到当前项目中。注意确保“remoteApi.dll”也在上述两个文件所在的文件夹下。

Step 2: 找到“YOUR_INSTALL_PATH\programming\remoteApiBindings\python\python” 路径下的 “simpleTest.py”文件。复制到你的工程路径下,并添加到项目中。

Step 3: 打开V-REP,系统会自动新建一个场景,将UR5拖拽到你的场景中,当然用别的也行,这里仅以UR5为例。
UR5

Step 4: 修改UR5自带的脚本文件,在最顶端插入:

simRemoteApi.start(19999)

Lua
注意UR5模型有自带的脚本文件,可以删了,留着也不影响。

Step 5: 运行V-REP仿真,再运行你的Python程序,该顺序不能变。若程序正常运行,可看到V-REP的状态栏中有如下显示:
STATESBAR
没错,就是出现“Hello V-REP”字样。鼠标箭头可以在V-REP场景中移动,观测到Python控制台出现鼠标的位置变化提示。直到Python程序运行完成。

2017-11-18 20:29:00 weixin_30344795 阅读数 12
  • Ubuntu 14.04 上安装V-rep 3.4.0

  进入VREP官网下载Linux版本的V-rep(注意V-rep 3.4.0只有64位的版本,因此操作系统也要与之对应,Ubuntu 32位系统就无法运行V-rep 3.4。如果想使用以前的V-rep版本,可以进入这个网址下载)

   将下载的压缩文件解压后放到合适的位置,进入该目录下,执行sh脚本文件打开V-rep程序:

./vrep.sh

  VREP与ROS的连接主要有三种方法:

  1. The RosInterface: RosInterface是V-rep官方推荐的用来跟ROS通信的插件(We highly recommend you to first try your hands on the RosInterface, since this is the most flexible and natural approach)
  2. The ROS plugin skeleton: 可以让用户实现特定功能的ROS插件框架(This represents a skeleton project that can be used to create a new ROS plugin for V-REP / create your own specific ROS plugin for V-REP. e.g. to support ROS messages for a specific robot)
  3. ROS interfaces developed by others: 其他非V-rep官方支持的通信接口,比如V-REP ROS bridge.

 

 RosInterface

  将VREP安装路径下的compiledRosPlugins文件夹中的libv_repExtRosInterface.so或libv_repExtRosSkeleton.so库复制到上层目录(VREP安装目录)中:

  然后在终端中运行roscore开启ROS master,接着执行vrep.sh脚本打开VREP,打开过程中会导入插件。可以看到RosInterface插件已经成功加载:

  开启一个新终端,输入rosnode list查看运行的ros节点。可以看到除了ros master以外vrep_ros_interface也成功运行:

   如果插件没能成功导入(我使用的ROS Indigo版本没遇到这种情况,但是ROS Kinetic会出错),则需要自己重新编译库文件。编译所需的几个package位于VREP安装目录的programming/ros_packages下,将其复制到自己的catkin_ws/src中,用catkin工具进行编译。具体步骤可以参照帮助文件中的ROS tutorial - Indigo页面或者文件夹中的ros_vrep_rosinterface_install_guide.txt安装说明。编译成功后将生成的.so库文件复制到V-rep安装目录中即可。

 

  下面看一个简单的例子。在场景中选择一个物体添加一个non-threaded脚本,这个脚本会发布仿真时间然后自己订阅它,并且还会发布坐标变换消息:

function subscriber_callback(msg)
    -- This is the subscriber callback function
    simAddStatusbarMessage('subscriber receiver following Float32: '..msg.data)
end

function getTransformStamped(objHandle,name,relTo,relToName)
    -- This function retrieves the stamped transform for a specific object
    t=simGetSystemTime()
    p=simGetObjectPosition(objHandle,relTo)
    o=simGetObjectQuaternion(objHandle,relTo)
    return {
        header={
            stamp=t,
            frame_id=relToName
        },
        child_frame_id=name,
        transform={
            translation={x=p[1],y=p[2],z=p[3]},
            rotation={x=o[1],y=o[2],z=o[3],w=o[4]}
        }
    }
end

if (sim_call_type==sim_childscriptcall_initialization) then
    -- The child script initialization
    objectHandle=simGetObjectAssociatedWithScript(sim_handle_self)
    objectName=simGetObjectName(objectHandle)
    -- Check if the required RosInterface is there:
    moduleName=0
    index=0
    rosInterfacePresent=false
    while moduleName do
        moduleName=simGetModuleName(index)
        if (moduleName=='RosInterface') then
            rosInterfacePresent=true
        end
        index=index+1
    end

    -- Prepare the float32 publisher and subscriber (we subscribe to the topic we advertise):
    if rosInterfacePresent then
        publisher=simExtRosInterface_advertise('/simulationTime','std_msgs/Float32')
        subscriber=simExtRosInterface_subscribe('/simulationTime','std_msgs/Float32','subscriber_callback')
    end
end

if (sim_call_type==sim_childscriptcall_actuation) then
    -- Send an updated simulation time message, and send the transform of the object attached to this script:
    if rosInterfacePresent then
        simExtRosInterface_publish(publisher,{data=simGetSimulationTime()})
        simExtRosInterface_sendTransform(getTransformStamped(objectHandle,objectName,-1,'world'))
        -- To send several transforms at once, use simExtRosInterface_sendTransforms instead
    end
end

if (sim_call_type==sim_childscriptcall_cleanup) then
    -- Following not really needed in a simulation script (i.e. automatically shut down at simulation end):
    if rosInterfacePresent then
        simExtRosInterface_shutdownPublisher(publisher)
        simExtRosInterface_shutdownSubscriber(subscriber)
    end
end
View Code

  终端中输入rostopic list指令查看话题:

  为了查看消息的内容,可以输入:

$ rostopic echo /simulationTime

   脚本中主要用到下面几个函数:

  • simExtRosInterface_advertise

  • simExtRosInterface_subscribe

  • simExtRosInterface_publish

  •  simExtRosInterface_sendTransform

 

 

rosInterfaceTopicPublisherAndSubscriber

  在V-rep自带的例子中还有一个场景模型"rosInterfaceTopicPublisherAndSubscriber.ttt",脚本代码中会发布视觉传感器捕获的图像信息到/image话题上,同时会自己订阅这个信息并显示出来。

-- This illustrates how to publish and subscribe to an image using the ROS Interface.
-- An alternate version using image transport can be created with following functions:
--
-- simExtRosInterface_imageTransportAdvertise
-- simExtRosInterface_imageTransportPublish
-- simExtRosInterface_imageTransportShutdownPublisher
-- simExtRosInterface_imageTransportShutdownSubscriber
-- simExtRosInterface_imageTransportSubscribe

function imageMessage_callback(msg)
    -- Apply the received image to the passive vision sensor that acts as an image container
    simSetVisionSensorCharImage(passiveVisionSensor,msg.data)
end

if (sim_call_type==sim_childscriptcall_initialization) then
    -- Get some handles:
    activeVisionSensor=simGetObjectHandle('Vision_sensor')
    passiveVisionSensor=simGetObjectHandle('PassiveVision_sensor')

    -- Enable an image publisher and subscriber:
    pub=simExtRosInterface_advertise('/image', 'sensor_msgs/Image')
    --After calling this function, this publisher will treat uint8 arrays as string. Using strings should be in general much faster that using int arrays in Lua.
    simExtRosInterface_publisherTreatUInt8ArrayAsString(pub) -- treat uint8 arrays as strings (much faster, tables/arrays are kind of slow in Lua)

    sub=simExtRosInterface_subscribe('/image', 'sensor_msgs/Image', 'imageMessage_callback')
    simExtRosInterface_subscriberTreatUInt8ArrayAsString(sub) -- treat uint8 arrays as strings (much faster, tables/arrays are kind of slow in Lua)
end

if (sim_call_type==sim_childscriptcall_sensing) then
    -- Publish the image of the active vision sensor:
    local data,w,h=simGetVisionSensorCharImage(activeVisionSensor)
    d={}
    d['header']={seq=0,stamp=simExtRosInterface_getTime(), frame_id="a"}
    d['height']=h
    d['width']=w
    d['encoding']='rgb8'
    d['is_bigendian']=1
    d['step']=w*3
    d['data']=data
    simExtRosInterface_publish(pub,d)
end

if (sim_call_type==sim_childscriptcall_cleanup) then
    -- Shut down publisher and subscriber. Not really needed from a simulation script (automatic shutdown)
    simExtRosInterface_shutdownPublisher(pub)
    simExtRosInterface_shutdownSubscriber(sub)
end
View Code

  可以在终端中输入下面的命令来显示/image话题的图像:

$ rosrun image_view image_view image:=/image

   在rviz中添加Image,将话题选为/image也可以查看图像信息:

 controlTypeExamples

   还有一个例子是controlTypeExamples.ttt,V-rep中的脚本负责发布接近传感器的信息以及仿真时间并订阅左右轮驱动的话题。外部的ros程序rosBubbleRob2根据接收到的传感器信息生成左右轮速度指令,并发布出去,V-rep中订阅后在回调函数里控制左右轮关节转动。

  V-rep中脚本代码如下:

function setLeftMotorVelocity_cb(msg)

    -- Left motor speed subscriber callback

    simSetJointTargetVelocity(leftMotor,msg.data)

end



function setRightMotorVelocity_cb(msg)

    -- Right motor speed subscriber callback

    simSetJointTargetVelocity(rightMotor,msg.data)

end



function getTransformStamped(objHandle,name,relTo,relToName)

    t=simGetSystemTime()

    p=simGetObjectPosition(objHandle,relTo)

    o=simGetObjectQuaternion(objHandle,relTo)

    return {

        header={

            stamp=t,

            frame_id=relToName

        },

        child_frame_id=name,

        transform={

            translation={x=p[1],y=p[2],z=p[3]},

            rotation={x=o[1],y=o[2],z=o[3],w=o[4]}

        }

    }

end



if (sim_call_type==sim_childscriptcall_initialization) then

    robotHandle=simGetObjectAssociatedWithScript(sim_handle_self)

    leftMotor=simGetObjectHandle("rosInterfaceControlledBubbleRobLeftMotor") -- Handle of the left motor

    rightMotor=simGetObjectHandle("rosInterfaceControlledBubbleRobRightMotor") -- Handle of the right motor

    noseSensor=simGetObjectHandle("rosInterfaceControlledBubbleRobSensingNose") -- Handle of the proximity sensor



    -- Check if the required ROS plugin is there:

    moduleName=0

    moduleVersion=0

    index=0

    pluginNotFound=true

    while moduleName do

        moduleName,moduleVersion=simGetModuleName(index)

        if (moduleName=='RosInterface') then

            pluginNotFound=false

        end

        index=index+1

    end



    -- Add a banner:

    if (pluginNotFound) then

        bannerText="I cannot run! (I couldn't find my RosInterface plugin)"

    else

        bannerText="I am controlled via a ROS node and the RosInterface! ('rosBubbleRob2' controlls me)"

    end

    black={0,0,0,0,0,0,0,0,0,0,0,0}

    red={0,0,0,0,0,0,0,0,0,1,0.2,0.2}

    simAddBanner(bannerText,0,sim_banner_bitmapfont+sim_banner_overlay,nil,simGetObjectAssociatedWithScript(sim_handle_self),black,red)



    -- Ok now launch the ROS client application:

    if (not pluginNotFound) then

        local sysTime=simGetSystemTimeInMs(-1) 

        local leftMotorTopicName='leftMotorSpeed'..sysTime -- we add a random component so that we can have several instances of this robot running

        local rightMotorTopicName='rightMotorSpeed'..sysTime -- we add a random component so that we can have several instances of this robot running

        local sensorTopicName='sensorTrigger'..sysTime -- we add a random component so that we can have several instances of this robot running

        local simulationTimeTopicName='simTime'..sysTime -- we add a random component so that we can have several instances of this robot running



        -- Prepare the sensor publisher and the motor speed subscribers:

        sensorPub=simExtRosInterface_advertise('/'..sensorTopicName,'std_msgs/Bool')

        simTimePub=simExtRosInterface_advertise('/'..simulationTimeTopicName,'std_msgs/Float32')

        leftMotorSub=simExtRosInterface_subscribe('/'..leftMotorTopicName,'std_msgs/Float32','setLeftMotorVelocity_cb')

        rightMotorSub=simExtRosInterface_subscribe('/'..rightMotorTopicName,'std_msgs/Float32','setRightMotorVelocity_cb')



        -- Now we start the client application:

        result=simLaunchExecutable('rosBubbleRob2',leftMotorTopicName.." "..rightMotorTopicName.." "..sensorTopicName.." "..simulationTimeTopicName,0)

    end

end



if (sim_call_type==sim_childscriptcall_actuation) then

    -- Send an updated sensor and simulation time message, and send the transform of the robot:

    if not pluginNotFound then

        local result=simReadProximitySensor(noseSensor)

        local detectionTrigger={}

        detectionTrigger['data']=result>0

        simExtRosInterface_publish(sensorPub,detectionTrigger)

        simExtRosInterface_publish(simTimePub,{data=simGetSimulationTime()})

        -- Send the robot's transform:

        simExtRosInterface_sendTransform(getTransformStamped(robotHandle,'rosInterfaceControlledBubbleRob',-1,'world'))

        -- To send several transforms at once, use simExtRosInterface_sendTransforms instead

    end

end



if (sim_call_type==sim_childscriptcall_cleanup) then

    if not pluginNotFound then

        -- Following not really needed in a simulation script (i.e. automatically shut down at simulation end):

        simExtRosInterface_shutdownPublisher(sensorPub)

        simExtRosInterface_shutdownSubscriber(leftMotorSub)

        simExtRosInterface_shutdownSubscriber(rightMotorSub)

    end

end
View Code

 

rosInterface helper tool

  在模型浏览器的tools文件夹中有一个RosInterface的帮助工具,将其拖入场景中可以方便实现一些控制功能。

  主要有下面一些功能:

  • startSimulation topic: can be used to start a simulation by publishing on this topic a std_msgs::Bool message.
  • pauseSimulation topic: can be used to pause a simulation by publishing on this topic a std_msgs::Bool message.
  • stopSimulation topic: can be used to stop a simulation by publishing on this topic a std_msgs::Bool message.
  • enableSyncMode topic: by publishing a std_msgs::Bool message on this topic, you can enable/disable the synchronous simulation mode.
  • triggerNextStep topic: by publishing a std_msgs::Bool message on this topic, you can trigger the next simulation step, while in the synchronous simulation mode.
  • simulationStepDone topic: a message of type std_msgs::Bool will be published at the end of each simulation pass.
  • simulationState topic: messages of type std_msgs::Int32 will be published on a regular basis. 0 indicates that the simulation is stopped, 1 that it is running and 2 that it is paused.
  • simulationTime topic: messages of type std_msgs::Float32 will be published on a regular basis, indicating the current simulation time.

  可以在终端中输入下面的一些命令进行测试:

$ rostopic pub /startSimulation std_msgs/Bool true --once
$ rostopic pub
/pauseSimulation std_msgs/Bool true --once
$ rostopic pub
/stopSimulation std_msgs/Bool true --once
$ rostopic pub
/enableSyncMode std_msgs/Bool true --once $ rostopic pub /triggerNextStep std_msgs/Bool true --once

  比如在终端中输入:rostopic pub /startSimulation std_msgs/Bool true --once, 就可以开始仿真,跟手动点击仿真按钮效果一样。

 

 

 

参考:

vrep_ros_bridge

Ros与Vrep平台搭建

机器人操作系统ROS(indigo)与三维仿真软件V-Rep(3.2.1)通信接口使用笔记

从零开始的仿真之旅——在Ubuntu下配置V-Rep仿真平台下的搭载ROS系统的机器人仿真

转载于:https://www.cnblogs.com/21207-iHome/p/7855947.html

没有更多推荐了,返回首页