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

下載本文檔

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

文檔簡(jiǎn)介

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

。如圖所示,

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

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

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

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

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

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論