該教程參考V-REP官方示例教程Tutorials–BubbleRob tutorial。
官方教程鏈接
1. 添加bubbleRob
(1)在場景中添加一個直徑爲0.2的球。【Menu bar --> Add --> Primitive shape --> Sphere】
(2)在彈出的對話框中爲Sphere指定大小爲0.2。即設置【X-size】爲0.2,點擊OK
創建的球將出現在可視化層1中,並且是動態可響應的。(因爲(2)中【Create dynamic and respondable shape】是勾選的)
另外這個添加的球體Sphere是dynamic和respondable的,這意味着Sphere具有運動學屬性並且可以和其他物體發生相互作用,這種屬性在object properties裏面也可以看到
進行仿真(官方教程裏的一部分,複製粘貼Sphere,由於兩小球的相互作用,兩小球分開)
(3)爲了讓Sphere能夠爲calculation modules(這個在後面傳感器計算物體之間的距離會用到)所用,需要使能Sphere的Collidable、Measurable、Renderable和Detectable屬性,這個在object properties裏面設置。除此之外,可以在Shape裏面設置Sphere的外觀屬性比如顏色。
(4)將對象的位置沿Z軸向上移動2cm(注意V-REP默認是以m爲單位,Position爲絕對座標位置,Translation 爲相對座標位置(即移動多少)。此處按照下圖設置,也可以將Position 的** Z-coord** 設置爲0.12,即在原來的基礎上+0.02。自行體會Position和Tranlation的關係)(5)修改對象名稱爲bubbleRob
2.爲 bubbleRob 添加 proximity sensor(接近傳感器)
(1)添加。[Menu bar --> Add --> Proximity sensor --> Cone type]
(2)修改傳感器的位置(即座標)和朝向(即方向)
修改朝向
修改位置
(3)修改proximity sensor(接近傳感器)的參數
(4)修改proximity sensor(接近傳感器)的名稱爲【bubbleRob_sensingNose】(圖中名稱有錯誤)
(5)將對象【bubbleRob_SensingNose】添加到【bubbleRob】下
3.爲bubbleRob 添加輪子
(1)新建一個場景【Menu bar --> File --> New scene】
(2)添加左輪
- 添加一個圓柱
- 確定圓柱的大小尺寸,在彈出的對話框中爲Cylinder設置大小(0.08,0.08,0.02)
- 作爲bubbleRob身體的一部分,對其進行屬性調整,如同bubbleRob一樣使能Cylinder的Collidable、Measurable、Renderable和Detectable屬性
- 修改輪子的位置和方向,設置Cylinder的絕對位置(Position)爲(0.05,0.1,0.04),絕對歐拉角(Orientation)(-90,0,0)
- 修改對象的名稱爲bubbleRob_leftWheel(修改名稱參考步驟1中的(4)
(3)創建右輪,複製粘貼左輪,並修改右輪的位置,並重命名bubbleRob_rightWheel
(4)將兩個輪子複製到場景1中去(分別選中兩個輪子對象,Ctrl+C,切換到場景1中Ctrl+V即可)
4. 添加關節(爲bubbleRob添加rightMotor和leftMotor)
(1)將左輪的位置和角度信息添加到左關節上
(2)修改關節屬性,並重命名爲bubbleRob_leftMotor
(3)以同樣的方式創建右關節,並設置屬性
(4)將兩個輪子與兩個電機聯繫起來,並添加到bubbleRob下
(5)運行仿真,小車翻滾不能保持平衡
5. 爲bubbleRob添加slider(or caster)即爲小車添加一個滑塊或者腳輪
(1)創建slider
- 創建一個new scene,添加一個半徑大小爲0.05的sphere
- 設置屬性並重命名bubbleRob_slider
- 設置材料屬性
(2)爲了將腳輪與bubble_Rob的其他部分連接起來,添加一個Force sensor【力傳感器】
- 【Menu bar --> Add --> Force sensor】
- 重命名force_sensor爲bubbleRob_connection並把【力傳感器】擡高0.05(下圖有錯誤,應該是選擇Translation中的Along-Z設置爲0.05。如果用下圖方式設置的話,應該在第4步修改Z-coord的值時,不應該直接改爲0.05,而是在原來值的基礎上加上0.05。因爲Position是座標的絕對座標,Translation是相對座標即移動了多少)
(3)將【力傳感器】與腳輪聯繫起來,並複製到場景一中,並添加到bubbleRob下
(4)修改【力傳感器】和腳輪的位置(將bubbleRob_connection沿x絕對方向移動-0.07。)
6. 使bubbleRob具有穩定性
(1)點擊仿真,會發現bubbleRob_slider相對於bubbleRob有微小的振動,這是bubbleRob_slider和bubbleRob相互作用的結果,,進行以下操作進行改進
(2)再次進行仿真,振動不再發生了,但是整個bubble有緩慢的移動。爲此進行以下操作,將two wheels和slider的質量和慣性矩都放大八倍,一次放大兩倍,所以一共放大三次
(3)再次進行仿真,可以看到增加了質量和慣性之後機器人穩定性增強。給機器人一個前進的速度(修改電機速度時最好一個一個修改)
7. 創建bubbleRob collection
將對象【bubbleRob】設置爲模型【bubbleRob】中所有對象的基礎。同時,我們希望定義一個表示BubbleRob的對象集合。爲此,我們定義了一個集合對象。【Menu bar --> Tools --> Collections】
8. 創建calculation module
爲機器人bubbleRob添加一個最小距離函數,【Menu bar --> Tools --> Calculation module properties】
9. 創建graph
進行仿真,沒有發現什麼不同,因爲環境中沒有其他物體,爲了顯示這個最小距離,我們建立一個圖【graph】
(1)【Menu bar --> Add --> Graph】
(2)重命名爲bubbleRob_graph,並將其與bubbleRob聯繫起來,設置絕對座標爲(0,0,0.005)
(3)將具體參數添加進圖表裏
以相同的方式添加Y和Z的數據流
(4)現在我們有3個數據流表示BubbleRob的x-、y-和z-軌跡。我們將再添加一個數據流,這樣我們就能夠跟蹤機器人與其環境之間的最小距離
(5)對四個數據流進行重命名
(6)分別對X,Y,Z在進行以下操作(僅以X操作爲例)
(7)建立一個三維曲線來顯示bubbleRob的軌跡
- 設置參數
- 給電機設置速度,進行仿真,可以看到運動軌跡(粉色軌跡)
10. 添加obstacles(即爲場景添加障礙物)
(1)創建大小爲(0.1,0.1,0.2)的Cylinder
(2)設置障礙物的屬性(我們希望這個圓柱體是靜態的(即不受重力或碰撞的影響),但仍然對非靜態可響應形狀施加一些碰撞響應。)
(3)拖動障礙物到合適的位置
再按相同的方式添加多個障礙物
(4)設置一個電機的速度爲50,開始仿真,可以在圖中看到最近的距離
11. 完成bubbleRob model模型構建
(1)選中bubbleRob,在object properties裏面check Object is model base和 Object/model can transfer or accept DNA
(2)模型包圍框現在忽略了兩個關節和接近傳感器:(分別選中兩個motors、graph和已有的一個proximity sensor,在object properties的common界面勾選ignored by model bounding box,然後點擊Apple to selection;)
(3)隱藏兩個電機和力傳感器
(4)依次對右電機和力傳感器進行上述操作
(5)分別選中兩個wheels、一個graph、一個slider、一個proximity sensor,然後再object properties的common界面勾選 Select base of model instead,這樣當我們試圖選中其中的任何一個object的時候,選中的都會是bubbleRob,這樣可以保護模型;
12. 添加vision sensor
(1)【Menu bar --> Add --> Vision sensor --> Perspective type】
(2)對視覺傳感器進行設置
(3)我們添加一個浮動視圖到場景中
(4)將視圖與視覺傳感器聯繫起來
(5)設置視覺傳感器相對於 bubbleRob_sensingNose的位置和姿態角爲(0,0,0)和(0,0,0)(即讓接近傳感器和視覺傳感器的位置和角度一致)
(6)進行仿真
13. 最後一步:添加代碼
(1)添加腳本控制機器人運動
(2)進行仿真
建議:還是多看看官方教程,多操作幾遍,體會各種操作的意義。
如果操作過程中有什麼問題,大家可以一起交流學習。QQ:807561027