V-rep學習筆記:碰撞檢測與距離計算


  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). 在仿真過程中,注冊的碰撞對象之間的碰撞狀態可以由不同的顏色可視化顯示,也可以通過Graph對象來進行記錄。

  下面創建一個簡單的模型來看看怎么使用碰撞檢測:

  (1)新建一個場景,在場景中添加兩個立方體,分別賦予不同的顏色。綠色立方體放置在地面,紅色立方體位於其正上方1m高度處:

  (2)修改兩個立方體的屬性,分別勾選Collidable選項

  (3)在Calculation Modules的屬性對話框中,打開Collision detection標簽頁,添加新碰撞對象。然后在彈出的對話框中選擇要檢測的碰撞體(Collider)和與之發生碰撞的被碰撞體(Collidee)。添加完成后雙擊可以修改碰撞對象名。

  注意這里有一個Adjust collision color選項,從這個彈出的對話框中可以選擇碰撞發生時的顏色(如果勾選下面的Collider color change和Collidee color change選項,則檢測到碰撞發生時,碰撞體和被碰撞體的顏色會發生改變。這樣就可以直觀的從仿真過程中觀察到碰撞了),這里設置為白色。

  (4)除了通過改變顏色可視化碰撞之外,還可以通過Graph對象來記錄碰撞。在場景中單擊右鍵添加Graph,然后添加數據流,在彈出的選項框中選擇Collision:colliding state

    在場景中添加一個Floating view,先選中Graph,然后在Floating view中空白處右鍵選擇View-->Associate view with selected graph。這樣就可以將碰撞事件數據流顯示在我們創建的浮動視窗中。

  (5)下面開始仿真,可以看到碰撞發生時,碰撞體之間顏色變成我們之前設置的顏色。Graph也記錄到碰撞事件的發生,即從0到1的一個上升沿

  如果我們將綠色的立方體的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)按照之前寫過的轉動關節創建方法創建兩個勻速轉動的連桿,如下圖所示。其中綠色的連桿link_1以2°/s的角速度繞其左端點逆時針轉動,藍色連桿link_2以1°/s的角速度繞其中心順時針轉動。

  (2)勾選兩連桿的距離檢測屬性

  (3)打開Calculation Modules中的Distance calculation選項頁,添加距離檢測對象。在彈出的對話框中選擇link_1和link_2

  這里Display distance segment選項用於仿真過程中顯示最短距離線段,Segment width為該線段的寬度,Adjust segment color選項可以調整線段的顏色。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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM