【自己動手做一臺SLAM導(dǎo)航機(jī)器人】附錄C:如何選擇ROS機(jī)器人平臺進(jìn)行SLAM導(dǎo)航入門

本專欄目錄
前言
第一章:Linux基礎(chǔ)
第二章:ROS入門
第三章:感知與大腦
第四章:差分底盤設(shè)計(jì)
第五章:樹莓派3開發(fā)環(huán)境搭建
第六章:SLAM建圖與自主避障導(dǎo)航
第七章:語音交互與自然語言處理
附錄A:用于ROS機(jī)器人交互的Android手機(jī)APP開發(fā)
附錄B:用于ROS機(jī)器人管理調(diào)度的后臺服務(wù)器搭建
附錄C:如何選擇ROS機(jī)器人平臺進(jìn)行SLAM導(dǎo)航入門
視頻教程
https://www.bilibili.com/video/BV1jS4y1a7Lz
1.SLAM與ROS的關(guān)系
2.ROS移動機(jī)器人的整體構(gòu)造
3.商業(yè)應(yīng)用ROS機(jī)器人
4.科研學(xué)習(xí)ROS機(jī)器人

下面這本書是本篇文章的參考文獻(xiàn),大家有需要可以入手一本:


1.1.關(guān)于SLAM
在了解SLAM之前,需要先對機(jī)器人有一個(gè)整體的認(rèn)識。機(jī)器人是一個(gè)復(fù)雜的裝置,涉及到執(zhí)行機(jī)構(gòu)、感知、決策等主要環(huán)節(jié)。機(jī)器人上的配備的常用執(zhí)行機(jī)構(gòu)有輪式運(yùn)動底盤、機(jī)械手臂、音響和顯示屏;機(jī)器人上的感知設(shè)備通常有激光雷達(dá)、聲吶、攝像頭、IMU、輪式里程計(jì)編碼盤、麥克風(fēng)、觸摸感應(yīng);機(jī)器人的決策是機(jī)器人智能的體現(xiàn),機(jī)器人通常借助感知裝置持續(xù)跟外部環(huán)境進(jìn)行交互,從而來獲取機(jī)器人的狀態(tài)和環(huán)境的狀態(tài),我們可以簡單的把機(jī)器人獲取自身狀態(tài)的行為叫做自我認(rèn)知,把機(jī)器人獲取環(huán)境狀態(tài)的行為叫做環(huán)境認(rèn)知。機(jī)器人的自我認(rèn)知和環(huán)境認(rèn)知往往是相輔相成互相作用的,所以這里就不做區(qū)分了。由于目前的機(jī)器人智能還比較低級,所以這里講到的機(jī)器人認(rèn)知也是低級別的,例如人臉識別、語音識別、機(jī)器人定位、環(huán)境障礙物探測。有了認(rèn)知,機(jī)器人就可以幫人類完成很多工作了,例如搬運(yùn)貨物、照看小孩、陪伴閑聊、幫忙管理家里的智能設(shè)備、查詢天氣交通新聞資訊等等。我們可以把機(jī)器人幫助人類完成的這些個(gè)工作叫做機(jī)器人的技能,機(jī)器人擁有的這些個(gè)技能我們可以簡單的理解為機(jī)器人低級別的思想。機(jī)器人的軀殼+機(jī)器人的認(rèn)知+機(jī)器人的思想,基本上就是機(jī)器人該有的模樣了。

這樣一看,機(jī)器人是一個(gè)超級復(fù)雜的東西,但是機(jī)器人上現(xiàn)在關(guān)鍵性的技術(shù)就那么幾個(gè)。其實(shí),學(xué)界和工業(yè)界熱門的研究和開發(fā)也是圍繞這幾個(gè)關(guān)鍵技術(shù)展開的。關(guān)鍵技術(shù)1:機(jī)器人移動底盤,絕大部分機(jī)器人需要依靠移動底盤來行走,當(dāng)然除了水下機(jī)器人和腿型機(jī)器人這些特殊形態(tài)外,電機(jī)的效率功率、電機(jī)控制電路、編碼器檢測、底盤運(yùn)動模型等組成部分,機(jī)器人底盤是AGV智能車、家庭服務(wù)機(jī)器人、農(nóng)業(yè)工業(yè)自動化移動平臺必不可少的關(guān)鍵組件。關(guān)鍵技術(shù)2:機(jī)械手臂,機(jī)器人抓取物品、組裝零件、寫字畫畫都需要用到機(jī)械手臂,高性能的舵機(jī)、精密的機(jī)械關(guān)節(jié)、智能關(guān)節(jié)控制算法等幾個(gè)組成部分,機(jī)械手臂在工業(yè)自動化領(lǐng)域已經(jīng)得到廣泛應(yīng)用,比如汽車自動裝配、手機(jī)零配件裝配,不過應(yīng)用在服務(wù)機(jī)器人和AGV智能車上的輕便微型機(jī)械手臂目前還不成熟或者說還不普及。關(guān)鍵技術(shù)3:SLAM導(dǎo)航,這里終于講到了大名鼎鼎的SLAM技術(shù)了,學(xué)術(shù)上的SLAM是指同時(shí)定位和建圖技術(shù),但是平時(shí)大家說的SLAM通常是廣義的機(jī)器人定位+環(huán)境建圖+自主導(dǎo)航+動態(tài)避障,我們這里也討論的是廣義的SLAM,簡單點(diǎn)說SLAM技術(shù)幫助機(jī)器人認(rèn)識環(huán)境并在環(huán)境中自由行走到目的地。關(guān)鍵技術(shù)4:語音識別,語音交互是大部分機(jī)器人的標(biāo)配,人類通過語音交互向機(jī)器人下達(dá)任務(wù)指令,語音交互包括語音識別、語音合成、自然語言處理等部分組成,目前基于語音交互做出來的小機(jī)器人也是遍地開花。關(guān)鍵技術(shù)5:物體識別,機(jī)器人借助攝像頭對自己所處環(huán)境的各種事物進(jìn)行識別,比如流行的人臉識別、車牌識別、手勢識別等等。
關(guān)鍵技術(shù)1:機(jī)器人移動底盤
關(guān)鍵技術(shù)2:機(jī)械手臂
關(guān)鍵技術(shù)3:SLAM導(dǎo)航
關(guān)鍵技術(shù)4:語音交互
關(guān)鍵技術(shù)5:物體識別
本人在這里總結(jié)歸納了機(jī)器人上的5大關(guān)鍵技術(shù),由于個(gè)人能力和篇幅限制原因,接下來的內(nèi)容將主要涉足機(jī)器人SLAM導(dǎo)航領(lǐng)域的相關(guān)技術(shù)。
SLAM導(dǎo)航技術(shù),主要用來解決機(jī)器人的定位、環(huán)境建圖、自主導(dǎo)航、動態(tài)避障等問題。SLAM這項(xiàng)技術(shù)其實(shí)已經(jīng)有幾十年的歷史了,SLAM最早是出現(xiàn)在軍事應(yīng)用中,比如勇氣號火星探測車,在不能實(shí)時(shí)遙控的未知環(huán)境行星上的探測車為了執(zhí)行任務(wù),需要借助SLAM技術(shù)來導(dǎo)航和避障。后來慢慢的SLAM技術(shù)就從軍用轉(zhuǎn)民用了,有了我們現(xiàn)在看到的小到家里的掃地機(jī)器人大到無人駕駛汽車的各種SLAM應(yīng)用,還有各種AR和VR應(yīng)用很多也用到了SLAM技術(shù)。
其實(shí)單獨(dú)的定位技術(shù)我們?nèi)粘I钪心芤姷胶芏?,比如最常用的GPS定位技術(shù)、wifi定位技術(shù)、磁條導(dǎo)軌定位技術(shù)。單獨(dú)的環(huán)境建圖技術(shù)也有很多成熟的應(yīng)用,比如醫(yī)學(xué)中的CT對人體的全方位掃描技術(shù)、電影制作中對某個(gè)三維物體的掃描建模、隧道勘探測繪等。但是面對機(jī)器人這樣一個(gè)復(fù)雜的應(yīng)用,單獨(dú)的定位技術(shù)和單獨(dú)的環(huán)境建圖技術(shù)都不能很好的解決問題,于是結(jié)合了定位與建圖的SLAM技術(shù)就出現(xiàn)了。接下來,簡單的梳理一下定位、建圖、SLAM同時(shí)定位于建圖、SLAM導(dǎo)航技術(shù)的理論發(fā)展過程。
(1)機(jī)器人中的不確定性
機(jī)器人所處的環(huán)境存在大量不可預(yù)測性,機(jī)器人中傳感器的測量存在噪聲和干擾,電機(jī)等執(zhí)行機(jī)構(gòu)也存在一定程度的不可靠性,還有一些不確定性是由機(jī)器人的軟件導(dǎo)致的。要研究機(jī)器人的感知和行為就必須對這些不確定性進(jìn)行建模,利用概率理論可以明確的表示這種不確定性,并且可以利用概率算法來對概率分布進(jìn)行推理計(jì)算,以數(shù)學(xué)的方式合理的表示機(jī)器人的模糊性和置信度。簡單點(diǎn)說,就是通過對機(jī)器人的概率建模,可以對機(jī)器人的不確定性進(jìn)行明確的可計(jì)算性的表示。
(2)機(jī)器人中的狀態(tài)估計(jì)
處理機(jī)器人中的這種不確定性的概率技術(shù)我們稱之為概率機(jī)器人技術(shù),其核心是用傳感器數(shù)據(jù)來估計(jì)狀態(tài)的思路。

