- [連載 0]Vrep入門介紹
- [連載 1]Vrep小車建模——前進和轉(zhuǎn)向
- [連載 2]Vrep小車建钠骶唬——內(nèi)嵌腳本
- [連載 3]Vrep小車建模——matlab控制
- [連載 4]Vrep導入三維模型——PUMA560機械臂
- [連載 5]Vrep--Matlab Robitic Toolbox--PUMA560機械臂控制
- [番外 1]Vrep小車機械臂抓取
- [Lib庫 1]CoppeliaSim差分避障小車的Simulink實現(xiàn)(B站視頻講解)
- [Lib庫 2]CoppeliaSim機械臂抓取的Simulink實現(xiàn)(B站視頻講解)
- 知乎專欄:Vrep機器人動力學建模仿真
前言
前言是一堆牢騷話齿税,不影響教程閱讀寞奸,可直接跳過~~
自從發(fā)布了連載5之后,已經(jīng)有一年半的時間沒有再更新教程了括丁。做這個系列的教程最初的目的是為了讓大家能夠快速入門荞下,掌握Vrep軟件的使用和Matlab的一些協(xié)同仿真,但是越往后面做,涉及到的東西越多尖昏,知識和工具越具體仰税,耗費的時間當然也是成倍的增加,因此關(guān)于機械臂的動力學建模抽诉,我一直在想用一個什么模式能夠把這個講清楚陨簇,而不是單純的炫技(很多教程和書本都喜歡堆公式和簡單問題高大上化( ̄ω ̄;),但是總結(jié)下來就是那幾個公式掸鹅,分成牛頓歐拉法和拉格朗日法(其他的方法沒有用過)塞帐,這里還是建議直接看《機器人學導論(原書第4版)》這本書。換句話說巍沙,你學到了動力學這部分之后葵姥,對問題的理解就需要自己去看書了,教程只能說個大概句携,效率絕對沒有老老實實啃書高榔幸。
當然不更新教程一方面是因為自己懶(機器人領(lǐng)域涉及太大,實在學不過來)矮嫉,另一方面是準備一個教程真的很費時間O髋亍;橥选挚赊!這個不是和大家抱怨,因為每個教程都需要先回想我當時的狀態(tài)和知識儲備盛嘿,然后怎么安排才能把這個教程的內(nèi)容表達出來昨寞,然后準備案例瞻惋,寫代碼注釋,然后開始截圖等等事情援岩,期間至少兩周所有的業(yè)余時間歼狼,過程真的非常折磨,然后發(fā)出去又沒人看( ̄ω ̄;)享怀,心理拔涼拔涼的羽峰。這就是惡性循環(huán),如果世界按照往常一樣添瓷,那這個教程可能真的像大部分教程一樣梅屉,成為歷史和回憶了。
然而一場疫情改變了全部的生活節(jié)奏仰坦,在家辦公的日子一下子讓自己有了很多業(yè)余時間履植,如果關(guān)注我淘寶店鋪的同學們應該會知道我之前在店鋪里發(fā)布過一個Vrep和Simulink的工具箱(現(xiàn)在Vrep都已經(jīng)更名為CoppeliaSim了(⊙o⊙)…),這個工具箱是結(jié)合Simulink和vrep兩大仿真工具的橋梁悄晃,方便搭建控制模型玫霎。說實話這幾年python發(fā)展特別迅猛凿滤,在知乎上也是看到各種問題說是matlab的份額是不是被python取代了很多,這個的確是庶近,但是要問Simulink是不是也是這樣翁脆,那我只能說,Simulink目前毫無對手……這個就不展開討論了鼻种,如果你沒有用過Simulink反番,可以嘗試學一學,畢竟現(xiàn)在Simulink的幫助文檔已經(jīng)大部分翻譯成中文了叉钥“崭祝回到之前的問題,CoppeliaSim沒有與Simulink的通信接口投队,沒有辦法連接起來枫疆,所以發(fā)布了第一個版本后,我們團隊做了很多更新敷鸦,但是淘寶店里很少人買這個庫息楔,就一直沒有重新整理一下這個庫的內(nèi)容(給之前買庫的老用戶道歉了,(扒披。?_?值依。)?I’msorry~),現(xiàn)在終于更新了碟案,并且準備花一段時間去做一些例程愿险,希望可以快速輔助大家入門這個庫,并進行自己的開發(fā)价说。
Simulink開發(fā)優(yōu)勢
對于Simulink拯啦,首先不要認為Simulink是matlab的一個模塊……Simulink是非常獨立的,如果你不想用matlab語言的話熔任,在Simulink你甚至可以不用寫一行matlab的代碼(額……有點囂張了,不寫matlab可能要寫C……)唁情,所以Simulink他自己也是自成體系的疑苔。下面我截圖MathWorks官網(wǎng)的Simulink介紹。
從上圖中可以看出甸鸟,Simulink的核心是基于模型的設(shè)計:從概念到代碼惦费,從這個可以引申出一大堆的概念,什么數(shù)字孿生抢韭、V字開發(fā)流程薪贫、預測性維護、代碼生成等等刻恭,總之就是更新之前的開發(fā)流程瞧省,讓開發(fā)者更容易開發(fā)扯夭,讓調(diào)試者更容易調(diào)試,讓維護者更容易維護鞍匾。對于我們自身而言交洗,Simulink在某些方面的開發(fā)效率會比matlab高一些,有些方面又沒有matlab高橡淑,所以結(jié)合兩者優(yōu)勢就可以很快的開發(fā)你的控制原型构拳,下面我將使用Simulink和Stateflow這兩個工具,演示如果搭建一個避障小車的模型梁棠。教程用到的庫和模型請點擊購買
避障算法思路
(算法思路部分可以看B站視頻鏈接)
避障算法我們采用的一個基本邏輯是沒有障礙物的話就朝向目標點運行置森,如果有障礙物的話就進行右轉(zhuǎn),然后沿著障礙物移動符糊,直至沒有障礙物凫海,可以參照下面這張流程圖。后面的Stateflow編寫就是依據(jù)這張流程圖濒蒋,但是實際過程中Stateflow用的是狀態(tài)機的模式盐碱,和流程圖的有相似之處,但是又有不同點沪伙,狀態(tài)機的圖的話和Stateflow的程序就非常類似了瓮顽,這里就不再貼圖了。
小車模型構(gòu)建
視頻中小車模型構(gòu)建沒有講围橡,這里補充一些內(nèi)容暖混。
從提供的modelLib庫
中找到DiffCar.ttm模型,拖動到CoppeliaSim場景中翁授,然后在菜單欄中Add
添加一個Dummy
拣播,將其名字改為tar
即可。
然后往場景里添加長方體收擦,配置參數(shù)如下:
長方體屬性設(shè)置
多復制幾個贮配,利用平移或者旋轉(zhuǎn)工具進行排放,修改地板大小塞赂,同時移動tar
的位置泪勒,構(gòu)建的模型效果如下:
至此,我們完成了模型的搭建過程宴猾。
Simulink模塊搭建
我現(xiàn)在在用的是2019b版本的Simulink圆存,界面和之前的版本差別很大,但是目前這臺電腦只安裝了這一個版本……所以仇哆,解決不了的話沦辙,就擁抱新版本的Matlab吧。
模型配置
新建一個Simulink模型之后讹剔,第一個要修改的就是Simulink的求解器油讯,將其設(shè)置為定步長详民,步長為0.05s(與CoppeliaSim中的時間步長一致)。按照下圖操作:
然后根據(jù)CoppeliaLib庫自帶的說明文件撞羽,將庫添加到Simulink模型中阐斜,效果如下:
模型搭建
(下面的操作可以看B站視頻了鏈接,下面就把一些重要截圖放上來)
從庫中尋找對應的模塊添加到模型中诀紊,得到的效果如下(教程用到的庫和模型請點擊購買):
從圖中可以清晰看出每個模塊的功能和類型谒出,在構(gòu)建復雜代碼的時候也可以輕松進行閱讀。而且每個模塊都寫了詳盡的中文注釋說明邻奠,以測距傳感器為例笤喳,描述了每個接口的說明和意義,大家?guī)缀醪恍枰榭碈oppeliaSim的函數(shù)幫助文檔就可以直接使用碌宴,非常方便杀狡。
構(gòu)造好于CoppeliaSim通信的接口模塊后,建立一個Matlab Function模塊贰镣,實現(xiàn)目標點處于小車的方位和距離計算呜象。B站上的視頻可能不是太清楚,這里直接放代碼:
function [dis,theta] = getTarInfo(pos,gamma)
%計算目標點距離小車當前位置以及朝向
% y=zeros(1,2);
dis = sqrt(pos(1).^2+pos(2).^2);%計算小車到目標位置的距離
theta_abs = atan2(pos(2),pos(1));%計算在世界坐標系中碑隆,目標點相對小車的方位
%注意angdiff是第二個角度減去第一個角度恭陡,然后再轉(zhuǎn)換到[-pi,pi]中
theta = angdiff(gamma,theta_abs);%轉(zhuǎn)化為小車自身坐標系當中,目標點相對小車的方位
具體解釋還是看視頻吧(以后可能文字版更簡單一點上煤,這次錄制視頻踩的坑有點多休玩,導致最后畫面分辨率上不去,以后的視頻應該會改善)劫狠。
這部分的搭建效果如下:
然后插入Stateflow的chart模塊拴疤,添加輸入輸出和一些控制參數(shù),如下圖:
搭建Stateflow模型独泞,最終的模型如下所示(教程用到的庫和模型請點擊購買):
最后將生成的轉(zhuǎn)向角和車速轉(zhuǎn)化為兩輪差速小車的兩個輪子的轉(zhuǎn)速(這里生成轉(zhuǎn)向角是為了兼容前輪轉(zhuǎn)動的車輛的)呐矾,其代碼如下:
function [vel_left,vel_right] = DiffCar(steer_angle,v)
%steer_angle表示轉(zhuǎn)向角
%v表示運行速度
% 車輛參數(shù)
D=0.25;%左右輪距的一半
%計算計算角速度
w = steer_angle/0.05;
%調(diào)整輪速
vel_left = v-w*D;
vel_right = v+w*D;
最后模型搭建完成,就是下面這個樣子
結(jié)語
這樣就搭建完成整個控制流程了懦砂,我們再來總結(jié)一下凫佛,通過CoppeliaLib庫可以將CoppeliaSim的工作和Simulink的構(gòu)建獨立開來,也就是建模型的負責建模型孕惜,搭算法的負責搭算法,大家合作起來可以更協(xié)調(diào)一些晨炕。對于有Simulink開發(fā)經(jīng)驗的同學來說衫画,完成上述一個控制器是很容易的(前提是你有Stateflow的經(jīng)驗);而對于一個學CoppeliaSim的同學瓮栗,構(gòu)建上面的仿真模型也是比較快的(學習完我寫的連載1就可以實現(xiàn)了)削罩;但是要想用代碼控制小車瞄勾,之前的手段是學習內(nèi)嵌的Lua腳本或者是Matlab腳本(比如連載2和連載3),大家要研究CoppeliaSim究竟都有哪些api弥激,api怎么調(diào)用等等进陡,這些工作往往瑣碎而且浪費時間、耗費激情(也就是所說的虛實結(jié)合微服,把注意力集中在你要研究的問題上為實趾疚,其他的實現(xiàn)方式和手段為虛)。結(jié)合兩者以蕴,擁有CoppeliaLib庫的你糙麦,專心學習Simulink搭建你的控制模型和算法,花費點時間搞明白CoppeliaSim模型構(gòu)建的方式丛肮,就可以開始你的機器人仿真之旅了赡磅。下一期我會做一個用CoppeliaLib控制機械臂的例程,比連載5的更快宝与、更簡單焚廊。
最后,希望對看到這里的你有幫助习劫,懇請一贊hi?(咆瘟。???。)?