機(jī)器人操作系統(tǒng)ROS應(yīng)用實踐 課件 第1-3章 機(jī)器人系統(tǒng)組成、將機(jī)器人連接到ROS、建立機(jī)器人系統(tǒng)模型_第1頁
機(jī)器人操作系統(tǒng)ROS應(yīng)用實踐 課件 第1-3章 機(jī)器人系統(tǒng)組成、將機(jī)器人連接到ROS、建立機(jī)器人系統(tǒng)模型_第2頁
機(jī)器人操作系統(tǒng)ROS應(yīng)用實踐 課件 第1-3章 機(jī)器人系統(tǒng)組成、將機(jī)器人連接到ROS、建立機(jī)器人系統(tǒng)模型_第3頁
機(jī)器人操作系統(tǒng)ROS應(yīng)用實踐 課件 第1-3章 機(jī)器人系統(tǒng)組成、將機(jī)器人連接到ROS、建立機(jī)器人系統(tǒng)模型_第4頁
機(jī)器人操作系統(tǒng)ROS應(yīng)用實踐 課件 第1-3章 機(jī)器人系統(tǒng)組成、將機(jī)器人連接到ROS、建立機(jī)器人系統(tǒng)模型_第5頁
已閱讀5頁,還剩316頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第一章機(jī)器人系統(tǒng)組成機(jī)器人操作系統(tǒng)ROS應(yīng)用實踐目錄content移動底盤和機(jī)械臂1.1傳感器1.3本章小結(jié)1.5機(jī)器人的系統(tǒng)硬件組成1.2機(jī)器人系統(tǒng)的軟件組成1.41.1移動底盤和機(jī)械臂對于移動機(jī)器人(MobileRobot)來說,最基本的部件就是底盤。大到無人駕駛汽車,小到簡易智能小車,都有不同的底盤驅(qū)動方式。所謂底盤驅(qū)動方式,簡而言之,就是輪子如何通過布局和速度合成,讓移動機(jī)器人靈活地運(yùn)動。按照每個輪子的速度輸出是否受約束,即每個輪子是否可以獨(dú)立地輸出速度而不考慮其他輪子輸出速度的約束,底盤驅(qū)動方式可以分為約束型和非完整約束型,如圖所示。1移動底盤1.1移動底盤和機(jī)械臂1移動底盤差分驅(qū)動最常見的形式,差分驅(qū)動是由左右兩個平行的驅(qū)動輪構(gòu)成的,這兩個輪子都具有動力輸出。差分驅(qū)動底盤上通常還會安裝萬向輪(從動輪,不提供動力)用于支撐重量。機(jī)器人依靠左輪和右輪的速度差來運(yùn)動,包括直行、轉(zhuǎn)彎等,這也正是差分驅(qū)動的由來。差分驅(qū)動通過控制左右輪產(chǎn)生不同的速度差,讓機(jī)器人以不同的線速度和角速度運(yùn)動。有名的turtlebot機(jī)器人、pioneer先鋒機(jī)器人、家庭掃地機(jī)器人均采用這種驅(qū)動方式。1.1移動底盤和機(jī)械臂1移動底盤阿克曼驅(qū)動絕大部分的汽車底盤采用阿克曼驅(qū)動,即采用前輪轉(zhuǎn)向、后輪驅(qū)動的方式。阿克曼驅(qū)動的兩個后輪提供動力輸出,通過一個差速器進(jìn)行速度分配,以產(chǎn)生不同轉(zhuǎn)彎半徑的速度差,前輪由方向盤控制轉(zhuǎn)彎。因此,阿克曼驅(qū)動的關(guān)鍵就在于后輪的差速器。汽車上用的差速器采用一種特殊的齒輪組合結(jié)構(gòu),它能夠根據(jù)車體實時的轉(zhuǎn)彎半徑,將發(fā)動機(jī)的輸出速度自動分配到兩個輪子上。而在移動機(jī)器人上,由于驅(qū)動輪一般直接連接電動機(jī),所以用電子調(diào)速器代替差速器。1.1移動底盤和機(jī)械臂1移動底盤同步驅(qū)動最常見的例子就是履帶車,同步驅(qū)動是指同一側(cè)的前輪和后輪的速度是一模一樣的,形式上與差分驅(qū)動形式相同。一些沒有履帶的四輪底盤,也可以采用同步驅(qū)動方式,以增加驅(qū)動能力,使載重更大、行駛更平穩(wěn)。不過相對于差分驅(qū)動底盤而言,輪式里程計精度相對較低,因為采用同步驅(qū)動的底盤在平坦的路面上轉(zhuǎn)彎時,車體會產(chǎn)生不同程度的顫動,所以同步驅(qū)動底盤結(jié)構(gòu)不利于轉(zhuǎn)彎。1.1移動底盤和機(jī)械臂1移動底盤全向驅(qū)動底盤的運(yùn)動方向不受約束,可以在平面內(nèi)做出任意方向的“平移+自轉(zhuǎn)”動作。底盤既可以直著走,又可以橫著走,不需要轉(zhuǎn)動車身方向,就可以朝任意方向運(yùn)動。全向驅(qū)動方式可以提升機(jī)器人的運(yùn)動效率,尤其在大型貨運(yùn)倉庫中,如果物流搬運(yùn)小車采用全向驅(qū)動方式運(yùn)動,能大大節(jié)省時間。全向驅(qū)動底盤的輪子由輪轂和輥子構(gòu)成,輪轂是整個輪子的主體支架,輥子沒有連接動力源,可以自由滾動,安裝在輪轂周圍。1.1移動底盤和機(jī)械臂1移動底盤全向驅(qū)動麥克納姆輪是一種常見的全向驅(qū)動結(jié)構(gòu),其輪轂與輥子軸線的夾角為45°,有互為鏡像的左輪和右輪,采用四輪底盤結(jié)構(gòu),常用于平坦路面,不適合非平坦路面的場合應(yīng)用。本書使用的實驗機(jī)器人采用差分驅(qū)動底盤,其結(jié)構(gòu)示意圖如圖1.2所示。1.1移動底盤和機(jī)械臂1移動底盤全向驅(qū)動移動底盤的主要參數(shù)如表所示。1.1移動底盤和機(jī)械臂1移動底盤全向驅(qū)動兩輪差速底盤運(yùn)動學(xué)分析如圖所示,兩輪差速底盤的兩個驅(qū)動輪位于底盤左右兩側(cè),通過給定不同速度來實現(xiàn)轉(zhuǎn)向控制,一般還會加一到兩個輔助的萬向輪作為支撐輪。1.1移動底盤和機(jī)械臂1移動底盤全向驅(qū)動兩輪差速底盤運(yùn)動學(xué)分析如圖所示,車體輪子半徑為r,兩輪到車體中心的距離為d,左右輪的間距D=2d,左右輪角速度分別為WL和WR,左右輪速度分別為VL和VR;設(shè)車體速度為V,角速度為ω(逆時針旋轉(zhuǎn)為正方向),轉(zhuǎn)彎半徑為R。1.1移動底盤和機(jī)械臂1移動底盤全向驅(qū)動兩輪差速底盤運(yùn)動學(xué)分析由此可得兩輪差速底盤的運(yùn)動學(xué)方程如下:左輪速度:VL=ω(R?d)右輪速度:VR=ω(R+d)車體速度:V=ωR=ω(R?d+R+d)/2=(VL+VR)/2=(rWL+rWR)/2車體角速度:ω=VL/(R?d)=VR/(R+d)則有:R=(VR+VL)d/(VR?VL),R+d=2VRd/(VR?VL)1.1移動底盤和機(jī)械臂1移動底盤全向驅(qū)動兩輪差速底盤運(yùn)動學(xué)分析進(jìn)一步可以得到:ω=VR/(R+d)=(VR?VL)/2d=(?VL+VR)/2d=(?rWL+rWR)/2d將車體速度和角速度寫成矩陣的形式,如下:1.1移動底盤和機(jī)械臂1移動底盤全向驅(qū)動兩輪差速底盤的運(yùn)動模型為了進(jìn)行機(jī)器人的軌跡控制,需要知道機(jī)器人的運(yùn)動模型。兩輪移動機(jī)器人的軌跡可以看成由多段圓弧或者直線(旋轉(zhuǎn)速度為0時)組成。采用兩輪差速底盤結(jié)構(gòu)的移動機(jī)器人不能橫向移動,只能前進(jìn)和旋轉(zhuǎn)。1.1移動底盤和機(jī)械臂1移動底盤全向驅(qū)動兩輪差速底盤的運(yùn)動模型t時刻時,定義機(jī)器人車體速度和角速度為

。如圖所示,

為t時刻時機(jī)器人坐標(biāo)系xrobot軸與世界坐標(biāo)系x軸的夾角。從t時刻到t+1時刻,機(jī)器人的運(yùn)動距離很短(編碼器采樣周期一般是ms級),因此可以將兩相鄰點(diǎn)之間的運(yùn)動軌跡看成直線,即沿機(jī)器人坐標(biāo)系xrobot軸移動了

。1.1移動底盤和機(jī)械臂1移動底盤全向驅(qū)動兩輪差速底盤的運(yùn)動模型將該段距離分別投影在世界坐標(biāo)系x軸和y軸上,得到t+1時刻相對于t時刻,機(jī)器人在世界坐標(biāo)系中移動的位移

,以及機(jī)器人的旋轉(zhuǎn)角度