機(jī)器人通過傳感器對機(jī)器人自身狀態(tài)和環(huán)境狀態(tài)進(jìn)行測量,這里的機(jī)器人狀態(tài)包括機(jī)器人位姿、運(yùn)動里程計(jì)信息、線速度和角速度信息等,而環(huán)境狀態(tài)包括環(huán)境中物體的位置、物體的特征等。機(jī)器人同時(shí)利用控制動作來調(diào)用執(zhí)行機(jī)構(gòu)和環(huán)境進(jìn)行交互,這里的控制動作包括機(jī)器人運(yùn)動、物體操縱等。這樣,機(jī)器人在通過傳感器測量和控制動作與環(huán)境進(jìn)行交互的過程中,對環(huán)境模型和機(jī)器人位姿進(jìn)行估計(jì)。對環(huán)境模型的迭代估計(jì)就是我們常說的環(huán)境建圖,對機(jī)器人位姿的迭代估計(jì)就是我們常說的機(jī)器人定位。
利用傳感器測量和控制動作對環(huán)境模型和機(jī)器人位姿進(jìn)行估計(jì)由概率法則迭代計(jì)算來完成。控制動作的概率模型我們稱之為運(yùn)動概率模型,傳感器測量的概率模型我們稱之為測量概率模型,這里的概率法則迭代計(jì)算過程就是大名鼎鼎的貝葉斯迭代網(wǎng)絡(luò)。
?

(3)貝葉斯濾波及其各種實(shí)現(xiàn)算法
通過對機(jī)器人中狀態(tài)估計(jì)的了解,我們知道了貝葉斯概率法則起著重要的作用,而且大部分計(jì)算置信度的通用算法都是由貝葉斯算法給出的。這里說的貝葉斯算法也稱作貝葉斯濾波,該算法根據(jù)測量和控制數(shù)據(jù)計(jì)算置信度分布bel()。貝葉斯濾波是一種遞歸算法,也就是說t時(shí)刻的置信度由t-1時(shí)刻的置信度來計(jì)算。
貝葉斯濾波算法具有兩個(gè)基本步驟,即預(yù)測和更新。根據(jù)運(yùn)動概率模型,可以對初步的預(yù)測置信度分布;然后利用測量概率模型,對上一步預(yù)測得到的置信度分布做進(jìn)一步的更新計(jì)算。貝葉斯濾波的具體實(shí)現(xiàn)算法有多種,根據(jù)置信度表示方式的不同,貝葉斯濾波的具體實(shí)現(xiàn)算法可以分為參數(shù)化實(shí)現(xiàn)算法和非參數(shù)化實(shí)現(xiàn)算法兩種。參數(shù)化實(shí)現(xiàn)算法,就是將置信度分布用多元高斯分布的參數(shù)進(jìn)行表示。根據(jù)采用不同高斯分布的參數(shù),又可以分為卡爾曼濾波和信息濾波。非參數(shù)化實(shí)現(xiàn)算法,就是將置信度分布用有限數(shù)量的具體值來近似表示。根據(jù)采用不同具體值近似的方法,又可以分為直方圖濾波和粒子濾波。
?

由于貝葉斯濾波理論及各種具體實(shí)現(xiàn)算法涉及到大量深奧的數(shù)學(xué)知識,由于篇幅和個(gè)人能力受限,就不展開了,有興趣的朋友可以參閱《概率機(jī)器人》這本書,這里面有細(xì)致的講解和推導(dǎo)。為了加深大家在閱讀和編寫代碼時(shí)的理解,這里貼出了貝葉斯濾波的偽代碼實(shí)現(xiàn),和機(jī)器人中廣泛應(yīng)用的卡爾曼濾波和粒子濾波的展示實(shí)例。
?


?


?

(4)機(jī)器人中的運(yùn)動與測量概率模型
了解了機(jī)器人中的狀態(tài)估計(jì)及各種濾波概率算法后,我們發(fā)現(xiàn)機(jī)器人的運(yùn)動和測量概率模型對算法中的預(yù)測和更新步驟起著至關(guān)重要的作用。
運(yùn)動模型我們都知道,就是機(jī)器人一個(gè)地方運(yùn)動到另一個(gè)地方,位姿變化與運(yùn)動控制量之間的關(guān)系。那什么叫運(yùn)動概率模型呢?由于控制量作用在機(jī)器人上使機(jī)器人的位姿變化的過程是一個(gè)存在誤差的不確定過程,所以控制量作用后產(chǎn)生的結(jié)果需要用一個(gè)概率分布來描述,這就是運(yùn)動概率模型。根據(jù)運(yùn)動控制量的不同,可以分成速度運(yùn)動模型和里程計(jì)運(yùn)動模型。速度運(yùn)動模型中,控制量是線速度和角速度;里程計(jì)運(yùn)動模型中,控制量是機(jī)器人的前后時(shí)刻的相對位姿。速度運(yùn)動模型中,線速度和角速度會受到機(jī)器人底盤構(gòu)造的約束。實(shí)驗(yàn)表明,里程計(jì)運(yùn)動模型雖然仍存在誤差,但比速度運(yùn)動模型要更精確。
?

同樣的道理,機(jī)器人上的傳感器在測量過程中存在誤差,所以測量結(jié)果需要用一個(gè)概率分布來描述。主要討論當(dāng)下最流行的機(jī)器人測距儀,即激光掃描測距儀。由測距儀的近似物理模型,可以沿著一個(gè)波束測量到附近物體的距離,也就是波束模型。另一種測距儀模型不依賴任何傳感器的物理模型,而是將傳感器掃描到的終點(diǎn)值映射到地圖的全局坐標(biāo)空間,這就是似然域模型。估計(jì)一個(gè)測量和地圖之間的相關(guān)性中,測距儀用到了地圖匹配模型。還有一種是從傳感器原始測量中提取特征,提取出來的特征我們可以稱之為路標(biāo),這就是路標(biāo)模型。
?

(5)移動機(jī)器人定位與建圖
?

在了解了機(jī)器人中的狀態(tài)估計(jì)、狀態(tài)估計(jì)的各種概率實(shí)現(xiàn)算法、機(jī)器人運(yùn)動與測量概率模型,我們再來重新理解上面這樣一個(gè)經(jīng)典的貝葉斯迭代網(wǎng)絡(luò),就很好理解了,這個(gè)里面包含了機(jī)器人定位和建圖兩大問題。機(jī)器人的定位其實(shí)就是位姿估計(jì)問題,位姿估計(jì)的概率實(shí)現(xiàn)算法可以有上面提到的EKF、AMCL等算法來實(shí)現(xiàn),由于這兩種算法在機(jī)器人位姿估計(jì)中都很流行,所以就不多展開了。機(jī)器人的建圖其實(shí)就是環(huán)境特征估計(jì)問題,同樣也可以用概率的方法就行估計(jì)。
(6)SLAM同時(shí)定位與建圖
上面已經(jīng)單獨(dú)的提出了機(jī)器人定位與機(jī)器人建圖的方法,但是獨(dú)立的定位問題是建立在地圖已知的情況下的,單獨(dú)的建圖問題也是建立在定位已知的情況下的。當(dāng)機(jī)器人不能得到環(huán)境地圖,也不知道自身位姿的時(shí)候,SLAM問題就出現(xiàn)了。也就是說SLAM要同時(shí)的進(jìn)行機(jī)器人定位和建圖,這個(gè)問題比單獨(dú)的定位和單獨(dú)的建圖都要難得多。
在討論具體的SLAM算法之前,我們先要了解SLAM的兩種主要形式:在線SLAM問題和全SLAM問題。
?

在線SLAM算法的代表是EKF SLAM,歷史上最早并可能是最有影響力的SLAM算法,可以說是SLAM研究的元老級算法。EKF SLAM中的地圖是基于特征的,地圖由點(diǎn)地標(biāo)組成。除了估計(jì)機(jī)器人當(dāng)前的位姿,EKF SLAM算法還估計(jì)路徑上遇到的所有地標(biāo)的坐標(biāo),也就是機(jī)器人位姿和地圖地標(biāo)點(diǎn)包含進(jìn)聯(lián)合狀態(tài)矢量里,算法對該聯(lián)合狀態(tài)矢量進(jìn)行估計(jì)。
?

全SLAM算法的代表是GraphSLAM,該算法將機(jī)器人的運(yùn)動路徑和測量組件成一個(gè)軟約束的圖,利用圖論中的優(yōu)化算法對整個(gè)圖中的軌跡點(diǎn)和測量點(diǎn)進(jìn)行估計(jì)。由于圖的稀疏性特點(diǎn),可以大大加快計(jì)算。
?

