- [連載 0]Vrep入門介紹
- [連載 1]Vrep小車建南吵——前進和轉(zhuǎn)向
- [連載 2]Vrep小車建纳姓常——內(nèi)嵌腳本
- [連載 3]Vrep小車建模——matlab控制
- [連載 4]Vrep導(dǎo)入三維模型——PUMA560機械臂
- [連載 5]Vrep--Matlab Robitic Toolbox--PUMA560機械臂控制
- [番外 1]Vrep小車機械臂抓取
- [Lib庫 1]CoppeliaSim差分避障小車的Simulink實現(xiàn)(B站視頻講解)
- [Lib庫 2]CoppeliaSim機械臂抓取的Simulink實現(xiàn)(B站視頻講解)
- 知乎專欄:Vrep機器人動力學(xué)建模仿真
有些同學(xué)催我繼續(xù)做一些教程秉继,但實在是做教程太牽扯精力了,但是為了大家能夠快速入門Vrep辑鲤,我也是在克服各種困難杠茬。講完[連載 3]Vrep小車建模——matlab控制這篇教程之后宁赤,我覺得大家應(yīng)該對Vrep有了基本的認(rèn)識灯荧,但是可能對細節(jié)把握的不是非常準(zhǔn)逗载,這時候大家千萬不要急于求成,很多同學(xué)覺得啊啊啊挚躯,我會用vrep啦擦秽,就機械臂、機器人啥都上缩搅,然后面臨的問題就是仿真過程很多事情把握不住触幼,即使仿真有點樣子,也不能保證仿真結(jié)果準(zhǔn)確堂鲤。
插一句媒峡,大家做仿真的時候一定要注意仿真的目的:仿真是為了盡可能的模擬實際的狀態(tài)谅阿,使得得到的觀測數(shù)據(jù)對實際實驗具有指導(dǎo)作用酬滤。仿真并不是為了看起來像镜沽,而是要經(jīng)過合理的抽象贱田,真正的使仿真結(jié)果指導(dǎo)實際使用男摧。
這個番外教程不針對初學(xué)者!拇颅!乔询,需要一定的基礎(chǔ),起碼你要對三個連載教程的內(nèi)容非常熟悉黄锤。當(dāng)你掌握了一定的基礎(chǔ)知識后大家可能想了解一下如何實現(xiàn)一個控制器食拜,實現(xiàn)控制、規(guī)劃等任務(wù)流强。所以這一節(jié)的番外教程主要用于給大家展示一下設(shè)計的思路呻待。
再插一句。仿真速度基本絕對了最后的成敗奏篙,舉個例子鱼冀,有個同學(xué)四處粘貼代碼千绪,一部分控制器在non-thread script實現(xiàn),另一部分在thread script實現(xiàn)盹靴,結(jié)果thread script中各種阻塞的寫法,導(dǎo)致很簡單的功能仿真很慢梭冠,基本你最后很難仿真成功改备,因為快速的仿真意味著你調(diào)參更快,更快的看到結(jié)果反饋盐捷,明確代碼運行的時序默勾。
實在是有好多的話對大家說母剥,授人以魚不如授人以漁,所以就有了這篇习霹,給大家展示一下秦爆。
完整的代碼和例程請點擊購買。(番外類型的程序絕對物超所值)
前言
廢話少說爸吮,咱們步入正題望门。咱們這一節(jié)的內(nèi)容為將機械臂安裝在移動小車上筹误,能夠?qū)崿F(xiàn)小車移動到指定位置,機械臂能夠?qū)崿F(xiàn)抓取和放下的操作哄酝。(對應(yīng)的場景就是小車進入一個工作環(huán)境祷膳,運動到工作臺前,然后抓取相應(yīng)的物體搀军,然后再放到另一個地方),工作空間見下圖
要求基礎(chǔ)
- 靈活操作平移焚刺、旋轉(zhuǎn)等门烂,明確模型樹層次結(jié)構(gòu)。(見連載0和連載1)
- 會使用lua腳本完成基本的控制功能匾委,能夠讀懂lua腳本程序氓润,了解常見的Regular API(見連載2)
- 會使用matlab與vrep連接咖气,了解常見的Remote API(見連載3)
- 想要研究機械臂
下面的內(nèi)容安排為:
- 小車移動到目標(biāo)點挖滤、目標(biāo)姿態(tài)控制算法
- 機械臂逆解求解
- 抓取過程簡述
- 代碼結(jié)構(gòu)
小車控制算法
在連載3中已經(jīng)給出了完整的lua控制代碼和matlab控制代碼(點擊購買)斩松,并給出了草圖。在連載3中并沒有好好講有限狀態(tài)機乳幸,這里拋磚引玉吧钧椰。
有限狀態(tài)機是嵌入式開發(fā)嫡霞、軟件開發(fā)、游戲開發(fā)常用的一種結(jié)構(gòu)养筒,在本小車控制時劃分為以下幾個狀態(tài):
- 小車停止?fàn)顟B(tài)
- 小車開始運行端姚,先運動到目標(biāo)點的過程
- 小車已經(jīng)運動到目標(biāo)點,運動到目標(biāo)朝向的過程
- 小車運動到目標(biāo)位置和姿態(tài)兵多,處于檢測狀態(tài)。如果目標(biāo)點位置發(fā)生偏離衅斩,小車跳轉(zhuǎn)到狀態(tài)2怠褐。
狀態(tài)機最重要的就是狀態(tài)的劃分和狀態(tài)的切換奈懒,這里只是引出思路,大家可以參考網(wǎng)上的材料進行學(xué)習(xí)溜畅,當(dāng)然后面如果有時間的話极祸,我會在連載教程里給出幾種狀態(tài)機的實現(xiàn)方式遥金。(自學(xué)狀態(tài)機可以學(xué)習(xí)Matlab下的Stateflow,會理解更加深刻)稿械。
如果大家跑了我在連載3中的例程會發(fā)現(xiàn)选泻,有時候會出現(xiàn)小車無法運動到目標(biāo)點的情況,而是繞目標(biāo)點進行旋轉(zhuǎn)(由于欠驅(qū)動的問題)美莫,這里我進行了改進页眯,大家可以試試,基本沒有任何問題茂嗓。
機械臂求逆解
如果你不清楚運動學(xué)逆解的話餐茵,那么你需要百度學(xué)習(xí)一下逆解的概念了,不知道逆解述吸,機械臂是沒法玩的忿族。
我這里用了vrep再帶的計算模塊,IK group蝌矛,配置的話直接看我的例程吧,具體配置過程會放到連載教程里入撒。機械臂采用的UR5隆豹,手抓采用的是RG2,抓取過程見下圖茅逮。
抓取過程簡述
通過求解逆解,得到機械臂各個關(guān)節(jié)的角度碉考,再通過vrep再帶的Reflexxes Motion Library type IV工具箱塌计,生成關(guān)節(jié)的控制指令,將手抓運動到指定位置即可侯谁。
代碼結(jié)構(gòu)
這個例程里面我使用了兩種方式實現(xiàn)锌仅,第一種方式為全部使用lua代碼,第二種方式為將一部分功能分離出matlab接口墙贱,供matlab使用热芹。
首先我用一個non-htread script實現(xiàn)了小車的運動控制功能,和QT-GUI控制臺惨撇,作為整個程序的控制中心伊脓,然后在UR5上實現(xiàn)了機械臂抓取的過程和逆解求解等(采用的是 thread script),在手抓RG2上實現(xiàn)了抓取和松開的功能串纺,通信全部采用Signal的方式丽旅。由于在UR5上采用的是 thread script,具有阻塞指令纺棺,因此,盡可能的將其功能完整封裝邪狞,不要讓non-thread 的腳本等待他執(zhí)行完祷蝌。詳細中文注釋代碼請點擊購買