- [連載 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機器人動力學模組化仿真
恭喜大家完成[連載0]——[連載3]的基礎教程,通過教程的學習相信大家已經可以控制小車的運動了吧^_^,現在就讓我進入另一個有意思的領域——
機械臂 。放在最前面和大家提一個醒, 不要覺得自己不是搞機械臂的,你就不去研究機械臂,實際上機械臂的很多算法都是非常标準基礎的。比如你要研究人形機器人,每條胳膊和腿就可以看成一條機械臂。
本節主要介紹如何将三維模型,導入到vrep中,vrep自帶例程中這部分講的實在是太爛,條理不清楚,我這裡抛磚引玉,用動畫和截圖的方式将過程記錄下來,并總結一些我使用的經驗,希望能讓大家快速入門。
前言
vrep是一個很好的工具,大家如果開始使用之後更能體會的到,但是由于宣傳少、使用者少,我現在所知道的國内也就十幾所大學有用到的,而且大部分是研究所學生。依稀記得大學用adams非常痛苦,MSC公司的軟體設計不僅其醜無比,而且正版費用特别高,是以才做此教程,為vrep的推廣盡自己的一點貢獻。
此教程是基于
vrep 3.5.0版本制作的,初學可以先安裝此版本進行學習,後面再使用更新的版本。(舊版下載下傳連結:連結:https://pan.baidu.com/s/1PIl5t-Pwx2dawOIHfzDelA提取碼:qirx)
本節介紹
在推出連載1之後,很多同學問我貼紙是怎麼制作的,本節就介紹如何将三維模型導入到vrep中,并進行不同的處理。這個示例采用PUMA560的模型,PUMA560機械臂是多本機器人書籍中介紹的一種機械臂,資料也非常多。
- 本節先介紹如何将三維模型導入到vrep中并建立實際仿真模型;
- 下一節介紹PUMA560得DH矩陣描述,控制機械臂實作一定功能;
- 再下一節介紹如何利用Matlab Robotic Toolbox,來控制機械臂
本節的安排如下:
- 導入前準備工作
- 導入模型并簡單處理
- 提取關鍵特征,添加運動關節
- 提取實體特征
step1 準備工作
首先要在模組化軟體中建立機械臂模型,我這裡用的是soildworks,模組化完的效果如下圖:
圖1 PUMA560機械臂模型
請注意,下面的經驗很重要!!!我就不全部加粗了!!-
導入過程是一個體力活,前期的一點問題可能會導緻後面非常麻煩!!!
首先,上圖的模組化結果是“不可以”直接導入到vrep。因為在導入過程中,vrep會保留原來的坐标系關系,也就是說導入到vrep中就是和圖1中的樣子一樣的,具體可以看圖2,從圖2中可以看出各個臂處于比較随意的狀态,這對于vrep這種軟體後期調整起來非常麻煩,是以我們要提前調整好機械臂的位置,使其處于一個便于調整的位置,見圖3。
圖2 調整前的機械臂 soildworks視圖(左) vrep視圖(右)
圖3 調整後的機械臂 soildworks視圖(左) vrep視圖(右)
至于怎麼調整,一般團隊裡都有搞機械的小夥伴,和他們說一下要求就可以了,把該對齊的面對齊就可以了。
- 現在已經準備好了要導入的模型(本節例程模型請點選),那麼需要轉成什麼格式呢?vrep支援好幾種三維格式的導入,但是就我自己的使用體驗來說,轉成 STL
格式最友善,而且大部分的模組化軟體可以很容易轉成stl格式,本文也是基于stl格式進行講解。
不同的軟體導出的stl格式也是需要注意的,以soildworks為例,選擇
,在選項裡選擇 精細 選項。如果你是 新手 并且 模型的規模較小 的話,建議選擇精細模式,否則你需要根據需求選擇精細程度。檔案-另存為-儲存類型(stl)
圖4 導出stl過程
導出stl格式之後,會在檔案夾中生成檔案,這裡需要注意的是有的軟體導出後是一個stl檔案(将裝配體整體導出),soildworks導出的一堆stl檔案(每個零件單獨一個檔案)。如果是一個檔案的話,後面會增加一步,不要緊的。
好,到這裡導入工作已經完成了,接下來我們将stl檔案導入到vrep中。
Step2 導入模型并簡單處理
點選菜單欄中的
file - Import - Mesh..
,具體見圖5,找到剛才導出的stl檔案,快捷鍵
Ctrl + a
選擇所有的stl檔案,然後點選确定。此時會彈出一個對話框,由于模組化軟體的坐标系和vrep的不一樣,這裡選擇Y軸朝上,點選
OK
完成導入,導入的結果見圖7。
圖5 導入stl檔案
圖6 導入後的對話框
圖7 PUMA650導入後結果
從模型樹上可以看到,導入的模型按照不同的零件已經分開,如果你的模組化軟體導入的是一個整體的話,需要增加一步操作,具體見圖8。
圖8 将一個整體分解成多個零件
vrep導入過程會随機的改變顔色,是以你導入進來的樣子可能和我的不一樣。
完成導入後需要整理一下零件,将一些零件進行命名,同時将不需要的一些零件删掉。我們發現導入12個零件,先浏覽一遍導入的零件(見圖9),發現底座上安裝了六個螺栓(見圖10),對于仿真是沒有用處的,是以删掉。
圖9 浏覽一遍導入的零件
圖10 對仿真無用的螺栓
現在将剩下的零件進行重命名,便于識别。我們用
puma560_link0_vision
作為起始,依次命名,命名結果如圖11.(對應中間檔案名稱為:vrep4_puam560_step2_1.ttt)
圖11 将零件重命名
Step3 提取關鍵特征,添加運動關節
上面的任務都比較簡單,接下來将是一大堆體力活,我們要從導入模型中提取出圓柱體進而确定回轉關節位置。
實際上stl檔案導入進來的是一堆三角形組合,見圖12,可見我們需要從這些三角形中提取出圓柱體,然後利用圓柱體去定位關節位置。主要原因是導入後的模型由于形狀特殊,其自身坐标系有可能發生不同程度的旋轉,是以最好的辦法是從中間提取出vrep常用的primitive shape,即可用于後面的動力學仿真,也可以比較好的限制後續的坐标位置。
注意 :由于vrep不同電腦下導入結果的會有細微差異,影響後面的具體操作,是以建議直接用 vrep4_puam560_step3_1.ttt
這個檔案作為起始檔案,大家後面的操作從這個檔案開始。
圖12 stl導入後為三角形組合
這裡講一個我自己的方法,我一般是比較喜歡将要調整的模型拷貝到一個備用的scene,這樣所有操作都在這個備用的scene中,避免改壞東西。是以我們先
建立一個scene
,命名為
puma560_backup
,将
puma560_link1_vision
拷貝到這個新檔案中,我們要從上面提取出兩個圓柱體,進而找到機械臂的前兩個回轉軸。
選擇
puma560_link1_vision
,點選工具欄左邊的按鈕(見圖13),打開實體編輯界面。
圖13 實體操作按鈕
圖13 實體操作動圖
實體編輯界面具有三種操作:
- 三角形編輯模式(Triangle edit mode):這個模式下三角形是可見的,可以用來操作三角形進而提取出你需要的形狀,常見的形狀有長方體、圓柱體和球體。
- 頂點編輯模式(Vertex edit mode):這個模式下可以編輯頂點,用來調整模型的形狀,還可以通過頂點生成dummy便于後續使用。
- 邊編輯模式(Edge edit mode):這個模式下用來編輯邊,可以從這裡提取出邊緣的形狀。
3.1 提取joint1和joint2
我們這裡主要使用第一種三角形編輯模式,現在提取第一個圓柱體,我們這裡直接選擇這個關節的底面,選擇這個面上所有的三角形,對用滑鼠挨個選擇。選擇有兩種方式,第一種是直接在視窗中選擇三角形,選擇之後會改變顔色,也可以在左邊的浏覽視窗選擇。我們先選擇編号從251至298的三角形。(摁住Ctrl鍵,滑鼠挨個單擊,貌似沒有其他的快捷方式,是以說是體力活……)點選提取圓柱體(Extract cylinder),點選确定,生成第一個圓柱體。由于這裡選擇的是一個底面,是以生成的圓柱體高度幾乎為零。根據圖15,退出形狀編輯模式。
圖14 選擇第一個底面
圖15 退出形狀編輯模式
此時在模型樹裡可以看到多出一個Cylinder的實體,我們現在添加一個關節,将其位置與提取出來的圓柱體進行重合。按照圖16的訓示(這裡分别提供了動圖和靜态圖,友善大家看)進行操作,确定好第一個關節的位置。
如果大家對上述操作不是很熟練的話,請看連載1中圖7的操作。
圖16 将關節與提取出圓柱體進行重合(動圖)
圖16 将關節與提取出圓柱體進行重合(靜态操作)
獲得了第一個關節的位置之後,将其重命名為
puma560_joint1
,将其拷貝回到原來的檔案中,這樣第一個關節就完成了。
現在擷取第二個關節,依然是使用
puma560_link1_vision
,進入形狀編輯模式,選擇
Triangle 203 ——Triangle 250
,提取第二個圓柱體,利用上述同樣操作,得到第二個轉動關節
puma560_joint2
。也将其複制回到原來的檔案中,此時檔案中應該是圖17中的結果,(對應中間檔案名稱為:vrep4_puam560_step3_1.ttt)
圖16 提取第二個圓柱體
圖17 整理好前兩個關節
3.2 提取其他關節
由于後續提取其他關節為重複工作,提取過程與提取joint1和joint2類似,是以直接放在寶貝連結的
Step3提取關節.docx
文檔中,大家自己打開看吧,就不占用教程篇幅了。
提取其他關節說明
至此,已經完成全部的關節添加工作,也是本教程中最繁瑣的一項任務。
Step4 提取實體特征
上面的工作基本完成了運動學的部分,接下來的内容主要用來完善動力學的部分。由于導入的stl檔案是mesh屬性,實際上僅僅是一層薄殼,不具備動力學特征(品質和轉動慣量,就是你點開始仿真,并不會自由落體),而且如果直接用導入模型的話由于細節太豐富,是以極大的影響仿真速度,一般都會将其簡化成vrep自帶的primitive shape或者是凸面結構(凹面結構實體引擎可能産生很詭異的現象)
在這裡,考慮到機械臂的特性,我們将模型提取出為凸面體(convex shape),因為機械臂工作狀态一般旁邊不會有障礙物,是以用凸面體來來檢測碰撞雖然占用了更多體積,但是一般情況并不會影響結果。
Step4_1 提取凸面體結構
由于提取凸面體會直接替換原來的結構,是以我們将機械臂的
puma560_link0_vision
到
puma560_link5_vision
六個結構拷貝到一個新的scene中,先選擇
puma560_link0_vision
,執行下圖的操作(
Edit->Morph selection into convex shapes
),這樣就得到了第一個實體,對剩餘的其他元件執行同樣的操作。
提取凸面體結構
操作完成後,将各個部件重命名為
puma560_link0
到
puma560_link5
,此時可以得到下圖:(對應檔案名為
vrep4_puam560_step4_1_backup.ttt
)
全部提取為凸面體結構
設定動力學屬性
此時電機開始仿真發現仍然沒有自由落體,因為還沒有設定動力學屬性。接下來我們設定凸面體的
品質
和
respondable
的屬性。這裡從**``puma560_link1
**開始,根據下圖設定動力學屬性,注意
local respondable mask`是僅點第一個對勾。
設定link1的動力學屬性
根據同樣的方式設定link2——link5的動力學屬性,唯一差别為
local respondable mask
依次點第二個對勾、第三個對勾……例如第link5的屬性為:(對應檔案為
vrep4_puam560_step4_1_backup2.ttt
)
link5的動力學屬性
完成上述步驟之後,可以點選仿真按鈕,應該會看到自由落體的情況。将這些凸面體拷貝回到原來的檔案中,重新調整模型樹,按照如下的方式進行排列,确定依賴關系,如下圖:
整理好的模型樹
我們發現拷貝回來的凸面體很醜,直接影響我們觀看的心情,是以我們要将其隐藏起來,操作看下圖(注意選擇多個凸面體的時候按住
Ctrl鍵
)
隐藏凸面體
此時點選仿真,發現機械臂會立即垮掉,原因是因為添加的關鍵無法提供足夠的扭矩保持平衡,我們這裡打開關節的
位置控制模式,如下圖:(注意要設定一下關節扭矩,預設2.5Nm太小了,這裡先設定為100Nm)
設定電機為位置控制模式
(對應最終檔案名稱為:vrep4_puam560_step4_2.ttt)
結語
這篇從準備内容到最後形成文稿,花費了我差不多兩周左右的業餘時間,真是内容有點多,以至于後面Step4裡我都沒有具體講,實在是抱歉。但是也是恭喜大家能看到結尾,應該看完這篇文章的對vrep應該是真愛吧,我留一個微信,大家可以加我,歡迎多多交流~~
有同學說加載不了二維碼,我直接放微信号大家搜尋吧,微信号是monkey61_1,歡迎交流哈
https://u.wechat.com/MIXGPFx3pmLt0sF7d6MEh-w (二維碼自動識别)