EKF SLAM和GraphSLAM是兩個(gè)極端。EKF SLAM需要取得每一時(shí)刻的信息,把信息分解為概率分布,因此每一步的計(jì)算代價(jià)都非常昂貴。而GraphSLAM剛好相反,只是簡單的積累每一時(shí)刻的信息,也就是簡單的將收到的信息存儲下來,然后可以離線的進(jìn)行推理的步驟,加之存儲下來的信息的稀疏性,因此GraphSLAM計(jì)算的開銷是比較小的,但是隨著地圖規(guī)模擴(kuò)大算法會消耗越來越多的內(nèi)存直至崩潰。面對這兩個(gè)極端問題,當(dāng)然就會有介于EKF SLAM和GraphSLAM是兩個(gè)極端之間的折中的方法,就是SEIF SLAM。SEIF SLAM算法繼承了EKF SLAM信息表示的高效性,也保留了GraphSLAM計(jì)算代價(jià)小的優(yōu)點(diǎn),可以說SEIF SLAM是高效和可實(shí)現(xiàn)的SLAM算法。還有另外一種高效和可實(shí)現(xiàn)的SLAM算法,就是FastSLAM,該算法使用粒子濾波估計(jì)機(jī)器人的路徑,我們都知道粒子濾波和眾多基于參數(shù)化的濾波算法相比存在計(jì)算開銷小和便于處理非線性模型的優(yōu)勢,基于FastSLAM的多個(gè)變種算法在機(jī)器人已經(jīng)得到廣泛的應(yīng)用了,比如gmapping等等,由于篇幅限制就不展開了。
(7)現(xiàn)今主流的SLAM算法
現(xiàn)今在機(jī)器人上使用最廣泛的應(yīng)該算激光SLAM了,在掃地機(jī)器人、服務(wù)機(jī)器人、AGV智能車上普遍搭載了單線激光雷達(dá)SLAM算法,像無人駕駛汽車、戶外機(jī)器人則普遍搭載了多線激光雷達(dá)SLAM。另一種熱門的研究是視覺SLAM,視覺SLAM有配備單目、雙目、深度相機(jī)的多種形態(tài),并且根據(jù)采用視覺特征點(diǎn)的區(qū)別還有直接法、半直接法、稀疏法之分。然后還有就是各種復(fù)合式的SLAM算法,比如激光與視覺融合的SLAM、融合了IMU的視覺SLAM。最后,就是一些最新穎的SLAM算法,比如用深度學(xué)習(xí)來做的端到端的SLAM、基于物體識別的語義SLAM。由于本文的重點(diǎn)不是SLAM綜述,所以具體的算法性能比較就不展開了,有興趣的朋友可以參閱相關(guān)SLAM綜述文章。
?

(8)機(jī)器人自主導(dǎo)航與動態(tài)避障
機(jī)器人用SLAM構(gòu)建出了環(huán)境的地圖,在已知了環(huán)境地圖的情況下,可以用SLAM的重定位功能或者單獨(dú)的基于已知地圖的定位算法比如AMCL來進(jìn)行機(jī)器人的定位。環(huán)境地圖和機(jī)器人位姿都有了,就可以開始來做自主導(dǎo)航和避障了。機(jī)器人自主導(dǎo)航可以分成兩個(gè)實(shí)現(xiàn)部分,第一個(gè)部分就是路徑規(guī)劃,第二個(gè)部分就是控制策略。路徑規(guī)劃利用地圖信息尋找一條能到達(dá)目標(biāo)的全局路徑,全局路徑在機(jī)器人導(dǎo)航過程中起到全局戰(zhàn)略性的指導(dǎo)。理想情況是,機(jī)器人完全按照全局路徑移動到目標(biāo),但是實(shí)際環(huán)境往往是多變和復(fù)雜的,而且機(jī)器人實(shí)際控制也會存在偏差,所以機(jī)器人的實(shí)際運(yùn)動控制需要有一套控制策略來最終實(shí)現(xiàn)??刂撇呗孕枰M量逼近全局路徑、盡量遠(yuǎn)離障礙物、最快時(shí)間到達(dá)目標(biāo)等因素,這些因素可以用一個(gè)回報(bào)函數(shù)來評價(jià),尋找最佳控制策略的過程中遞歸的計(jì)算每一次行動的回報(bào)函數(shù)值。這樣控制策略在回報(bào)函數(shù)的指引下,就可以給出最佳的控制策略,控制策略控制機(jī)器人完成實(shí)際的移動。
?

1.2.關(guān)于ROS
ROS機(jī)器人操作系統(tǒng)在機(jī)器人應(yīng)用領(lǐng)域很流行,依托代碼開源和模塊間協(xié)作等特性,給機(jī)器人開發(fā)者帶來了很大的方便。
ROS是一個(gè)適用于機(jī)器人的開源的元操作系統(tǒng)。其實(shí)它并不是一個(gè)真正的操作系統(tǒng),其底層的任務(wù)調(diào)度、編譯、尋址等任務(wù)還是由Linux操作系統(tǒng)完成,也就是說ROS實(shí)際上是運(yùn)行在Linux上的次級操作系統(tǒng)。但是ROS提供了操作系統(tǒng)應(yīng)用的各種服務(wù)(如:硬件抽象、底層設(shè)備控制、常用函數(shù)實(shí)現(xiàn)、進(jìn)程間消息傳遞、軟件包管理等),也提供了用于獲取、編譯、跨平臺運(yùn)行代碼的工具和函數(shù)。ROS主要采用松耦合點(diǎn)對點(diǎn)進(jìn)程網(wǎng)絡(luò)通信,目前主要還是支持Ubuntu系統(tǒng),windows和Mac OS目前支持的還不好,所以推薦在Ubuntu系統(tǒng)上安裝使用ROS。
總結(jié)起來就是,使用ROS能夠方便迅速的搭建機(jī)器人原型。ROS使用了BSD許可證,這是一個(gè)很寬松的開放許可證,允許在商業(yè)和閉源產(chǎn)品中使用,這一點(diǎn)對開發(fā)產(chǎn)品的創(chuàng)業(yè)公司很重要。ROS當(dāng)前的代碼統(tǒng)計(jì)量,總行數(shù)超過1400萬,作者超過2477名。代碼語言以C++為主,63.98%的代碼是用C++編寫的,排名第二的是python,占13.57%,可以說ROS基本上都是使用這兩種語言,來實(shí)現(xiàn)大部分的功能。

大家一聽到ROS機(jī)器人操作系統(tǒng),就被操作系統(tǒng)幾個(gè)字給嚇到了。其實(shí),ROS就是一個(gè)分布式的通信機(jī)制,幫助程序進(jìn)程之間更方便的通信。由于機(jī)器人是一個(gè)多部件的設(shè)備,四肢、視覺、聽覺等部位都有配套的程序進(jìn)行控制,那么要協(xié)調(diào)這些部位怎么辦呢?就需要讓這些分散的部位能夠互相的通信,這正是ROS被設(shè)計(jì)的最初目的。隨著越來越多的人參與到ROS的開發(fā)完善,ROS才發(fā)展成今天很完善很系統(tǒng)的樣子來,涵蓋了大量的第三方工具和大量的實(shí)用的開源算法軟件包。搞懂了ROS的通信機(jī)制后,機(jī)器人的各種算法的開發(fā)還是基于我們常見的C++和Python的。
節(jié)點(diǎn)是主要的計(jì)算執(zhí)行進(jìn)程,功能包中創(chuàng)建的每個(gè)可執(zhí)行程序在被啟動加載到系統(tǒng)進(jìn)程中后,該進(jìn)程就是一個(gè)ROS節(jié)點(diǎn),node1、node2、node3等都是節(jié)點(diǎn)(node)。節(jié)點(diǎn)都是各自獨(dú)立的可執(zhí)行文件,能夠通過主題(topic)、服務(wù)(server)或參數(shù)服務(wù)器(parameter server)與其他節(jié)點(diǎn)通信。ROS通過使用節(jié)點(diǎn)將代碼和功能解耦,提高了系統(tǒng)的容錯力和可維護(hù)性。所以你最好讓每一個(gè)節(jié)點(diǎn)都具有特定的單一的功能,而不是創(chuàng)建一個(gè)包羅萬象的大節(jié)點(diǎn)。節(jié)點(diǎn)如果用c++進(jìn)行編寫,需要用到ROS提供的庫roscpp;節(jié)點(diǎn)如果用python進(jìn)行編寫,需要用到ROS提供的庫rospy。

如果你是剛剛接手ROS方面的開發(fā)或項(xiàng)目,你肯定會覺得ROS中的各種概念非常奇怪,但是當(dāng)你對ROS的使用熟練之后,你就覺得這些概念很好理解了。與其他操作系統(tǒng)相似,一個(gè)ROS程序的不同組件要被放在不同的文件夾下,這些文件夾是根據(jù)不同的功能來對文件進(jìn)行組織的。

1.3.SLAM與ROS的關(guān)系
SLAM最核心的地方在算法,側(cè)重點(diǎn)在于如何構(gòu)建出效果好的地圖,并為機(jī)器人導(dǎo)航提供更好的數(shù)據(jù)保障。ROS幫忙解決傳感器驅(qū)動、顯示、各種核心算法間的溝通協(xié)調(diào)問題。如果做商用產(chǎn)品就另當(dāng)別論了,商業(yè)的產(chǎn)品一般會專門開發(fā)自己的一套驅(qū)動、調(diào)度、顯示的系統(tǒng),或者拿ROS系統(tǒng)來裁剪以保障穩(wěn)定性和效率。
2.ROS移動機(jī)器人的整體構(gòu)造
2.1.硬件構(gòu)造解析
?

一個(gè)典型的ROS移動機(jī)器人的硬件構(gòu)造包括:帶編碼器的減速電機(jī)、電機(jī)驅(qū)動板、IMU模塊、激光雷達(dá)、ROS主機(jī)、麥克風(fēng)、攝像頭、喇叭。帶編碼器的減速電機(jī)、電機(jī)驅(qū)動板、IMU模塊、激光雷達(dá)應(yīng)該是SLAM導(dǎo)航避障的標(biāo)配硬件,ROS主機(jī)是機(jī)器人的計(jì)算中心(運(yùn)行SLAM導(dǎo)航算法等),麥克風(fēng)、攝像頭、喇叭是完成語音交互和圖像感知時(shí)需要的。
2.2.電機(jī)解析
(1)電機(jī)的種類
按照電機(jī)的電源類型分為直流電機(jī)、交流電機(jī),按照電機(jī)的換相方式分為有刷電機(jī)、無刷電機(jī),按照電機(jī)轉(zhuǎn)子的構(gòu)造可以分為內(nèi)轉(zhuǎn)子電機(jī)、外轉(zhuǎn)子電機(jī)。
?

