- [連載 0]Vrep入門介紹
- [連載 1]Vrep小車建模——前進和轉向
- [連載 2]Vrep小車建模——內嵌腳本
- [連載 3]Vrep小車建模——matlab控制
- [連載 4]Vrep導入三維模型——PUMA560機械臂
- [連載 5]Vrep--Matlab Robitic Toolbox--PUMA560機械臂控制
- [番外 1]Vrep小車機械臂抓取
- [Lib庫 1]CoppeliaSim差分避障小車的Simulink實現(B站視頻講解)
- [Lib庫 2]CoppeliaSim機械臂抓取的Simulink實現(B站視頻講解)
- 知乎專欄:Vrep機器人動力學建模仿真
相信大家在看完Vrep入門介紹之后已經開始摩拳擦掌,準備自己動手完成一個模型吧,下面就介紹如何制作一個可以前進和轉向的小車。
此教程是基于vrep 3.3.2版本制作的,初學可以先安裝3.3.2版本進行學習,后面再使用更新的版本。(舊版下載鏈接:鏈接:https://pan.baidu.com/s/1PIl5t-Pwx2dawOIHfzDelA 提取碼:qirx)
Step1模型準備
說明:這個模型可以從零開始建立,也可以根據我給大家提供的起始文件,起始文件我放在淘寶上了,大家可以購買得到,收費的目的是為了讓大家更加珍視這次Vrep的學習過程,希望大家不要半途而廢,也是我堅持完成系列教程的動力所在。寶貝鏈接
Step2構建驅動輪
這里搭建的小車為大家熟知的萬向輪小車,通過小車后面兩個輪子的速度匹配實現前進、轉向、后退等運動,是最常見的小車運動形式之一。現在我們先構建一個主動驅動輪。
主動驅動輪的構建思路如下:
- 建立一個扁平狀的圓柱體,作為驅動輪的實體
- 調整驅動輪的位置和方向,滿足滾動的要求
- 設置實體輪子的動力學參數
- 將實體輪與貼紙輪組合,完成一個驅動輪構建
- 通過復制操作,完成兩個驅動輪的擺放
2.1添加實體
向環境中添加一個圓柱體,從菜單欄依次選擇[Menu bar --> Add --> Primitive shape --> Cylinder]
,參數按照下圖1進行配置,僅需要修改紅框中的內容,得到圖2中的結果。
2.2調整位置和方向
默認添加輪子的方向不符合滾動要求,需要將其豎直起來。首先在模型樹選中剛加入的圓柱體Cylinder,點擊旋轉按鈕,根據圖3完成操作。
調整輪子的位置,將相對于world坐標系的Z方向位置為0.1175(=0.235/2),設置過程見圖4.
2.3設置實體輪子的動力學參數
關閉平移和旋轉的對話框,雙擊模型樹中,模型前面的圖標,見圖5,打開模型屬性窗口。按照圖6完成模型的質量屬性和轉動慣量屬性修改。完成此項工作之后,可以嘗試運行一下仿真,看看實體輪是否會運動。
2.4與貼紙輪結合,完成一個主動驅動輪的設計
由于添加的實體圓柱輪看起來實在太丑,因此我為大家提供了一個貼紙輪,為什么叫做貼紙輪呢?是因為這個輪子只提供一個外觀,并不參與到動力學計算中,就好像我在上面貼了一層圖案。貼紙輪的獲取方式請點擊寶貝鏈接。
將貼紙輪位置設置與實體輪重合,我們這里采用一種更為便捷的方式,也是后面涉及到Vrep裝配最常用的手段之一,請大家注意。
首先先用鼠標點選貼紙輪,然后摁住Ctrl鍵,選擇實體輪,點擊移動按鈕,在平移對話框里選擇Apply to selection
,完成移動,具體過程見圖7。移動后的效果見圖8。
這里需要強調一下點擊的順序,先選擇的是希望移動的部分,最后選擇的是目標位置。這里希望將貼紙輪移動到實體輪這里,所以首先點擊貼紙輪,然后點擊實體輪。
2.5通過復制操作,完成兩個驅動輪的擺放
這里我們在學習兩個操作,第一個是復制操作,第二個是調整模型樹中的層次關系。
用Ctrl按鍵同時選擇實體輪和貼紙輪,利用快捷鍵Ctrl + c
,Ctrl + v
完成復制粘貼。
選擇模型樹中的LeftWheel_visual
,用快捷鍵del
將其刪除(由于我們剛才已經復制產生了新的貼紙輪,就不需要原來的貼紙輪了)。
現在修改模型樹中的模型名稱,雙擊模型樹的模型名稱進入編輯狀態,見下圖,將Cylinder
修改為RightWheel
,將Cylinder0
修改為LeftWheel
,將RightWheel_visual0
改為LeftWheel_visual
現在調整模型樹的層次結構,在模型樹窗口中,鼠標拖動
LeftWheel_visual
至LeftWheel
上,拖動RightWheel_visual
至RightWheel
上,完成后的效果如下:Vrep簡單易用主要體現在模型樹的操作十分靈活,裝配非常方便,靈活應用平移旋轉工具調整好相對位置之后就可以用模型樹固定下相對關系,對于組裝復雜的模型非常便捷,大家后面會慢慢體會到。
完成上面的工作之后,將兩個輪子按照XOZ平面對稱放置,左驅動輪的設置如圖9,右輪類似,將Y方向坐標設置為-0.25
即可。
最后的樣子為下圖:
3添加車身和萬向輪
3.1添加車身
車身采用一個長方體即可,在[Menu bar --> Add --> Primitive shape --> Cuboid]
,設置參數如下圖:
將車身名稱改為
Car_body
,點開平移對話框,設置其位置如下圖:將
Car_body_visual
移動到Car_body
上,操作參考2.4與貼紙輪結合,完成一個主動驅動輪的設計,完成后效果如下(由于車身貼紙比車身小一點,所以看不到了):將車身貼紙移動到車身下一層,修改車身動力學屬性,如下圖。至此已完成車身的構建,可以嘗試運行一下仿真,看看效果。
3.2構建萬向輪
真實的模擬萬向輪相對麻煩一點,這里為了第一個教程的簡便,我們采用一種投機取巧的辦法,我們把萬向輪抽象為一個與地面沒有摩擦力的實體,即實現了萬向輪的功能。
這種“投機取巧”的行為在后面的動力學仿真中會經常用到,通過合理的抽象,將一些次要功能簡單化的實現,從而將注意力集中到核心問題上,達到自己的研究目的。這是我們用到的第一個投機取巧的功能,后續我會不斷介紹一些小技巧,讓大家能夠更快更好的完成仿真。
鑒于大家已經認真完成上面的操作走到這里,下面我將不再細致的講解已經說明的操作。
通過菜單欄添加一個球體(Sphere),設置球體直徑為0.15,修改其名稱為Universal_wheel
,調整其空間位置如下圖。將貼紙輪與球體重合,并修改層次關系。最后設置一下球體的動力學屬性以,完成萬向輪的構建。
最后別忘了一點,我們需要設置萬向輪與地面無摩擦,選擇
noFrictionMaterial
。完成上述內容后可以嘗試運行一下仿真,發現車體迅速分解,下一節我們就添加約束關系。
4添加各部件約束,完成車體模型樹構建
4.1將萬向輪與車身固定
在Vrep中有兩種方式可以將兩個具有動力學屬性的物體固定
- 采用力傳感器(Force sensor)將兩個物體進行連接,實現固連
- 采用
Group
或Merge
將兩個物體進行組合
我們這里先采用第一種方式,[Menu bar --> Add --> Force sensor]
,移動其位置,并按照下圖設置模型層次。運行仿真,可以看到萬向輪與車身不會分開。
4.2添加驅動關節
驅動關節可以模擬機器人的驅動電機,能夠實現速度控制、位置控制和力控制等。我們這里準備采用速度控制。
采用菜單欄命令[Menu bar --> Add --> Joint --> Revolute ]
,得到下圖。將關節名字重命名為RightMotor
。
這里我們還是采用2.4節的位置調整方式,不過這次我們不僅要調整關節的位置,還需要調整關節的方向。調整關節位置依然是首先選擇關節,然后選擇右輪,然后選擇位置選項卡,完成平移。
旋轉操作類似,依次執行下圖的操作,完成方向設置。
重復上面的操作,完成左輪的驅動關節添加,最后調整關節的模型層次樹,最后結果見下圖。運行仿真,發現車體沒有解體,證明我們的車身結構已經搭建完成。
如果在完成車身結構搭建后,運行仿真發現車身會運動,可以選擇不同的求解器,看看不同求解器的差別,下面將解決無緣無故車體運動的問題。
嘗試不同的求解器試試
5完成全部工作
5.1設置可見和不可見屬性
現在模型和帖子混在一起,既看起來丑,也沒有發揮貼紙的作用,下面將簡單的實體隱藏。
選擇Car_body
,打開屬性對話框,按照下圖設置,將其隱藏。
同理,對于非貼紙類型的,都隱藏,得到下圖,是不是好看多了?
感覺車身位置略高,我們需要重新調整一下貼紙的位置,
5.2設置關節驅動參數
關節需要打開
Motor enable
,使得關節能夠輸出扭矩,提供動力,將左右兩個關節均按照下圖設置,設置完成后嘗試運行一下仿真。可以看到模型可以運動,試著給兩個電機不同的速度信號,實現轉向。
細心的同學可能會發現給關節電機是正方向的指令,但是小車卻是向后運動。這個沒有關系,只要我們在給電機輸入指令是注意一下即可。強迫癥的同學請嘗試旋轉關節,將其正方向與小車前進方向對應,這里不再贅述。
結語
下一節教程我想介紹一下如何用內嵌腳本實現一些簡單的功能,歡迎大家交換想法~~
到這里已經完成了本節的教程,實屬不易啊,如果覺得不錯請為我的文章捐贈,我會有更大的動力完成后面的教程