:以此類推,如果想推算一段時間內(nèi)機(jī)器人的運(yùn)動軌跡,需要將這段時間的增量累計求和。1.1移動底盤和機(jī)械臂2機(jī)械臂機(jī)械臂(ManipulatorRobot)是一種典型的工業(yè)機(jī)器人,我們可以經(jīng)??吹剿鼈児ぷ鞯恼掌蜾浵?,例如,它們可在工廠中完成裝配、焊接、抓取等任務(wù),或在手術(shù)室中進(jìn)行手術(shù)操作。世界上第一個機(jī)械臂誕生于1959年,是一個用于壓鑄的五軸液壓驅(qū)動機(jī)械臂,手臂的控制由一臺計算機(jī)完成。UNIMATE和VERSTRAN作為工業(yè)機(jī)器人產(chǎn)品的實用機(jī)型(示教再現(xiàn)),是1962年推出的。此后,機(jī)械臂在工業(yè)應(yīng)用中獲得了巨大的成功,在全世界多個行業(yè)中進(jìn)行作業(yè)。人們現(xiàn)在買的很多日常用品可能都是由機(jī)械臂進(jìn)行裝配、包裝或操作過的。與移動機(jī)器人不同,機(jī)械臂不能在環(huán)境中任意運(yùn)動,它們有一個固定的基座,所以它們的工作空間有限。1.1移動底盤和機(jī)械臂2機(jī)械臂通常采用自由度(DegreeOfFreedom,DOF)來描述機(jī)械臂的運(yùn)動關(guān)節(jié)個數(shù)。目前,最常見的是6DOF機(jī)械臂,如圖所示,其由一系列剛性連桿和轉(zhuǎn)動關(guān)節(jié)組成,屬于串聯(lián)式連桿機(jī)械臂。1.1移動底盤和機(jī)械臂2機(jī)械臂如圖是4DOFSCARA(SelectiveComplianceAssemblyRobotArm,選擇柔性裝配機(jī)器人手臂)機(jī)械臂,其在豎直方向是剛性的,而在水平面上具有柔性,因此它非常適合平面作業(yè)任務(wù),如電子電路板的裝配。1.1移動底盤和機(jī)械臂2機(jī)械臂如圖是6DOF協(xié)作機(jī)械臂,顧名思義,就是機(jī)械臂與人可以在生產(chǎn)線上協(xié)同工作,充分發(fā)揮機(jī)械臂的效率及人的智能。這種機(jī)械臂不僅性價比高,而且安全方便,能夠極大地促進(jìn)制造企業(yè)的發(fā)展。1.1移動底盤和機(jī)械臂2機(jī)械臂如圖是一種7DOF柔性機(jī)械臂,由于比6DOF機(jī)械臂多了一個關(guān)節(jié),它在工作空間中具有更好的柔性和運(yùn)動靈活性。1.1移動底盤和機(jī)械臂2機(jī)械臂如圖是直角坐標(biāo)機(jī)械臂,它沿著軌道有三個運(yùn)動自由度,具有非常大的工作空間。1.1移動底盤和機(jī)械臂2機(jī)械臂如圖是一個并聯(lián)機(jī)械臂,所有連桿都并行地與末端工具相連,機(jī)械臂關(guān)節(jié)的所有電機(jī)都安裝在基座上,結(jié)構(gòu)剛性強(qiáng),而且并聯(lián)結(jié)構(gòu)比串聯(lián)結(jié)構(gòu)具有更好的運(yùn)動速度優(yōu)勢。1.1移動底盤和機(jī)械臂2機(jī)械臂機(jī)械臂要想工作,除需要軌跡規(guī)劃和運(yùn)動控制之外,還需要在它的末端加上執(zhí)行器或工具來操作作業(yè)對象。末端執(zhí)行器可以是一個簡單的兩指平行夾持器,或者是吸盤,以及可彎曲的氣動夾爪,還可以是一個復(fù)雜的具有多個可彎曲手指關(guān)節(jié)的仿人機(jī)械手,如圖所示。1.1移動底盤和機(jī)械臂2機(jī)械臂本書使用的實驗機(jī)器人是一個移動機(jī)械臂,也叫復(fù)合機(jī)器人,即移動底盤上安裝的機(jī)械臂,該機(jī)械臂為一個桌面型4DOF機(jī)械臂,結(jié)構(gòu)如圖所示。1.1移動底盤和機(jī)械臂2機(jī)械臂機(jī)械臂主要參數(shù)如表所示。1.2機(jī)器人系統(tǒng)的硬件組成從控制的角度來看,機(jī)器人系統(tǒng)硬件可以分成四大部分:執(zhí)行機(jī)構(gòu)驅(qū)動系統(tǒng)傳感系統(tǒng)控制系統(tǒng)1.2機(jī)器人系統(tǒng)的硬件組成各部分之間的控制關(guān)系如圖所示。1.2機(jī)器人系統(tǒng)的硬件組成1控制系統(tǒng)控制系統(tǒng)由計算平臺和運(yùn)動控制器組成。計算平臺是計算機(jī)系統(tǒng)硬件與軟件的設(shè)計和開發(fā)的基礎(chǔ),決定了計算機(jī)系統(tǒng)的性能。其中,硬件的基礎(chǔ)是中央處理器(CPU),軟件的基礎(chǔ)是操作系統(tǒng)。目前,具有環(huán)境感知能力的移動底盤通常有一個運(yùn)行ROS的計算主機(jī)。1.2機(jī)器人系統(tǒng)的硬件組成1控制系統(tǒng)根據(jù)芯片的不同,計算主機(jī)一般有以下幾種:MicroProcessingUnit基于ARMCortex-A系列的MPU(MicroProcessingUnit):屬于中低端,如樹莓派(RaspberryPi)、香橙派(OrangePi)、香蕉派(BananaPi)等,性價比高。NeuralProcessingUnit基于集成ARM、GPU、NPU(NeuralProcessingUnit)的瑞芯微RK3399系列芯片:屬于中高端,性價比高。這類計算主機(jī)還有基于華為海思等的芯片,如Atlas