(2)減速箱
電機(jī)在實(shí)際的使用中,往往配合減速箱一起使用,來提高輸出力矩和載重性能。減速箱有普通的減速箱和行星減速箱。行星減速箱的優(yōu)勢是產(chǎn)生同等減速比條件下減速箱體積可以更小,一般一些對體積敏感的地方用的多吧。
(3)編碼器
編碼器起著對電機(jī)轉(zhuǎn)速測量反饋的重要部件,有霍爾編碼器、光電編碼器、碳刷編碼器等,編碼器通常采用正交編碼去形式進(jìn)行信號輸出,也就是AB兩相信號正交輸出,有些還會有Z相信號對轉(zhuǎn)過一圈進(jìn)行脈沖輸出。
(4)電調(diào)
電調(diào)產(chǎn)生電機(jī)需要的相位信號,并且通過PWM等方式對電機(jī)轉(zhuǎn)速進(jìn)行調(diào)節(jié)。像一些小功率的直流有刷電機(jī),電調(diào)其實(shí)就是一個(gè)H全橋電路,PWM信號控制H橋的四個(gè)臂起到控制電機(jī)轉(zhuǎn)速和轉(zhuǎn)向的目的。像一些大功率的直流無刷電機(jī),電調(diào)的構(gòu)造就比較復(fù)雜了,電調(diào)需要實(shí)現(xiàn)多相控制信號產(chǎn)生、電子換相、保護(hù)等。
?

(5)移動機(jī)器人電機(jī)選型
電機(jī)是移動機(jī)器人的動力核心,所以選擇合適的電機(jī)對一個(gè)移動機(jī)器人還是很重要的。電機(jī)的選型不僅要考慮參數(shù)性能,比如轉(zhuǎn)速、力矩、載重、體積,還要考慮成本、安全、可實(shí)現(xiàn)性。如果是10KG載重級別的小型移動機(jī)器人,可以選擇DC 12V帶編碼直流有刷減速電機(jī)就可以了。如果載重在30KG及以上的移動機(jī)器人的話,就需要選擇功率和效率更高的無刷電機(jī)了,無刷電機(jī)的功率和減速箱參數(shù)可以根據(jù)實(shí)際機(jī)器人的載重和運(yùn)動速度來選擇。
?


2.3.電機(jī)驅(qū)動板解析
在了解過移動機(jī)器人的電機(jī)及選型,很自然就會想到接下來用什么來控制電機(jī)動起來呢?電機(jī)控制需要有PID控制,所以電機(jī)驅(qū)動板主要是用來實(shí)現(xiàn)PID控制的,同時(shí)電機(jī)驅(qū)動板也負(fù)責(zé)和上位機(jī)通信實(shí)時(shí)解析上位機(jī)發(fā)過來的速度指令和反饋電機(jī)的速度信息給上位機(jī)。電機(jī)驅(qū)動板一般選用的是STM32或者Arduino單片機(jī)這樣的嵌入式MCU板子,有朋友可能會問既然都有上位機(jī)了(這里的上位機(jī)通常是電腦或搭載了操作系統(tǒng)的ARM主機(jī))為什么不直接拿上位機(jī)來控制電機(jī)呢?首先,電機(jī)控制PID是實(shí)時(shí)性算法,也就是嚴(yán)格的實(shí)時(shí)時(shí)鐘驅(qū)動的邏輯,一般的上位機(jī)系統(tǒng)不能滿足這種高實(shí)時(shí)性的需求;另外就是出于系統(tǒng)解耦合和模塊化設(shè)計(jì)的考慮,單獨(dú)用一個(gè)價(jià)格便宜的MCU來實(shí)現(xiàn)電機(jī)控制。
?

電機(jī)驅(qū)動板的另一個(gè)重要功能是跟上位機(jī)通信,借助上位機(jī)上的ROS驅(qū)動程序?qū)崿F(xiàn)用ROS來操控電機(jī)并獲取電機(jī)編碼器反饋的里程計(jì)信息。也就是說,電機(jī)驅(qū)動板+電調(diào)+電機(jī)組成的一個(gè)整體的硬件可以當(dāng)做是ROS機(jī)器人的一個(gè)傳感器來使用,只需要在上位機(jī)上啟動相應(yīng)的ROS驅(qū)動程序,就可以在ROS中直接操控電機(jī)和獲取里程計(jì)了。這樣的一個(gè)效果就是前面提到的系統(tǒng)解耦合與模塊化的設(shè)計(jì)思想,這樣的設(shè)計(jì)對很多不懂硬件的ROS開發(fā)工程師來說是非常友好的,畢竟不用考慮繁瑣的硬件問題了。

2.4.底盤驅(qū)動方式的解析
在了解了電機(jī)選型和電機(jī)控制板的作用后,底盤驅(qū)動方式是移動機(jī)器人另一個(gè)重要的考慮問題。底盤驅(qū)動方式,簡單點(diǎn)說就是輪子如何布局和速度合成來讓機(jī)器人靈活的行走。按照每個(gè)輪子的速度輸出是否受約束,也就是一個(gè)輪子是否可以獨(dú)立的輸出速度而不考慮別的輪子輸出速度的約束。約束型的底盤驅(qū)動方式有:差分驅(qū)動、阿克曼驅(qū)動、同步驅(qū)動。非完整約束型的底盤驅(qū)動方式有:全向驅(qū)動、腿足驅(qū)動。
?

差分驅(qū)動的底盤,是最常見的形式,像有名的turtlebot機(jī)器人、pioneer先鋒機(jī)器人、家庭掃地機(jī)器人都是用的這種驅(qū)動方式。差分驅(qū)動,其實(shí)就是左右兩個(gè)主動輪輸出動力,機(jī)器人依靠左右輪的速度差來轉(zhuǎn)彎,這也正是差分驅(qū)動名稱的由來吧,通過控制左右輪產(chǎn)生不同的差速,來讓機(jī)器人以不同的線速度和角速度移動。通常,差分驅(qū)動底盤還會安裝萬向從動輪來起到支撐作用。
阿克曼驅(qū)動的底盤,在汽車上是常見的形式,絕大部分的汽車底盤就屬于阿克曼驅(qū)動型。阿克曼車型的兩個(gè)后輪提供動力輸出,兩個(gè)后輪通過一個(gè)差速器來進(jìn)行速度分配以產(chǎn)生不同轉(zhuǎn)彎半徑的差速,前方輪由方向盤控制負(fù)責(zé)轉(zhuǎn)彎。阿克曼車型的關(guān)鍵就在于后輪的差速器,在汽車上,差速器是一個(gè)特殊的齒輪組合結(jié)構(gòu),能夠根據(jù)車體實(shí)時(shí)的轉(zhuǎn)彎半徑將發(fā)動機(jī)的輸出速度自動的分配到兩個(gè)輪子上。而在機(jī)器人上,由于驅(qū)動輪一般直接連接電動機(jī),所以這里的差速器由電子調(diào)速器來替代了。
同步驅(qū)動的底盤,最常見的就是履帶車了,之所以叫同步驅(qū)動,就是同一邊的前輪和后輪速度是一模一樣的,實(shí)在上和差分驅(qū)動形式是一樣的。有一些沒有履帶的四輪底盤,也是同步驅(qū)動方式。同步驅(qū)動的底盤,由于四個(gè)輪子,所以載重可以更大也跟平穩(wěn)。不過相對于差分驅(qū)動底盤來說,輪式里程計(jì)精度就沒那么高了。因?yàn)橥津?qū)動的底盤在平坦的路面轉(zhuǎn)彎時(shí),車體會不同程度的顫動。所以同步驅(qū)動底盤是不擅長轉(zhuǎn)彎了,轉(zhuǎn)起彎來比較費(fèi)勁。
全向驅(qū)動的底盤,底盤的運(yùn)動是不受約束的,簡單點(diǎn)說就是既可以橫著走,又可以直著走,不需要轉(zhuǎn)動車身方向,就可以朝任意方向前進(jìn)。全向輪為機(jī)器人的移動效率起到了很大的提升作用。尤其是像大型貨運(yùn)倉庫,AGV自動物流搬運(yùn)小車采用全向方式移動能大大節(jié)省時(shí)間。全向輪是關(guān)鍵部件,全向輪又叫麥克納姆輪,構(gòu)造很精巧,不過就是價(jià)格昂貴,在非平坦的路面運(yùn)行起來不那么順暢了。
腿足機(jī)器人,結(jié)構(gòu)復(fù)雜,就不在討論范圍了,有興趣的朋友可以自己上網(wǎng)了解。
2.5.IMU模塊解析
在移動機(jī)器人中,IMU模塊也是常用的傳感器,IMU通常被用來和輪式里程計(jì)做融合,或者直接參與SLAM建圖。IMU是慣性測量單元的簡稱,用于測量物體的三軸姿態(tài)角(roll、pitch、yaw)、三軸加速度(acc_x、acc_y、acc_z)、三軸角速度(w_x、w_y、w_z)等。有六軸IMU、九軸IMU、十軸IMU等,其實(shí)就是IMU輸出的數(shù)據(jù)的種類來定義的。
?

