[番外2]Vrep小車機械臂抓取
- [連載 0]Vrep入門介紹
- [連載 1]Vrep小車建模——前進和轉向
- [連載 2]Vrep小車建模——內嵌腳本
- [連載 3]Vrep小車建模——matlab控制
- [番外1]彈跳平衡車
- [番外2]Vrep小車機械臂抓取
有些同學催我繼續做一些教程,但實在是做教程太牽扯精力了,但是為了大家能夠快速入門Vrep,我也是在克服各種困難。講完[連載 3]Vrep小車建模——matlab控制這篇教程之後,我覺得大家應該對Vrep有了基本的認識,但是可能對細節把握的不是非常准,這時候大家千萬不要急於求成,很多同學覺得啊啊啊,我會用vrep啦,就機械臂、機器人啥都上,然後面臨的問題就是模擬過程很多事情把握不住,即使模擬有點樣子,也不能保證模擬結果準確。
插一句,大家做模擬的時候一定要注意模擬的目的:模擬是為了儘可能的模擬實際的狀態,使得得到的觀測數據對實際實驗具有指導作用。模擬並不是為了看起來像,而是要經過合理的抽象,真正的使模擬結果指導實際使用。
這個番外教程不針對初學者!!,需要一定的基礎,起碼你要對三個連載教程的內容非常熟悉。當你掌握了一定的基礎知識後大家可能想了解一下如何實現一個控制器,實現控制、規劃等任務。所以這一節的番外教程主要用於給大家展示一下設計的思路。
再插一句。模擬速度基本絕對了最後的成敗,舉個例子,有個同學四處粘貼代碼,一部分控制器在non-thread script實現,另一部分在thread script實現,結果thread script中各種阻塞的寫法,導致很簡單的功能模擬很慢,基本你最後很難模擬成功,因為快速的模擬意味著你調參更快,更快的看到結果反饋,明確代碼運行的時序。
實在是有好多的話對大家說,授人以魚不如授人以漁,所以就有了這篇,給大家展示一下。
完整的代碼和常式請點擊購買。(番外類型的程序絕對物超所值)
前言
廢話少說,咱們步入正題。咱們這一節的內容為將機械臂安裝在移動小車上,能夠實現小車移動到指定位置,機械臂能夠實現抓取和放下的操作。(對應的場景就是小車進入一個工作環境,運動到工作台前,然後抓取相應的物體,然後再放到另一個地方),工作空間見下圖
部件組成
要求基礎
- 靈活操作平移、旋轉等,明確模型樹層次結構。(見連載0和連載1)
- 會使用lua腳本完成基本的控制功能,能夠讀懂lua腳本程序,了解常見的Regular API(見連載2)
- 會使用matlab與vrep連接,了解常見的Remote API(見連載3)
- 想要研究機械臂
下面的內容安排為:
- 小車移動到目標點、目標姿態控制演算法
- 機械臂逆解求解
- 抓取過程簡述
- 代碼結構
小車控制演算法
在連載3中已經給出了完整的lua控制代碼和matlab控制代碼(點擊購買),並給出了草圖。在連載3中並沒有好好講有限狀態機,這裡拋磚引玉吧。
有限狀態機是嵌入式開發、軟體開發、遊戲開發常用的一種結構,在本小車控制時劃分為以下幾個狀態:- 小車停止狀態
- 小車開始運行,先運動到目標點的過程
- 小車已經運動到目標點,運動到目標朝向的過程
- 小車運動到目標位置和姿態,處於檢測狀態。如果目標點位置發生偏離,小車跳轉到狀態2。
狀態機最重要的就是狀態的劃分和狀態的切換,這裡只是引出思路,大家可以參考網上的材料進行學習,當然後面如果有時間的話,我會在連載教程里給出幾種狀態機的實現方式。(自學狀態機可以學習Matlab下的Stateflow,會理解更加深刻)。
如果大家跑了我在連載3中的常式會發現,有時候會出現小車無法運動到目標點的情況,而是繞目標點進行旋轉(由於欠驅動的問題),這裡我進行了改進,大家可以試試,基本沒有任何問題。
小車運動控制
QT-GUI控制台說明
機械臂求逆解
如果你不清楚運動學逆解的話,那麼你需要百度學習一下逆解的概念了,不知道逆解,機械臂是沒法玩的。
我這裡用了vrep再帶的計算模塊,IK group,配置的話直接看我的常式吧,具體配置過程會放到連載教程里。機械臂採用的UR5,手抓採用的是RG2,抓取過程見下圖。抓取過程簡述
通過求解逆解,得到機械臂各個關節的角度,再通過vrep再帶的Reflexxes Motion Library type IV工具箱,生成關節的控制指令,將手抓運動到指定位置即可。
代碼結構
這個常式裡面我使用了兩種方式實現,第一種方式為全部使用lua代碼,第二種方式為將一部分功能分離出matlab介面,供matlab使用。
首先我用一個non-htread script實現了小車的運動控制功能,和QT-GUI控制台,作為整個程序的控制中心,然後在UR5上實現了機械臂抓取的過程和逆解求解等(採用的是 thread script),在手抓RG2上實現了抓取和鬆開的功能,通信全部採用Signal的方式。由於在UR5上採用的是 thread script,具有阻塞指令,因此,儘可能的將其功能完整封裝,不要讓non-thread 的腳本等待他執行完。詳細中文注釋代碼請點擊購買最終使用matlab控制小車運動到指定位置後抓取的過程為:
https://www.zhihu.com/video/940550729497264128推薦閱讀:
※最吊炸天的摩托車人機對決:機器人Motobot VS世界冠軍羅西
※RoboMaster機器人比賽的技術難點在哪?
※機器人這麼火 但你想像的到人工智慧的最終形態嗎?
※下一個玩家是軟銀?聯合機器人初創團隊打造高配版智能音箱
TAG:机器人 |