系列文章目錄
一:導(dǎo)航仿真概述
導(dǎo)航是機(jī)器人系統(tǒng)中最重要的模塊之一,比如現(xiàn)在較為流行的服務(wù)型室內(nèi)機(jī)器人,就是依賴于機(jī)器人導(dǎo)航來(lái)實(shí)現(xiàn)室內(nèi)自主移動(dòng)的,本章主要就是介紹仿真環(huán)境下的導(dǎo)航實(shí)現(xiàn),主要內(nèi)容有:
導(dǎo)航相關(guān)概念
- 導(dǎo)航實(shí)現(xiàn):機(jī)器人建圖(SLAM)、地圖服務(wù)、定位、路徑規(guī)劃…以可視化操作為主。
- 導(dǎo)航消息:了解地圖、里程計(jì)、雷達(dá)、攝像頭等相關(guān)消息格式。
預(yù)期達(dá)成的學(xué)習(xí)目標(biāo):
- 了解導(dǎo)航模塊中的組成部分以及相關(guān)概念
- 能夠在仿真環(huán)境下獨(dú)立完成機(jī)器人導(dǎo)航
前言
(無(wú)人機(jī)方向)ros小白學(xué)習(xí)之路ROS 機(jī)器人系統(tǒng)仿真_導(dǎo)航仿真概述
參考視頻:視頻
參考手冊(cè):手冊(cè)
概述
1.概念
在ROS中機(jī)器人導(dǎo)航(Navigation)由多個(gè)功能包組合實(shí)現(xiàn),ROS 中又稱之為導(dǎo)航功能包集,關(guān)于導(dǎo)航模塊,官方介紹如下:
一個(gè)二維導(dǎo)航堆棧,它接收來(lái)自里程計(jì)、傳感器流和目標(biāo)姿態(tài)的信息,并輸出發(fā)送到移動(dòng)底盤(pán)的安全速度命令。
更通俗的講: 導(dǎo)航其實(shí)就是機(jī)器人自主的從 A 點(diǎn)移動(dòng)到 B 點(diǎn)的過(guò)程。
2.作用
秉著"不重復(fù)發(fā)明輪子"的原則,ROS 中導(dǎo)航相關(guān)的功能包集為機(jī)器人導(dǎo)航提供了一套通用的實(shí)現(xiàn),開(kāi)發(fā)者不再需要關(guān)注于導(dǎo)航算法、硬件交互…
等偏復(fù)雜、偏底層的實(shí)現(xiàn),這些實(shí)現(xiàn)都由更專業(yè)的研發(fā)人員管理、迭代和維護(hù),開(kāi)發(fā)者可以更專注于上層功能,而對(duì)于導(dǎo)航功能的調(diào)用,只需要根據(jù)自身機(jī)器人相關(guān)參數(shù)合理設(shè)置各模塊的配置文件即可,當(dāng)然,如果有必要,也可以基于現(xiàn)有的功能包二次開(kāi)發(fā)實(shí)現(xiàn)一些定制化需求,這樣可以大大提高研發(fā)效率,縮短產(chǎn)品落地時(shí)間??偠灾?,對(duì)于一般開(kāi)發(fā)者而言,ROS
的導(dǎo)航功能包集優(yōu)勢(shì)如下:
- 安全: 由專業(yè)團(tuán)隊(duì)開(kāi)發(fā)和維護(hù)
- 功能: 功能更穩(wěn)定且全面
- 高效: 解放開(kāi)發(fā)者,讓開(kāi)發(fā)者更專注于上層功能實(shí)現(xiàn)
導(dǎo)航模塊簡(jiǎn)介
機(jī)器人是如何實(shí)現(xiàn)導(dǎo)航的呢?或換言之,機(jī)器人是如何從 A 點(diǎn)移動(dòng)到 B 點(diǎn)呢?ROS 官方為了提供了一張導(dǎo)航功能包集的圖示,該圖中囊括了 ROS 導(dǎo)航的一些關(guān)鍵技術(shù):
假定我們已經(jīng)以特定方式配置機(jī)器人,導(dǎo)航功能包集將使其可以運(yùn)動(dòng)。上圖概述了這種配置方式。白色的部分是必須且已實(shí)現(xiàn)的組件,灰色的部分是可選且已實(shí)現(xiàn)的組件,藍(lán)色的部分是必須為每一個(gè)機(jī)器人平臺(tái)創(chuàng)建的組件。
總結(jié)下來(lái),涉及的關(guān)鍵技術(shù)有如下五點(diǎn):
- 全局地圖
- 自身定位
- 路徑規(guī)劃
- 運(yùn)動(dòng)控制
- 環(huán)境感知
- 類似,關(guān)鍵技術(shù)也是由上述五點(diǎn)組成,只是無(wú)人駕駛是基于室外的,而我們當(dāng)前介紹的機(jī)器人導(dǎo)航更多是基于室內(nèi)的。
1.全局地圖
在現(xiàn)實(shí)生活中,當(dāng)我們需要實(shí)現(xiàn)導(dǎo)航時(shí),可能會(huì)首先參考一張全局性質(zhì)的地圖,然后根據(jù)地圖來(lái)確定自身的位置、目的地位置,并且也會(huì)根據(jù)地圖顯示來(lái)規(guī)劃一條大致的路線… 對(duì)于機(jī)器人導(dǎo)航而言,也是如此,在機(jī)器人導(dǎo)航中地圖是一個(gè)重要的組成元素,當(dāng)然如果要使用地圖,首先需要繪制地圖。關(guān)于地圖建模技術(shù)不斷涌現(xiàn),這其中有一門稱之為 SLAM 的理論脫穎而出:
-
SLAM(simultaneous localization and mapping),也稱為CML (Concurrent
Mapping and Localization), 即時(shí)定位與地圖構(gòu)建,或并發(fā)建圖與定位。SLAM問(wèn)題可以描述為:
機(jī)器人在未知環(huán)境中從一個(gè)未知位置開(kāi)始移動(dòng),在移動(dòng)過(guò)程中根據(jù)位置估計(jì)和地圖進(jìn)行自身定位,同時(shí)在自身定位的基礎(chǔ)上建造增量式地圖,以繪制出外部環(huán)境的完全地圖。 -
在 ROS 中,較為常用的 SLAM 實(shí)現(xiàn)也比較多,比如:
gmapping、hector_slam、cartographer、rgbdslam、ORB_SLAM … -
當(dāng)然如果要完成 SLAM ,機(jī)器人必須要具備感知外界環(huán)境的能力,尤其是要具備獲取周圍環(huán)境深度信息的能力。感知的實(shí)現(xiàn)需要依賴于傳感器,比如:
激光雷達(dá)、攝像頭、RGB-D攝像頭… -
SLAM 可以用于地圖生成,而生成的地圖還需要被保存以待后續(xù)使用,在 ROS 中保存地圖的功能包是 map_server
另外注意: SLAM 雖然是機(jī)器人導(dǎo)航的重要技術(shù)之一,但是 二者并不等價(jià),確切的講,SLAM 只是實(shí)現(xiàn)地圖構(gòu)建和即時(shí)定位。
2.自身定位
導(dǎo)航伊始和導(dǎo)航過(guò)程中,機(jī)器人都需要確定當(dāng)前自身的位置,如果在室外,那么 GPS 是一個(gè)不錯(cuò)的選擇,而如果室內(nèi)、隧道、地下或一些特殊的屏蔽 GPS 信號(hào)的區(qū)域,由于 GPS 信號(hào)弱化甚至完全不可用,那么就必須另辟蹊徑了,比如前面的 SLAM 就可以實(shí)現(xiàn)自身定位,除此之外,ROS 中還提供了一個(gè)用于定位的功能包: amcl
amcl(adaptiveMonteCarloLocalization)自適應(yīng)的蒙特卡洛定位,是用于2D移動(dòng)機(jī)器人的概率定位系統(tǒng)。它實(shí)現(xiàn)了自適應(yīng)(或KLD采樣)蒙特卡洛定位方法,該方法使用粒子過(guò)濾器根據(jù)已知地圖跟蹤機(jī)器人的姿態(tài)。
3.路徑規(guī)劃
導(dǎo)航就是機(jī)器人從A點(diǎn)運(yùn)動(dòng)至B點(diǎn)的過(guò)程,在這一過(guò)程中,機(jī)器人需要根據(jù)目標(biāo)位置計(jì)算全局運(yùn)動(dòng)路線,并且在運(yùn)動(dòng)過(guò)程中,還需要時(shí)時(shí)根據(jù)出現(xiàn)的一些動(dòng)態(tài)障礙物調(diào)整運(yùn)動(dòng)路線,直至到達(dá)目標(biāo)點(diǎn),該過(guò)程就稱之為路徑規(guī)劃。在 ROS 中提供了 move_base 包來(lái)實(shí)現(xiàn)路徑規(guī)則,該功能包主要由兩大規(guī)劃器組成:
- 全局路徑規(guī)劃(gloable_planner)
根據(jù)給定的目標(biāo)點(diǎn)和全局地圖實(shí)現(xiàn)總體的路徑規(guī)劃,使用 Dijkstra 或 A* 算法進(jìn)行全局路徑規(guī)劃,計(jì)算最優(yōu)路線,作為全局路線
- 本地實(shí)時(shí)規(guī)劃(local_planner)
在實(shí)際導(dǎo)航過(guò)程中,機(jī)器人可能無(wú)法按照給定的全局最優(yōu)路線運(yùn)行,比如:機(jī)器人在運(yùn)行中,可能會(huì)隨時(shí)出現(xiàn)一定的障礙物…
本地規(guī)劃的作用就是使用一定算法(Dynamic Window Approaches)
來(lái)實(shí)現(xiàn)障礙物的規(guī)避,并選取當(dāng)前最優(yōu)路徑以盡量符合全局最優(yōu)路徑
全局路徑規(guī)劃與本地路徑規(guī)劃是相對(duì)的,全局路徑規(guī)劃側(cè)重于全局、宏觀實(shí)現(xiàn),而本地路徑規(guī)劃側(cè)重與當(dāng)前、微觀實(shí)現(xiàn)。
4.運(yùn)動(dòng)控制
導(dǎo)航功能包集假定它可以通過(guò)話題"cmd_vel"發(fā)布geometry_msgs/Twist類型的消息,這個(gè)消息基于機(jī)器人的基座坐標(biāo)系,它傳遞的是運(yùn)動(dòng)命令。這意味著必須有一個(gè)節(jié)點(diǎn)訂閱"cmd_vel"話題, 將該話題上的速度命令轉(zhuǎn)換為電機(jī)命令并發(fā)送。
5.環(huán)境感知
感知周圍環(huán)境信息,比如: 攝像頭、激光雷達(dá)、編碼器…,攝像頭、激光雷達(dá)可以用于感知外界環(huán)境的深度信息,編碼器可以感知電機(jī)的轉(zhuǎn)速信息,進(jìn)而可以獲取速度信息并生成里程計(jì)信息。
在導(dǎo)航功能包集中,環(huán)境感知也是一重要模塊實(shí)現(xiàn),它為其他模塊提供了支持。其他模塊諸如: SLAM、amcl、move_base 都需要依賴于環(huán)境感知。
導(dǎo)航之坐標(biāo)系
1.簡(jiǎn)介
定位是導(dǎo)航中的重要實(shí)現(xiàn)之一,所謂定位,就是參考某個(gè)坐標(biāo)系(比如:以機(jī)器人的出發(fā)點(diǎn)為原點(diǎn)創(chuàng)建坐標(biāo)系)在該坐標(biāo)系中標(biāo)注機(jī)器人。定位原理看似簡(jiǎn)單,但是這個(gè)這個(gè)坐標(biāo)系不是客觀存在的,我們也無(wú)法以上帝視角確定機(jī)器人的位姿,定位實(shí)現(xiàn)需要依賴于機(jī)器人自身,機(jī)器人需要逆向推導(dǎo)參考系原點(diǎn)并計(jì)算坐標(biāo)系相對(duì)關(guān)系,該過(guò)程實(shí)現(xiàn)常用方式有兩種:
- 通過(guò)里程計(jì)定位:時(shí)時(shí)收集機(jī)器人的速度信息計(jì)算并發(fā)布機(jī)器人坐標(biāo)系與父級(jí)參考系的相對(duì)關(guān)系。
- 通過(guò)傳感器定位:通過(guò)傳感器收集外界環(huán)境信息通過(guò)匹配計(jì)算并發(fā)布機(jī)器人坐標(biāo)系與父級(jí)參考系的相對(duì)關(guān)系。
兩種方式在導(dǎo)航中都會(huì)經(jīng)常使用。
2.特點(diǎn)
兩種定位方式都有各自的優(yōu)缺點(diǎn)。
里程計(jì)定位:
- 優(yōu)點(diǎn):里程計(jì)定位信息是連續(xù)的,沒(méi)有離散的跳躍。
- 缺點(diǎn):里程計(jì)存在累計(jì)誤差,不利于長(zhǎng)距離或長(zhǎng)期定位。
傳感器定位: - 優(yōu)點(diǎn):比里程計(jì)定位更精準(zhǔn);
- 缺點(diǎn):傳感器定位會(huì)出現(xiàn)跳變的情況,且傳感器定位在標(biāo)志物較少的環(huán)境下,其定位精度會(huì)大打折扣。
兩種定位方式優(yōu)缺點(diǎn)互補(bǔ),應(yīng)用時(shí)一般二者結(jié)合使用。
3.坐標(biāo)系變換
上述兩種定位實(shí)現(xiàn)中,機(jī)器人坐標(biāo)系一般使用機(jī)器人模型中的根坐標(biāo)系(base_link 或 base_footprint),里程計(jì)定位時(shí),父級(jí)坐標(biāo)系一般稱之為 odom,如果通過(guò)傳感器定位,父級(jí)參考系一般稱之為 map。當(dāng)二者結(jié)合使用時(shí),map 和 odom 都是機(jī)器人模型根坐標(biāo)系的父級(jí),這是不符合坐標(biāo)變換中"單繼承"的原則的,所以,一般會(huì)將轉(zhuǎn)換關(guān)系設(shè)置為: map -> doom -> base_link 或 base_footprint。
導(dǎo)航條件說(shuō)明
導(dǎo)航實(shí)現(xiàn),在硬件和軟件方面是由一定要求的,需要提前準(zhǔn)備。
1.硬件
雖然導(dǎo)航功能包集被設(shè)計(jì)成盡可能的通用,在使用時(shí)仍然有三個(gè)主要的硬件限制:
- 它是為差速驅(qū)動(dòng)的輪式機(jī)器人設(shè)計(jì)的。它假設(shè)底盤(pán)受到理想的運(yùn)動(dòng)命令的控制并可實(shí)現(xiàn)預(yù)期的結(jié)果,命令的格式為:x速度分量,y速度分量,角速度(theta)分量。
- 它需要在底盤(pán)上安裝一個(gè)單線激光雷達(dá)。這個(gè)激光雷達(dá)用于構(gòu)建地圖和定位。
- 導(dǎo)航功能包集是為正方形的機(jī)器人開(kāi)發(fā)的,所以方形或圓形的機(jī)器人將是性能最好的。
它也可以工作在任意形狀和大小的機(jī)器人上,但是較大的機(jī)器人將很難通過(guò)狹窄的空間。
2.軟件
導(dǎo)航功能實(shí)現(xiàn)之前,需要搭建一些軟件環(huán)境:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-786910.html
- 毋庸置疑的,必須先要安裝 ROS
- 當(dāng)前導(dǎo)航基于仿真環(huán)境,先保證上一章的機(jī)器人系統(tǒng)仿真可以正常執(zhí)行
- 在仿真環(huán)境下,機(jī)器人可以正常接收 /cmd_vel
消息,并發(fā)布里程計(jì)消息,傳感器消息發(fā)布也正常,也即導(dǎo)航模塊中的運(yùn)動(dòng)控制和環(huán)境感知實(shí)現(xiàn)完畢
后續(xù)導(dǎo)航實(shí)現(xiàn)中,我們主要關(guān)注于: 使用 SLAM 繪制地圖、地圖服務(wù)、自身定位與路徑規(guī)劃文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-786910.html
到了這里,關(guān)于(無(wú)人機(jī)方向)ros學(xué)習(xí)之路ROS 機(jī)器人系統(tǒng)仿真_導(dǎo)航仿真概述的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!