IMU慣性測量單元在制造過程中,由于物理因素,導(dǎo)致IMU慣性測量單元實(shí)際的坐標(biāo)軸與理想的坐標(biāo)軸之間會有一定的偏差,同時(shí)三軸加速度、三軸角速度、三軸磁力計(jì)的原始值會與真實(shí)值有一個(gè)固定的偏差等。這就要求在使用IMU模塊的原始測量數(shù)據(jù)時(shí)需要對數(shù)據(jù)進(jìn)行誤差校準(zhǔn),來消除軸偏差、固定零點(diǎn)偏差、尺度偏差等的影響。

校準(zhǔn)過程,其實(shí)就是求解誤差校準(zhǔn)數(shù)學(xué)模型等式右邊的各個(gè)校準(zhǔn)系數(shù)。求解校準(zhǔn)系數(shù)一般采用最小二次法或矩陣求逆來實(shí)現(xiàn),具體的過程可以參考IMU校準(zhǔn)方面的論文。
IMU數(shù)據(jù)校準(zhǔn)完成后,還需要拿IMU各個(gè)軸的數(shù)據(jù)進(jìn)行數(shù)據(jù)融合來得到三軸姿態(tài)角(roll、pitch、yaw)。姿態(tài)融合算法有很多種,其中比較流行的有EKF姿態(tài)融合。
可想而知,要在移動機(jī)器人中使用IMU模塊的數(shù)據(jù)實(shí)現(xiàn)里程計(jì)融合或SLAM建圖,我們需要首先完成更底層的IMU誤差校準(zhǔn)和姿態(tài)角融合兩個(gè)過程。遺憾的是,很多做上層算法開發(fā)的小伙伴,對IMU模塊底層MCU級別的程序開發(fā)并不擅長,市面上售賣的IMU模塊大部分都不帶誤差校準(zhǔn)和姿態(tài)角融合,有些內(nèi)置了誤差校準(zhǔn)和姿態(tài)角融合的IMU模塊價(jià)格又太過昂貴。期待不就的將來,能有帶誤差校準(zhǔn)和姿態(tài)角融合的IMU模塊出現(xiàn),而且價(jià)格又能被廣大機(jī)器人愛好者接受的好產(chǎn)品。
2.6.激光雷達(dá)解析
在移動機(jī)器人中,獲取機(jī)器人周圍障礙物和環(huán)境的輪廓形狀是非常重要的。使用激光雷達(dá)正是為了實(shí)現(xiàn)這個(gè)目的。利用掃描得到的障礙物信息,機(jī)器人就可以利用SLAM建立地圖、并進(jìn)行避障和自主導(dǎo)航。激光雷達(dá)之所以流行,得益于它能夠精確的測距。主流的激光雷達(dá)基于兩種原理:一種是三角測距法,另一種是飛行時(shí)間(TOF)測距法。其實(shí)很好理解,就是利用了最基本的數(shù)學(xué)與物理知識。
?

激光雷達(dá)有單線激光雷達(dá)和多線激光雷達(dá),應(yīng)用場合不一樣,價(jià)格也差距懸殊。室內(nèi)移動機(jī)器人一般用的是單線激光雷達(dá),價(jià)格從幾百塊到幾千塊的都有。國內(nèi)比較早做單線激光雷達(dá)的有上海思嵐的rplidar雷達(dá),后起之秀有深圳鐳神智能的LS系列雷達(dá)、大族激光的杉川系列雷達(dá)、深圳玩智科技的EAI雷達(dá)等等,國外的老牌子雷達(dá)就有日本的HOKUYO雷達(dá)、德國的SICK雷達(dá)都是很有名的。
室外的無人駕駛汽車一般都配備有多線激光雷達(dá),多線激光雷達(dá)一般有16線、32線、64線、128線等等。當(dāng)然線數(shù)越多掃描到的信息也就越多,價(jià)格自然也就越貴。Velodyne公司是美國知名的多線激光雷達(dá)制造商,其VL系列的多線激光雷達(dá)也是很有名,價(jià)格也是從幾萬塊到幾十萬不等。國內(nèi)做多線激光雷達(dá)的有速騰、鐳神都有在做。
2.7.ROS主機(jī)解析
機(jī)器人的處理核心通常是一個(gè)運(yùn)行ROS系統(tǒng)的計(jì)算機(jī)主機(jī),有的復(fù)雜一點(diǎn)的機(jī)器人還會有好幾個(gè)計(jì)算機(jī)主機(jī),比如一個(gè)用來搭載ROS系統(tǒng)運(yùn)行各種機(jī)器人算法,另一個(gè)用來搭載Android系統(tǒng)運(yùn)行用戶交互界面。不過這里僅討論搭載ROS系統(tǒng)的主機(jī),有些朋友為了省錢直接用筆記本電腦作為ROS主機(jī)直接塞進(jìn)機(jī)器人,這種情況除外。搭載在機(jī)器人上的ROS計(jì)算機(jī)主機(jī),需要考慮編寫安裝問題和功耗問題,這里就列舉一些常用的ROS主機(jī)供大家參考吧。
首先是中低端機(jī)器人中使用最廣泛的樹莓派,尤其是樹莓派3B這個(gè)最為流行的型號,當(dāng)然最近也推出的3B+升級版本型號。樹莓派是極致性價(jià)比的板子了,200塊錢的板子,配置了cortex-A53的處理器和1GB內(nèi)存,簡直就是最便宜的價(jià)格最頂配的性能了,并且官方有支持的ubuntu-mate系統(tǒng)也是超級給力,所以初學(xué)者選用這個(gè)板子是非常適合的。
然后中高端機(jī)器人可以選擇瑞星微RK3399這款國產(chǎn)芯片出的板子,螢火蟲和友善之臂都有出RK3399對應(yīng)的板子。RK3399板子價(jià)格在1000塊錢左右,配置了雙核cortex-A72+四核cortex-A53的處理器,處理器絕對是給力的,配置的內(nèi)存2GB/4GB可選。搭載裁剪版的Lubuntu或Xubuntu也是很不錯的。
如果是高端機(jī)器人可以選擇Nvidia家的jetson-tx2這個(gè)板子,這個(gè)板子號稱是可以搭載在核彈上的板子,可想而知性能是非常牛的。板子售價(jià)4000塊錢左右,有點(diǎn)小貴。配置了四核cortex-A57的處理器,256個(gè)CUDA核心的英偉達(dá)自家的帕斯卡架構(gòu)GPU,內(nèi)存8GB。板子的亮點(diǎn)是GPU,非常適合用來做深度學(xué)習(xí)和計(jì)算機(jī)視覺方面的應(yīng)用。
?

選擇好一款適合的ROS主機(jī)后,就可以在主機(jī)上安裝ubuntu系統(tǒng)了,然后再在ubuntu系統(tǒng)上安裝ROS系統(tǒng),最后就可以下載各種開源SLAM算法開始運(yùn)行測試了,當(dāng)然前提是你得有一個(gè)能移動的機(jī)器人并且各個(gè)傳感器都是配備好了的。
2.8.攝像頭解析
機(jī)器人上搭載攝像頭,可以用來做視頻遠(yuǎn)程監(jiān)控、人臉識別和追蹤、視覺SLAM等等??梢赃x擇的攝像頭有單目(mono)、雙目(stereo)和深度(RGBD)攝像頭。如果是做視覺SLAM的朋友,需要對不同攝像頭的優(yōu)缺點(diǎn)有個(gè)了解。單目攝像頭的優(yōu)點(diǎn)是結(jié)構(gòu)簡單、成本低,缺點(diǎn)是在單張圖片里,無法確定一個(gè)物體的真實(shí)大小。它可能是一個(gè)很大但很遠(yuǎn)的物體,也可能是一個(gè)很近很小的物體。通過相機(jī)的運(yùn)動形成視差,可以測量物體相對深度。但是單目SLAM估計(jì)的軌跡和地圖將與真實(shí)的軌跡和地圖相差一個(gè)因子,也就是尺度(scale),單憑圖像無法確定這個(gè)真實(shí)尺度,所以稱尺度不確定性。雙目攝像頭的優(yōu)點(diǎn)是基線距離越大,能夠測量的距離就越遠(yuǎn);并且可以運(yùn)用到室內(nèi)和室外。缺點(diǎn)是配置與標(biāo)定較為復(fù)雜,深度量程和精度受到雙目基線與分辨率限制,視差計(jì)算非常消耗計(jì)算資源,需要GPU/FPGA設(shè)備加速。深度攝像頭的優(yōu)點(diǎn)是通過結(jié)構(gòu)光或ToF(time of fly)的物理方法測量物體深度信息,典型代表Kinect/xtion pro/RealSense。缺點(diǎn)是測量范圍窄,噪聲大,視野小,易受日光干擾,無法測量透射材質(zhì)等問題,主要用在室內(nèi),室外很難應(yīng)用。
?

