Vrep基础部分(二)

2.1 BubbleRob tutorial

    本章描述Vrep官方第一个教程,利用规则几何体构建简易机器人并利用脚本文件控制机器人运动。以下为具体步骤。

1、添加一个简单的球(直径0.2)【Menu bar -->Add-->Primitive shape-->Sphere】,且默认情况下,它是动态可响应的(dynamic and respondable shape enabled)【shape dynamicproperties】,这就意味着BubbleRob的本体会掉下来且在与别的具有碰撞响应的物体碰撞时会发生碰撞效应。(copy-paste);

2、要让BubbleRob的本体能够供其它模块进行计算(如:最小距离计算模块),在【object common properties】中勾上Collidable、Measurable、Rendeable、Detectable。

3、打开【position dialog】在【translation】中将球体向上升0.02(沿世界坐标系z轴);

4、为了让机器人知道它离障碍物有多远,添加距离传感器【Menu baràAddàProximity sensor-->cone type】。在【orientation dialog】对话框中的【orientation】栏,沿y轴和z轴旋转90度,点击Rotation Selection;在位置对话框中的【position】栏,x方向设置0.1,z方向设置0.12,修改距离传感器的参数【show detection parameters】,调整offset为0.005,角度为30,范围为0.15;然后,【showdetection parameters】中将Don’t  allow detection ifdistance smaller than。最后将传感器包含在机器人中,【Menu bar-->Edit-->Make last selected object parent】

5、【Menu bar-->File-->New scene】添加一个圆柱(0.08,0.08,0.02),并且使能collidable,Measurable,Renderable和Detectable,位置设为(0.05,0.1,0.04),绝对角度设为(-90,0,0);然后copy-paste并设置y轴为-0.1。

6、添加关节,【Menu bar-->Add-->Joint-->Revolute】,保持选中的关节,然后CTRL同时选中左轮,在【position dialog】中position栏中选Apply to selection,在【orientation dialog】中orientaton栏做同样的操作,在【joint properities—>show dynamic parameters】使能电机【enablethe motor】、【Lock motor when target velocity is zero】,然后将左右轮加到各自的电机上,并把电机贴到机器人上。


7、定义对象集合【Menu bar-->Tools-->Collections】,在对话框中选中【Add new collection】,选中bubbleRob,再点击Add。跟踪最小距离【Menu bar-->Tools-->Calculation module properties】,然后,点击【Add newdistance object】。

8、添加(graph object)显示最小距离,【Menubar-->Add-->Graph】将图贴到bubbleRob,设置该图的绝对坐标为(0,0,0.005),在图的属性中取消Display XYZ-panes,然后,点击Add new data stream to record,并选择Object:absolutex-position(Data stream type),bubbleRob_graph(Object/item to record),同样建立y轴和z轴的图。Add new data stream to record,选择Distance:segment length(Data streamtype),BubbleRob_distance (Object/item to record)


接下来添加3D曲线。

9、操作顺序Edit 3Dcurves-->Add new curve,然后在对话框中依次选择bubbleRob_x_pos作为x轴的值,bubbleRob_y_pos作为y轴的值,bubbleRob_z_pos作为z轴的值。最后选择Relative to world和 curve width 设为4。

10、添加障碍物,添加圆柱体(0.1,0.1,0.2),且为了使障碍物保持静态属性,因此,取消掉其动态特性,在shape dynamics properties中不要勾选Body is dynamic,另外,要保证这些障碍物具有刚性,因此需要选择collidable,Measurable,Rendeable和Detectable。然后选中平移图标,复制à粘贴,选中粘贴的圆柱体依次放到小车的周围。

11、将小车做一个模型定义,选中模型基(如bubbleRob),然后在object common properties 中勾选Object is modelbase和Object/model can transfer or accept DNA,接着在两个轮子和滑块上使能Select base of model instead。

12、添加视觉传感器,【Menubar-->Add-->Vision sensor-->Perspective type】,将视觉传感器和距离传感器安在一起且方向一致,在视觉传感器的属性栏中配置Far clipping plane 为1,Resolution x 和y 设为256和256,在show filter dialog 中选择Edget detection on work image,然后点击Add filter,且,阈值设置为0.2。在主视图上点击右键AddàFloating view,然后选中视觉传感器,并在该Floating view上右键,View-->Associate simulation with selected vision sensor。

13、脚本控制文件解析

     选中基对象(BubbleRob)--->右键选择Add-->Associate child script-->Non threaded


     脚本文件语言为lua语言,整个脚本文件框架:(1)初始化、(2)驱动部分、(3)传感器处理部分、(4)对象销毁即复位部分。无进程子脚本类似一个函数,主函数每循环一次,该函数被调用两次(驱动部分和传感器部分),初始化部分只会调用一次。以下针对以上脚本文件做各个模块解释:

   1)初始化:利用simGetObjectHandle函数获取各个仿真部件的句柄,该函数的参数为Scene hierarchy中各个部件的名字;并设置每个电机的最大最小速度,以及设置小车后退时间,并利用xml创建了一个滑条,simExtCustomUI_create(string  xml),simExtCustomUI_setSliderValue(int   handle,   int   id ,    int  value,   bool   suppressEvents=true)

   2) 驱动部分:此处用到if(result>0) then backUntilTime=simGetSimulationTime()+4   end,当传感器检测到障碍物时result>0,此时设置一个延时4s,即小车向后倒退4s,当其未检测到障碍物时,仿真时间要大于backSimulationTime(),因此,小车前进。

  4)销毁ui

   

   说明:Vrep安装文件目录下有相应的教程源文件。



猜你喜欢

转载自blog.csdn.net/qq6689500/article/details/79040506
今日推荐