機(jī)器人技術(shù)的迅猛發(fā)展,促使機(jī)器人逐漸走進(jìn)了人們的生活,服務(wù)型室內(nèi)移動(dòng)機(jī)器人更是獲得了廣泛的關(guān)注。但室內(nèi)機(jī)器人的普及還存在許多亟待解決的問題,定位與導(dǎo)航就是其中的關(guān)鍵問題之一。在這類問題的研究中,需要把握三個(gè)重點(diǎn):一是地圖精確建模;二是機(jī)器人準(zhǔn)確定位;三是路徑實(shí)時(shí)規(guī)劃。在近幾十年的研究中,對(duì)以上三個(gè)重點(diǎn)提出了多種有效的解決方法。
室外定位與導(dǎo)航可以使用GPS,但在室內(nèi)這個(gè)問題就變得比較復(fù)雜。為了實(shí)現(xiàn)室內(nèi)的定位定 姿, 一 大 批 技 術(shù) 不 斷 涌 現(xiàn), 其 中, SLAM 技 術(shù) 逐 漸 脫 穎 而 出。 SLAM(Simultaneous
Localization and Mapping,即時(shí)定位與地圖構(gòu)建)最早由Smith、Self和Cheeseman于1988年提出。作為一種基礎(chǔ)技術(shù),SLAM從最早的軍事用途到今天的掃地機(jī)器人,吸引了一大批研究者和愛好者,同時(shí)也使這項(xiàng)技術(shù)逐步走入普通消費(fèi)者的視野。
使用ROS實(shí)現(xiàn)機(jī)器人的SLAM和自主導(dǎo)航等功能是非常方便的,因?yàn)橛休^多現(xiàn)成的功能包可 供 開 發(fā) 者 使 用, 如 gmapping、 hector_slam、 cartographer、 rgbdslam、 ORB_SLAM、
move_base、amcl等。本章我們將學(xué)習(xí)這些功能包的使用方法,并且使用仿真環(huán)境和真實(shí)機(jī)器人實(shí)現(xiàn)這些功能。
理論基礎(chǔ)
SLAM可以描述為:機(jī)器人在未知的環(huán)境中從一個(gè)未知位置開始移動(dòng),移動(dòng)過程中根據(jù)位置估計(jì)和地圖進(jìn)行自身定位,同時(shí)建造增量式地圖,實(shí)現(xiàn)機(jī)器人的自主定位和導(dǎo)航。
想象一個(gè)盲人在一個(gè)未知的環(huán)境里,如果想感知周圍的大概情況,那么他需要伸展雙手作為他的“傳感器”,不斷探索四周是否有障礙物。當(dāng)然這個(gè)“傳感器”有量程范圍,他還需要不斷移動(dòng),同時(shí)在心中整合已經(jīng)感知到的信息。當(dāng)感覺新探索的環(huán)境好像是之前遇到過的某個(gè)位置,他就會(huì)校正心中整合好的地圖,同時(shí)也會(huì)校正自己當(dāng)前所處的位置。當(dāng)然,作為一個(gè)盲人,感知能力有限,所以他探索的環(huán)境信息會(huì)存在誤差,而且他會(huì)根據(jù)自己的確定程度為探索到的障礙物設(shè)置一個(gè)概率值,概率值越大,表示這里有障礙物的可能性越大。一個(gè)盲人探索未知環(huán)境的場(chǎng)景基本可以表示SLAM算法的主要過程。這里不詳細(xì)討論SLAM的算法實(shí)現(xiàn),只對(duì)概念做一個(gè)基本理解,感興趣的讀者可以查找相關(guān)資料進(jìn)行深度學(xué)習(xí)。
下圖所示即為使用SLAM技術(shù)建立的室內(nèi)地圖。
家庭、商場(chǎng)、車站等場(chǎng)所是室內(nèi)機(jī)器人的主要應(yīng)用場(chǎng)景,在這些應(yīng)用中,用戶需要機(jī)器人通過移動(dòng)完成某些任務(wù),這就需要機(jī)器人具備自主移動(dòng)、自主定位的功能,我們把這類應(yīng)用統(tǒng)稱為自主導(dǎo)航。
自主導(dǎo)航往往與SLAM密不可分,因?yàn)镾LAM生成的地圖是機(jī)器人自主移動(dòng)的主要藍(lán)圖。這類問題可以總結(jié)為:在服務(wù)機(jī)器人工作空間中,根據(jù)機(jī)器人自身的定位導(dǎo)航系統(tǒng)找到一條從起始狀態(tài)到目標(biāo)狀態(tài)、可以避開障礙物的最優(yōu)路徑。
要完成機(jī)器人的SLAM和自主導(dǎo)航,機(jī)器人首先要有感知周圍環(huán)境的能力,尤其要有感知周圍環(huán)境深度信息的能力,因?yàn)檫@是探測(cè)障礙物的關(guān)鍵數(shù)據(jù)。用于獲取深度信息的傳感器主要有以下幾種類型。
(1)激光雷達(dá)
激光雷達(dá)是研究最多、使用最成熟的深度傳感器,可以提供機(jī)器人本體與環(huán)境障礙物之間的距離信息,很多常見的掃地機(jī)器人就配有高性價(jià)比的激光雷達(dá)(見圖9-2)。激光雷達(dá)的優(yōu)點(diǎn)
是精度高,響應(yīng)快,數(shù)據(jù)量小,可以完成實(shí)時(shí)SLAM任務(wù);缺點(diǎn)是成本高,一款進(jìn)口高精度的激光雷達(dá)價(jià)格在一萬元以上?,F(xiàn)在很多國內(nèi)企業(yè)專注高性價(jià)比的激光雷達(dá),也有不少優(yōu)秀的產(chǎn)品已經(jīng)推向市場(chǎng)
(2)攝像頭
SLAM所用到的攝像頭又可以分為兩種:一種是單目攝像頭,也就是使用一個(gè)攝像頭完成SLAM。這種方案的傳感器簡(jiǎn)單,適用性強(qiáng),但是實(shí)現(xiàn)的復(fù)雜度較高,而且單目攝像頭在靜止?fàn)顟B(tài)下無法測(cè)量距離,只有在運(yùn)動(dòng)狀態(tài)下才能根據(jù)三角測(cè)量等原理感知距離。另一種就是雙目攝像頭(見圖9-3),相比單目攝像頭,這種方案無論是在運(yùn)動(dòng)狀態(tài)下還是在靜止?fàn)顟B(tài)下,都可以感知距離信息,但是兩個(gè)攝像頭的標(biāo)定較為復(fù)雜,大量的圖像數(shù)據(jù)也會(huì)導(dǎo)致運(yùn)算量較大。
3)RGB-D攝像頭
RGB-D攝像頭是近年來興起的一種新型傳感器,不僅可以像攝像頭一樣獲取環(huán)境的RGB圖像信息,也可以通過紅外結(jié)構(gòu)光、Time-of-Flight等原理獲取每個(gè)像素的深度信息。豐富的數(shù)據(jù)
讓RGB-D攝像頭不僅可用于SLAM,還可用于圖像處理、物體識(shí)別等多種應(yīng)用;更重要的一點(diǎn)是,RGB-D攝像頭成本較低,它也是目前室內(nèi)服務(wù)機(jī)器人的主流傳感器方案。常見的RGB-D攝
像頭有Kinect v1/v2、華碩Xtion Pro等(見圖9-4)。當(dāng)然,RGB-D**攝像頭也存在諸如測(cè)量視野窄、盲區(qū)大、噪聲大等缺點(diǎn)。
**
準(zhǔn)備工作
ROS中SLAM和自主導(dǎo)航的相關(guān)功能包可以通用于各種移動(dòng)機(jī)器人平臺(tái),但是為了達(dá)到最佳效果,對(duì)機(jī)器人的硬件仍然有以下三個(gè)要求。
1)導(dǎo)航功能包對(duì)差分、輪式機(jī)器人的效果好,并且假設(shè)機(jī)器人可直接使用速度指令進(jìn)行控制,速度指令的定義如圖9-5所示。
- linear:機(jī)器人在xyz三軸方向上的線速度,單位是m/s。
- angular:機(jī)器人在xyz三軸方向上的角速度,單位是rad/s。
2)導(dǎo)航功能包要求機(jī)器人必須安裝激光雷達(dá)等測(cè)距設(shè)備,可以獲取環(huán)境深度信息。
3)導(dǎo)航功能包以正方形和圓形的機(jī)器人為模板進(jìn)行開發(fā),對(duì)于其他外形的機(jī)器人,雖然可以正常使用,但是效果可能不佳。
傳感器信息
1.環(huán)境深度信息
無論是SLAM還是自主導(dǎo)航,獲取周圍環(huán)境的深度信息都是至關(guān)重要的。要獲取深度信息,首先要清楚ROS中的深度信息是如何表示的。針對(duì)激光雷達(dá),ROS在sensor_msgs包中定義了專用數(shù)據(jù)結(jié)構(gòu)——LaserScan,用于存儲(chǔ)激光消息。LaserScan消息的具體定義如圖9-6所示。
rosmsg show sensor_msgs/LaserScan
·angle_min:可檢測(cè)范圍的起始角度。
·angle_max:可檢測(cè)范圍的終止角度,與angle_min組成激光雷達(dá)的可檢測(cè)范圍。
·angle_increment:采集到相鄰數(shù)據(jù)幀之間的角度步長(zhǎng)。
·time_increment:采集到相鄰數(shù)據(jù)幀之間的時(shí)間步長(zhǎng),當(dāng)傳感器處于相對(duì)運(yùn)動(dòng)狀態(tài)時(shí)進(jìn)行
補(bǔ)償使用。
·scan_time:采集一幀數(shù)據(jù)所需要的時(shí)間。
·range_min:最近可檢測(cè)深度的閾值。
·range_max:最遠(yuǎn)可檢測(cè)深度的閾值。
·ranges:一幀深度數(shù)據(jù)的存儲(chǔ)數(shù)組。
如果使用的機(jī)器人沒有激光雷達(dá),但配備有Kinect等RGB-D攝像頭,也可以通過紅外攝像頭獲取周圍環(huán)境的深度信息。但是RGB-D攝像頭獲取的原始深度信息是三維點(diǎn)云數(shù)據(jù),而ROS的很多功能包所需要的輸入是激光二維數(shù)據(jù),是否可以將三維數(shù)據(jù)轉(zhuǎn)換成二維數(shù)據(jù)呢?如果你已不記得RGB-D攝像頭所發(fā)布的點(diǎn)云三維數(shù)據(jù)的類型,可以回顧7.1節(jié)的相關(guān)內(nèi)容。
如果你已了解點(diǎn)云三維數(shù)據(jù)類型,那么將三維數(shù)據(jù)降維到二維數(shù)據(jù)的方法也很簡(jiǎn)單,即把大量數(shù)據(jù)攔腰斬?cái)?,只抽取其中的一行?shù)據(jù),重新封裝為L(zhǎng)aserScan消息,就可以獲取到需要的二維激光雷達(dá)信息。這么做雖然損失了大量有效數(shù)據(jù),但是剛好可以滿足2D SLAM的需求。
原理就是這么簡(jiǎn)單,ROS中也提供了相應(yīng)的功能包——depthimage_to_laserscan,可以在launch文件中使用如下方法調(diào)用:
<!-- 運(yùn)行depthimage_to_laserscan節(jié)點(diǎn),將點(diǎn)云深度數(shù)據(jù)轉(zhuǎn)換成激光數(shù)據(jù) -->
<node pkg="depthimage_to_laserscan" type="depthimage_to_laserscan" name="depthimage_to_laserscan" output="screen">
<remap from="image" to="/camera/depth/image_raw" />
<remap from="camera_info" to="/camera/depth/camera_info" />
<remap from="scan" to="/scan" />
<param name="output_frame_id" value="/camera_link" />
</node>
2.里程計(jì)信息
里程計(jì)根據(jù)傳感器獲取的數(shù)據(jù)來估計(jì)機(jī)器人隨時(shí)間發(fā)生的位置變化。在機(jī)器人平臺(tái)中,較為常見的里程計(jì)是編碼器,例如,機(jī)器人驅(qū)動(dòng)輪配備的旋轉(zhuǎn)編碼器。當(dāng)機(jī)器人移動(dòng)時(shí),借助旋轉(zhuǎn)編碼器可以測(cè)量出輪子旋轉(zhuǎn)的圈數(shù),如果知道輪子的周長(zhǎng),便可以計(jì)算出機(jī)器人單位時(shí)間內(nèi)的速度以及一段時(shí)間內(nèi)的移動(dòng)距離。里程計(jì)根據(jù)速度對(duì)時(shí)間的積分求得位置這種方法對(duì)誤差十分敏感,所以采取如精確的數(shù)據(jù)采集、設(shè)備標(biāo)定、數(shù)據(jù)濾波等措施是十分必要的。
導(dǎo)航功能包要求機(jī)器人能夠發(fā)布里程計(jì)nav_msgs/Odometry消息。如圖9-7所示,nav_msgs/Odometry消息包含機(jī)器人在自由空間中的位置和速度估算值。
·pose:機(jī)器人當(dāng)前位置坐標(biāo),包括機(jī)器人的x、y、z三軸位置與方向參數(shù),以及用于校正誤差的協(xié)方差矩陣。
·twist:機(jī)器人當(dāng)前的運(yùn)動(dòng)狀態(tài),包括x、y、z三軸的線速度與角速度,以及用于校正誤差的協(xié)方差矩陣。
上述數(shù)據(jù)結(jié)構(gòu)中,除速度與位置的關(guān)鍵信息外,還包含用于濾波算法的協(xié)方差矩陣。在精度要求不高的機(jī)器人系統(tǒng)中,可以使用默認(rèn)的協(xié)方差矩陣;而在精度要求較高的系統(tǒng)中,需要先對(duì)機(jī)器人精確建模后,再通過仿真、實(shí)驗(yàn)等方法確定該矩陣的具體數(shù)值。文章來源:http://www.zghlxwxcb.cn/news/detail-721494.html
rosmsg show nav_msgs/Odometry
文章來源地址http://www.zghlxwxcb.cn/news/detail-721494.html
到了這里,關(guān)于機(jī)器人SLAM與自主導(dǎo)航的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!