2.9.麥克風(fēng)解析
對于需要進(jìn)行語音交互的機(jī)器人來說,麥克風(fēng)是標(biāo)配。麥克風(fēng)可以分為陣列形麥克風(fēng)和普通的麥克風(fēng)。如果只是簡單的錄音和識別,選擇價(jià)格便宜的靈敏度高一點(diǎn)的普通麥克風(fēng)就可以了。對于語音交互有較高要求,需要做聲源定位、回聲消除、命令詞喚醒這些的話,就必須選擇用陣列麥克風(fēng)了。
3.商業(yè)應(yīng)用ROS機(jī)器人
商業(yè)應(yīng)用的機(jī)器人形態(tài)各異,功能豐富多彩,讓人們眼花繚亂,誤認(rèn)為機(jī)器人的時(shí)代已經(jīng)到來了。但是大部分市面上能看到的機(jī)器人功能相似,智能水平還很有限。一類機(jī)器人是主打自主移動導(dǎo)航類型的,比如掃地機(jī)器人、送餐機(jī)器人、送快遞機(jī)器人、噴農(nóng)藥機(jī)器人等。一類機(jī)器人是偏向娛樂性的語音交互機(jī)器人,比如桌面型語音助理機(jī)器人、智能音響之類的。還有一類機(jī)器人是偏內(nèi)容生產(chǎn)的,就是機(jī)器人本體和導(dǎo)航技術(shù)語音交互技術(shù)都不是自己做的,主要負(fù)責(zé)生產(chǎn)機(jī)器人的內(nèi)容,比如菜譜機(jī)器人、英語早教機(jī)器人、會唱歌會跳舞的機(jī)器人。下面就結(jié)合一些實(shí)際的案例,進(jìn)行詳細(xì)一點(diǎn)的分析,幫助大家更好的理解ROS機(jī)器人這個(gè)行業(yè)的現(xiàn)狀。
3.1.SLAM建圖導(dǎo)航的應(yīng)用案例
(1)智慧農(nóng)業(yè)自動噴藥機(jī)器人
?

這是一個(gè)規(guī)?;墓麍@里面,能夠自動噴藥和配合人工運(yùn)輸采摘下來的果實(shí)的機(jī)器人。在這樣的應(yīng)用場景,用機(jī)器人取代重復(fù)繁重的工作是很有意義的。機(jī)器人前端安裝了一臺3D激光雷達(dá),能夠感知果園道路兩旁的果樹并進(jìn)行避障。感興趣的朋友,可以讀一下這篇論文。
?

(2)智慧餐廳送餐機(jī)器人

這是一個(gè)典型的餐廳場景下自動送餐的機(jī)器人,機(jī)器人的主要功能就是自主的導(dǎo)航避障,將托盤上的飯菜送達(dá)客人的餐桌,配合語音提示和顯示屏的交互來滿足客人的點(diǎn)餐需求。其實(shí)這樣的應(yīng)用場景,機(jī)器人采用固定的軌道或磁條導(dǎo)航就已經(jīng)夠用了。畢竟機(jī)器人是用來為人類提供服務(wù)的,只要能提供穩(wěn)定高效的服務(wù),不必刻意最求技術(shù)有多先進(jìn)。但是磁條導(dǎo)航也是有缺陷的,就是磁條的鋪設(shè)比較麻煩,不同的餐廳需要進(jìn)行不同的鋪設(shè),并且磁條時(shí)間久了也會損壞需要維修。所以也有很多送餐機(jī)器人開始嘗試SLAM導(dǎo)航了。同樣,餐廳服務(wù)員的工作也相對繁瑣和管理成本高。如果用機(jī)器人來替代,不僅可以提高效率,還可以方便用計(jì)算機(jī)進(jìn)行統(tǒng)一的管理和調(diào)度,非常適合標(biāo)準(zhǔn)化。
(3)樓宇送快遞機(jī)器人

說起送快遞的機(jī)器人,最有需求的莫過于大型電商平臺了。以前是消費(fèi)者在平臺上下單,還需要快遞員層層轉(zhuǎn)運(yùn)才能最終送到買家手中。隨著物流自動分揀倉庫的越來越普及,物流問題最終就集中在最后一公里配送了。如果能用機(jī)器人運(yùn)輸快遞來解決最后一公里的問題,買家從下單到收到快遞完全自動化的了,這個(gè)可以說是行業(yè)的一種顛覆。公眾和企業(yè)都在期待呀,作為自建物流配送的京東來說,當(dāng)然要大力發(fā)展快遞機(jī)器人嘍。所以說,快遞機(jī)器人一旦能成熟的商用,給廣大消費(fèi)者會帶來非常大的便利。
(4)大型機(jī)房智能巡檢機(jī)器人??

