V_REP中Plugin控制机制实例

plugin机制是V-REP六种控制机制的一种,最大的优点就是无延迟(lag),计算速度快。可以和V-REP中的嵌入脚本(embeded scripts)实现无缝连接。这是remote API client所不能做到的。

六种控制机制的比较:

 

Plugin

  • V-REP automatically loads all plugins that it can find in its folder
  • V-REP recognizes plugin files with following mask: "v_repExt*.dll" on Windows, "libv_repExt*.dylib" on Mac OS and "libv_repExt*.so" on Linux. 

实例:

使用plugin控制小车的行为,小车使用proximity sensor,当接近障碍物时,调节轮的速度,进而调节前进方向;

脚本代码如下:

 1 function sysCall_threadmain()
 2     -- Check what OS we are using:
 3     platf=sim.getInt32Parameter(sim.intparam_platform)
 4     if (platf==0) then
 5         pluginFile='v_repExtBubbleRob.dll'  --windows
 6     end
 7     if (platf==1) then
 8         pluginFile='libv_repExtBubbleRob.dylib'  -- mac
 9     end
10     if (platf==2) then
11         pluginFile='libv_repExtBubbleRob.so'   --linux
12     end
13 
14     -- Check if the required plugin is there:
15     moduleName=0
16     moduleVersion=0
17     index=0
18     bubbleRobModuleNotFound=true
19     while moduleName do
20         moduleName,moduleVersion=sim.getModuleName(index)
21         if (moduleName=='BubbleRob') then
22             bubbleRobModuleNotFound=false
23         end
24         index=index+1
25     end
26 
27     if (bubbleRobModuleNotFound) then
28         -- Plugin was not found
29         sim.displayDialog('Error',"BubbleRob plugin was not found. ('"..pluginFile.."')&&nSimulation will not run properly",sim.dlgstyle_ok,true,nil,{0.8,0,0,0,0,0},{0.5,0,0,1,1,1})
30     else
31         -- Plugin is there
32 
33         local jointHandles={sim.getObjectHandle('pluginControlledBubbleRobLeftMotor'),sim.getObjectHandle('pluginControlledBubbleRobRightMotor')}
34         local sensorHandle=sim.getObjectHandle('pluginControlledBubbleRobSensingNose')
35         local robHandle=simBubble.create(jointHandles,sensorHandle,{0.5,0.25})
36         if robHandle>=0 then
37             simBubble.start(robHandle,9999) -- control happens here
38             simBubble.stop(robHandle)
39             simBubble.destroy(robHandle)
40         end
41     end
42 end

逐一解释说明各段代码含义:

 1     -- Check what OS we are using:
 2     platf=sim.getInt32Parameter(sim.intparam_platform)
 3     if (platf==0) then
 4         pluginFile='v_repExtBubbleRob.dll'  --windows
 5     end
 6     if (platf==1) then
 7         pluginFile='libv_repExtBubbleRob.dylib'  -- mac
 8     end
 9     if (platf==2) then
10         pluginFile='libv_repExtBubbleRob.so'   --linux
11     end

这段代码很直接,根据操作系统不同获得相应的插件名;

 1     -- Check if the required plugin is there:
 2     moduleName=0
 3     moduleVersion=0
 4     index=0
 5     bubbleRobModuleNotFound=true
 6     while moduleName do
 7         moduleName,moduleVersion=sim.getModuleName(index)
 8         if (moduleName=='BubbleRob') then
 9             bubbleRobModuleNotFound=false
10         end
11         index=index+1
12     end

索引V_REP安装目录下所有的插件,判断是否存在所需要的plugin;

猜你喜欢

转载自www.cnblogs.com/hlhfhmt/p/11285740.html
今日推荐