200等。1.2機(jī)器人系統(tǒng)的硬件組成1控制系統(tǒng)根據(jù)芯片的不同,計算主機(jī)一般有以下幾種:芯片基于NvidiaJetson-TX2或Xavier系列的芯片:屬于高端產(chǎn)品,性能強(qiáng)大,同時配置了英偉達(dá)自身的GPU。CPU基于X86架構(gòu)的CPU:屬于高端產(chǎn)品,性能強(qiáng)大,如迷你PC、工控機(jī)或筆記本計算機(jī),以及進(jìn)一步集成GPU和VPU(VideoProcessingUnit)的AINUC系列迷你計算機(jī)。1.2機(jī)器人系統(tǒng)的硬件組成1控制系統(tǒng)計算平臺實現(xiàn)機(jī)器人系統(tǒng)任務(wù)及信息的處理,ROS計算主機(jī)的選擇需要考慮程序開發(fā)、安裝和功耗等問題。上述幾類計算平臺都支持UbuntuLinux操作系統(tǒng),可以部署ROS。其中高端產(chǎn)品適合用來做深度學(xué)習(xí)和計算機(jī)視覺方面的應(yīng)用。本書使用的Spark實驗機(jī)器人采用基于X86架構(gòu)的CPU,并集成GPU和VPU的AINUC系列迷你計算機(jī)作為智能計算平臺,可以滿足絕大部分移動平臺開發(fā)需要。1.2機(jī)器人系統(tǒng)的硬件組成1控制系統(tǒng)運(yùn)動控制(MotionControl)是指將預(yù)定的控制方案、規(guī)劃指令轉(zhuǎn)變成期望的機(jī)械運(yùn)動,實現(xiàn)機(jī)械運(yùn)動精確的位置控制、速度控制、加速度控制、轉(zhuǎn)矩或力控制。運(yùn)動控制器控制電機(jī)的運(yùn)行方式,在機(jī)器人和數(shù)控機(jī)床等領(lǐng)域廣泛使用。目前,移動底盤和機(jī)械臂的運(yùn)動控制器廣泛使用DSP(DigitalSignalProcessing,數(shù)字信號處理)或者基于ARMCortex-M內(nèi)核的32位單片機(jī),具有高性能、低成本、低功耗的特點(diǎn)。運(yùn)動控制器需要完成機(jī)器人的關(guān)節(jié)控制(電流/速度/位置反饋)、人機(jī)交互、系統(tǒng)監(jiān)督、關(guān)節(jié)電機(jī)運(yùn)動控制算法計算等功能。1.2機(jī)器人系統(tǒng)的硬件組成2驅(qū)動系統(tǒng)機(jī)器人運(yùn)動時需要對關(guān)節(jié)控制信號進(jìn)行功率變換,以驅(qū)動關(guān)節(jié)運(yùn)動,實現(xiàn)機(jī)器人的各種動作。機(jī)器人的驅(qū)動系統(tǒng)主要分為電氣驅(qū)動、液壓驅(qū)動和氣壓驅(qū)動。電氣驅(qū)動是利用各種電機(jī)產(chǎn)生力和力矩,直接或經(jīng)過機(jī)械傳動去驅(qū)動執(zhí)行機(jī)構(gòu),以獲得機(jī)器人的運(yùn)動。因為省去了中間能量轉(zhuǎn)換的過程,所以電氣驅(qū)動比液壓及氣壓驅(qū)動效率高,使用方便且成本低。1.2機(jī)器人系統(tǒng)的硬件組成2驅(qū)動系統(tǒng)機(jī)器人運(yùn)動時需要對關(guān)節(jié)控制信號進(jìn)行功率變換,以驅(qū)動關(guān)節(jié)運(yùn)動,實現(xiàn)機(jī)器人的各種動作。機(jī)器人的驅(qū)動系統(tǒng)主要分為電氣驅(qū)動、液壓驅(qū)動和氣壓驅(qū)動。液壓驅(qū)動的優(yōu)點(diǎn)是能夠以較小的驅(qū)動輸出獲得較大的驅(qū)動力或力矩,即獲得較大的功率重量比。一般將驅(qū)動油缸直接做成關(guān)節(jié)的一部分,結(jié)構(gòu)簡單緊湊,剛性好。液壓驅(qū)動方式大多用于對輸出力要求較高而對運(yùn)動速度要求較低的場合,如無人駕駛。1.2機(jī)器人系統(tǒng)的硬件組成2驅(qū)動系統(tǒng)機(jī)器人運(yùn)動時需要對關(guān)節(jié)控制信號進(jìn)行功率變換,以驅(qū)動關(guān)節(jié)運(yùn)動,實現(xiàn)機(jī)器人的各種動作。機(jī)器人的驅(qū)動系統(tǒng)主要分為電氣驅(qū)動、液壓驅(qū)動和氣壓驅(qū)動。氣壓驅(qū)動一般用于機(jī)械臂末端執(zhí)行器,其通過對負(fù)壓和正壓的控制,驅(qū)動機(jī)械臂進(jìn)行物體取放。由于空氣的可壓縮性,氣壓驅(qū)動系統(tǒng)具有較好的緩沖作用。氣壓驅(qū)動很難保證較高的定位精度,使用時會產(chǎn)生噪聲。同時,因為空氣中含有水分,所以氣壓驅(qū)動系統(tǒng)易銹蝕,在低溫下易結(jié)冰,這些因素限制了氣壓驅(qū)動系統(tǒng)在機(jī)器人系統(tǒng)中的應(yīng)用。1.2機(jī)器人系統(tǒng)的硬件組成3執(zhí)行系統(tǒng)機(jī)器人執(zhí)行機(jī)構(gòu)是直接面向工作對象的機(jī)械裝置,相當(dāng)于人的手和腳。根據(jù)不同的工作對象,執(zhí)行機(jī)構(gòu)也各不相同。機(jī)械臂一般采用伺服電機(jī)作為運(yùn)動執(zhí)行機(jī)構(gòu),組成各個關(guān)節(jié);移動機(jī)器人一般采用直流電機(jī)作為移動執(zhí)行機(jī)構(gòu),在任務(wù)場景中運(yùn)動。1.2機(jī)器人系統(tǒng)的硬件組成4傳感系統(tǒng)傳感器通常由敏感元件、轉(zhuǎn)換元件和轉(zhuǎn)換電路組成。敏感元件是能直接感受或響應(yīng)被測量的部分轉(zhuǎn)換元件是將非電量轉(zhuǎn)換成電參量的部分轉(zhuǎn)換電路則是將轉(zhuǎn)換元件輸出的電信號轉(zhuǎn)換成便于處理、顯示、記錄和傳輸?shù)牟糠帧?.2機(jī)器人系統(tǒng)的硬件組成4傳感系統(tǒng)在機(jī)器人系統(tǒng)中,傳感器具有十分重要的作用,可完成信號的采集和反饋。傳感系統(tǒng)包括內(nèi)部傳感系統(tǒng)和外部傳感系統(tǒng)。內(nèi)部傳感系統(tǒng)內(nèi)部傳感系統(tǒng)包括里程計、陀螺儀、加速度計等,可以通過自身信號反饋檢測位姿狀態(tài)。外部傳感系統(tǒng)外部傳感系統(tǒng)包括相機(jī)、紅外傳感器、麥克風(fēng)等,可以檢測機(jī)器人所處的外部環(huán)境信息、障礙物信息,并與內(nèi)部傳感系統(tǒng)進(jìn)行數(shù)據(jù)融合,優(yōu)化位姿估計。1.2機(jī)器人系統(tǒng)的硬件組成4傳感系統(tǒng)此外,機(jī)器人的電源系統(tǒng)為機(jī)器人的控制系統(tǒng)、執(zhí)行機(jī)構(gòu)、傳感系統(tǒng)等提供能源。機(jī)器人各個組成部分采用不同的電源電壓等級,如48V、24V、12V、5V或3.3V等。為保證機(jī)器人系統(tǒng)的穩(wěn)定性,還需要對電源進(jìn)行保護(hù)、濾波等處理,所以機(jī)器人系統(tǒng)都有一個電源管理子系統(tǒng),提供和維護(hù)機(jī)器人系統(tǒng)各部分的電源需求。1.3傳感器1編碼器編碼器是對機(jī)器人關(guān)節(jié)電機(jī)轉(zhuǎn)速進(jìn)行測量反饋的重要部件,常見類型包括光電編碼器和磁性編碼器。編碼器通常采用正交編碼形式進(jìn)行信號輸出,即AB兩相信號正交輸出,另外,電機(jī)轉(zhuǎn)過一圈時還會輸出Z相脈沖信號。光電編碼器安裝在電機(jī)軸、關(guān)節(jié)或操縱機(jī)構(gòu)上,用于測量角速度和位置。光電編碼器的照明源、固定光柵與軸一起旋轉(zhuǎn)帶動細(xì)光柵的轉(zhuǎn)盤。當(dāng)轉(zhuǎn)盤轉(zhuǎn)動時,根據(jù)運(yùn)動光柵的排列,穿透光檢測器的光量發(fā)生變化,得到正弦波,將其與閾值進(jìn)行比較,變換成離散的方波脈沖。編碼器的分辨率以每轉(zhuǎn)周期數(shù)(CPR)度量,典型的編碼器分辨率是2000CPR,目前,已有10000CPR的光電編碼器。1.3傳感器1編碼器在移動機(jī)器人系統(tǒng)中,通常使用正交光電編碼器,如圖所示。通過觀測到的信道A和信道B的脈沖序列之間的相位關(guān)系,以及觀察哪個方波首先產(chǎn)生一個上升邊沿,就可以辨認(rèn)轉(zhuǎn)動方向。四個可檢測的不同狀態(tài),可使其分辨率可達(dá)到原來的四倍。因此,一個2000CPR的正交編碼器可以產(chǎn)生8000個計數(shù)。1.3傳感器2慣性測量單元慣性測量單元(InertialMeasurementUnit,IMU)是測量物體三軸姿態(tài)角(或角速度)及加速度的裝置。一般地,一個IMU包含了三個單軸的加速度計和三個單軸的陀螺儀,加速度計檢測物體的加速度信號,而陀螺儀檢測角速度信號。IMU測量物體在三維空間中的角速度和加速度,并以此解算出物體的姿態(tài)。IMU在移動機(jī)器人和飛行器導(dǎo)航中有著很重要的應(yīng)用價值。在移動機(jī)器人系統(tǒng)中,IMU通常被用來和輪式里程計進(jìn)行融合,或者直接參與即時定位與地圖構(gòu)建(SimultaneousLocalizationAndMapping,SLAM)。1.3傳感器2慣性測量單元IMU在制造過程中,加工精度會導(dǎo)致其實際的坐標(biāo)軸與理想的坐標(biāo)軸之間有一定的偏差;同時,三軸加速度計、三軸陀螺儀、三軸磁力計的原始值會與真實值之間有一個固定的偏差。這就要求在使用IMU的原始測量數(shù)據(jù)時,需要對數(shù)據(jù)進(jìn)行誤差校準(zhǔn),來消除軸偏差、固定零點(diǎn)偏差、尺度偏差等,如圖所示。1.3傳感器2慣性測量單元其中,加速度計原始測量值向量acc加上零偏補(bǔ)償Ba和白噪聲補(bǔ)償Na后,再用尺度矯正矩陣Sa和軸偏差矯正矩陣Ta變換后,就可以得到校準(zhǔn)后的三軸加速度向量acc_calib。1.3傳感器2慣性測量單元通過類似的方法可以得到校準(zhǔn)后的三軸角速度w_calib和三軸磁力mag_calib,最后還要將磁力計坐標(biāo)系下的磁力數(shù)據(jù)mag_calib變換到加速度坐標(biāo)系下,變換得到的mag_calib2將用于加速度計/磁力計的數(shù)據(jù)融合。1.3傳感器2慣性測量單元校準(zhǔn)過程就是求解誤差校準(zhǔn)數(shù)學(xué)模型等式右邊的各個校準(zhǔn)系數(shù)的過程。求解校準(zhǔn)系數(shù)一般采用最小二乘法或矩陣求逆來實現(xiàn)。IMU數(shù)據(jù)校準(zhǔn)完成后,就可以根據(jù)IMU各軸數(shù)據(jù)進(jìn)行數(shù)據(jù)融合,得到三軸姿態(tài)角(roll、pitch、yaw)。姿態(tài)融合算法有很多種,如擴(kuò)展卡爾曼濾波法。因此,在移動機(jī)器人系統(tǒng)中,使用IMU實現(xiàn)里程計融合或SLAM,需要完成底層的IMU誤差校準(zhǔn)和姿態(tài)角融合兩個過程。1.3傳感器2慣性測量單元如圖是移動機(jī)器人位置、速度、加速度測量原理圖。IMU對陀螺儀和加速度計兩者的測量誤差非常敏感。例如,陀螺儀的漂移會不可避免地影響車輛方向的估計;為獲得位置,加速度計的數(shù)據(jù)被積分兩次,任何的殘留重力向量都會造成位置上的估計誤差。在移動機(jī)器人應(yīng)用中,為消除漂移,需要以某些外部測量做參考,常用相機(jī)或GPS做參考。例如,使用相機(jī)獲取環(huán)境中的特定特征或者位置時,就可以消除漂移誤差。類似地,通過GPS信號,也可以糾正移動機(jī)器人的姿態(tài)估計。1.3傳感器2慣性測量單元本書使用的Spark機(jī)器人底盤集成了一個具有六軸運(yùn)動姿態(tài)陀螺儀的IMU模塊,如圖所示。該模塊集成高精度的陀螺儀和加速度計,利用動力學(xué)解算與卡爾曼濾波算法,求解出實時的運(yùn)動姿態(tài)數(shù)據(jù)。1.3傳感器3激光雷達(dá)雷達(dá)(Radar)是一種利用電磁波探測目標(biāo)位置的電子設(shè)備,其功能包括搜索目標(biāo)和發(fā)現(xiàn)目標(biāo),測量距離、速度、角位置等運(yùn)動參數(shù),以及測量目標(biāo)反射率、散射截面和形狀等特征參數(shù)。傳統(tǒng)的雷達(dá)是以微波和毫米波波段的電磁波為載波的雷達(dá)。激光雷達(dá)以激光作為載波,可以用振幅、頻率、相位和振幅來搭載信息,作為信息載體。1.3傳感器3激光雷達(dá)激光雷達(dá)具有如下優(yōu)點(diǎn)。激光的發(fā)散角小,能量集中,激光雷達(dá)探測靈敏度高,角分辨率、速度分辨率和距離分辨率都高??垢蓴_能力強(qiáng),隱蔽性好,不受無線電波干擾,低仰角工作時對地面不敏感。多普勒頻移大,可以探測從低速到高速的目標(biāo),采用距離-多普勒成像技術(shù)可以得到運(yùn)動目標(biāo)的高分辨率清晰圖像。1.3傳感器3激光雷達(dá)激光雷達(dá)具有如下優(yōu)點(diǎn)。波長比微波短好幾個數(shù)量級,具有更窄的波束,可以在分子量級上對目標(biāo)進(jìn)行探測。在功能相同的情況下,比微波雷達(dá)體積小,重量輕。1.3傳感器3激光雷達(dá)激光雷達(dá)具有如下缺點(diǎn)。激光受大氣及氣象影響,在大氣衰減和遇到惡劣天氣時,激光雷達(dá)作用距離縮短。此外,大氣湍流也會降低激光雷達(dá)的測量精度。激光的光束窄,難以搜索目標(biāo)和捕獲目標(biāo)。因此,一般先用其他設(shè)備進(jìn)行大空域、快速的目標(biāo)捕獲,然后用激光雷達(dá)對目標(biāo)進(jìn)行精密跟蹤測量。在移動機(jī)器人系統(tǒng)中,獲取周圍環(huán)境輪廓形狀和障礙物檢測是非常重要的。有了激光雷達(dá)掃描得到的點(diǎn)云信息,機(jī)器人就可以進(jìn)行SLAM,并進(jìn)行避障和自主導(dǎo)航。1.3傳感器3激光雷達(dá)激光雷達(dá)是以發(fā)射激光束探測目標(biāo)位置、速度等特征量的雷達(dá)系統(tǒng),天線和系統(tǒng)的尺寸可以做得很小,如圖所示。1.3傳感器3激光雷達(dá)激光雷達(dá)在直流無刷電機(jī)機(jī)構(gòu)的驅(qū)動下旋轉(zhuǎn),實現(xiàn)對周圍環(huán)境360°全方位掃描。激光雷達(dá)由激光發(fā)射機(jī)、激光接收機(jī)等組成。其中,激光發(fā)射機(jī)以一定的波長和波形,通過光學(xué)天線發(fā)射一定功率的激光。激光接收機(jī)由激光器、調(diào)制器、冷卻系統(tǒng)、發(fā)射天線和激光電源組成,通過光學(xué)天線收集目標(biāo)的回波信號,并將其通過光電探測器轉(zhuǎn)換成電信號,電信號經(jīng)過放大和信號處理后,人們即可獲得距離、方位、速度和圖像信息,從而對目標(biāo)進(jìn)行探測、跟蹤和識別。1.3傳感器3激光雷達(dá)如表給出了調(diào)頻連續(xù)波和窄脈沖的發(fā)射波形的性能比較。1.3傳感器3激光雷達(dá)激光雷達(dá)的激光接收機(jī)采用的技術(shù)有非相干接收技術(shù)和相干接收技術(shù)兩大類。其中,非相干接收技術(shù)以脈沖計數(shù)為基礎(chǔ)進(jìn)行測距,優(yōu)點(diǎn)是技術(shù)簡單和成熟。而相干接收技術(shù)有外差接收、自差接收和零差接收等方式,接收靈敏度和速度分辨率高。但是,相干接收技術(shù)要求接收機(jī)的頻帶特別寬,對激光發(fā)射的頻率穩(wěn)定度要求也高,對光學(xué)天線系統(tǒng)和機(jī)內(nèi)光路的校準(zhǔn)要求更嚴(yán)格。相干激光雷達(dá)的發(fā)射機(jī)還有激光穩(wěn)頻系統(tǒng)、頻率控制系統(tǒng)和偏振控制系統(tǒng),接收機(jī)的信息處理單元更復(fù)雜。所以,我們要根據(jù)具體使用要求確定采用哪種接收方式。1.3傳感器3激光雷達(dá)激光雷達(dá)的主要性能指標(biāo)如表所示。1.3傳感器3激光雷達(dá)激光雷達(dá)的測距方式包括單點(diǎn)測距、單線掃描、多線掃描、固定區(qū)域掃描等。單點(diǎn)測距單點(diǎn)測距是最簡單的基礎(chǔ)測距方式,可以實現(xiàn)幾十米、幾百米甚至幾千米的測量。單線掃描單線掃描由單點(diǎn)測距模塊加電機(jī)旋轉(zhuǎn)形成的平面點(diǎn)云數(shù)據(jù)實現(xiàn),可以對一維空間進(jìn)行監(jiān)測,得到與物體之間的角度和距離值。1.3傳感器3激光雷達(dá)激光雷達(dá)的測距方式包括單點(diǎn)測距、單線掃描、多線掃描、固定區(qū)域掃描等。多線掃描多線掃描是在多個角度上,對三維空間進(jìn)行更精細(xì)的掃描,包括4線、8線、16線、64線、128線掃描等,線數(shù)越多,掃描越精細(xì),掃描速度越快,點(diǎn)云數(shù)據(jù)更新越快。1.3傳感器3激光雷達(dá)激光雷達(dá)的測距方式包括單點(diǎn)測距、單線掃描、多線掃描、固定區(qū)域掃描等。固定區(qū)域掃描固定區(qū)域掃描由固態(tài)激光雷達(dá)完成。固態(tài)激光雷達(dá)是完全沒有移動部件的激光雷達(dá),不需要旋轉(zhuǎn)就可以對一定角度內(nèi)的固定區(qū)域進(jìn)行掃描,探測其與空間內(nèi)物體之間的角度和距離值。固態(tài)激光雷達(dá)的典型技術(shù)包括光相控陣(OpticalPhasedArray,OPA)和Flash兩種。1.3傳感器3激光雷達(dá)本書所用的Spark機(jī)器人配置的激光雷達(dá)采用光學(xué)三角測距法,測距采樣率為每秒8000次,主要規(guī)格參數(shù)如表所示。1.3傳感器4相機(jī)機(jī)器人系統(tǒng)搭載的相機(jī)可以用來做目標(biāo)識別、視覺SLAM、視頻監(jiān)控等。相機(jī)種類有單目(Mono)相機(jī)、雙目(Stereo)相機(jī)和RGB-D(深度)相機(jī)等。單目相機(jī)單目相機(jī)結(jié)構(gòu)簡單、成本低,缺點(diǎn)是在單張圖片里,無法確定一個物體的真實大小。因為沒有深度信息,目標(biāo)可能是一個很大但很遠(yuǎn)的物體,也可能是一個很近但很小的物體。如果通過相機(jī)的運(yùn)動形成視差,就可以測量物體相對深度。在視覺SLAM中,單目SLAM估計的軌跡和地圖將與真實的軌跡和地圖相差一個因子,也就是尺度(Scale),僅憑圖像無法確定這個真實尺度,所以具有尺度不確定性。1.3傳感器4相機(jī)機(jī)器人系統(tǒng)搭載的相機(jī)可以用來做目標(biāo)識別、視覺SLAM、視頻監(jiān)控等。相機(jī)種類有單目(Mono)相機(jī)、雙目(Stereo)相機(jī)和RGB-D(深度)相機(jī)等。雙目相機(jī)雙目相機(jī)可以測量物體深度信息,基線(雙目間距)距離越大,能夠測量的距離就越遠(yuǎn)。其缺點(diǎn)是配置與標(biāo)定較為復(fù)雜,深度量程和精度受到雙目基線與分辨率限制,視差計算非常消耗計算資源,需要GPU/FPGA設(shè)備加速,常見的雙目相機(jī)有ZED2雙目相機(jī)。1.3傳感器4相機(jī)機(jī)器人系統(tǒng)搭載的相機(jī)可以用來做目標(biāo)識別、視覺SLAM、視頻監(jiān)控等。相機(jī)種類有單目(Mono)相機(jī)、雙目(Stereo)相機(jī)和RGB-D(深度)相機(jī)等。RGB—D(深度)相機(jī)RGB-D相機(jī)通過結(jié)構(gòu)光(StructuredLight)或ToF原理測量物體深度信息,缺點(diǎn)是測量范圍窄、噪聲大、視野小、易受日光干擾、在室外環(huán)境使用效果不好、無法測量玻璃等透射材質(zhì)的信息。相比于雙目相機(jī)通過視差計算深度的方式,RGB-D相機(jī)能夠主動測量每個像素的深度。1.3傳感器4相機(jī)機(jī)器人系統(tǒng)搭載的相機(jī)可以用來做目標(biāo)識別、視覺SLAM、視頻監(jiān)控等。相機(jī)種類有單目(Mono)相機(jī)、雙目(Stereo)相機(jī)和RGB-D(深度)相機(jī)等。RGB—D(深度)相機(jī)RGB-D相機(jī)能夠?qū)崟r地測量每個像素點(diǎn)的距離。在測量深度后,RGB-D相機(jī)進(jìn)行深度與彩色圖像素之間的配對,輸出一一對應(yīng)的彩色圖和深度圖。對于同一個圖像位置,其可以讀取到色彩信息和距離信息,計算像素的3D相機(jī)坐標(biāo),生成點(diǎn)云。對RGB-D數(shù)據(jù),既可以在圖像層面進(jìn)行處理,也可以在點(diǎn)云層面進(jìn)行處理。1.3傳感器4相機(jī)機(jī)器人系統(tǒng)搭載的相機(jī)可以用來做目標(biāo)識別、視覺SLAM、視頻監(jiān)控等。相機(jī)種類有單目(Mono)相機(jī)、雙目(Stereo)相機(jī)和RGB-D(深度)相機(jī)等。RGB—D(深度)相機(jī)一些雙目相機(jī)和RGB-D相機(jī)集成了IMU,方便進(jìn)行多傳感器融合,提高位姿精度。本書所用的Spark機(jī)器人配置了國產(chǎn)奧比中光的Astra深度相機(jī),其是一種結(jié)構(gòu)光RGB-D相機(jī),通過獲取RGB和深度點(diǎn)云數(shù)據(jù),進(jìn)行室內(nèi)環(huán)境感知,為實現(xiàn)地圖構(gòu)建和導(dǎo)航等功能提供必要的信息。1.3傳感器5紅外傳感器紅外傳感器是利用紅外線的物理性質(zhì)來進(jìn)行測量的傳感器,包括光學(xué)系統(tǒng)、檢測元件和轉(zhuǎn)換電路等。如圖所示是一個紅外傳感器模塊。光學(xué)系統(tǒng)按結(jié)構(gòu)可分為透射式和反射式兩類。1.3傳感器5紅外傳感器檢測元件按工作原理可分為熱敏檢測元件和光電檢測元件。熱敏檢測元件熱敏電阻受到紅外線輻射時溫度升高,電阻發(fā)生變化,這種變化通過轉(zhuǎn)換電路變成電信號輸出。熱敏電阻可分為正溫度系數(shù)熱敏電阻(溫度升高,電阻變大)和負(fù)溫度系數(shù)熱敏電阻(溫度升高,電阻變?。9怆姍z測元件光電檢測元件采用光敏元件,光敏元件通常由硫化鉛、硒化鉛、砷化銦、砷化銻、碲鎘汞三元合金、鍺及硅摻雜等材料制成。1.3傳感器5紅外傳感器紅外傳感器可用于無接觸溫度測量、氣體成分分析和無損探傷,在醫(yī)學(xué)、軍事、空間技術(shù)和環(huán)境工程等領(lǐng)域廣泛應(yīng)用。例如,采用紅外傳感器可遠(yuǎn)距離測量人體表面溫度的熱像圖,可以發(fā)現(xiàn)溫度異常的部位。在機(jī)器人系統(tǒng)中,紅外傳感器常用于檢測障礙物,一般工作在靈敏度最高的38kHz~40kHz附近。本書所用的Spark機(jī)器人配置若干紅外傳感器,分布在移動底盤的四周和底部(朝下),用于障礙物、墻壁或樓梯的檢測。1.3傳感器6超聲波傳感器超聲波傳感器也叫超聲波雷達(dá),是將超聲波信號轉(zhuǎn)換成其他能量信號(通常是電信號)的傳感器。超聲波振動頻率高于20kHz,具有頻率高、波長短、穿透力強(qiáng)、方向性好的特點(diǎn),易于定向傳播。超聲波傳感器已廣泛應(yīng)用在工業(yè)、國防、生物醫(yī)學(xué)等方面。如圖是一個超聲波傳感器模塊。1.3傳感器6超聲波傳感器一般來說,按照氣體、液體、固體的順序,超聲波在介質(zhì)中的傳播速度越來越快。超聲波對液體、固體的穿透性好。超聲波傳播速度還取決于溫度。在15℃的空氣中,超聲波傳播速度為340m/s。溫度越高,超聲波傳播速度越快。超聲波碰到雜質(zhì)或分界面時會產(chǎn)生顯著反射,形成反射回波,碰到活動的物體時能產(chǎn)生多普勒效應(yīng)。1.3傳感器6超聲波傳感器超聲波傳感器具有如下優(yōu)點(diǎn)。結(jié)構(gòu)簡單,制造方便,成本較低。超聲波對雨、雪、霧的穿透力強(qiáng),超聲波傳感器可以在惡劣天氣下工作。超聲波對光照和色彩不敏感,超聲波傳感器可以用于識別透明及反射性差的物體。不容易受環(huán)境電磁場的干擾。1.3傳感器6超聲波傳感器超聲波傳感器具有如下缺點(diǎn)。測距速度不如激光雷達(dá)和毫米波雷達(dá)。超聲波有較小的擴(kuò)散角,只能測量距離,不可以測量方位,所以超聲波傳感器只能在低速(如泊車)時使用,需要安裝多個超聲波傳感器才能檢測不同方向的障礙物。超聲波傳感器的發(fā)射信號和余振信號會對回波信號造成覆蓋或干擾,在距離物體較近時可能會喪失探測功能,即存在探測盲區(qū)。1.3傳感器7毫米波雷達(dá)毫米波雷達(dá)工作在毫米波段,波長為1~10mm,其通過測量回波的時間差檢測距離。如圖是一個毫米波雷達(dá)模塊。1.3傳感器7毫米波雷達(dá)毫米波雷達(dá)具有體積小、質(zhì)量輕、抗干擾、空間分辨率高的特點(diǎn)。與紅外傳感器、激光雷達(dá)等相比,毫米波雷達(dá)穿透霧、煙、灰塵的能力強(qiáng),具有可全天時、全天候(大雨天除外)測量的特點(diǎn)。毫米波雷達(dá)的缺點(diǎn)是探測距離受到頻段損耗的直接制約,無法感知行人。因為行人的反射強(qiáng)度小,反射波容易被其他物體的反射波埋沒。1.3傳感器7毫米波雷達(dá)在移動機(jī)器人、無人駕駛領(lǐng)域,毫米波雷達(dá)是核心部件之一,用于主動安全檢測,能夠在全天候場景下快速感知0~200m范圍內(nèi)周邊環(huán)境中物體的位置、速度等信息。毫米波雷達(dá)的工作頻段通常在22~80GHz,常用的頻段是24GHz/77GHz/79GHz。其中,77GHz/79GHz頻段在物體分辨率、測速和測距精確度方面,相較于24GHz頻段具有明顯優(yōu)勢。1.3傳感器7毫米波雷達(dá)24GHz毫米波雷達(dá)測量距離較短(5~30m),主要應(yīng)用于后方或兩側(cè)盲區(qū)的檢測;77GHz毫米波雷達(dá)測量距離較長,主要應(yīng)用于前方或兩側(cè)的盲區(qū)檢測;79GHZ毫米波雷達(dá)的優(yōu)點(diǎn)是可以獲取被測物體的圖像,彌補(bǔ)現(xiàn)有毫米波雷達(dá)技術(shù)在目標(biāo)識別方面的不足,而在分辨率、探測距離等方面可以達(dá)到與77GHz雷達(dá)等同的效果。1.3傳感器7毫米波雷達(dá)如圖所示,毫米波雷達(dá)在汽車上已得到了廣泛使用,以提高駕駛安全性,主要包括:前方碰撞預(yù)警(ForwardCollisionWarning,F(xiàn)CW)、后向碰撞預(yù)警(BackwardCollisionWarning,RCW)、盲點(diǎn)檢測(BlindSpotDetection,BSD)、換道輔助(LaneChangeAssistant,LCA)、倒車橫穿預(yù)警(ReverseCrossingWarning,RCTA)、開門預(yù)警(DoorOpenWarning,DOW)等。1.3傳感器8碰撞傳感器碰撞傳感器用來檢測移動車體與其他物體是否發(fā)生接觸碰撞,從而做進(jìn)一步的安全防護(hù)。常見的碰撞傳感器模塊如圖所示。碰撞傳感器分為機(jī)電結(jié)合式和電子式。1.3傳感器9多傳感器融合在移動機(jī)器人、無人駕駛領(lǐng)域,由于環(huán)境是動態(tài)變化的,單傳感器不能形成對環(huán)境的完全信息覆蓋,每種傳感器都有各自的優(yōu)缺點(diǎn),如表所示。1.4機(jī)器人系統(tǒng)的軟件組成1操作系統(tǒng)操作系統(tǒng)(OperatingSystem)可對計算機(jī)中的各項資源進(jìn)行調(diào)度,包括軟硬件設(shè)備、數(shù)據(jù)信息等,其功能主要包括以下幾方面。進(jìn)程管理:進(jìn)行多任務(wù)管理,解決處理器的調(diào)度、分配和回收等問題。存儲管理:存儲分配、存儲共享、存儲保護(hù)、存儲擴(kuò)張。設(shè)備管理:設(shè)備分配、設(shè)備傳輸控制。文件管理:文件存儲管理、目錄管理、文件操作管理、文件保護(hù)。作業(yè)管理:響應(yīng)和處理用戶提交的請求。1.4機(jī)器人系統(tǒng)的軟件組成2應(yīng)用軟件應(yīng)用軟件(Application)和系統(tǒng)軟件相對應(yīng),是各種應(yīng)用程序的集合,分為應(yīng)用軟件包和用戶程序。其中,應(yīng)用軟件包是利用計算機(jī)解決某類問題而設(shè)計的程序集合,即用各種程序設(shè)計語言編制的程序。應(yīng)用軟件可以是一個特定的程序,如一個圖像瀏覽器;也可以是一組功能聯(lián)系緊密、可以互相協(xié)作的程序的集合,如微軟的Office軟件;還可以是一個由眾多獨(dú)立程序組成的龐大的軟件系統(tǒng),如數(shù)據(jù)庫管理系統(tǒng)。1.4機(jī)器人系統(tǒng)的軟件組成2應(yīng)用軟件Spark機(jī)器人平臺是一種應(yīng)用軟件,其自帶了多個基于ROS的應(yīng)用程序,主要功能如下。讓機(jī)器人動起來。讓機(jī)器人使用激光雷達(dá)進(jìn)行建圖和導(dǎo)航。讓機(jī)器人使用深度相機(jī)進(jìn)行建圖和導(dǎo)航。機(jī)械臂與相機(jī)標(biāo)定。讓機(jī)器人通過機(jī)械臂進(jìn)行視覺抓取。讓機(jī)器人通過深度學(xué)習(xí)進(jìn)行物品檢測。1.5本章小結(jié)本章主要介紹了機(jī)器人系統(tǒng)的組成,包括硬件組成及軟件組成等,以幫助讀者了解機(jī)器人系統(tǒng)。其中,重點(diǎn)介紹了不同傳感器的功能和應(yīng)用場景差異。此外,本章還介紹了Spark機(jī)器人平臺的連接和使用方法,為后續(xù)的學(xué)習(xí)準(zhǔn)備好動手實踐的機(jī)器人系統(tǒng)和遠(yuǎn)程桌面連接。第二章將機(jī)器連接到ROS機(jī)器人操作系統(tǒng)ROS應(yīng)用實踐目錄content初識ROS2.1ROS文件系統(tǒng)與通信機(jī)制2.3ROS常用組件2.5安裝ROS2.2編寫第一個ROS程序2.4Spark底盤控制2.6ROS外接設(shè)備介紹2.7本章小結(jié)2.82.1初識ROSROS起源于2007年,是斯坦福大學(xué)人工智能實驗室與機(jī)器人技術(shù)公司W(wǎng)illowGarage的合作項目。2008年之后,由WillowGarage公司進(jìn)行推廣,該項目研發(fā)的機(jī)器人PR2就是在ROS框架的基礎(chǔ)上實現(xiàn)的。2010年,WillowGarage公司開源了ROS,其很快在機(jī)器人研究領(lǐng)域引起了越來越多的關(guān)注。ROS的主要目標(biāo)是為機(jī)器人研究和開發(fā)提供代碼復(fù)用的支持和服務(wù),包括硬件抽象、底層設(shè)備控制、常用函數(shù)調(diào)用、進(jìn)程間消息傳遞,以及包(Package)管理,并提供跨計算機(jī)、分布運(yùn)行代碼所需的工具和庫函數(shù)。ROS是一個分布式的進(jìn)程(也就是“節(jié)點(diǎn)”)框架,這些進(jìn)程被封裝在易于分享和發(fā)布的程序包和功能包中。1ROS起源2.1初識ROS2ROS架構(gòu)ROS架構(gòu)如圖所示,其分為三層:OS層(OSLayer)、中間件層(MiddlewareLayer)和應(yīng)用層(ApplicationLayer)。2.1初識ROS2ROS架構(gòu)OS層ROS不能直接運(yùn)行在計算機(jī)硬件之上,需要依托操作系統(tǒng)。在OS層,可以直接使用ROS官方支持度最好的Ubuntu操作系統(tǒng)(Linux),也可以使用Mac、Windows、RTOS等操作系統(tǒng)。2.1初識ROS2ROS架構(gòu)中間件層Linux是一個通用系統(tǒng),并沒有針對機(jī)器人開發(fā)提供特殊的中間件,所以ROS設(shè)計了中間件層,其中最為重要的是基于TCPROS/UDPROS的通信系統(tǒng)。ROS的通信系統(tǒng)基于TCP/UDP網(wǎng)絡(luò),并進(jìn)行了再次封裝,即得到TCPROS/UDPROS。ROS通信系統(tǒng)使用發(fā)布/訂閱、客戶端/服務(wù)器等模型,可以實現(xiàn)多種通信機(jī)制的數(shù)據(jù)傳輸。2.1初識ROS2ROS架構(gòu)應(yīng)用層在應(yīng)用層,節(jié)點(diǎn)(Node)管理器Master組件負(fù)責(zé)管理整個系統(tǒng)的運(yùn)行。ROS開源社區(qū)內(nèi)共享了大量的機(jī)器人應(yīng)用功能包,這些功能包內(nèi)的模塊以節(jié)點(diǎn)為單位運(yùn)行,以ROS標(biāo)準(zhǔn)的輸入/輸出作為接口,只需要了解接口規(guī)則即可實現(xiàn)復(fù)用,極大地提高了開發(fā)效率。隨著機(jī)器人技術(shù)的快速發(fā)展,ROS得到了極大的推廣和應(yīng)用。盡管ROS還存在不少的局限性,但是ROS開源社區(qū)內(nèi)的功能包數(shù)量逐年呈指數(shù)級上漲,不少開發(fā)者和研究機(jī)構(gòu)還針對ROS的局限性進(jìn)行了改良,為機(jī)器人開發(fā)者帶來了巨大的便利。2.1初識ROS2ROS架構(gòu)ROS2.0與ROS1.0的系統(tǒng)架構(gòu)對比如下:ROS1.0主要構(gòu)建于Linux系統(tǒng)之上,ROS2.0支持的操作系統(tǒng)包括Linux、Windows、Mac、RTOS,甚至支持沒有操作系統(tǒng)的裸機(jī)。ROS1.0的通信基于TCPROS/UDPROS,強(qiáng)依賴于Master節(jié)點(diǎn)的處理,而ROS2.0取消了Master,通信是基于數(shù)據(jù)分發(fā)服務(wù)(DataDistributionService,DDS)的,同時ROS2.0內(nèi)部提供了DDS的抽象層實現(xiàn),用戶可以不用關(guān)注底層的DDS使用了哪個API。2.1初識ROS2ROS架構(gòu)ROS2.0與ROS1.0的系統(tǒng)架構(gòu)對比如下:在ROS1.0中,Nodelet和TCPROS/UDPROS是并列的層次,也是負(fù)責(zé)通信的,Nodelet可為同一個進(jìn)程中的多個節(jié)點(diǎn)提供一種更優(yōu)化的數(shù)據(jù)傳輸方式。ROS2.0中仍保留了這種數(shù)據(jù)傳輸方式,改名叫Intra-process,同樣也獨(dú)立于DDS。2.1初識ROS2ROS架構(gòu)可以看到,ROS2.0與ROS1.0架構(gòu)的不同主要是由數(shù)據(jù)分發(fā)服務(wù)引起的。DDS是對象管理組織(ObjectManagementGroup,OMG)在2004年正式發(fā)布的一個專門為實時系統(tǒng)設(shè)計的數(shù)據(jù)分發(fā)/訂閱標(biāo)準(zhǔn),最早應(yīng)用于美國海軍,解決艦船復(fù)雜網(wǎng)絡(luò)環(huán)境中大量軟件升級的兼容性問題。目前DDS已經(jīng)成為美國國防部的強(qiáng)制標(biāo)準(zhǔn),已廣泛應(yīng)用于國防、民航、工業(yè)控制等領(lǐng)域,成為分布式實時系統(tǒng)中數(shù)據(jù)發(fā)布/訂閱的標(biāo)準(zhǔn)解決方案。2.1初識ROS2ROS架構(gòu)DDS是以數(shù)據(jù)為核心的發(fā)布/訂閱模型,這種模型創(chuàng)建了一個“全局?jǐn)?shù)據(jù)空間”(GlobalDataSpace)的概念,所有獨(dú)立的應(yīng)用都可以訪問該空間。在DDS中,每個發(fā)布者或者訂閱者都成為參與者(Participant),類似于ROS節(jié)點(diǎn)的概念。每個參與者都可以使用某種定義好的數(shù)據(jù)類型來讀/寫全局?jǐn)?shù)據(jù)空間。ROS2.0還在不斷發(fā)展中,在學(xué)術(shù)界和工業(yè)界未得到大范圍的使用,但有著更強(qiáng)性能的ROS2.0將成為未來的發(fā)展趨勢。2.1初識ROS3ROS特點(diǎn)為了支持機(jī)器人研究和開發(fā)中的代碼重用,ROS具有以下特征。分布式進(jìn)程:以可執(zhí)行進(jìn)程的最小單元(節(jié)點(diǎn))進(jìn)行編程,每個進(jìn)程獨(dú)立運(yùn)行,并收發(fā)數(shù)據(jù)。功能包管理:以功能包的形式管理多個進(jìn)程,便于共享、修改和重新發(fā)布。公共存儲庫:每個功能包都公開給公共存儲庫(如GitHub),并標(biāo)識許可證。2.1初識ROS3ROS特點(diǎn)為了支持機(jī)器人研究和開發(fā)中的代碼重用,ROS具有以下特征。API:使用ROS開發(fā)程序時,可以通過調(diào)用API將其加載到應(yīng)用代碼中。支持多種編程語言:ROS程序提供客戶端庫(ClientLibrary),支持Java、Python、C++、C#、Lua、Lisp和Ruby等編程語言。2.2安裝ROSROS目前主要支持Ubuntu操作系統(tǒng),隨著近幾年嵌入式系統(tǒng)的快速發(fā)展,ROS也針對ARM處理器編譯了核心庫和部分功能包。在安裝ROS之前,需要明確開發(fā)環(huán)境并且選擇合適的ROS發(fā)行版本。ROS的發(fā)行版本(ROSDistribution)指ROS軟件包的版本,與Linux的發(fā)行版本(如Ubuntu)的概念類似。推出ROS發(fā)行版本的目的在于使開發(fā)者可以使用相對穩(wěn)定的代碼庫。每個發(fā)行版本推出后,ROS開發(fā)者通常僅對這一版本的bug進(jìn)行修復(fù),同時提供少量針對核心軟件包的改進(jìn)。1操作系統(tǒng)和ROS版本2.2安裝ROS下表是ROS當(dāng)前的主要發(fā)行版本信息。ROSKineticKame版本(以下簡稱ROSKinetic)的網(wǎng)上開源資料豐富,本書使用該版本,對應(yīng)的Linux系統(tǒng)是Ubuntu16.04LTS(LongTermSupport,長期支持)。如果對最新的ROS版本感興趣,讀者可以自行下載安裝,對于常用的功能包,不同的版本之間是可以兼容使用的。1操作系統(tǒng)和ROS版本2.2安裝ROS2Linux基礎(chǔ)簡介Linux是免費(fèi)使用和自由傳播的類UNIX操作系統(tǒng),是一個基于POSIX和UNIX的多用戶、多任務(wù)、支持多線程和多CPU的操作系統(tǒng)。隨著互聯(lián)網(wǎng)的發(fā)展,Linux得到了全世界軟件愛好者、組織、公司的支持。Linux除在服務(wù)器操作系統(tǒng)方面保持著強(qiáng)勁的發(fā)展勢頭以外,在個人計算機(jī)、嵌入式系統(tǒng)上都有著長足的進(jìn)步。使用者不僅可以直觀地獲取Linux操作系統(tǒng)的實現(xiàn)機(jī)制,而且可以根據(jù)自身的需要來修改和完善Linux,使其最大化地適應(yīng)用戶的需要。2.2安裝ROS2Linux基礎(chǔ)簡介下面列出幾種Linux常用命令,讀者可以上網(wǎng)查詢更多命令的使用方法。ls命令,用于展示文件夾的內(nèi)容,使用語法如下。2.2安裝ROS2Linux基礎(chǔ)簡介下面列出幾種Linux常用命令,讀者可以上網(wǎng)查詢更多命令的使用方法。find命令,用于查找文件,使用語法如下。2.2安裝ROS2Linux基礎(chǔ)簡介下面列出幾種Linux常用命令,讀者可以上網(wǎng)查詢更多命令的使用方法。cd命令,用于改變當(dāng)前目錄,使用語法如下。2.2安裝ROS2Linux基礎(chǔ)簡介下面列出幾種Linux常用命令,讀者可以上網(wǎng)查詢更多命令的使用方法。tree命令,用于顯示樹形的層級目錄結(jié)構(gòu)。其是非原生命令,需要安裝。tree命令使用舉例如圖所示。2.2安裝ROS2Linux基礎(chǔ)簡介下面列出幾種Linux常用命令,讀者可以上網(wǎng)查詢更多命令的使用方法。cp命令,用于復(fù)制文件,使用語法如下。rm命令,用于刪除文件或目錄,使用語法如下。2.2安裝ROS2Linux基礎(chǔ)簡介下面列出幾種Linux常用命令,讀者可以上網(wǎng)查詢更多命令的使用方法。mv命令,用于移動文件,使用語法如下。pwd命令,用于查看“當(dāng)前工作目錄”的完整路徑,使用語法如下:2.2安裝ROS2Linux基礎(chǔ)簡介下面列出幾種Linux常用命令,讀者可以上網(wǎng)查詢更多命令的使用方法。tar命令,用于壓縮和解壓,使用語法如下。2.2安裝ROS2Linux基礎(chǔ)簡介下面列出幾種Linux常用命令,讀者可以上網(wǎng)查詢更多命令的使用方法。mkdir命令,用于創(chuàng)建目錄,使用語法如下。2.2安裝ROS3ROS安裝使用軟件庫安裝ROSKineticROS的安裝說明可以在ROS官網(wǎng)的GettingStarted部分的Install選項卡中找到。一般使用軟件庫(Repository)安裝ROS。2.2安裝ROS3ROS安裝配置Ubuntu軟件庫在開始安裝之前,首先需要配置軟件庫,把軟件庫屬性設(shè)為restricted、universe、multiverse。為了檢查你的Ubuntu版本是否支持這些軟件庫,可以單擊桌面左面的Ubuntu軟件中心(Software&Updates),如圖所示。2.2安裝ROS3ROS安裝配置Ubuntu軟件庫選擇UbuntuSoftware選項卡,保證各個選項與下圖一致。2.2安裝ROS3ROS安裝添加ROS軟件源首先選擇Ubuntu版本,在多種版本的操作系統(tǒng)中都可以安裝ROSKinetic。然后為Ubuntu的包管理器增加軟件源地址,設(shè)置計算機(jī)接收來自的軟件。sources.list是Ubuntu系統(tǒng)保存軟件源地址的文件,位于/etc/apt目錄下,下面將ROS的軟件源地址添加到該文件中,確保后續(xù)安裝時可以正確找到ROS相關(guān)軟件的下載地址。打開命令行,輸入下面的命令,添加ROS官方的軟件源鏡像:2.2安裝ROS3ROS安裝下載示例代碼示例代碼在GitHub上,可掃描二維碼下載。一旦添加了正確的軟件庫,操作系統(tǒng)就知道在哪里下載程序,并根據(jù)命令自動安裝軟件。2.2安裝ROS3ROS安裝下載示例代碼示例代碼在GitHub上,可掃描二維碼下載。一旦添加了正確的軟件庫,操作系統(tǒng)就知道在哪里下載程序,并根據(jù)命令自動安裝軟件。添加密鑰這一步是為了確認(rèn)原始的代碼是正確的,并且沒有人在未經(jīng)所有者授權(quán)的情況下修改任何程序代碼,即確定代碼來自授權(quán)網(wǎng)站并且沒有被修改。通常情況下,當(dāng)添加完軟件庫時,就已經(jīng)添加了軟件庫的密鑰,并將其添加到操作系統(tǒng)的可信任列表中。2.2安裝ROS3ROS安裝安裝ROS在開始之前,先升級一下軟件包,避免錯誤的庫版本或軟件版本產(chǎn)生各種問題。輸入以下命令進(jìn)行升級:ROS非常大,通常情況下,根據(jù)用途不同有四種安裝方式。2.2安裝ROS3ROS安裝安裝ROS完全安裝方式(推薦的安裝方式,需要足夠大的硬盤空間),即桌面完整安裝(desktop-full)。使用下面的命令安裝:將安裝ROS、rqt工具(rqt是一個GUI框架,以插件的形式實現(xiàn)各種工具和界面)、rviz可視化環(huán)境、通用機(jī)器人庫、2D(如stage)和3D(如gazebo)仿真環(huán)境、導(dǎo)航功能包集(移動、定位、地圖繪制、機(jī)械臂控制),以及其他感知庫,如視覺、激光雷達(dá)和RGB-D相機(jī)。2.2安裝ROS3ROS安裝安裝ROS如果希望安裝特定部分的功能包集,或沒有足夠的硬盤空間,那么可以僅安裝桌面安裝文件,包括ROS、rqt工具、rviz可視化環(huán)境和其他通用機(jī)器人庫。之后在需要的時候,再安裝其他功能包集。使用下面的命令安裝:2.2安裝ROS3ROS安裝安裝ROS如果只是想嘗試一下ROS,可以安裝ROS-base。ROS-base通常直接安裝在機(jī)器人上,尤其是當(dāng)機(jī)器人沒有屏幕和人機(jī)交互界面,只能遠(yuǎn)程登錄時。它只安裝ROS的編譯和通信包,而不安裝任何的GUI工具。使用下面的命令安裝:2.2安裝ROS3ROS安裝安裝ROS獨(dú)立安裝特定的ROS功能包集,使用下面的命令安裝(將PACKAGE替換為指定的功能包名稱):2.2安裝ROS4設(shè)置環(huán)境變量為了能夠運(yùn)行ROS,系統(tǒng)需要知道可執(zhí)行文件或二進(jìn)制文件及其他命令的位置,使用下面的命令運(yùn)行腳本:如果安裝的是其他ROS發(fā)行版本,如Indigo,則也需要通過調(diào)用腳本來使用它,以配置使用環(huán)境,那時在命令中用indigo代替kinetic即可。為了測試是否完成ROS安裝及是否安裝正確,可以在命令行中輸入roscore命令,看一下是否有程序啟動。2.2安裝ROS4設(shè)置環(huán)境變量注意:如果再次打開一個命令行窗口,并輸入roscore或其他ROS命令,發(fā)現(xiàn)其無法工作,這是因為需要再一次運(yùn)行腳本來配置全局變量和ROS的安裝路徑。為了解決這個問題,需要在.bashrc文件的最后添加腳本,該腳本將被運(yùn)行并配置環(huán)境。.bashrc文件在用戶的home文件夾下(/home/USERNAME/.bashrc)。每次用戶打開命令行,這個文件會加載命令行的配置。當(dāng)在.bashrc文件最后添加上面的腳本后,就可以避免每次打開一個新的命令行時都要重復(fù)輸入命令。2.2安裝ROS4設(shè)置環(huán)境變量如果要使配置生效,必須使用下面的命令去運(yùn)行這個文件,或關(guān)閉當(dāng)前命令行,打開另一個新的命令行:注意:如果安裝了不止一個ROS的發(fā)行版本,由于每次調(diào)用腳本都會覆蓋系統(tǒng)當(dāng)前配置,所以~/.bashrc只能設(shè)置你正在使用的ROS版本的setup.bash。為了實現(xiàn)在幾個發(fā)行版本之間的切換,需要調(diào)用不同的setup.bash腳本。2.2安裝ROS4設(shè)置環(huán)境變量如果在.bashrc文件中存在多個ROS發(fā)行版本的setup.bash腳本,則最后一個腳本是運(yùn)行的版本,因此建議只導(dǎo)入一個單獨(dú)的setup.bash腳本。如果想通過命令行檢查使用的版本,可使用命令:2.2安裝ROS5驗證安裝執(zhí)行以下命令,在Ubuntu中安裝構(gòu)建包(BuildingPackage)所需的依賴:這樣,就完成了一個完整的ROS系統(tǒng)安裝。通過以下命令啟動ROSMaster,測試系統(tǒng)是否已安裝成功:2.2安裝ROS5驗證安裝如果一切正常,你會在命令行中看到如圖所示的信息。2.3ROS文件系統(tǒng)與通信機(jī)制1文件系統(tǒng)類似于操作系統(tǒng),ROS將所有文件按照一定的規(guī)則進(jìn)行組織,不同功能的文件被放置在不同的文件夾下,如圖所示。2.3ROS文件系統(tǒng)與通信機(jī)制1文件系統(tǒng)綜合功能包:將幾個具有某些功能的功能包組織在一起,就形成了綜合功能包(Stack)。功能包:ROS的軟件組織形式。功能包是用于創(chuàng)建ROS程序的最小結(jié)構(gòu),包含ROS運(yùn)行的節(jié)點(diǎn)(進(jìn)程)、配置文件等。消息類型:消息是ROS節(jié)點(diǎn)之間發(fā)布/訂閱的通信信息,可以使用ROS提供的消息類型保存,也可以使用.msg文件保存,在功能包的msg文件夾下可自定義所需要的消息類型。2.3ROS文件系統(tǒng)與通信機(jī)制1文件系統(tǒng)服務(wù):定義了ROS客戶端/服務(wù)器通信模型下的請求與應(yīng)答數(shù)據(jù)類型,可以使用ROS系統(tǒng)提供的服務(wù)類型,也可以使用.srv文件,在功能包的srv文件夾中進(jìn)行定義。代碼:存放功能包節(jié)點(diǎn)源碼的文件夾。2.3ROS文件系統(tǒng)與通信機(jī)制2ROS通信及其工作機(jī)制ROS計算機(jī)圖ROS會創(chuàng)建一個連接到所有進(jìn)程的網(wǎng)絡(luò),即計算圖,包括節(jié)點(diǎn)、節(jié)點(diǎn)管理器、參數(shù)服務(wù)器、消息、服務(wù)、主題和消息記錄包,它們以不同的方式向這個計算圖提供數(shù)據(jù),如圖所示。在系統(tǒng)中的任何節(jié)點(diǎn)都可以訪問此網(wǎng)絡(luò),并通過該網(wǎng)絡(luò)與其他節(jié)點(diǎn)交互,獲取其他節(jié)點(diǎn)發(fā)布的消息,并將自身數(shù)據(jù)發(fā)布到網(wǎng)絡(luò)上。2.3ROS文件系統(tǒng)與通信機(jī)制2ROS通信及其工作機(jī)制ROS計算機(jī)圖節(jié)點(diǎn)節(jié)點(diǎn)是主要的計算執(zhí)行進(jìn)程。如果需要一個可以與其他節(jié)點(diǎn)進(jìn)行交互的進(jìn)程,那么就需要創(chuàng)建一個節(jié)點(diǎn),并將該節(jié)點(diǎn)連接到ROS網(wǎng)絡(luò)中。通常情況下,系統(tǒng)包含能夠?qū)崿F(xiàn)不同功能的多個節(jié)點(diǎn),每個節(jié)點(diǎn)都具有特定的單一功能。2.3ROS文件系統(tǒng)與通信機(jī)制2ROS通信及其工作機(jī)制ROS計算機(jī)圖節(jié)點(diǎn)節(jié)點(diǎn)需要使用roscpp或rospy的ROS客戶端庫進(jìn)行編寫。當(dāng)許多節(jié)點(diǎn)同時運(yùn)行時,可以很方便地將端對端的通信繪制成如圖所示的節(jié)點(diǎn)關(guān)系圖。進(jìn)程就是圖中的節(jié)點(diǎn),而端對端的連接關(guān)系就是節(jié)點(diǎn)之間的連線。2.3ROS文件系統(tǒng)與通信機(jī)制2ROS通信及其工作機(jī)制ROS計算機(jī)圖節(jié)點(diǎn)管理器節(jié)點(diǎn)管理器用于節(jié)點(diǎn)的名稱注冊和查找等。如果在整個ROS系統(tǒng)中沒有節(jié)點(diǎn)管理器,就不會有節(jié)點(diǎn)、服務(wù)、消息之間的通信。需要注意的是,ROS本身就是一個分布式網(wǎng)絡(luò)系統(tǒng),因此可以在某一臺計算機(jī)上運(yùn)行節(jié)點(diǎn)管理器,在其他計算機(jī)上運(yùn)行由該節(jié)點(diǎn)管理器管理的節(jié)點(diǎn)。2.3ROS文件系統(tǒng)與通信機(jī)制2ROS通信及其工作機(jī)制ROS計算機(jī)圖參數(shù)服務(wù)器參數(shù)服務(wù)器能夠使數(shù)據(jù)通過關(guān)鍵詞進(jìn)行存儲。通過使用參數(shù)服務(wù)器,我們就能夠在運(yùn)行時配置節(jié)點(diǎn)或改變節(jié)點(diǎn)的工作任務(wù)。消息節(jié)點(diǎn)通過消息完成彼此的溝通。消息包含一個節(jié)點(diǎn)發(fā)送到其他節(jié)點(diǎn)的數(shù)據(jù)信息。ROS中包含很多種標(biāo)準(zhǔn)類型的消息,同時用戶也可以基于標(biāo)準(zhǔn)消息開發(fā)自定義類型的消息。2.3ROS文件系統(tǒng)與通信機(jī)制2ROS通信及其工作機(jī)制ROS計算機(jī)圖主題主題相當(dāng)于ROS網(wǎng)絡(luò)對消息進(jìn)行路由和管理的數(shù)據(jù)總線。每一條消息都要發(fā)布相應(yīng)的主題。當(dāng)一個節(jié)點(diǎn)發(fā)送數(shù)據(jù)時,就說明該節(jié)點(diǎn)正在向主題發(fā)布消息。節(jié)點(diǎn)可以通過訂閱某個主題,接收來自其他節(jié)點(diǎn)的消息。一個節(jié)點(diǎn)可以訂閱一個主題,而并不需要該節(jié)點(diǎn)同時發(fā)布該主題。這就保證了消息的發(fā)布者和訂閱者之間相互解耦,完全無須知道對方的存在。主題名稱必須是唯一的,否則在同名主題之間的消息路由就會發(fā)生錯誤。2.3ROS文件系統(tǒng)與通信機(jī)制2ROS通信及其工作機(jī)制ROS計算機(jī)圖服務(wù)在發(fā)布主題的時候,正在發(fā)送的數(shù)據(jù)能夠以多對多的方式交互。但當(dāng)需要從某個節(jié)點(diǎn)獲得一個請求或應(yīng)答時,就不能通過主題來實現(xiàn)了。在這種情況下,服務(wù)允許直接與某個節(jié)點(diǎn)進(jìn)行交互。此外,服務(wù)也必須有唯一的名稱。當(dāng)一個節(jié)點(diǎn)提供某個服務(wù)時,所有節(jié)點(diǎn)都可以通過使用ROS客戶端所編寫的代碼與它通信。2.3ROS文件系統(tǒng)與通信機(jī)制2ROS通信及其工作機(jī)制ROS計算機(jī)圖消息記錄包消息記錄包是用于保存和回放ROS消息數(shù)據(jù)的文件格式,是存儲數(shù)據(jù)的重要機(jī)制。它能夠獲取并記錄各種傳感器數(shù)據(jù),進(jìn)行機(jī)器人系統(tǒng)開發(fā)和算法測試。2.3ROS文件系統(tǒng)與通信機(jī)制2ROS通信及其工作機(jī)制ROS通信機(jī)制主題通信機(jī)制主題在ROS中使用最為頻繁,其通信機(jī)制也較為復(fù)雜。基于發(fā)布/訂閱模型的主題通信機(jī)制如圖所示,在ROS中有兩個節(jié)點(diǎn);一個是發(fā)布者Talker,另一個是訂閱者Listener。兩個節(jié)點(diǎn)分別發(fā)布、訂閱同一個主題,對啟動順序沒有強(qiáng)制要求。假設(shè)Talker首先啟動,可以通過下面七步來分析建立通信的詳細(xì)過程。2.3ROS文件系統(tǒng)與通信機(jī)制2ROS通信及其工作機(jī)制ROS通信機(jī)制主題通信機(jī)制Talker注冊發(fā)布者Talker啟動,通過1234端口使用遠(yuǎn)程過程調(diào)用(RemoteProcedureCall,RPC)向ROSMaster注冊Talker的信息,包括所發(fā)布消息的主題名。然后ROSMaster會將節(jié)點(diǎn)的注冊信息加入注冊列表中。2.3ROS文件系統(tǒng)與通信機(jī)制2ROS通信及其工作機(jī)制ROS通信機(jī)制主題通信機(jī)制Listener注冊訂閱者Listener啟動,同樣通過RPC向ROSMaster注冊Listener的信息,包含需要訂閱的主題名。ROSMaster進(jìn)行信息匹配Master根據(jù)Listener的訂閱信息在注冊列表中進(jìn)行查找,如果沒有找到匹配的Talker,則等待Talker的加入;如果找到匹配的Talker,則通過RPC向Listener發(fā)送Talker的RPC地址信息。2.3ROS文件系統(tǒng)與通信機(jī)制2ROS通信及其工作機(jī)制ROS通信機(jī)制主題通信機(jī)制Listener發(fā)送連接請求Listener接收到ROSMaster發(fā)回的Talker地址信息,通過RPC向Talker發(fā)送連接請求,傳輸訂閱的主題名、消息類型及通信協(xié)議(TCP/UDP)。Talker確認(rèn)連接請求Talker接收到Listener發(fā)送的連接請求后,繼續(xù)通過RPC向Listener確認(rèn)連接信息,其中包含自身的TCP地址信息。2.3ROS文件系統(tǒng)與通信機(jī)制2ROS通信及其工作機(jī)制ROS通信機(jī)制主題通信機(jī)制Listener與Talker建立網(wǎng)絡(luò)連接Listener接收到確認(rèn)連接信息后,使用TCP與Talker建立網(wǎng)絡(luò)連接。Talker向Listener發(fā)布數(shù)據(jù)成功建立連接后,Talker開始向Listener發(fā)送主題數(shù)據(jù)。2.3ROS文件系統(tǒng)與通信機(jī)制2ROS通信及其工作機(jī)制ROS通信機(jī)制主題通信機(jī)制前五個步驟使用的通信協(xié)議都是RPC,最后發(fā)布數(shù)據(jù)的過程才使用到TCP。ROSMaster在節(jié)點(diǎn)建立連接的過程中起到了重要作用,但是并不參與節(jié)點(diǎn)之間實際數(shù)據(jù)傳輸。另外,節(jié)點(diǎn)建立連接后,可以關(guān)掉ROSMaster,節(jié)點(diǎn)之間的數(shù)據(jù)傳輸并不會受到影響,但是其他節(jié)點(diǎn)就無法加入這兩個節(jié)點(diǎn)之間的網(wǎng)絡(luò)了。2.3ROS文件系統(tǒng)與通信機(jī)制2ROS通信及其工作機(jī)制ROS通信機(jī)制服務(wù)通信機(jī)制服務(wù)是一種帶有應(yīng)答的通信機(jī)制,基于服務(wù)器/客戶端的服務(wù)通信機(jī)制如圖所示。與主題通信機(jī)制相比,減少了Listener與Talker之間的RPC通信。過程如下:2.3ROS文件系統(tǒng)與通信機(jī)制2ROS通信及其工作機(jī)制ROS通信機(jī)制服務(wù)通信機(jī)制Talker注冊發(fā)布者Talker啟動,通過1234端口使用RPC向ROSMaster注冊Talker信息,包括所提供的服務(wù)名,然后ROSMaster會將節(jié)點(diǎn)的注冊信息加入注冊列表中。Listener注冊訂閱者Listener啟動,同樣通過RPC向ROSMaster注冊Listener信息,包含需要訂閱的服務(wù)名。2.3ROS文件系統(tǒng)與通信機(jī)制2ROS通信及其工作機(jī)制ROS通信機(jī)制服務(wù)通信機(jī)制ROSMaster進(jìn)行信息匹配Master根據(jù)Listener的訂閱信息在注冊列表中進(jìn)行查找,如果沒有找到匹配的服務(wù)提供者,則等待該服務(wù)的提供者加入;如果找到匹配的服務(wù)提供者信息,則通過RPC向Listener發(fā)送Talker的TCP地址信息。2.3ROS文件系統(tǒng)與通信機(jī)制2ROS通信及其工作機(jī)制ROS通信機(jī)制服務(wù)通信機(jī)制Listener嘗試與Talker建立網(wǎng)絡(luò)連接Listener接收到Talker的地址信息后,使用TCP與Talker建立網(wǎng)絡(luò)連接,并且發(fā)送服務(wù)的請求數(shù)據(jù)。Talker向Listener發(fā)布服務(wù)應(yīng)答數(shù)據(jù)Talker接收到服務(wù)請求和參數(shù)后,開始執(zhí)行服務(wù)功能,執(zhí)行完后,向Listener發(fā)送應(yīng)答數(shù)據(jù)。2.3ROS文件系統(tǒng)與通信機(jī)制2ROS通信及其工作機(jī)制ROS通信機(jī)制參數(shù)管理機(jī)制參數(shù)類似于ROS中的全局變量,由ROSMaster進(jìn)行管理,基于RPC的參數(shù)管理機(jī)制較為簡單,不涉及TCP/UDP的通信,如圖所示。過程如下:2.3ROS文件系統(tǒng)與通信機(jī)制2ROS通信及其工作機(jī)制ROS通信機(jī)制參數(shù)管理機(jī)制Talker設(shè)置變量Talker使用RPC向ROSMaster發(fā)送參數(shù)設(shè)置數(shù)據(jù),包括參數(shù)名和參數(shù)值,ROSMaster會將參數(shù)名和參數(shù)值保存到參數(shù)列表中。Listener查詢參數(shù)值Listener通過RPC向ROSMaster發(fā)送參數(shù)查找請求,包含所要查找的參數(shù)名。2.3ROS文件系統(tǒng)與通信機(jī)制2ROS通信及其工作機(jī)制ROS通信機(jī)制參數(shù)管理機(jī)制ROSMaster向Listener發(fā)送參數(shù)值Master根據(jù)Listener的查找請求,在參數(shù)列表中進(jìn)行查找,查找到參數(shù)后,使用RPC將參數(shù)值發(fā)送給Listener。這里需要注意的是,如果Talker向ROSMaster更新參數(shù)值,Listener在不重新查詢參數(shù)值的情況下,是無法知道參數(shù)值已經(jīng)被更新的。在很多應(yīng)用場景中,需要動態(tài)參數(shù)更新機(jī)制,例如,在機(jī)器人導(dǎo)航及建圖應(yīng)用中,需要經(jīng)常修改程序中的參數(shù)值,此時可以使用回調(diào)函數(shù)(callback)進(jìn)行動態(tài)參數(shù)更新。2.4編寫第一個ROS程序1ROS功能包依賴管理安裝好ROS后,接著需要做兩項工作:一是建立本地ROS功能包依賴數(shù)據(jù)庫;二是ROS環(huán)境變量的設(shè)置(前文已經(jīng)介紹過了)。ROS功能包依賴管理是根據(jù)本地數(shù)據(jù)庫完成的。下載或編寫的功能包往往需要依賴其他的ROS功能包或第三方軟件包。ROS提供了一個便捷的功能包依賴管理工具:rosdep。rosdep是不依賴ROS獨(dú)立發(fā)布的工具之一,默認(rèn)安裝于/usr/bin/目錄下。2.4編寫第一個ROS程序1ROS功能包依賴管理如果本地還沒有安裝rosdep,則可以通過以下命令安裝:初始化并更新rosdep,建立本地ROS功能包依賴數(shù)據(jù)庫的命令如下。2.4編寫第一個ROS程序1ROS功能包依賴管理sudorosdepinit命令將在/etc/ros/rosdep/sources.list.d目錄下建立一個列表索引文件,文件內(nèi)容即為rosdep獲取依賴關(guān)系文件的地址。采用Groovy的ROS發(fā)行版本依賴關(guān)系文件地址由GitHub上rosdistro中的index.yaml決定。rosdepupdate命令則根據(jù)列表索引文件更新依賴數(shù)據(jù)庫,存放位置為~/.ros/rosdep/sources.cache目錄。執(zhí)行上面兩個命令會得到文件的存放位置。2.4編寫第一個ROS程序1ROS功能包依賴管理除上面說的初始化并更新rosdep外,rosdep用得最多的功能是檢查和安裝功能包的依賴。rosdep命令的參數(shù)如下:2.4編寫第一個ROS程序2ROS工作空間編譯構(gòu)建系統(tǒng)ROS前后出現(xiàn)了兩種不同的編譯構(gòu)建系統(tǒng)——rosbuild和catkin。catkin是官方推薦的ROS編譯構(gòu)建系統(tǒng),是ROS原編譯構(gòu)建系統(tǒng)rosbuild的繼承者。catkin通過綜合CMake宏和Python腳本,在CMake正常工作之前實現(xiàn)一些功能操作。與rosbuild相比,其設(shè)計更具有規(guī)則性,可以更好地發(fā)布功能包,支持交叉編譯,可移植性好。Groovy版本之后的功能包基本都是使用catkin構(gòu)建(build)的。2.4編寫第一個ROS程序2ROS工作空間catkin工作空間創(chuàng)建單個catkin功能包可以像普通的CMake項目一樣建成一個獨(dú)立的項目,但創(chuàng)建catkin工作空間后可以一次編譯構(gòu)建多個有依賴關(guān)系的功能包。catkin工作空間的創(chuàng)建由catkin本身完成。catkin一般在安裝ROS時已經(jīng)安裝完成,使用時需要設(shè)置環(huán)境變量。2.4編寫第一個ROS程序2ROS工作空間catkin工作空間創(chuàng)建catkin工作空間的創(chuàng)建命令如下:catkin工作空間創(chuàng)建好后,就具備了執(zhí)行catkin_make命令的條件,catkin_make命令必須在catkin工作空間的最頂層執(zhí)行。2.4編寫第一個ROS程序2ROS工作空間catkin工作空間創(chuàng)建catkin工作空間的文件結(jié)構(gòu)如下:2.4編寫第一個ROS程序2ROS工作空間工作空間覆蓋通常ROS核心功能包安裝在/opt/ros/ROS_DISTRO目錄下,而用戶的工作空間一般設(shè)置在用戶目錄下,用戶常常因為自身需求,而改動已發(fā)行的功能包或創(chuàng)建自己的功能包,并讓所有依賴于此功能包的調(diào)用都選擇用戶工作空間中的同名定制功能包,而非系統(tǒng)安裝目錄中的功能包。工作空間覆蓋就可以實現(xiàn)這個功能。2.4編寫第一個ROS程序2ROS工作空間工作空間覆蓋工作空間覆蓋實際上就是系統(tǒng)環(huán)境鏈的覆蓋。系統(tǒng)環(huán)境鏈覆蓋能讓ROS找到安裝在系統(tǒng)目錄中的功能包,以及用戶工作空間中的功能包。對于兩處同名的功能包,則采取遮蔽下層的策略。這一策略的實現(xiàn)主要通過環(huán)境變量實現(xiàn),覆蓋的頂層相關(guān)路徑放置在各環(huán)境變量的最前面,也就優(yōu)先搜索頂層相關(guān)路徑。2.4編寫第一個ROS程序2ROS工作空間環(huán)境變量不管是ROS非獨(dú)立發(fā)布的工具還是功能包,其運(yùn)行都是要依賴系統(tǒng)環(huán)境變量的設(shè)置(安裝ROS系統(tǒng)后要設(shè)置環(huán)境變量)。ROS默認(rèn)的環(huán)境變量都是通過ROS中形如setup.XXX這樣的腳本來完成設(shè)置的(XXX為所使用腳本的名稱)。在ROSKinetic版本中,使用setup.bash設(shè)置。為了避免每次新開一個腳本,就執(zhí)行一次source命令,通常把上面的命令添加到~/.bashrc文件中。這樣,新開bash腳本時,會自動執(zhí)行.bashrc中的腳本。2.4編寫第一個ROS程序2ROS工作空間catkin工作空間覆蓋catkin工作空間執(zhí)行catkin_make命令時會在devel目錄下生成系統(tǒng)環(huán)境設(shè)置腳本(setup.XXX),執(zhí)行catkin_makeinstall命令時會在安裝目錄下生成類似的系統(tǒng)環(huán)境設(shè)置腳本,這些腳本已包含ROS安裝目錄環(huán)境設(shè)置腳本的設(shè)置內(nèi)容,也會保留其他腳本已經(jīng)設(shè)置的環(huán)境變量。通過這些腳本就可以實現(xiàn)catkin工作空間覆蓋。2.4編寫第一個ROS程序3功能包創(chuàng)建與編譯使用構(gòu)建系統(tǒng)工具創(chuàng)建功能包c(diǎn)atkin功能包主要由以下三部分組成。package.xml文件:功能包清單,必須包含。CMakeLists.txt文件:編譯器編譯功能包的規(guī)則,必須包含。功能包:在每個文件夾下只能有一個功能包,且功能包之間不允許嵌套。2.4編寫第一個ROS程序3功能包創(chuàng)建與編譯使用構(gòu)建系統(tǒng)工具創(chuàng)建功能包先進(jìn)入源碼空間,然后使用catkin_create_pkg命令創(chuàng)建名為beginner_tutorials,依賴std_msgs、rospy、roscpp的功能包:其中,beginner_tutorials為功能包的名字(必填),其后為此功能包的依賴列表。2.4編寫第一個ROS程序3功能包創(chuàng)建與編譯使用構(gòu)建系統(tǒng)工具創(chuàng)建功能包c(diǎn)atkin_create_pkg命令的語法如下:依賴項std_msgs包含了常見消息類型,表示基本數(shù)據(jù)類型和其他基本的消息構(gòu)造,如多維數(shù)組;rospy是使用Python實現(xiàn)的ROS各種功能;roscpp是使用C++實現(xiàn)的ROS各種功能。它們提供了一個客戶端庫,讓Python和C++程序員能夠調(diào)用這些接口,快速完成與ROS的主題、服務(wù)和參數(shù)相關(guān)的開發(fā)工作。2.4編寫第一個ROS程序3功能包創(chuàng)建與編譯package.xml文件功能包的根目錄下,有兩個文件:package.xml和CMakeLists.txt,這兩個文件是catkin功能包必須包含的文件,它們是catkin_create_pkg命令根據(jù)下面的模板文件生成的:2.4編寫第一個ROS程序3功能包創(chuàng)建與編譯

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論