?
一個(gè)大型的機(jī)房,有成百上千臺服務(wù)主機(jī)。要實(shí)時(shí)監(jiān)測每臺主機(jī)的各項(xiàng)參數(shù),比如主機(jī)的溫度、網(wǎng)絡(luò)連接狀態(tài)、電源指示燈等是否正常。在這樣一種高噪音高輻射的惡劣環(huán)境里,用人來完成日常巡檢工作異常困難。所以,利用自主移動機(jī)器人配合機(jī)器視覺等機(jī)會就能解決不少問題。類似的場景還有圖書館、變電站、甚至核電站。
3.2.商業(yè)ROS機(jī)器人相關(guān)公司
(1)日本軟銀集團(tuán)pepper
軟銀的pepper是一款很有名的人形機(jī)器人了,在展會上看到過,手臂揮舞配合說話的語音腔調(diào),還蠻有人情味的。這款機(jī)器人主要是用在服務(wù)業(yè)和零售業(yè)的吧,比如說當(dāng)迎賓和解說之類的。
(2)北京進(jìn)化者機(jī)器人公司的小胖
小胖機(jī)器人的用戶體驗(yàn)和功能算是做的非常好的了,至少來說算是真正能為人類做點(diǎn)事情的。比如投影儀功能、空氣凈化功能、配孩子寫作業(yè)。機(jī)器人這個(gè)行業(yè)要能做到這些功能還要控制好價(jià)格真的太不容易了。而且小胖機(jī)器人定位2~14歲孩子這樣一個(gè)用戶群體,定位很好,至少現(xiàn)階段還很初級的人工智能技術(shù)也只能在小孩子中發(fā)揮作用。雖然說人們想象中的完全智能的機(jī)器人還很遙遠(yuǎn),但在可控范圍內(nèi)提供特定功能的機(jī)器人還是由不少的用處的。小胖機(jī)器人也是為數(shù)不多能量產(chǎn)的家庭服務(wù)機(jī)器人了吧。
(3)上海思嵐科技的ZEUS
思嵐是做激光雷達(dá)的,有名的rplidar大家都很熟悉,依托自家的激光雷達(dá),同時(shí)開發(fā)了配套的SLAM導(dǎo)航算法板,陸續(xù)又推出了APOLLO和ZEUS系列的移動底盤解決方案。想往SLAM導(dǎo)航方案公司發(fā)展吧,導(dǎo)航方案的具體效果嘛這個(gè)還不好說,畢竟整個(gè)行業(yè)目前還沒什么大的突破。
(4)上海高仙機(jī)器人公司的室外機(jī)器人
高仙機(jī)器人主打的是室外環(huán)衛(wèi)清潔機(jī)器人、安防監(jiān)控機(jī)器人、樓宇物流機(jī)器人。專注于室外的SLAM導(dǎo)航技術(shù),SLAM導(dǎo)航方案在行業(yè)內(nèi)做的相對也是不錯的。
(5)云跡科技的大潤機(jī)器人
云跡專注的是酒店服務(wù)員機(jī)器人這樣一個(gè)特定場景,幫助入住酒店的顧客進(jìn)行導(dǎo)引和提供遞送飲料毛巾之類的服務(wù)。機(jī)器人可以幫助顧客智能開鎖、呼叫前臺、酒店資訊查詢。亮點(diǎn)之一是可以自動上下電梯,這個(gè)在酒店應(yīng)用環(huán)境真的很實(shí)用。在酒店這樣一個(gè)相對穩(wěn)定簡單的場景下,SLAM導(dǎo)航工作還是比較穩(wěn)定的,這也是云跡著眼的比較好的一個(gè)點(diǎn)。
(6)交通銀行大堂機(jī)器人嬌嬌
嬌嬌在網(wǎng)上火了一把,吸引了不少流量。嬌嬌的最大特點(diǎn)是幽默風(fēng)趣的聊天技巧和賣萌的表情。有很多人懷疑機(jī)器人后面是不是有人工控制,不然以當(dāng)前的人工智能水平怎么可能達(dá)到這樣逼真的效果。技術(shù)問題我們暫且不用去糾結(jié),畢竟嬌嬌這樣一個(gè)走紅的機(jī)器人確實(shí)能說明機(jī)器人在一些方面確實(shí)能起到作用。
3.3.商業(yè)ROS機(jī)器人兩大發(fā)展思路
機(jī)器人幾大核心技術(shù)還沒有明顯突破,眾多資本進(jìn)入這個(gè)行業(yè),導(dǎo)致了各種機(jī)器人是同質(zhì)化嚴(yán)重,這個(gè)本來未成熟的藍(lán)海變成了紅海。那么各大機(jī)器人公司都是怎樣的發(fā)展思路呢?這里就做一些分析吧,下面主要介紹兩種發(fā)展思路:核心部件和系統(tǒng)集成。
(1)核心部件
一開始機(jī)器人這個(gè)行業(yè)前途明朗的情況下,很多創(chuàng)業(yè)公司選擇機(jī)器人上的摸個(gè)重要部件作為公司的主打產(chǎn)品,一方面是降低風(fēng)險(xiǎn),另一方面也算是發(fā)展自己的核心技術(shù)優(yōu)勢吧。
激光雷達(dá)就屬于其中一種核心部件,比如思嵐、鐳神、北醒都是從激光雷達(dá)傳感器開始做起來的,等到激光雷達(dá)有市場了,就開始依托自家的激光雷達(dá)來開發(fā)配套的SLAM導(dǎo)航方案,慢慢的就開始給客戶提供個(gè)性化的定制機(jī)器人方案了。
移動底盤也屬于其中一種核心部件,比如深圳玩智科技、高仙機(jī)器人都是從移動底盤開始做起的。做底盤以后可以朝無人駕駛方向發(fā)展,另外就是這個(gè)環(huán)節(jié)是機(jī)器人集成設(shè)計(jì)中能分割出來的比較大的一塊,并且是有技術(shù)含量的,最重要的是能夠下的了手開展工作的。像有些機(jī)器人上的核心技術(shù),一般的創(chuàng)業(yè)公司根本沒有能力自己做。自己的底盤做好了,還可以推出配套的SLAM導(dǎo)航解決方案,甚至還可以和下游商合作推出實(shí)際的產(chǎn)品。
所以說,從核心部件開始做機(jī)器人,既能夠降低風(fēng)險(xiǎn)和出成果,又能夠積累自己的核心技術(shù)將來向系統(tǒng)集成方向發(fā)展。但是,不是任何公司都能做核心部件的,畢竟核心部件涉及到太專業(yè)的領(lǐng)域,沒有專業(yè)背景強(qiáng)大的團(tuán)隊(duì),根本沾不上邊。
(2)系統(tǒng)集成
由于資本的力量,很多沒有研發(fā)能力的公司也向做機(jī)器人怎么辦?就買別人的核心部件,然后自己拼起來在上面做一些自己的應(yīng)用了。這就會系統(tǒng)集成型的公司,系統(tǒng)集成型的公司要做的好的話,嚴(yán)格上來說需要更大規(guī)模的團(tuán)隊(duì)和實(shí)力。因?yàn)橄到y(tǒng)集成考慮的問題更多了,要做好各個(gè)方面的用戶體驗(yàn)和穩(wěn)定性。但是目前的大多數(shù)系統(tǒng)集成都是簡單的組裝,有些集成甚至干脆就找外包了,自己只負(fù)責(zé)業(yè)務(wù)銷售了??上攵?,沒有亮點(diǎn)的同質(zhì)化機(jī)器人最終是做不長久的。于是很多系統(tǒng)集成的機(jī)器人公司在發(fā)展無果的情況下,又紛紛轉(zhuǎn)向核心部件的研發(fā)。當(dāng)然也有一些專注特定領(lǐng)域產(chǎn)品定位的機(jī)器人公司做了一些出色的產(chǎn)品了,比如小胖、云跡。稍有實(shí)力的公司,咬咬牙,就算是養(yǎng)團(tuán)隊(duì)也要自己做底盤、雷達(dá)、語音交互這些核心部件。因?yàn)槿绻a(chǎn)品真的要量產(chǎn),這些技術(shù)必須掌握在自己手上。
4.科研學(xué)習(xí)ROS機(jī)器人
4.1.科研學(xué)習(xí)ROS機(jī)器人與商業(yè)應(yīng)用ROS機(jī)器人的區(qū)別
商業(yè)ROS機(jī)器人都是面向具體的產(chǎn)品落地,或者直接面向直接的客戶開發(fā)設(shè)計(jì)的。比如說外觀,商用機(jī)器人會考慮美觀實(shí)用性,傳感器的擺放也會根據(jù)具體應(yīng)用場景有針對性的設(shè)計(jì)。機(jī)器人上還會考慮自動充電、緊急情況下應(yīng)急開關(guān)、碰撞保護(hù)等實(shí)際問題。并且考慮到產(chǎn)品的穩(wěn)定性和成本,往往硬件接口設(shè)計(jì)的會更加緊湊和耦合,目的就是節(jié)省成本和體積。軟件設(shè)計(jì)方面,也會考慮跟多運(yùn)行效率的東西,往往會對ROS系統(tǒng)進(jìn)行必要的裁剪,并且設(shè)計(jì)一些自己專用的通信協(xié)議。商業(yè)ROS機(jī)器人的這些優(yōu)點(diǎn),對于學(xué)習(xí)和科研用途的朋友來說剛好是缺點(diǎn)。因?yàn)橥庥^設(shè)計(jì)使得機(jī)器人外形結(jié)構(gòu)相對固定了,不利于ROS學(xué)習(xí)開發(fā)者安裝自己的傳感器進(jìn)行調(diào)試和實(shí)驗(yàn);緊湊和耦合的硬件接口設(shè)計(jì),不利于ROS機(jī)器人學(xué)習(xí)者對機(jī)器人整體工作原理進(jìn)行理解和后續(xù)二次開發(fā);軟件設(shè)計(jì)上的裁剪和特殊協(xié)議設(shè)計(jì),也不利于代碼標(biāo)準(zhǔn)化和ROS官方DEMO的測試。
科研學(xué)習(xí)ROS機(jī)器人正是為了學(xué)習(xí)開發(fā)者而設(shè)計(jì)的,所以機(jī)器人外觀相對簡單并且具有極強(qiáng)的可拼接性,開發(fā)者可以根據(jù)自己的需要通過簡單的改造就能搭建自己需要的外觀的機(jī)器人。機(jī)器人上的硬件設(shè)計(jì)也更加的模塊化,電機(jī)控制、IMU、激光雷達(dá)、攝像頭、麥克風(fēng)基本都是獨(dú)立標(biāo)準(zhǔn)的外設(shè),并且大多數(shù)都提供配套的ROS驅(qū)動程序,讓學(xué)習(xí)者只有刪減傳感器和修改參數(shù)也耿便利。軟件設(shè)計(jì)也大多使用各種流行的開源代碼,資料相對豐富,基本上接口也都是開放的。
所以做機(jī)器人SLAM導(dǎo)航和各種相關(guān)應(yīng)用開發(fā)的朋友來說,選購一款適合自己的ROS機(jī)器人學(xué)習(xí)平臺就非常重要了。當(dāng)然如果自己動手能力強(qiáng),時(shí)間又比較充足,又具備硬件電路設(shè)計(jì)、結(jié)構(gòu)設(shè)計(jì)、單片機(jī)開發(fā)、電機(jī)控制調(diào)試、還懂上位機(jī)ROS驅(qū)動程序開發(fā),可以自己設(shè)計(jì)一套機(jī)器人底盤出來。但是畢竟這個(gè)級別的大神數(shù)量是很有限的,所以選擇一個(gè)ROS機(jī)器人學(xué)習(xí)平臺就很必要了。
4.2.淘寶上科研學(xué)習(xí)ROS機(jī)器人相關(guān)產(chǎn)品
(1)Pioneer先鋒機(jī)器人
大名鼎鼎的Pioneer先鋒機(jī)器人做ROS機(jī)器人的都應(yīng)該知道,這款機(jī)器人在市場上賣了都快20年了,Pioneer3-DX這個(gè)型號在全世界各大科研機(jī)構(gòu)很受歡迎。Pioneer 3-DX是一款耐用的、差分驅(qū)動的機(jī)器人,它主要應(yīng)用在教學(xué)研究上。Pioneer 3-DX在使用上具有較高可靠性和耐用性,在開發(fā)應(yīng)用上具有多功能性,這使它在教學(xué)研究領(lǐng)域成為最受歡迎的差分驅(qū)動移動機(jī)器人。MobileRobots 公司專業(yè)的設(shè)計(jì)和加工能力,使Pioneer 3-DX能夠在教室或?qū)嶒?yàn)室環(huán)境中正常使用幾年的時(shí)間。Pioneer 3-DX裝配有500線編碼器的電機(jī)、19cm的輪胎、鋁制外殼、8個(gè)前置防碰撞聲納,根據(jù)需要還可為用戶安裝8個(gè)后置防碰撞聲納。Pioneer 3-DX可以安裝3塊熱拔插電池,除了以上硬件我們還為用戶提供整套的開發(fā)軟件。現(xiàn)在,只需再為機(jī)器人安裝上車載工控機(jī)或筆記本電腦就可以讓它走起來。

先鋒機(jī)器人是很好,缺點(diǎn)就是太貴了,而且核心的模塊和傳感器都沒有太多的資料公開。還有就是外國人用的多,在國內(nèi)還需要專門引進(jìn)。不過優(yōu)點(diǎn)就是很耐用,勇哥三到五年沒什么問題。
(2)Turtlebot海龜機(jī)器人
另一款機(jī)器人Turtlebot大家應(yīng)該就更加熟悉了,俗稱小海龜機(jī)器人,是ROS官方推出的一款移動機(jī)器人,ROS系統(tǒng)中很多默認(rèn)的程序例子都是以小海龜機(jī)器人為原型的,所以說小海龜在ROS機(jī)器人中的重要地位了。

