- [連載 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,我也是在克服各種困難。講完[連載 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中的例程會發現,有時候會出現小車無法運動到目標點的情況,而是繞目標點進行旋轉(由于欠驅動的問題),這里我進行了改進,大家可以試試,基本沒有任何問題。
機械臂求逆解
如果你不清楚運動學逆解的話,那么你需要百度學習一下逆解的概念了,不知道逆解,機械臂是沒法玩的。
我這里用了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 的腳本等待他執行完。詳細中文注釋代碼請點擊購買