为期两个月的MATLAB与ROS联合仿真探索总结——因为热爱,所以无所畏惧
?? 2021年的9月底收到老師的委托之后,開始著手使用MATLAB探索開發(fā)一些實(shí)驗(yàn),控制對(duì)象為ROS中的仿真小車
?? 為什么要用MATLAB呢?因?yàn)檫@個(gè)實(shí)驗(yàn)是面向機(jī)器人專業(yè)的全體學(xué)生的,而不是個(gè)別學(xué)生,這就意味著如果直接使用ROS開發(fā),那么部分沒(méi)有接觸過(guò)ROS,零基礎(chǔ)的同學(xué)可能會(huì)感到比較吃力,而如果僅僅是把程序給他們,讓他們運(yùn)行一下,看看效果,估計(jì)收獲甚微,為了讓全體同學(xué)都自己動(dòng)手去完成實(shí)驗(yàn)內(nèi)容,選擇了大家比較熟悉的MALTAB作為開發(fā)工具,依托SImulink中的ROS工具箱與ROS建立聯(lián)系,并在此基礎(chǔ)上探索開發(fā)一些實(shí)驗(yàn)去控制ROS中的小車
?? 在明白了大體的任務(wù)后,就開始構(gòu)思如何實(shí)現(xiàn)了,說(shuō)實(shí)話,剛接到任務(wù)后,確實(shí)感覺(jué)無(wú)從下手,先說(shuō)一下我的ROS基礎(chǔ),2020年的10月份,我學(xué)習(xí)了古月居的ROS入門21講,利用課余時(shí)間大約學(xué)了一個(gè)月左右,這就是當(dāng)時(shí)我所有的ROS基礎(chǔ),是不是少的可憐?
?? 對(duì)了,我還有對(duì)ROS機(jī)器人的無(wú)限熱愛, 因?yàn)闊釔?#xff0c;所以無(wú)所畏懼。 我大體整理了一下思路,我將整個(gè)實(shí)現(xiàn)過(guò)程規(guī)劃為以下幾個(gè)階段
?? 第一階段:建立MATALB與ROS的通訊
?? 第二階段:在虛擬機(jī)的Gazebo中進(jìn)行小車仿真的可行性驗(yàn)證
?? 第三階段: 探索建立Simulink與Gazebo中仿真小車的通訊
?? 第四階段: 探索在Simulink中設(shè)計(jì)實(shí)驗(yàn)來(lái)控制Gazebo中小車
?? 第五階段: 將在Simulink中設(shè)計(jì)的實(shí)驗(yàn)生成ROS代碼
?? 第六階段: 推廣測(cè)試階段
?? 第七階段: 探索對(duì)實(shí)物進(jìn)行控制
?? 2021年10月1日,我正式開始了第一階段的探索
?? 首先,便是ROS的安裝,綜合考慮之下,決定采用虛擬機(jī)安裝的方式,VMware16.1.1+Ubuntu20.04+ROS Noetic,我2020年10月份學(xué)習(xí)的時(shí)候裝過(guò),也踩過(guò)了很多的坑,整理成了博客,鏈接如下:
?? 詳細(xì)介紹如何在ubuntu20.04中安裝ROS系統(tǒng),以及安裝過(guò)程中出現(xiàn)的常見錯(cuò)誤的解決方法,填坑!!!【點(diǎn)擊可跳轉(zhuǎn)】
?? 今年,我又將其安裝步驟進(jìn)行了優(yōu)化處理,整個(gè)VMware16.1.1 +Ubuntu20.04+ROS Noetic的安裝過(guò)程壓縮到了三個(gè)小時(shí)以內(nèi),同樣編寫了博客,鏈接如下:
?? 詳細(xì)介紹如何在ubuntu20.04中安裝ROS系統(tǒng),超快完成安裝(最新版教程)【點(diǎn)擊可跳轉(zhuǎn)】
?? 剛開始的時(shí)候,是想采用Ubuntu下的MATLAB與ROS進(jìn)行聯(lián)合仿真的,耗時(shí)三天,在踩過(guò)一個(gè)個(gè)坑之后終于在Ubuntu中裝好了MATLAB2021a,于次日借助小海龜,實(shí)現(xiàn)和驗(yàn)證了MATLAB與ROS的通訊,相關(guān)博客鏈接如下:
?? 虛擬機(jī)中的Ubuntu擴(kuò)容及重新分區(qū)方法【點(diǎn)擊可跳轉(zhuǎn)】
?? 在ubuntu20.04中安裝MATLAB時(shí)常見問(wèn)題及解決方法 【點(diǎn)擊可跳轉(zhuǎn)】
?? 詳細(xì)介紹如何在Ubuntu中實(shí)現(xiàn)MATLAB與ROS的通訊,借助MATALB進(jìn)行ROS開發(fā)【點(diǎn)擊可跳轉(zhuǎn)】
?? 此時(shí)考慮到,部分同學(xué)電腦硬件也許很難支持在虛擬機(jī)中同時(shí)運(yùn)行MATLAB/Simulink+Gazebo+Rviz,尤其是進(jìn)行Slam建圖及導(dǎo)航相關(guān)的實(shí)驗(yàn)
?? 不得不暫時(shí)放棄該方案,轉(zhuǎn)而采用Win10下的MATLAB與虛擬機(jī)Ubuntu20.04中的ROS聯(lián)合仿真的方案,并成功實(shí)現(xiàn)通訊,相關(guān)的博客鏈接如下:
?? 實(shí)現(xiàn)Win10環(huán)境下的MATLAB與虛擬機(jī)Ubuntu中的ROS的通訊的方法 【點(diǎn)擊可跳轉(zhuǎn)】
?? 2021年10月7日,我開始了第二階段的探索
?? 這一階段,本來(lái)的設(shè)想是快速驗(yàn)證一下在虛擬機(jī)的Gazebo中進(jìn)行小車仿真的可行性,于是購(gòu)買了古月學(xué)院的《如何在Gazebo中實(shí)現(xiàn)阿克曼轉(zhuǎn)向車的仿真》課程,拿到了課程資料,但是遺憾的是課程資料在Noetic版本的ROS中并不能運(yùn)行,報(bào)了一堆的錯(cuò)誤,網(wǎng)上查了一下,并沒(méi)有解決
?? 于是,我開始了自學(xué)之路,經(jīng)過(guò)一段時(shí)間的學(xué)習(xí)和探索,課程資料的代碼差不多讀了各遍,走過(guò)一個(gè)個(gè)Error,成功糾正了所有發(fā)現(xiàn)的錯(cuò)誤(這些錯(cuò)誤其實(shí)是由于ROS和Python等版本的更新帶來(lái)的),同時(shí)也不斷搭建著實(shí)驗(yàn)所需的實(shí)驗(yàn)環(huán)境,比如相關(guān)必備的ROS功能包等,相關(guān)博客鏈接如下:
?? 以阿克曼轉(zhuǎn)向車為例對(duì)URDF和XACRO文件進(jìn)行解讀 【點(diǎn)擊可跳轉(zhuǎn)】
?? 將xacro格式文件轉(zhuǎn)換為urdf格式并對(duì)其進(jìn)行檢查格式,并生成機(jī)器人模型的結(jié)構(gòu)圖 【點(diǎn)擊可跳轉(zhuǎn)】
?? 古月學(xué)院《如何在Gazebo中實(shí)現(xiàn)阿克曼轉(zhuǎn)向車的仿真》課程資料在ROS Noetic版本中運(yùn)行時(shí)的常見錯(cuò)誤及解決方法【點(diǎn)擊可跳轉(zhuǎn)】
?? 日常工作記錄—在虛擬機(jī)中進(jìn)行slam建圖 【點(diǎn)擊可跳轉(zhuǎn)】
?? 在虛擬機(jī)中對(duì)阿克曼轉(zhuǎn)向車進(jìn)行導(dǎo)航及避障的仿真測(cè)試 【點(diǎn)擊可跳轉(zhuǎn)】
?? 對(duì)了,這里還有一個(gè)坑,在我進(jìn)行了一天的探索后,成功在Ubuntu20.04中裝好了RoboWare Studio,卻一直都打不開,后來(lái)才知道Ubuntu20.04不支持RoboWare Studio(停止維護(hù)了),確實(shí)很遺憾,無(wú)奈轉(zhuǎn)而使用Visual Studio Code 作為IDE
?? 2021年10月26日,我開始了第三階段的探索
?? 其實(shí)本來(lái)很多工作是計(jì)劃在第三階段完成的,卻被迫在第二階段完成了,比如由于第二階段把整個(gè)程序差不多讀了一遍(有些地方讀了很多遍),可以說(shuō)對(duì)程序很熟悉了,很容易就找到了程序中用于阿克曼小車的接口,也就是車的線速度和前輪打角,再加上第一階段的通訊基礎(chǔ),很快就建立了MATLAB與ROS中的仿真小車的通訊,并成功將MATLAB/Simulink作為控制器,Gazebo中的仿真小車作為控制對(duì)象,進(jìn)行了簡(jiǎn)單的走直線和畫圈測(cè)試
?? 2021年10月28日,我開始了第四階段的探索
?? 經(jīng)過(guò)前三個(gè)階段,實(shí)驗(yàn)所需求的實(shí)驗(yàn)環(huán)境就搭建好了,在差不多一個(gè)月的時(shí)間里,我的理論基礎(chǔ)和ROS開發(fā)能力有了很大的進(jìn)步,當(dāng)然這些進(jìn)步是建立在獨(dú)立解決一個(gè)個(gè)Error之上的
?? 到這里,也就要正式開始實(shí)驗(yàn)相關(guān)內(nèi)容的開發(fā)了,說(shuō)到MATLAB與ROS的聯(lián)合仿真,在網(wǎng)上很難找到想要的資料,可以說(shuō)基本沒(méi)有(或者說(shuō)我沒(méi)找到),更不用說(shuō)適合ROS零基礎(chǔ)的本科生的實(shí)驗(yàn)了,還是那句話 因?yàn)闊釔?#xff0c;所以無(wú)所畏懼。 于是我開始了一邊構(gòu)思實(shí)驗(yàn)內(nèi)容,一邊探索的自研之路
?? 為了讓同學(xué)們自己動(dòng)手去實(shí)現(xiàn)實(shí)驗(yàn)內(nèi)容,這部分的內(nèi)容,我并沒(méi)有寫成博客在網(wǎng)上進(jìn)行公布,但是在這部分的整個(gè)開發(fā)過(guò)程,我花費(fèi)大量的時(shí)間寫成了非常非常詳細(xì)的文檔資料,包括開發(fā)過(guò)程中的常見錯(cuò)誤及解決方法等,后續(xù)有機(jī)會(huì)可能已博客形式發(fā)布出來(lái),但是應(yīng)該是在很長(zhǎng)一段時(shí)間之后了
MATLAB與ROS聯(lián)合仿真探索資料預(yù)覽
?? 歷經(jīng)一個(gè)月的設(shè)計(jì)和開發(fā),也經(jīng)過(guò)了多次測(cè)試和修改,最終我設(shè)計(jì)編寫了以下Simulink模塊,并將其模塊化,具備很強(qiáng)的復(fù)用性和可移植性,推廣使用也很方便
?? (白色背景的是給定類模塊,淡黃色背景的是可視化繪圖類模塊,紫色背景的是發(fā)送消息至ROS類模塊,綠色背景的是從ROS訂閱消息類模塊,淡藍(lán)色背景的是控制類模塊)
?? 這些模塊的詳細(xì)介紹,使用方法及詳細(xì)的搭建設(shè)計(jì)過(guò)程我都寫成了詳細(xì)的文檔資料,因?qū)嶒?yàn)需要暫時(shí)不適合在網(wǎng)上公布
?? 相關(guān)的博客鏈接如下(大部分內(nèi)容目前未發(fā)布):
?? 使用MATLAB繪制Gazebo中的仿真小車的運(yùn)動(dòng)軌跡【點(diǎn)擊可跳轉(zhuǎn)】
?? 在Simunlink中使用Read image模塊或Read Point Could模塊讀取ROS中圖像時(shí)顯示全黑的解決方法【點(diǎn)擊可跳轉(zhuǎn)】
?? 這一階段所完成的主要內(nèi)容,如下面的視頻所示:
MATLAB與ROS聯(lián)合仿真探索總結(jié)
?? 2021年11月25日,我開始了第五階段的探索
?? 成功將實(shí)驗(yàn)內(nèi)容中,不涉及繪圖及視頻播放的部分由Simulink生成了ROS代碼,并成功在ROS中獨(dú)立運(yùn)行
?? 2021年12月份,我將開始第六階段的探索
?? 目前實(shí)驗(yàn)內(nèi)容的初稿已經(jīng)完成了,但是還沒(méi)在其他電腦上驗(yàn)證過(guò),這一階段,需要找多臺(tái)電腦,進(jìn)行可行性測(cè)試,并解決在推廣中可能出現(xiàn)的問(wèn)題,以使其具備廣泛的可推廣性
?? 至于第七階段,對(duì)實(shí)物的探索將于2022年1月開始
?? 車已拿到了,這絕對(duì)是我買過(guò)的最貴的小車了(7K),暫時(shí)實(shí)在無(wú)暇研究,只得暫時(shí)抑制興奮之感
?? 最后說(shuō)一下探索開發(fā)的感受吧
?? 一路走來(lái),踩過(guò)一個(gè)個(gè)坑,解決了一個(gè)個(gè)Error
?? 經(jīng)歷過(guò)痛苦和折磨,但確實(shí)收獲良多
?? 最慘的一次,被一個(gè)Error,折磨了三天三夜
?? 可參考的資料真的真的少得可憐
?? 大部分內(nèi)容得靠自已鉆研
??
?? 所謂熱愛和喜歡,也許就是
?? 在困境面前,會(huì)毫不猶豫選擇勇往直前
?? 即使充滿無(wú)力感,也不會(huì)萌生放棄的念頭
?? 道阻且長(zhǎng),行則將至
?? 因?yàn)闊釔?#xff0c;所以無(wú)所畏懼
??
?? 同時(shí)也祝愿小伙伴們,所愿皆所得
?? 學(xué)習(xí)/科研/工作
?? 碩果累累,順順利利666
總結(jié)
以上是生活随笔為你收集整理的为期两个月的MATLAB与ROS联合仿真探索总结——因为热爱,所以无所畏惧的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《西线无战事》我们才刚开始热爱生活,却不
- 下一篇: 华为荣耀路由器虚拟服务器,华为荣耀路由器