




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第一章系統(tǒng)及環(huán)境安裝
全套可編輯PPT課件第1章系統(tǒng)及環(huán)境安裝.pptx第2章機器人操作系統(tǒng)基礎(chǔ).pptx第3章URDF模型基礎(chǔ).pptx第4章機器人運動應(yīng)用實例.pptx第5章激光雷達應(yīng)用實例.pptx第6章建圖及導(dǎo)航應(yīng)用實例.pptx第7章基于代碼的導(dǎo)航應(yīng)用.pptx第8章基于平面視覺的應(yīng)用.pptx第9章基于三維視覺的應(yīng)用.pptx第10章基于機械臂控制的應(yīng)用實例.pptx第11章服務(wù)機器人應(yīng)用.pptx目錄1.1Ubuntu及機器人操作系統(tǒng)簡介1.2
Ubuntu安裝1.3
ROS安裝1.4
VisualStudioCode安裝1.5本章小結(jié)1.1Ubuntu及機器人操作系統(tǒng)簡介
1.1.1UbuntuUbuntu是一個以桌面應(yīng)用為主的Linux操作系統(tǒng),其名字源自非洲南部祖魯語或豪薩語的“ubuntu”一詞?!癠buntu”的意思是“人性”“我的存在是因為大家的存在”,是非洲傳統(tǒng)的一種價值觀。Ubuntu基于Debian發(fā)行版和Gnome桌面環(huán)境開發(fā)。而從11.04版起,Ubuntu發(fā)行版放棄了Gnome桌面環(huán)境,改為Unity。從前人們認為Linux難以安裝、難以使用,在Ubuntu出現(xiàn)后,這些都成為歷史。Ubuntu也擁有龐大的社區(qū)力量,用戶可以很方便地從社區(qū)中獲得幫助。自Ubuntu18.04LTS起,Ubuntu發(fā)行版又重新開始使用Gnome3桌面環(huán)境。本書將使用Ubuntu20.04LTS進行實驗。Ubuntu20.04LTS是繼Ubuntu14.04LTS、Ubuntu16.04LTS、Ubuntu18.04LTS之后,第四個長期支持版本,將提供免費安裝和維護更新至2025年4月。1.1.2機器人操作系統(tǒng)ROS(RobotOperatingSystem,機器人操作系統(tǒng))是專為機器人軟件開發(fā)所設(shè)計出來的一套操作系統(tǒng)架構(gòu)。它是一個開源的元級操作系統(tǒng)(后操作系統(tǒng)),可以提供類似于操作系統(tǒng)的服務(wù),包括硬件抽象描述、底層驅(qū)動程序管理、共用功能的執(zhí)行、程序間消息傳遞、程序發(fā)行包管理,它也提供一些工具和庫用于獲取、建立、編寫和執(zhí)行多機融合的程序。1.2
Ubuntu安裝Ubuntu的使用具有兩種方式,第一種是在虛擬機中安裝Ubuntu,第二種是保留計算機原有的Windows操作系統(tǒng)進行雙系統(tǒng)安裝。因為虛擬機運行時使用物理接口比較煩瑣,所以本書所有章節(jié)均在雙系統(tǒng)安裝的情況下進行。1.2.1準備工具安裝Ubuntu20.04LTS需要做以下準備。(1)下載Ubuntu20.04LTS的鏡像文件。在搜索引擎中搜索Ubuntu的官方網(wǎng)站,進入下載頁面,選擇Ubuntu20.04LTS進行下載。(2)制作啟動盤。用作啟動盤的U盤,容量需大于4GB。(3)使用帶有Windows10操作系統(tǒng)的計算機作為平臺,這里推薦使用筆記本式計算機。(4)下載Ventoy開源軟件。Ventoy用來制作啟動盤。在搜索引擎中搜索Ventoy的官方網(wǎng)站,選擇Windows操作系統(tǒng)下的最新版即可。1.2.2制作Ubuntu啟動盤制作Ubuntu啟動盤的步驟如下。(1)下載Ventoy開源軟件并解壓。(2)備份U盤內(nèi)的數(shù)據(jù)。(3)雙擊如圖1-1所示的Ventoy啟動程序,運行Ventoy軟件。圖1-1
Ventoy啟動程序1.2.2制作Ubuntu啟動盤程序啟動后,彈出Ventoy軟件啟動窗口(見圖1-2)。先選擇U盤對應(yīng)盤符,然后單擊“安裝”按鈕。圖1-2Ventoy軟件啟動窗口1.2.2制作Ubuntu啟動盤(4)等待片刻即可安裝成功,如圖1-3所示。圖1-3安裝成功(5)將之前下載好的Ubuntu20.04LTS鏡像文件“ubuntu-20.04.4-desktop-amd64.iso”移動到安裝好Ventoy軟件的U盤中。至此,啟動盤制作完成。1.2.3利用Windows磁盤管理工具創(chuàng)建空白磁盤分區(qū)(利用Windows磁盤管理工具創(chuàng)建空白磁盤分區(qū)的具體操作步驟如下。(1)右擊桌面左下角的“開始”,彈出如圖1-4所示的菜單,單擊“磁盤管理”,彈出如圖1-5所示的“磁盤管理”界面。圖1-4右擊“開始”圖1-5“磁盤管理”界面1.2.3利用Windows磁盤管理工具創(chuàng)建空白磁盤分區(qū)(2)在“磁盤管理”界面中選擇“磁盤0”的最后一個分區(qū)“新加卷(E:)”,右擊該分區(qū),在彈出的快捷菜單中,選擇“壓縮卷”選項,如圖1-6所示。圖1-6“新加卷(E:)”快捷菜單1.2.3利用Windows磁盤管理工具創(chuàng)建空白磁盤分區(qū)(3)在彈出的磁盤壓縮界面中找到“輸入壓縮空間量”并在其后方的編輯框中輸入所需的空間大小,如圖1-7所示。建議空間大小為100GB,即102400MB,如磁盤空間不足,可減小容量,但空間不要小于20GB。因筆者計算機磁盤空間較小,所以圖1-7中空間設(shè)置得較小。壓縮完成后彈出如圖1-8所示的界面,出現(xiàn)未分配的磁盤區(qū)域,此時創(chuàng)建空白磁盤分區(qū)成功。圖1-7磁盤壓縮界面1.2.3利用Windows磁盤管理工具創(chuàng)建空白磁盤分區(qū)圖1-8出現(xiàn)未分配的磁盤區(qū)域1.2.4安裝Ubuntu系統(tǒng)安裝Ubuntu系統(tǒng)的具體操作步驟如下。(1)在計算機上插入啟動盤,重新啟動計算機,進入選擇啟動項界面,不同型號主板的按鍵不相同,建議在網(wǎng)上查找相應(yīng)按鍵。選擇U盤啟動選項,按“Enter”鍵即可從U盤啟動,此時系統(tǒng)會彈出一個菜單,從菜單中選擇“試用Ubuntu”選項,稍等片刻即可進入如圖1-9所示的初始界面。圖1-9初始界面1.2.4安裝Ubuntu系統(tǒng)(2)雙擊“安裝Ubuntu20.04LTS”圖標彈出如圖1-10所示的安裝初始界面,選擇“中文(簡體)”選項,選擇完成后單擊“繼續(xù)”按鈕。圖1-10安裝初始界面1.2.4安裝Ubuntu系統(tǒng)(3)進入“鍵盤布局”界面,如圖1-11所示,系統(tǒng)已經(jīng)默認選擇“Chinese”,所以無須更改,單擊“繼續(xù)”按鈕。圖1-11“鍵盤布局”界面1.2.4安裝Ubuntu系統(tǒng)(4)進入“更新和其他軟件”界面,如圖1-12所示,在界面中選擇“正常安裝”,然后單擊“繼續(xù)”按鈕。圖1-12“更新和其他軟件”界面1.2.4安裝Ubuntu系統(tǒng)(5)進入“安裝類型”界面,如圖1-13所示,在界面中選擇“其他選項”,然后單擊“繼續(xù)”按鈕。圖1-13“安裝類型”界面1.2.4安裝Ubuntu系統(tǒng)(6)進入“磁盤分區(qū)”界面,在該界面中選中之前壓縮出來的空閑空間,單擊“+”按鈕,依次創(chuàng)建4個分區(qū),如圖1-14所示,具體分區(qū)如下。①/:這個分區(qū)是Ubuntu的根目錄,相當于Windows操作系統(tǒng)中的C盤,軟件會默認裝在這個目錄下,空間要盡可能設(shè)置得大一些。如果之前分配了100GB給Ubuntu,那么建議此分區(qū)的空間為50GB。②/boot:這個分區(qū)必不可少,其是Ubuntu的啟動目錄,里面會有系統(tǒng)的引導(dǎo),建議將其設(shè)置為2GB。③交換空間:這個分區(qū)相當于虛擬內(nèi)存,當物理內(nèi)存不足時,Ubuntu會調(diào)用此分區(qū)充當運行內(nèi)存,建議最少設(shè)置8GB來保障系統(tǒng)的正常運行。④/home:這個分區(qū)相當于Windows操作系統(tǒng)中除C盤外剩余的磁盤,將剩余的空間全部分配給此分區(qū)即可。1.2.4安裝Ubuntu系統(tǒng)
(a) (b)
圖1-14“創(chuàng)建分區(qū)”界面(c)
(d)圖1-14“創(chuàng)建分區(qū)”界面(續(xù))1.2.4安裝Ubuntu系統(tǒng)
(7)創(chuàng)建好4個分區(qū)之后要設(shè)置安裝啟動引導(dǎo)器的設(shè)備,如圖1-15所示,在界面最下方“安裝啟動引導(dǎo)器的設(shè)備”下拉列表中選擇剛創(chuàng)建的/boot分區(qū),然后單擊“現(xiàn)在安裝”按鈕。圖1-15設(shè)置安裝啟動引導(dǎo)器的設(shè)備1.2.4安裝Ubuntu系統(tǒng)
(8)彈出分區(qū)確認界面,如圖1-16所示,單擊“繼續(xù)”按鈕。圖1-16分區(qū)確認界面1.2.4安裝Ubuntu系統(tǒng)
(9)進入地區(qū)設(shè)置界面,選擇“Shanghai”,然后單擊“繼續(xù)”按鈕。(10)進入用戶設(shè)置界面,如圖1-17所示,用戶可根據(jù)喜好自行設(shè)置其中的信息,設(shè)置完成后單擊“繼續(xù)”按鈕。圖1-17用戶設(shè)置界面1.2.4安裝Ubuntu系統(tǒng)
(11)進入安裝讀條界面,如圖1-18所示,等待安裝完成即可。圖1-18安裝讀條界面1.2.4安裝Ubuntu系統(tǒng)
(12)彈出“安裝完成”對話框,如圖1-19所示,單擊“現(xiàn)在重啟”按鈕并拔掉啟動盤,等待計算機重啟。圖1-19“安裝完成”對話框1.2.4安裝Ubuntu系統(tǒng)
(13)計算機重啟后默認啟動Ubuntu系統(tǒng),若在步驟(10)中設(shè)置了密碼,則在此步驟中要輸入步驟(10)中所設(shè)置的密碼。Ubuntu系統(tǒng)界面如圖1-20所示。圖1-20Ubuntu系統(tǒng)界面至此,Ubuntu系統(tǒng)已經(jīng)完成。1.3ROS安裝1.3.1設(shè)置Ubuntu軟件源
(1)確認計算機可以訪問互聯(lián)網(wǎng),單擊桌面左下角的顯示應(yīng)用程序圖標,打開如圖1-21所示的應(yīng)用程序菜單界面,找到“軟件和更新”圖標并單擊打開。圖1-21應(yīng)用程序菜單界面1.3.1設(shè)置Ubuntu軟件源
(2)“軟件和更新”界面如圖1-22所示,單擊打開“下載自”下拉列表,選擇“其他站點”選項。圖1-22“軟件和更新”界面(1)1.3.1設(shè)置Ubuntu軟件源
(3)彈出“選擇下載服務(wù)器”對話框,如圖1-23所示,單擊“選擇最佳服務(wù)器”按鈕。(4)彈出“測試下載服務(wù)器”對話框,如圖1-24所示,待系統(tǒng)選擇后,單擊“選擇服務(wù)器”按鈕。
圖1-23“選擇下載服務(wù)器”對話框圖1-24“測試下載服務(wù)器”對話框1.3.1設(shè)置Ubuntu軟件源
(5)回到“軟件和更新”界面,如圖1-25所示,此時“下載自”后的內(nèi)容變?yōu)榱松厦孢x擇的最佳下載服務(wù)器,接下來單擊“關(guān)閉”按鈕。圖1-25“軟件和更新”界面(2)1.3.1設(shè)置Ubuntu軟件源
(6)彈出“可用軟件的列表信息已過時”對話框,如圖1-26所示,單擊“重新載入”按鈕。(7)彈出“更新緩存”窗口,如圖1-27所示,等待片刻,窗口會在更新完成后自動關(guān)閉。圖1-26“可用軟件的列表信息已過時”對話框圖1-27“更新緩存”窗口1.3.2安裝ROS
在搜索引擎中搜索ROS官方網(wǎng)站,然后進入網(wǎng)站查看官方安裝步驟。以下安裝步驟均是從ROS官方網(wǎng)站翻譯而來的。(1)確保計算機已連接至互聯(lián)網(wǎng)。(2)打開ROS官方網(wǎng)站,單擊圖1-28中的“Mirrors”。圖1-28ROS官方網(wǎng)站1.3.2安裝ROS
(3)進入軟件源列表網(wǎng)頁,如圖1-29所示,選擇其中一個中國的軟件源,這里選擇的是清華大學(xué)軟件源,復(fù)制下方指令,在對除“終端程序”外的程序進行復(fù)制和粘貼時,使用的快捷鍵和Windows操作系統(tǒng)一致,分別為“Ctrl+C”和“Ctrl+V”。(4)啟動“終端程序”,初次打開的終端程序如圖1-30所示,可在桌面通過快捷菜單打開,也可以通過快捷鍵“Ctrl+Shift+T”啟動。(5)在“終端程序”內(nèi)輸入在步驟(3)中所復(fù)制的指令,在“終端程序”內(nèi)進行復(fù)制、粘貼需在快捷鍵中加入“Shift”鍵,即復(fù)制和粘貼的快捷鍵分別為“Ctrl+Shift+C”和“Ctrl+Shift+V”,輸入后按下“Enter”鍵。添加軟件源如圖1-31所示。此時需要輸入管理員密碼,此密碼為安裝Ubuntu時設(shè)置的賬戶密碼。需要注意的是,這里輸入密碼時并不會顯示任何字符,所以按順序輸入密碼即可,如果輸入錯誤,那么系統(tǒng)會提示用戶再次輸入。1.3.2安裝ROS
圖1-29軟件源列表網(wǎng)頁1.3.2安裝ROS
圖1-30初次打開的終端程序圖1-31添加軟件源1.3.2安裝ROS
(6)設(shè)置ROS安裝密鑰,在終端內(nèi)輸入如下指令并按“Enter”鍵。密鑰安裝成功界面如圖1-32所示。需要注意的是,這個密鑰由ROS官方提供,后續(xù)可能涉及更新,如安裝時提示出現(xiàn)問題,請進入ROS官方網(wǎng)站獲取最新密鑰。圖1-32密鑰安裝成功界面sudoapt-keyadv--keyserver'hkp://:80'--recv-keyC1CF6E31E6BADE8868B172B4F42ED6FBAB17C6541.3.2安裝ROS
(7)更新安裝列表,在終端內(nèi)輸入如下指令。等待運行完成。更新安裝列表如圖1-33所示。圖1-33更新安裝列表sudoapt-getupdate1.3.2安裝ROS
(8)安裝ROS,在終端內(nèi)輸入如下指令。sudoapt-getinstallros-noetic-desktop-full需要注意的是,這一步會受到網(wǎng)絡(luò)環(huán)境和所選安裝源影響,所需時間不可預(yù)估。如遇到因連接失敗導(dǎo)致的安裝失敗,可再次運行指令進行嘗試。如需要臨時關(guān)閉計算機,可在終端內(nèi)按快捷鍵“Ctrl+C”暫停安裝,繼續(xù)安裝只需再次輸入指令即可。下載完成后系統(tǒng)會自動解壓安裝。ROS下載安裝完成如圖1-34所示。
圖1-34ROS下載安裝完成1.3.2安裝ROS
(9)安裝編譯工具鏈,在終端內(nèi)輸入以下指令。
sudoaptinstallpython3-rosdeppython3-rosinstallpython3-rosinstall-generatorpython3-wstoolbuild-essential
(10)初始化rosdep,在終端內(nèi)依次輸入如下指令。
sudoapt-getinstallpython3-pipsudopip3install6-rosdepsudo6-rosdep
步驟(10)中的第一條指令為安裝pip工具,待其安裝成功后輸入第二條指令,利用pip工具安裝6-rosdep程序,待其安裝成功后輸入第三條指令,運行6-rosdep程序。1.3.2安裝ROS
運行6-rosdep程序成功后,如圖1-35所示,開始初始化rosdep程序,在終端依次輸入如下指令。
sudorosdepinitrosdepupdate
等待片刻即可初始化完成。(11)設(shè)置ROS軟件包地址,在終端內(nèi)依次輸入如下指令。
echo"source/opt/ros/noetic/setup.bash">>~/.bashrcsource~/.bashrc
至此,ROS安裝成功。1.3.2安裝ROS
圖1-35運行6-rosdep成功1.4
VisualStudioCode安裝
1.4.1下載VisualStudioCode
(1)在搜索引擎中搜索VisualStudioCode,找到官方網(wǎng)站,如圖1-36所示,下載.deb格式文件,瀏覽器默認將文件下載至“下載”文件夾。圖1-36VisualStudioCode官方網(wǎng)站1.4.1下載VisualStudioCode
(2)將下載好的文件從“下載”文件夾移動至“主目錄”文件夾,如圖1-37所示。圖1-37移動安裝文件1.4.2安裝VisualStudioCode
(1)打開一個新的終端,輸入如下指令。sudodpkg–icode_xxxx_amd64.deb將指令中的“xxxx”替換成實際下載的版本號,也可以先在終端內(nèi)輸入“sudodpkg–icode”,然后按“Tab”鍵進行自動填充。安裝VisualStudioCode界面如圖1-38所示。圖1-38安裝VisualStudioCode界面1.4.2安裝VisualStudioCode
(2)按“Enter”鍵之后系統(tǒng)會提示輸入密碼(見圖1-39),此密碼為安裝Ubuntu時設(shè)置的賬戶密碼。需要注意的是,這里輸入密碼時并不會顯示任何字符,所以按順序輸入密碼即可。如果輸入錯誤,那么系統(tǒng)會提示用戶再次輸入。圖1-39輸入密碼1.4.2安裝VisualStudioCode
(3)VisualStudioCode安裝成功,如圖1-40所示。圖1-40VisualStudioCode安裝成功1.4.3配置VisualStudioCode
(1)在終端內(nèi)輸入“code”后按“Enter”鍵即可啟動VisualStudioCode,如圖1-41所示。此時可以在最左側(cè)任務(wù)欄里右擊“VisualStudioCode”圖標,在彈出的快捷菜單中選擇“添加至收藏夾”選項,在下次使用VisualStudioCode時即可直接單擊左側(cè)收藏夾進行啟動。(2)啟動VisualStudioCode后,初始界面如圖1-42所示,此時VisualStudioCode未安裝任何插件且為英文界面。我們在使用過程中,需要使用到“CMake”插件,如感覺英文界面使用困難,也可以在插件中安裝“Chinese”插件,從而將英文界面變?yōu)橹形慕缑妗?.4.3配置VisualStudioCode
圖1-41啟動VisualStudioCode圖1-42VisualStudioCode初始界面1.4.3配置VisualStudioCode
(3)單擊如圖1-42所示的界面中的“拓展插件”圖標,進入“拓展插件”界面,如圖
1-43所示。(4)在搜索框中輸入“cmake”,界面左側(cè)會顯示一系列和“cmake”相關(guān)的插件,如圖1-44所示。我們需要的插件名稱為“CMake”,單擊插件右下角的“Install”按鈕進行安裝,當按鈕位置變?yōu)辇X輪時,插件安裝完成。1.4.3配置VisualStudioCode
圖1-43“拓展插件”界面圖1-44搜索“cmake”結(jié)果界面1.4.3配置VisualStudioCode
(5)在搜索框中輸入“chinese”,會顯示一系列和“chinese”相關(guān)的插件,如圖1-45所示。我們需要安裝的插件為簡體中文插件,在安裝完成之后,界面右下角會出現(xiàn)需要重啟VisualStudioCode的提示,此時單擊“重啟”按鈕,系統(tǒng)重啟后界面即可變?yōu)楹嗴w中文,如圖1-46所示。圖1-45搜索“chinese”結(jié)果界面圖1-46VisualStudioCode簡體中文界面1.5
本章小結(jié)
本章介紹了Ubuntu名字的起源、版本支持及機器人操作系統(tǒng)的基本概念;詳細說明了Ubuntu、機器人操作系統(tǒng)及編程環(huán)境VisualStudioCode的配置與安裝。感謝觀看第2章機器人操作系統(tǒng)基礎(chǔ)目錄2.1ROS安裝目錄2.2測試ROS2.3
ROS架構(gòu)2.4工作空間2.5創(chuàng)建功能包2.6本章小結(jié)2.1ROS安裝目錄ROS默認的安裝目錄為“文件/其他位置/計算機/opt”,找到“ros”文件夾并打開,可以看到一個以當前安裝的ROS版本號命名的文件夾,這里面就包含所有ROS的文件(見圖2-1),共有5個文件夾。圖2-1ROS默認文件夾2.1.1bin文件夾bin文件夾中的內(nèi)容如圖2-2所示,里面放置的是一些終端指令,如后續(xù)會經(jīng)常用到的“catkin_make”“roslaunch”“rosrun”等。圖2-2bin文件夾中的內(nèi)容2.1.2etc文件夾etc文件夾中的內(nèi)容如圖2-3所示,它主要是用來存放“catkin”和“ros”的配置文件的文件夾。圖2-3etc文件夾中的內(nèi)容2.1.3include文件夾include文件夾中的內(nèi)容如圖2-4所示,里面放置的是通過終端安裝的功能包里的頭文件。某個功能包中具有一些頭文件,在創(chuàng)建功能包時,如果需要依賴另一個功能包,就必須包含那個功能包的頭文件。圖2-4include文件夾中的內(nèi)容2.1.4lib文件夾lib文件夾中的內(nèi)容如圖2-5所示,里面放置的是通過終端安裝的功能包里的可執(zhí)行程序,也就是功能包中的節(jié)點,運行其中的節(jié)點就可以啟動相應(yīng)功能。圖2-5lib文件夾中的內(nèi)容2.1.5share文件夾share文件夾中的內(nèi)容如圖2-6所示,里面放置的是通過終端安裝的功能包里的共享數(shù)據(jù),是功能包里面接口的一些具體信息。接口包含話題、服務(wù)、action等。圖2-6share文件夾中的內(nèi)容2.2測試ROS2.2.1查看ROS安裝版本前面已經(jīng)介紹了ROS安裝的位置,并且明確了安裝的ROS版本為“noetic”,接下來我們可以通過在終端中輸入指令查看ROS版本。在終端中輸入“rosversion-d”,在終端窗口里顯示出了指令“noetic”,如圖2-7所示。這個指令可以幫助我們快速了解計算機當前安裝的ROS版本。圖2-7查看ROS版本2.2.2控制小烏龜(1)打開一個終端,輸入如下指令。roscore這條指令是啟動ROS節(jié)點管理器,如圖2-8所示。圖2-8啟動ROS節(jié)點管理器2.2.2控制小烏龜(2)保持之前的終端不要關(guān)閉,打開一個新終端,輸入如下指令。rosrunturtlesimturtlesim_node這條指令是啟動小烏龜節(jié)點,運行后彈出一個“TurtleSim”窗口,在其中心有一只靜止的小烏龜(見圖2-9)。(3)保持之前的終端不要關(guān)閉,打開一個新的終端,輸入如下指令。rosrunturtlesimturtle_teleop_key這條指令是啟動鍵盤控制小烏龜移動的節(jié)點,運行后可以通過鍵盤上的方向鍵控制小烏龜在窗口內(nèi)移動并留下軌跡(見圖2-10)。2.2.2控制小烏龜圖2-9小烏龜靜止圖2-10小烏龜移動2.3
ROS架構(gòu)ROS架構(gòu)分為三個部分:開源社區(qū)、文件系統(tǒng)和計算圖,如圖2-11所示。圖2-11ROS架構(gòu)圖2.3.1ROS開源社區(qū)ROS用戶可以在通過網(wǎng)絡(luò)建立的開源社區(qū)中共享和獲取知識、代碼與算法?,F(xiàn)在開源社區(qū)中的資源非常豐富,這些資源包括以下幾種。(1)ROSDistribution:它類似于Linux發(fā)行版,是一個特定版本的所有程序包集合。(2)ROSWiki:它是用于記錄有關(guān)ROS信息的主要論壇,大家都可以進行注冊、登錄,分享、更正、更新和編寫教程等。(3)ROSRepository:ROS依賴于共享開源代碼與軟件庫,不同的機構(gòu)組織能夠在這里發(fā)布或共享各自的機器人軟件或程序。(4)ROSAnswer:它是用于咨詢ROS相關(guān)問題的網(wǎng)站。2.3.2ROS文件系統(tǒng)ROS文件系統(tǒng)是指ROS代碼在計算機系統(tǒng)硬盤上的組織形式。和其他操作系統(tǒng)相似,ROS文件系統(tǒng)根據(jù)其中不同功能的組件,將其各個組件放置在不同的文件夾中,其結(jié)構(gòu)如圖2-12所示。ROS文件系統(tǒng)的組織形式是一個標準化的架構(gòu),編寫的時候不要改變,以下是常用的各文件系統(tǒng)。(1)catkinworkspace:工作空間,是用戶自定義的存放工程開發(fā)相關(guān)文件的文件夾,包含3個文件夾,即src、Build、devel。(2)src:源碼空間,用于儲存功能包、項目、克隆包等。(3)Build:編譯空間,用于儲存CMake和catkin的緩存信息、配置信息及其他中間文件。(4)devel:開發(fā)空間,用于儲存變異后生成的目標文件,包括頭文件、動態(tài)或靜態(tài)鏈接庫和可執(zhí)行文件等,這些都是可以直接運行的程序。2.3.2ROS文件系統(tǒng)圖2-12ROS文件系統(tǒng)結(jié)構(gòu)2.3.2ROS文件系統(tǒng)(5)Package:功能包。單個功能包稱為軟件包,多個功能包稱為堆。功能包是ROS程序的基本單元,每個功能包可以包含多個節(jié)點(進程或可執(zhí)行文件)、程序庫、腳本、配置文件及其他可以手動創(chuàng)建的東西。這些內(nèi)容可以在邏輯上被定義為一個完整的軟件模塊。(6)CMakeList.txt:編譯規(guī)則文件,用于設(shè)定編譯規(guī)則,如源文件、依賴項和目標文件等。2.3.2ROS文件系統(tǒng)(7)Manifest(Package.xml):功能包清單文件,是一個名為Package.xml的XML文件,它必須位于功能包文件夾中。它是對功能包相關(guān)信息的介紹,用于定義軟件包相關(guān)信息之間的依賴關(guān)系,如功能包名稱、版本、作者、描述(某功能的軟件包)、維護者的郵箱、許可,這些可以改也可以不改,但是格式不能出錯;這里面還包括編譯標志及對其他功能包的依賴項。注意,系統(tǒng)包的依賴關(guān)系也應(yīng)該在Package.xml中聲明,當用戶需要在設(shè)備上通過源代碼來構(gòu)建包時,這一點是非常有必要的。(8)scripts:用于儲存Python文件、Linux操作系統(tǒng)下的shell文件和其他可執(zhí)行文件。2.3.2ROS文件系統(tǒng)(9)msg:在ROS框架中,節(jié)點(Node)之間通過將消息發(fā)布到話題(Topic)中來實現(xiàn)彼此的異步通信,這里的話題是一種數(shù)據(jù)結(jié)構(gòu),而消息文件的擴展名為.msg,它位于功能包msg中,即msg是用來儲存消息通信格式的文件夾。(10)srv:ROS服務(wù)。ROS節(jié)點還可以通過系統(tǒng)服務(wù)的調(diào)用來同步交換請求(Request)和響應(yīng)(Response)消息。這些交換請求和響應(yīng)消息位于srv文件夾中,擴展名為.srv。(11)include:用于儲存頭文件。(12)src:用來儲存源文件。2.3.2ROS文件系統(tǒng)(13)launch:用于儲存launch文件。launch文件的作用是一次性運行多個節(jié)點。如果要獲得關(guān)于ROS環(huán)境中的功能包和棧的信息,如它們的路徑、依賴關(guān)系等,則需要用到ROS文件系統(tǒng)工具。它們可以幫助我們查詢ROS工作空間中的相關(guān)文件,可以簡化操作,常用的指令有如下幾個。(1)rospack可以得到一個包的信息,rospackhelp指令會運行出來許多相關(guān)操作,其中find的功能是得到一個功能包的路徑。格式:rospackfind功能包名。實例:rospackfindroscpp。結(jié)果:/opt/ros/melodic/share/roscpp。2.3.2ROS文件系統(tǒng)(2)roscd可以直接進入pkg,不需要使用絕對路徑。格式:roscd包名。實例:roscdroscpp。結(jié)果:/opt/ros/melodic/share/roscpp$。注意:roscd只會在ROS_PACKAGE_PATH環(huán)境變量指定的路徑中查找ros包,并進入這個包,所以在使用roscd來進入一個pkg前,一定要保證pkg的路徑在ROS_PACKAGE_PATH中。2.3.2ROS文件系統(tǒng)(3)rosls直接列出一個包的目錄,也不需要使用絕對路徑,只需要一個包名即可。格式:rosls包名。實例:roscdroscpp_tutorials。結(jié)果:cmakelaunchPackage.xmlsrv。(4)Tab自動補全。對于已經(jīng)存在的文件,可以只輸入文件名的前面幾個字母,剩余部分使用“Tab”鍵補全。2.3.3ROS計算圖ROS軟件的各功能以節(jié)點為單位獨立運行。ROS創(chuàng)建了連接所有節(jié)點的通信網(wǎng)絡(luò),通過這個網(wǎng)絡(luò),各個相互獨立的節(jié)點可以進行交互。ROS計算圖如圖2-13所示,計算圖這一層級中包括節(jié)點、節(jié)點管理器、參數(shù)服務(wù)器、消息、主題、服務(wù)和消息記錄包。圖2-13ROS計算圖2.3.3ROS計算圖1.節(jié)點在ROS中,節(jié)點相當于模塊,一個機器人具有很多的功能,每個功能都可以獨立出來成為功能模塊,而節(jié)點就相當于軟件層面的功能模塊,使軟件設(shè)計更加便捷。像2.2節(jié)中運行rosrunturtlesimturtlesim_node和rosrunturtlesimturtle_teleop_key兩步,就是啟動了對應(yīng)的節(jié)點。2.節(jié)點管理器節(jié)點管理器在ROS中扮演著管理者的角色,管理著各個節(jié)點,保證節(jié)點正常運行,節(jié)點需要先在節(jié)點管理器中進行注冊,才能融入ROS程序這個“大家庭”進行交流。2.2節(jié)中的“roscore”指令的作用就是啟動節(jié)點管理器。2.3.3ROS計算圖3.參數(shù)服務(wù)器參數(shù)服務(wù)器相當于ROS程序“大家庭”中的“家族圖書館”,是可以通過網(wǎng)絡(luò)訪問的共享字典,節(jié)點將關(guān)鍵字儲存在節(jié)點管理器中,節(jié)點使用參數(shù)服務(wù)器儲存和檢索參數(shù)。4.消息消息相當于ROS程序“大家庭”中各成員聯(lián)系所使用的“書信”,節(jié)點之間通過傳遞消息進行通信,每種消息都有自己嚴格的數(shù)據(jù)結(jié)構(gòu)。2.3.3ROS計算圖5.主題主題相當于ROS所在世界的“郵局”,可以有針對性地傳遞消息。在2.2節(jié)中已經(jīng)運行的那兩個指令的狀態(tài)基礎(chǔ)上,可以打開一個新的終端運行如下指令。rqt_graph運行后會彈出如圖2-14所示的rqt_graph_RosGraph-rqt界面,可以看出節(jié)點“/teleop_turtle”和節(jié)點“/turtlesim”之間通過名為“/turtle1/cmd_vel”的主題進行通信。節(jié)點“/teleop_turtle”在此主題上發(fā)布按鍵輸入消息,節(jié)點“/turtlesim”訂閱此主題接收該消息。圖2-14rqt_graph_RosGraph_rqt界面6.服務(wù)服務(wù)相當于升級版的主題,相對于主題來說,服務(wù)可以進行同步消息傳遞,其基于客戶端/服務(wù)器(Client/Server)模型,包含兩個部分的通信數(shù)據(jù)類型:一個用于請求;另一個用于應(yīng)答,類似于Web服務(wù)器。與主題不同的是,ROS中只允許有一個節(jié)點提供指定命名的服務(wù)。本節(jié)介紹了ROS計算圖下的各組成部分,在2.2節(jié)中,用到了“rosrun”指令,現(xiàn)在具體介紹一下“rosrun”指令格式。指令格式:rosrun[package_name][node_name]如果需要啟動多個節(jié)點,可以使用“roslaunch”指令批量運行。指令格式:roslaunch[package_name][launch_name.launch]“roslaunch”會在啟動節(jié)點前檢測系統(tǒng)是否啟動了節(jié)點管理器,如果沒有,那么它會自動打開節(jié)點管理器。2.4工作空間在前面的章節(jié)中已經(jīng)介紹了工作空間及其內(nèi)部結(jié)構(gòu),接下來我們就要自己手動創(chuàng)建一個工作空間以供后面實驗使用。工作空間直觀理解就是一個文件夾,工作空間不是功能包,一個工作空間中可以有多個功能包。2.4.1創(chuàng)建工作空間(1)打開終端,輸入如下指令。
mkdir-p~/catkin_ws/src
這條指令會先在主文件夾(用戶文件夾)下創(chuàng)建一個名為“catkin_ws”的文件夾,然后在其下創(chuàng)建一個下一級的src文件夾,如圖2-15所示。而使用“mkdir-p”這個指令可以依次創(chuàng)建目錄,即使上一級目錄不存在,也會按照目錄層級自動創(chuàng)建目錄?!?p”表示遞歸創(chuàng)建目錄?!皛/”表示當前用戶名目錄。src文件夾即代碼空間,用戶不能自行用別的名稱代替。工作空間名稱是可以自定義的。圖2-15“catkin_ws”文件夾2.4.1創(chuàng)建工作空間(2)在終端中輸入如下指令。
cd~/catkin_ws/src
這條指令會使終端在“~/catkin_ws/src”目錄下運行,如圖2-16所示。圖2-16運行在“~/catkin_ws/src”目錄下的終端2.4.1創(chuàng)建工作空間(3)在終端中輸入如下指令。catkin_init_workspace這條指令是初始化src文件夾,將其變?yōu)镽OS工作空間。運行后會在“src”文件夾中生成一個名為“CMakeLists.txt”的文件,如圖2-17所示,此時一個最初始的ROS工作空間便創(chuàng)建成功。圖2-17生成“CMakeLists.txt”文件2.4.2編譯工作空間要編譯工作空間,就要先回到工作空間的根目錄。(1)在終端中輸入如下指令。cd~/catkin_ws/這條指令會使終端在“~/catkin_ws”目錄下運行,如圖2-18所示。catkin_ws是指自定義的工作空間名稱。圖2-18運行在“~/catkin_ws/”目錄下的終端2.4.2編譯工作空間(2)在終端中輸入如下指令。catkin_make這條指令是進行編譯的指令,編譯成功后會在“~/catkin_ws”目錄下生成“build”和“devel”兩個文件夾,如圖2-19所示?!癲evel”文件夾中存放了編譯完成的內(nèi)容。加上2.4.1節(jié)創(chuàng)建的“src”文件夾,此時catkin_ws文件夾下共有三個文件夾。需要注意的是,“catkin_make”如果不在工作空間文件夾下運行,則系統(tǒng)將會報錯。圖2-19生成“build”和“devel”兩個文件夾2.4.2編譯工作空間(3)在終端中輸入如下指令。catkin_init_workspace這條指令是初始化src文件夾,將其變?yōu)镽OS工作空間。運行后會在“src”文件夾中生成一個名為“CMakeLists.txt”的文件,如圖2-17所示,此時一個最初始的ROS工作空間便創(chuàng)建成功.圖2-17生成“CMakeLists.txt”文件2.4.3添加環(huán)境變量將工作空間添加到環(huán)境變量中可以省去每次打開終端時手動刷新的步驟,具體步驟如下。(1)在終端中輸入如下指令。echo"source~/catkin_ws/devel/setup.bash">>~/.bashrc該指令的意思是把“source~/catkin_ws/devel/setup.bash”這條指令加載到“~/.bashrc”這個腳本的后面。實際上,這與直接打開.bashrc文件將“source~/catkin_ws/devel/setup.bash”粘貼進去的結(jié)果是一樣的。這樣每次打開終端時,系統(tǒng)就會自動刷新工作空間環(huán)境。這個工作空間中的所有Package都可以在編譯后直接運行,不用再source。(讀者可通過網(wǎng)絡(luò)查看其他環(huán)境配置方式或手動配置。)2.4.3添加環(huán)境變量(2)在終端中輸入如下指令。source~/.bashrc使用該指令就可以成功將工作空間添加到環(huán)境變量中,添加后的“~/.bashrc”文件如圖2-20所示,在其最后兩行就包含第1章及這一步添加的環(huán)境變量。工作空間生效后,通過指令“echo$ROS_PACKAGE_PATH”可以查看當前環(huán)境中的工作變量,在當前工作空間中運行以上指令后,會顯示創(chuàng)建的工作空間和二進制安裝的核心庫與依賴包兩個路徑(/home/robot/catkin_ws/src:/opt/ros/melodic/share)。圖2-20添加后的“~/.bashrc”文件2.5創(chuàng)建功能包本節(jié)將介紹如何創(chuàng)建一個新的catkin程序包及創(chuàng)建后能夠做哪些工作。進入之前創(chuàng)建的catkin_ws工作空間中的src目錄。(1)在終端中輸入以下指令。cdsrc/按“Enter”鍵后得到如圖2-21所示的終端界面。圖2-21進入src目錄指令終端示意圖2.5創(chuàng)建功能包輸入“l(fā)s”指令可以查看當前文件夾中的文件。輸入“pwd”指令可以看到當前文件的路徑?!發(fā)s”指令和“pwd”指令如圖2-22所示。圖2-22“l(fā)s”指令和“pwd”指令2.5創(chuàng)建功能包(2)首先進入工作空間中的src目錄,在終端中的src目錄下輸入以下指令;其次按“Enter”鍵;最后用“l(fā)s”指令查看src目錄中的文件。cdsrc/catkin_create_pkgbeginner_tutorialsstd_msgsrospyroscpplscatkin_create_pkg<pkgname>[depend1][depend2][depend3]指令中的<pkg_name>為要創(chuàng)建的軟件包名稱。[depend1]、[depend2]和[depend3]是指這個軟件包所需要的依賴項。上面指令創(chuàng)建的功能包名稱為“beginner_tutorials”,依賴項為std_msgs、rospy、roscpp。在src目錄中創(chuàng)建功能包如圖2-23所示。2.5創(chuàng)建功能包圖2-23在src目錄中創(chuàng)建功能包2.6本章小結(jié)本章利用ROS自帶的小烏龜腳本介紹了ROS運行程序的基本方法,并對ROS架構(gòu)的三個部分進行了說明,還創(chuàng)建了屬于自己的工作空間和功能包。感謝觀看第3章URDF模型基礎(chǔ)目錄3.1在URDF模型內(nèi)進行物理模型描述3.2在URDF模型內(nèi)對各傳感器進行描述3.3本章小結(jié)3.1.1獲取開源項目這里通過一個開源項目“wpr_simulation”來介紹統(tǒng)一機器人描述格式(URDF,UnifiedRobotDescriptionFormat)模型。(1)獲取開源項目,如圖3-1所示,在終端中依次輸入如下指令。cd~/catkin_ws/srcgitclone/6-robot/wpr_simulation.git圖3-1獲取開源項目說明:需要多運行幾次獲得開源項目的指令?!癵itclone”指令執(zhí)行成功后,可以在工作空間中的“src”目錄下找到剛下載的開源項目“wpr_simulation”的文件夾。3.1.1獲取開源項目(2)在src目錄下,繼續(xù)使用之前的終端,下載安裝此開源項目所需的依賴項,在終端中輸入以下指令。~/catkin_ws/src/wpr_simulation/scripts/install_for_noetic.sh指令運行后系統(tǒng)會提示輸入管理員密碼,之后系統(tǒng)會自動安裝一系列此開源項目所需的依賴項,需要注意的是,有些依賴項需要手動輸入“Y”同意安裝。3.1.1獲取開源項目(3)接之前的終端,即在src終端中編譯此開源項目,如同第2章中的編譯工作空間一樣,依次在終端中輸入如下指令。cd~/catkin_wscatkin_make待開源項目編譯完成后,得到如圖3-2所示的界面。圖3-2開源項目編譯完成3.1.2URDF模型的結(jié)構(gòu)及慣性描述URDF與計算機文件中的文本格式(.txt)、圖像格式(.jpg)等類似,是一種基于XML規(guī)范、用于描述機器人結(jié)構(gòu)的格式。從機構(gòu)學(xué)角度講,機器人通常被建模為由連桿和關(guān)節(jié)組成的結(jié)構(gòu)。連桿是帶有質(zhì)量屬性的剛體,而關(guān)節(jié)是連接、限制兩個剛體相對運動的結(jié)構(gòu)。關(guān)節(jié)也被稱為運動副。通過關(guān)節(jié)將連桿依次連接起來,就構(gòu)成了一個個運動鏈(也就是這里所定義的URDF模型)。一個URDF文檔就描述了這樣的一系列關(guān)節(jié)與連桿的相對關(guān)系、慣性屬性、幾何特點和碰撞模型。具體來說,它包括機器人模型的運動學(xué)與動力學(xué)描述、機器人的幾何表示和機器人的碰撞模型。在一個URDF文件中,通常存在一個或多個<joint>和<link>及一個<robot>,其中<robot>為根節(jié)點,<joint>為關(guān)節(jié)子節(jié)點,<link>為連桿子節(jié)點,這些節(jié)點組合形成機器人完整的模型。其中,<joint>僅起到連接的作用,參數(shù)基本固定,而<link>通常描述的是機器人的某個零件,因此參數(shù)會根據(jù)零件不同而復(fù)雜多變,如慣性屬性、幾何特點和碰撞模型等參數(shù)都放在<link>中進行描述。以上信息概括起來就是,URDF是由一個聲明信息和兩個關(guān)鍵組件共同組成的。
3.1.2URDF模型的結(jié)構(gòu)及慣性描述1)聲明信息聲明信息包含兩部分,第一部分是xml的聲明信息,放在第一行,格式如下。<?xmlversion="1.0"?>第二部分是機器人的聲明,通過robot標簽就可以聲明一個機器人模型,格式如下。
<robotname="wpb_home_gazebo"></robot>2)組件信息機器人輪子、IMU和雷達等稱為機器人的link。link與link之間的連接部分稱為joint關(guān)節(jié)。先給每個link和joint取個名字,然后就可以用link和joint來描述機器人。
3.1.2URDF模型的結(jié)構(gòu)及慣性描述
3)link寫法通過link標簽聲明一個link,再用屬性name指定部件名稱。
<linkname="base_footprint"></link>
通過以上兩行代碼可以定義好base_link,但現(xiàn)在base_link是空的,需要聲明base_link長什么樣子,通過visual子標簽就可以聲明機器人的visual形狀。link子標簽列表visual顯示形狀<geometry>(幾何形狀)3.1.2URDF模型的結(jié)構(gòu)及慣性描述4)joint寫法joint是機器人關(guān)節(jié),機器人關(guān)節(jié)用于連接機器人連桿,也就是連接機器人部件,主要寫明父子關(guān)系。案例:先建立一個雷達部件laser_link,然后將其固定到base_link,相關(guān)代碼如下。<?xmlversion="1.0"?><robotname="fishbot"><!--baselink--><linkname="base_link"><visual><originxyz="000.0"rpy="000"/><geometry><cylinderlength="0.12"radius="0.10"/></geometry></visual></link><!--laserlink--><linkname="laser_link"><visual><originxyz="000"rpy="000"/><geometry><cylinderlength="0.02"radius="0.02"/></geometry><materialname="black"><colorrgba="0.00.00.00.5"/></material></visual></link>3.1.2URDF模型的結(jié)構(gòu)及慣性描述<!--laserjoint--><jointname="laser_joint"type="fixed"><parentlink="base_link"/><childlink="laser_link"/><originxyz="000.075"/></joint>
</robot>代碼中的主要參數(shù)意義如下。joint:標簽的屬性。name:關(guān)節(jié)名稱。type:關(guān)節(jié)類型。不同類型的關(guān)節(jié)參數(shù)如下。(1)revolute:旋轉(zhuǎn)關(guān)節(jié),繞單軸旋轉(zhuǎn),旋轉(zhuǎn)角度有上限和下限,如舵機的旋轉(zhuǎn)角度為0°~180°。(2)continuous:旋轉(zhuǎn)關(guān)節(jié),可以繞單軸無限旋轉(zhuǎn),如自行車的前后輪。(3)fixed:固定關(guān)節(jié),不允許運動的特殊關(guān)節(jié)。(4)prismatic:滑動關(guān)節(jié),沿某一軸線移動的關(guān)節(jié),有位置極限。(5)planer:平面關(guān)節(jié),允許在x、y、z、roll、pitch、yaw六個方向運動。(6)floating:浮動關(guān)節(jié),允許進行平移、旋轉(zhuǎn)運動。3.1.2URDF模型的結(jié)構(gòu)及慣性描述5)具體實例在開源項目“wpr_simulation”中,URDF文件儲存在models文件夾中,以“wpb_home.model”為例,截取其中第20行至第52行代碼,具體如下。<linkname="base_link"><visual><geometry><boxsize="0.010.010.001"/></geometry><originrpy="000"xyz="000"/></visual></link>
<!--body--><linkname="body_link"><visual><geometry><meshfilename="package://wpr_simulation/meshes/wpb_home/
wpb_home_std.dae"scale="111"/></geometry><originrpy="1.5701.57"xyz="-.225-0.2250"/></visual><collision><originxyz="0.0010.065"rpy="000"/><geometry><cylinderlength="0.13"radius="0.226"/></geometry>3.1.2URDF模型的結(jié)構(gòu)及慣性描述</collision><inertial><massvalue="20"/><inertialixx="4.00538"ixy="0.0"ixz="0.0"iyy="4.00538"iyz="0.0"izz="0.51076"/></inertial></link><jointname="base_to_body"type="fixed"><parentlink="base_link"/><childlink="body_link"/><originrpy="000"xyz="000"/><!--pos--></joint>可以看到,其中有兩組<link>和一組<joint>。其中具體參數(shù)信息如下。(1)base_link。其位于代碼的第20行至第27行,其中g(shù)eometry之間的代碼為仿真里顯示的模型,這里為“<boxsize="0.010.010.001"/>”,轉(zhuǎn)換為模型就是長和寬都為0.01米、高為0.001米的長方體,可以看出這個長方體非常小,它的主要作用就是標記坐標原點。位于origin后的“rpy="000"xyz="000"”表示的是geometry中的模型位于base_link原點坐標系的位置,其中“rpy”中的“r”“p”“y”分別表示“roll”“pitch”“yaw”,即翻滾角、俯仰角和航向角,單位為弧度;“xyz”中的“x”“y”“z”分別表示模型相對于base_link坐標原點的偏移量,單位是米。3.1.2URDF模型的結(jié)構(gòu)及慣性描述(2)body_link。位于代碼的第30行至第47行,其中第31行至第36行的visual之間的代碼為三維模型的參數(shù)設(shè)置,這里的參數(shù)和base_link中作用相同,為顯示的模型,只不過這里是調(diào)用了名為“wpb_home_std.dae”的模型文件。origin后的參數(shù)同樣為模型在坐標系中偏移的參數(shù)。位于代碼的第37行至第42行的collision之間的代碼作用是對碰撞模型進行設(shè)置,和前面相同,geometry之間設(shè)置的是具體模型,這里的模型是高為0.13米、半徑為0.226米的圓柱體。origin后仍為對其位于body_link坐標系中的位置的設(shè)定,通過這項設(shè)定,可以將碰撞模型和機器人模型重合在一起,使得碰撞模型正常生效。位于代碼的第43行至第46行的inertial之間的代碼作用是對機器人部件的質(zhì)量和慣性張量進行設(shè)置,其中mass后設(shè)置的是質(zhì)量,單位為千克;inertial后設(shè)置的是機器人部件的慣性張量,其具體數(shù)學(xué)描述如式(3-1)所示。零件的形狀尺寸和質(zhì)量都會對其產(chǎn)生影響,可以根據(jù)零件的形狀查找相應(yīng)的公式進行計算。(3-1)3.1.2URDF模型的結(jié)構(gòu)及慣性描述(3)base_to_body。位于代碼的第48行至第52行,在第48行對其名稱及類型進行了設(shè)定,其中parentlink為父link,通常是靠近根關(guān)節(jié)的link;childlink為子link,是靠近末端關(guān)節(jié)的link;origin后設(shè)置的是子關(guān)節(jié)坐標系在父關(guān)節(jié)坐標系中的位置和姿態(tài)。3.1.3常用的慣性參數(shù)機器人的零件通常具有多個異構(gòu)特征,想要精確地計算其慣性張量比較復(fù)雜,因此通常會對其進行抽象處理,去除其異構(gòu)特點,將其表述為單個形狀,如圓柱體、圓錐體、球體和長方體。1)圓柱體一個半徑為r、高為h、質(zhì)量為m的實心圓柱體,其慣性張量如式(3-2)所示。(3-2)3.1.3常用的慣性參數(shù)2)圓錐體一個半徑為r、高為h、質(zhì)量為m的實心圓錐體,其慣性張量如式(3-3)所示。(3-3)3)球體一個半徑為r、質(zhì)量為m的實心球體,其慣性張量如式(3-4)所示。(3-4)3.1.3常用的慣性參數(shù)4)長方體一個長為d、寬為w、高為h、質(zhì)量為m的實心長方體,其慣性張量如式(3-5)所示。(3-5)3.2在URDF模型內(nèi)對各傳感器進行描述
3.2.1運動底盤各傳感器參數(shù)繼續(xù)看回“wpb_home.model”文件,代碼的第229行至第238行描述了一個全向移動底盤在仿真軟件Gazebo中的參數(shù),具體代碼如下。<gazebo><pluginname="base_controller"filename="libwpr_plugin.so"><publishOdometryTf>true</publishOdometryTf><commandTopic>cmd_vel</commandTopic><odometryTopic>odom</odometryTopic><odometryFrame>odom</odometryFrame><odometryRate>20.0</odometryRate><robotBaseFrame>base_footprint</robotBaseFrame></plugin></gazebo>里面的具體參數(shù)如下。(1)pluginname:運動底盤插件的名稱,filename為調(diào)用的空文件名稱。(2)publishOdometryTf:設(shè)置是否發(fā)布里程計數(shù)據(jù)。(3)commandTopic:控制底盤移動的ROS主題名稱,這里為cmd_vel,這個主題會發(fā)布速度信息。(4)odometryTopic:發(fā)布里程計數(shù)據(jù)的主題名稱。(5)odometryFrame:里程計數(shù)據(jù)中里程計坐標系的名稱。(6)odometryRate:里程計發(fā)布主題的發(fā)布頻率,這里為20赫茲。(7)robotBaseFrame:里程計數(shù)據(jù)中機器人坐標系的名稱。3.2.2激光雷達參數(shù)此模型文件中包含激光雷達的描述,型號為rplidarA2,位于代碼的第241行至第271行,具體代碼如下。<gazeboreference="laser"><sensortype="ray"name="rplidar_sensor"><pose>000.06000</pose><visualize>true</visualize><update_rate>10</update_rate><ray><scan><horizontal><samples>360</samples><resolution>1</resolution><min_angle>-3.14159265</min_angle><max_angle>3.14159265</max_angle></horizontal></scan><range><min>0.24</min><max>10.0</max><resolution>0.01</resolution></range><noise><type>gaussian</type><mean>0.0</mean><stddev>0.01</stddev></noise></ray><pluginname="rplidar_ros_controller"filename="libgazebo_ros_laser.so"><topicName>scan</topicName><frameName>laser</frameName></plugin></sensor></gazebo>3.2.2激光雷達參數(shù)里面的具體參數(shù)如下。(1)gazeboreference:傳感器在模型中的位置,這里將其與link“l(fā)aser”綁定,我們可以在代碼的第127行找到此link。(2)sensor:type是設(shè)定傳感器的探測類型,name是對傳感器進行命名。(3)pose:傳感器相對所綁定link的坐標系的偏移量。(4)visualize:設(shè)置激光射線是否可見。(5)update_rate:數(shù)據(jù)輸出頻率,這里設(shè)置為10赫茲。(6)horizontal:激光雷達掃描具體參數(shù),samples為掃描度數(shù)范圍,這里為360°;resolution為1°范圍內(nèi)射出的激光數(shù)量;min_angle和max_angle分別為激光初射及終止角度,為弧度制。(7)range:激光雷達掃描范圍,單位為米;resolution為激光測距精度,單位是米。(8)noise:人為設(shè)置噪聲,用于模擬真實環(huán)境。(9)plugin:name為插件的名稱;filename為調(diào)用的庫文件名稱。(10)topicName:仿真數(shù)據(jù)發(fā)布的主題名稱。(11)frameName:仿真數(shù)據(jù)中的坐標系名稱。3.2.3深度相機參數(shù)此模型文件中包含深度相機的描述,型號為Kinectv2,位于代碼的第274行至第372行,其分為三個部分:深度圖像數(shù)據(jù)、高清彩色圖像數(shù)據(jù)和半高清彩色圖像數(shù)據(jù)。1)深度圖像數(shù)據(jù)深度圖像數(shù)據(jù)位于代碼的第274行至第314行,具體內(nèi)容如下。<gazeboreference="kinect2_head_frame"><sensortype="depth"name="kinect2_depth_sensor"><always_on>true</always_on><update_rate>10.0</update_rate><cameraname="kinect2_depth_sensor"><horizontal_fov>1.221730456</horizontal_fov><image><width>512</width><height>424</height><format>B8G8R8</format></image><clip><near>0.5</near><far>6.0</far></clip><noise><type>gaussian</type><mean>0.1</mean><stddev>0.07</stddev></noise>3.2.3深度相機參數(shù)</camera><pluginname="kinect2_depth_control"filename="libgazebo_ros_openni_kinect.so"><cameraName>kinect2/sd</cameraName><alwaysOn>true</alwaysOn><updateRate>20.0</updateRate><imageTopicName>image_ir_rect</imageTopicName><depthImageTopicName>image_depth_rect</depthImageTopicName><pointCloudTopicName>points</pointCloudTopicName><cameraInfoTopicName>depth_camera_info</cameraInfoTopicName><frameName>kinect2_ir_optical_frame</frameName><pointCloudCutoff>0.5</pointCloudCutoff><pointCloudCutoffMax>6.0</pointCloudCutoffMax><baseline>0.1</baseline><distortionK1>0.0</distortionK1><distortionK2>0.0</distortionK2><distortionK3>0.0</distortionK3><distortionT1>0.0</distortionT1><distortionT2>0.0</distortionT2></plugin></sensor></gazebo>3.2.3深度相機參數(shù)里面的具體參數(shù)如下。(1)gazeboreference:傳感器在模型中的位置,這里將其與link“kinect2_head_frame”綁定,我們可以在代碼的第157行找到此link。(2)sensor:傳感器類型及命名。(3)always_on:是否隨著模型加載自動輸出數(shù)據(jù)。(4)update_rate:仿真數(shù)據(jù)輸出頻率,這里設(shè)置為10赫茲。(5)cameraname:傳感器在URDF模型里的名稱。(6)horizontal_fov:相機的水平視角,單位為弧度。(7)image:包括三個參數(shù),描述深度圖像尺寸和數(shù)據(jù)格式。(8)clip:成像范圍,只有在參數(shù)之間的物體才會成像。(9)noise:模擬真實場景添加的動態(tài)噪聲。(10)plugin:name為插件名稱;filename為調(diào)用的庫文件名稱。(11)cameraName:相機發(fā)布的主題的名稱。(12)imageTopicName:深度圖像轉(zhuǎn)換成8位灰度圖像后發(fā)布的主題名稱。(13)depthImageTopicName:發(fā)布的深度圖像原始數(shù)據(jù)主題名稱。(14)pointCloudTopicName:發(fā)布的三維點云主題名稱。(15)cameraInfoTopicName:發(fā)布的相機參數(shù)信息主題名稱。(16)frameName:深度圖像和三維點云中的坐標系名稱。(17)pointCloudCutoff:三維點云采樣范圍。(18)baseline:三維成像的基線距離,單位為米。(19)distortion:三維成像的畸變參數(shù)。3.2.3深度相機參數(shù)2)高清彩色圖像數(shù)據(jù)高清彩色圖像數(shù)據(jù)位于代碼的第315行至第345行,具體內(nèi)容如下。<gazeboreference="kinect2_rgb_optical_frame"><sensortype="camera"name="kinect2_rgb_sensor"><always_on>true</always_on><update_rate>20.0</update_rate><cameraname="kinect2_rgb_sensor"><horizontal_fov>1.221730456</horizontal_fov><image><width>1920</width><height>1080</height><format>B8G8R8</format></image><clip><near>0.2</near><far>10.0</far></clip><noise><type>gaussian</type><mean>0.0</mean><stddev>0.007</stddev></noise>3.2.3深度相機參數(shù)<type>gaussian</type><mean>0.0</mean><stddev>0.007</stddev></noise></camera><pluginname="kinect2_rgb_controller"filename="libgazebo_ros_camera.so"><alwaysOn>true</alwaysOn><update_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 大班冬季交通安全課件
- 行政事業(yè)單位合同
- 項目推進時間表與工作計劃書
- 泥工裝修詳細合同
- 大型體育賽事組織協(xié)議
- 能源互聯(lián)網(wǎng)項目戰(zhàn)略合作協(xié)議
- 農(nóng)業(yè)機械維修技術(shù)作業(yè)指導(dǎo)書
- 季度運營策略及任務(wù)部署會議紀要
- 設(shè)計行業(yè)設(shè)計方案修改免責(zé)協(xié)議
- 企業(yè)互聯(lián)網(wǎng)應(yīng)用服務(wù)推廣合作協(xié)議
- 深靜脈血栓形成的診斷和治療指南(第三版)解讀資料講解課件
- 人教版小學(xué)一年級美術(shù)上冊全冊課件
- 統(tǒng)編人教部編版道德與法治四年級下冊教材解讀教師教材培訓(xùn)課件
- 履約專項檢查表
- 人教版數(shù)學(xué)四年級下冊第一單元測試卷
- 模具保養(yǎng)記錄表
- 2023國家自然科學(xué)基金申請書
- 原始狩獵圖 (2)
- 《色彩構(gòu)成——色彩基礎(chǔ)知識》PPT課件
- 鍍層的結(jié)合力
- 霍尼韋爾DDC編程軟件(CARE)簡介
評論
0/150
提交評論