?
小海龜機(jī)器人外觀合計(jì)還是很精致的,畢竟是ROS官方強(qiáng)烈推薦的。小海龜機(jī)器人在wiki和github的軟件資料和教程也是相當(dāng)豐富的。但是5000RMB的價(jià)格對于國內(nèi)的眾多ROS機(jī)器人愛好者來說還是很難接受,雖然相比Pioneer 機(jī)器人已經(jīng)便宜很多了。另一個(gè)就是,教程都是英文的,中國讀者還是有一定的不方便的。
(3)EAI移動底盤
這是中國深圳的一家專業(yè)做ROS移動底盤的公司,底盤還是相對性能穩(wěn)定的,尤其是50kg大載重的性能很有亮點(diǎn)。EAI的底盤大部分是賣給做二次開發(fā)的用戶的吧,學(xué)習(xí)ROS機(jī)器人的開發(fā)者比較少。是由于EAI的底盤基本上就是一個(gè)移動底盤,不帶上層的SLAM建圖導(dǎo)航和配套的學(xué)習(xí)資料。將近1萬塊錢的售價(jià),如果作為ROS機(jī)器人初學(xué)者買回去也是不劃算的。但是需要大載重的底盤,這個(gè)價(jià)格還是可以接受的。這里一直在提各個(gè)ROS機(jī)器人價(jià)格貴,不是說價(jià)格便宜的機(jī)器人就一定好。如果項(xiàng)目資金充足,性能上確實(shí)有剛需,肯定是推薦買貴的能滿足需求的ROS機(jī)器人。
(4)miiboo語音交互移動機(jī)器人
這也是深圳的一家專業(yè)做ROS機(jī)器人的公司,跟EAI的底盤恰恰不同,miiboo機(jī)器人主打的是ROS教育入門。miiboo機(jī)器人的硬件設(shè)計(jì)的模塊化做的很好,電機(jī)控制、IMU、激光雷達(dá)、攝像頭、麥克風(fēng)、音響都是獨(dú)立設(shè)計(jì),并配有很詳細(xì)的硬件傳感器文檔及ROS驅(qū)動程序。

?
miiboo機(jī)器人的亮點(diǎn)主要由兩個(gè),一個(gè)亮點(diǎn)是SLAM導(dǎo)航算法做的效果非常好,用的是google最新版本的cartographer建圖算法,配合輪式里程計(jì)、IMU、激光雷達(dá)三者融合建圖,并且SLAM導(dǎo)航功能基礎(chǔ)上還支持語音識別、語音合成、語音交互功能,SLAM導(dǎo)航+語音交互的結(jié)合已經(jīng)很接近一個(gè)實(shí)際的機(jī)器人了;另外一個(gè)亮點(diǎn)就是miiboo機(jī)器人的ROS開發(fā)文檔做的相當(dāng)棒。算是良心做ROS機(jī)器人教育的一家了吧。開發(fā)資料做的很系統(tǒng),既有最基礎(chǔ)的Linux、ROS方便的編程入門,也有底盤電機(jī)控制、單片機(jī)硬件軟件、PID控制、里程計(jì)標(biāo)定方面的核心技術(shù)細(xì)節(jié)講解,還有高級的cartographer算法核心分析和參數(shù)調(diào)參指導(dǎo),還有語音交互和機(jī)器人手機(jī)APP開發(fā)方面的教程。這么系統(tǒng)的教程,真的比有些宣傳自己的ROS機(jī)器人提供大量開發(fā)資料的要強(qiáng)很多。而且真的是良心團(tuán)隊(duì),這些系統(tǒng)的開發(fā)資料都全部公開在了博客上(https://www.cnblogs.com/hiram-zhang),就算不買他家的miiboo機(jī)器人,也能夠免費(fèi)學(xué)習(xí)全套的資料,足以見得miiboo機(jī)器人團(tuán)隊(duì)的自信。并且博客中網(wǎng)友的提問,他們也是很認(rèn)真的傾聽和解答,并很快在miiboo機(jī)器人做出改進(jìn),這個(gè)必須給贊。

?
這個(gè)機(jī)器人是主打ROS開發(fā)入門和ROS教育的,所以如果是大載中需求的應(yīng)用車體估計(jì)就夠嗆了。
(5)淘寶上眼花繚亂的ROS機(jī)器人
然后,就是淘寶上眼花繚亂的ROS機(jī)器人了,形態(tài)各異。比如說有履帶底盤的,看起來還是很酷的,不過要是真的做起SLAM導(dǎo)航和建圖算法來,估計(jì)精度應(yīng)該還是會有比較大的出入的,站在專業(yè)的角度講,其實(shí)履帶底盤的里程計(jì)模型并不好,也不被主流機(jī)器人所接受,如果真的要在SLAM算法上有所突破和成果,還是推薦選擇主流的兩輪差分驅(qū)動的底盤機(jī)器人,里程計(jì)精度應(yīng)該是最高的。還有一些做的也很精美的機(jī)器人,還配備有深度相機(jī)和高端的主機(jī),這個(gè)因人而異,但是作為推薦還是不推薦買這種少見的不流行的機(jī)器人。

4.3.選購ROS機(jī)器人入門指南
(1)提供系統(tǒng)的開發(fā)和使用教程的重要性
相信大部分購買ROS機(jī)器人學(xué)習(xí)的朋友,都是想通過機(jī)器人學(xué)習(xí)整個(gè)ROS的軟硬件構(gòu)造和工作流程,然后有能力設(shè)計(jì)自己的機(jī)器人,或者按照自己的算法對機(jī)器人做出必要的改造與二次開發(fā)。所以一款ROS機(jī)器人是否公開硬件設(shè)計(jì)及原理、軟硬件的工作流程、已經(jīng)ROS軟件驅(qū)動程序的代碼及參數(shù)作用,這些關(guān)鍵的資料就至關(guān)重要了。學(xué)習(xí)ROS機(jī)器人開發(fā)的朋友們基礎(chǔ)水平肯可能各不相同,有些愛好者可能是從Android或者java轉(zhuǎn)行過來搞ROS機(jī)器人的,所以對ROS系統(tǒng)基礎(chǔ)并不多;有些愛好者可能最開始是搞硬件單片機(jī)開發(fā)的,對Linux這些系統(tǒng)級的上層開發(fā)基礎(chǔ)比較差;還有些愛好者是計(jì)算機(jī)專業(yè)出身,以前只搞過算法和框架開發(fā),底層的東西不熟。這里不是說要求所有的ROS機(jī)器人開發(fā)者都對機(jī)器人上的所有部分在行,但是要在機(jī)器人上做出好東西,就要有系統(tǒng)全盤的了解。所以一款ROS機(jī)器人能否提供從底層到上層的系統(tǒng)學(xué)習(xí)教程非常關(guān)鍵。其實(shí),Turtlebot小海龜機(jī)器人和miiboo機(jī)器人在這方面做得都算不錯,如果資金充足可以買Turtlebot小海龜機(jī)器人,如果資金有限制可以買相對便宜一些的miiboo機(jī)器人。
(2)外形結(jié)構(gòu)可擴(kuò)展的重要性
其實(shí)這個(gè)大部分的機(jī)器人做的都是可以的,基本上是三層板壘起來的結(jié)構(gòu)都是符合擴(kuò)展要求的。
(3)硬件模塊化的重要性
這個(gè)必須提一下,之前用過一款叫irobot的底盤,就是掃地機(jī)器人那種。硬件接口全部集成隱藏在塑料殼子里面,也不知道里程計(jì)、IMU是怎么安裝和工作的,只有一個(gè)簡單的文檔告訴你怎么驅(qū)動它。每次沒電了,這個(gè)底盤就在那叫,還亂撞,感覺用戶體驗(yàn)很不好,而且模塊都封裝在塑料殼子里面,對開發(fā)者很不友好。
(4)別太迷信軟件開源
見過很多ROS機(jī)器人上宣傳說提供各種高級的圖像識別算法、自動跟蹤算法、有些還開源底層的單片機(jī)程序、開源導(dǎo)航算法等等。聽上去有很多功能開源,但是大部分是本來就開源的。有一些像電機(jī)控制的單片機(jī)程序或IMU模塊單片機(jī)程序開源,但是本身底層的這些固件程序要做到效果好的很難,開源往往意味著效果并不怎么好,甚至代碼格式寫的是很糟糕的。所以其實(shí)不要太迷信軟件開源這個(gè)噱頭,能提供軟件源碼及在機(jī)器人上的詳細(xì)教程的才是靠譜的,所以一定要看這些宣稱提供軟件開源的ROS機(jī)器人是否提供了足夠有含金量的免費(fèi)教程供大家檢驗(yàn)。
(5)技術(shù)支持的重要性
作為開發(fā)學(xué)習(xí)用途的ROS機(jī)器人,出現(xiàn)各種技術(shù)問題和bug是再正常不過的事情了。一般技術(shù)開發(fā),都有很多論壇和社區(qū)來提供問題的交流和解答。但是ROS機(jī)器人本來就是最近才興起的,而且國內(nèi)的ROS機(jī)器人還沒有發(fā)展出規(guī)模,所以其實(shí)還不存在特別專業(yè)靠譜的技術(shù)論壇。所以,購買了ROS機(jī)器人,會否能得到專業(yè)的技術(shù)支持至關(guān)重要。由于提供專業(yè)的技術(shù)支持人力成本非常高,所以一般的公司根本負(fù)擔(dān)不起免費(fèi)的技術(shù)支持服務(wù)。所以,一家ROS機(jī)器人是否提供免費(fèi)專業(yè)的技術(shù)支持也會相當(dāng)?shù)闹匾?/p>
后記
為了防止后續(xù)大家找不到本篇文章,我同步制作了一份文章的pdf和本專欄涉及的例程代碼放在github和gitee方便大家下載,如果下面給出的github下載鏈接打不開,可以嘗試gitee下載鏈接:
github下載鏈接:https://github.com/xiihoo/DIY_A_SLAM_Navigation_Robot
gitee下載鏈接:https://gitee.com/xiihoo-robot/DIY_A_SLAM_Navigation_Robot
技術(shù)交流
QQ技術(shù)交流群:117698356
參考文獻(xiàn)
[1] 張虎,機(jī)器人SLAM導(dǎo)航核心技術(shù)與實(shí)戰(zhàn)[M].機(jī)械工業(yè)出版社,2022.
