V-rep学习笔记:碰撞检测与距离计算

2019-04-14 19:49发布

  V-REP可以在几何组件中快速判断各种干扰与碰撞,以及计算多个组件间的最小距离。
  • 碰撞检测
  V-REP可以检测两个碰撞体实体(Collidable objects are objects that can be tested for collision against other collidable objects)之间的碰撞,类似于SolidWorks等三维设计软件中的干涉检查。碰撞检测只会检测碰撞状态,而不会直接对碰撞做出反应(The collision detection module will only detect collisions; it does however not directly react to them)。碰撞检测模块中可以注册碰撞对象,即collidable entity-pairs (collider entity and collidee entity). 在仿真过程中,注册的碰撞对象之间的碰撞状态可以由不同的颜 {MOD}可视化显示,也可以通过Graph对象来进行记录。   下面创建一个简单的模型来看看怎么使用碰撞检测:   (1)新建一个场景,在场景中添加两个立方体,分别赋予不同的颜 {MOD}。绿 {MOD}立方体放置在地面,红 {MOD}立方体位于其正上方1m高度处:   (2)修改两个立方体的属性,分别勾选Collidable选项   (3)在Calculation Modules的属性对话框中,打开Collision detection标签页,添加新碰撞对象。然后在弹出的对话框中选择要检测的碰撞体(Collider)和与之发生碰撞的被碰撞体(Collidee)。添加完成后双击可以修改碰撞对象名。   注意这里有一个Adjust collision color选项,从这个弹出的对话框中可以选择碰撞发生时的颜 {MOD}(如果勾选下面的Collider color change和Collidee color change选项,则检测到碰撞发生时,碰撞体和被碰撞体的颜 {MOD}会发生改变。这样就可以直观的从仿真过程中观察到碰撞了),这里设置为白 {MOD}。   (4)除了通过改变颜 {MOD}可视化碰撞之外,还可以通过Graph对象来记录碰撞。在场景中单击右键添加Graph,然后添加数据流,在弹出的选项框中选择Collision:colliding state     在场景中添加一个Floating view,先选中Graph,然后在Floating view中空白处右键选择View-->Associate view with selected graph。这样就可以将碰撞事件数据流显示在我们创建的浮动视窗中。   (5)下面开始仿真,可以看到碰撞发生时,碰撞体之间颜 {MOD}变成我们之前设置的颜 {MOD}。Graph也记录到碰撞事件的发生,即从0到1的一个上升沿   如果我们将绿 {MOD}的立方体的Collidable属性选项取消,再次进行仿真,则不会检测到碰撞发生。
  • 距离计算
   V-REP能检测两个可测量实体(Measurable objects are objects that can be used for minimum distance calculation against other measurable objects)之间的最小距离。The calculation is an exact minimum distance calculation. The distance calculation module will only measure distances; it does however not directly react to them.    距离检测与碰撞检测的使用方法大致相同,下面也来建立一个简单的模型:   (1)按照之前写过的转动关节创建方法创建两个匀速转动的连杆,如下图所示。其中绿 {MOD}的连杆link_1以2°/s的角速度绕其左端点逆时针转动,蓝 {MOD}连杆link_2以1°/s的角速度绕其中心顺时针转动。   (2)勾选两连杆的距离检测属性   (3)打开Calculation Modules中的Distance calculation选项页,添加距离检测对象。在弹出的对话框中选择link_1和link_2   这里Display distance segment选项用于仿真过程中显示最短距离线段,Segment width为该线段的宽度,Adjust segment color选项可以调整线段的颜 {MOD}。Use threshold选项用于加快仿真减小计算量——在两物体距离远大于设定的阈值threshold时不会进行最小距离计算。   (4)开始仿真,如果开启距离检测则在仿真过程中会不停刷新最小距离   如果设置Use threshold的阈值为0.5m,则两物体距离大于0.5m时不进行计算。如下图所示,当两根连杆转到一个位置后最小距离大于阈值,并且越来越大,这时会停止计算:   (5)我们同样也可以使用Graph来记录最小距离的变化。添加一个Graph,然后建立新的数据流,选择Distance:segment length   (6)将其显示在Floating view中:   更复杂的例子可以参考V-rep安装路径下scenes文件夹中的minimuDistanceCalculationDemo.ttt模型:   参考: 3D碰撞检测 Picking with a physics library Convex Hull