ROS与navigation教程——基本导航调整指南
?
說(shuō)明:
- 介紹如何調(diào)整機(jī)器人上的ROS導(dǎo)航包
步驟:
(1) 機(jī)器人導(dǎo)航需要那些準(zhǔn)備?
在調(diào)整新機(jī)器人上的導(dǎo)航包時(shí)遇到的大部分問(wèn)題都在本地規(guī)劃器調(diào)諧參數(shù)之外的區(qū)域。機(jī)器人的里程計(jì),定位,傳感器以及有效運(yùn)行導(dǎo)航的其他先決條件常常會(huì)出錯(cuò)。所以,我做的第一件事是確保機(jī)器人本身正在準(zhǔn)備好導(dǎo)航。這包括三個(gè)組件檢查:距離傳感器,里程計(jì)和定位。
- 距離傳感器
如果機(jī)器人沒(méi)有從其距離傳感器(例如激光器)獲取信息,那么導(dǎo)航將不起作用。我將確保我可以在rviz中查看傳感器信息,它看起來(lái)相對(duì)正確,并以預(yù)期的速度進(jìn)入。
- 里程計(jì)
通常我會(huì)很難使機(jī)器人正確定位。它將不斷迷失,我會(huì)花費(fèi)大量的時(shí)間調(diào)試AMCL的參數(shù),發(fā)現(xiàn)真正的罪魁禍?zhǔn)资菣C(jī)器人的測(cè)距。因此,我總是運(yùn)行兩個(gè)健全檢查,以確保我相信機(jī)器人的里程計(jì)。
第一個(gè)測(cè)試檢查角速度是否合理。我打開rviz,將坐標(biāo)系設(shè)置為“odom”,顯示機(jī)器人提供的激光掃描,將該主題的衰減時(shí)間設(shè)置為高(類似20秒),并執(zhí)行原地旋轉(zhuǎn)。然后,我看看掃描出來(lái)的邊線在隨后的旋轉(zhuǎn)中如何相互匹配。理想情況下,每次掃描將剛好落在相互的頂端,會(huì)重疊在一起,但是有些旋轉(zhuǎn)漂移是預(yù)期的,所以我只是確保掃描之間誤差,不會(huì)超過(guò)一度或兩度以上。
第二個(gè)測(cè)試檢查線速度是否合理。機(jī)器人放置在與距離墻壁幾米遠(yuǎn)地方,然后以上面相同的方式設(shè)置rviz。接著我將驅(qū)動(dòng)機(jī)器人向墻壁前進(jìn),從rviz中聚合的激光掃描看看掃描出來(lái)邊線的厚度。理想情況下,墻體應(yīng)該看起來(lái)像一個(gè)掃描,但我只是確保它的厚度不超過(guò)幾厘米。如果顯示掃描邊線的分散在半米以上,但有些可能是錯(cuò)誤的測(cè)距。
- 定位
假設(shè)里程計(jì)和激光掃描儀都能合理地執(zhí)行,建圖和調(diào)整AMCL通常并不會(huì)太糟糕。首先,我將運(yùn)行g(shù)mapping或karto,并操縱機(jī)器人來(lái)生成地圖。然后,我將使用該地圖與AMCL,并確保機(jī)器人保持定位。如果我運(yùn)行的機(jī)器人的距離不是很好,我會(huì)用AMCL的測(cè)距模型參數(shù)玩一下。對(duì)整個(gè)系統(tǒng)的一個(gè)很好的測(cè)試是確保激光掃描和地圖可以在rviz的“地圖”坐標(biāo)系中可視化,并且激光掃描與環(huán)境地圖很好地匹配。
(2)代價(jià)地圖
-
一旦我的機(jī)器人滿足導(dǎo)航的先決條件,我想確保代價(jià)地圖的設(shè)置和配置正確。
-
如下建議可用來(lái)調(diào)整代價(jià)地圖:
-
確保根據(jù)傳感器實(shí)際發(fā)布的速率為每個(gè)觀測(cè)源設(shè)置expected_update_rate參數(shù)。我通常在這里給出相當(dāng)?shù)娜萑潭?#xff0c;把檢查的期限提高到我期望的兩倍,但是當(dāng)傳感器低于預(yù)期速率時(shí),它很容易從導(dǎo)航中接收警告。
-
為系統(tǒng)適當(dāng)設(shè)置transform_tolerance參數(shù)。查看使用tf從“base_link”坐標(biāo)系到“map”坐標(biāo)系的轉(zhuǎn)換的預(yù)期延遲。我通常使用tf_monitor查看系統(tǒng)的延遲,并將參數(shù)保守地設(shè)置為關(guān)閉。另外,如果tf_monitor報(bào)告的延遲足夠大,我可能會(huì)隨時(shí)看看導(dǎo)致延遲的原因。這有時(shí)會(huì)導(dǎo)致我發(fā)現(xiàn)關(guān)于給定機(jī)器人的變換如何發(fā)布的問(wèn)題。
-
在缺乏處理能力的機(jī)器人上,我會(huì)考慮關(guān)閉map_update_rate參數(shù)。然而,在這樣做時(shí),我考慮到這將導(dǎo)致傳感器數(shù)據(jù)快速進(jìn)入代價(jià)地圖的延遲,這反過(guò)來(lái)會(huì)降低機(jī)器人對(duì)障礙物的反應(yīng)速度。
-
該publish_frequency參數(shù)是在rviz可視化costmap有用。然而,特別是對(duì)于大型全局地圖,該參數(shù)可能導(dǎo)致事情運(yùn)行緩慢。在生產(chǎn)系統(tǒng)中,我考慮降低成本圖發(fā)布的速度,當(dāng)我需要可視化非常大的地圖時(shí),我確定設(shè)置速度真的很低。
-
是否對(duì)代價(jià)地圖使用voxel_grid或costmap模型的決定在很大程度上取決于機(jī)器人具有的傳感器套件。調(diào)整代價(jià)地圖為基于3D-based代價(jià)地圖更多是涉及未知空間的考慮。如果我正在使用的機(jī)器人只有一個(gè)平面激光,我總是使用costmap模型的地圖。
-
有時(shí),它只能在里程坐標(biāo)系中運(yùn)行導(dǎo)航。要做到這一點(diǎn),我發(fā)現(xiàn)最容易做的事情就是我的復(fù)制local_costmap_params.yaml文件覆蓋global_costmap_params.yaml文件并更改了地圖寬度和高度比如10米。如果需要獨(dú)立的定位性能來(lái)調(diào)整導(dǎo)航,這是一個(gè)簡(jiǎn)單易行的方法
-
-
我傾向于根據(jù)機(jī)器人的尺寸和處理能力選擇我使用的地圖的分辨率。在具有很多處理能力并需要適應(yīng)狹窄空間的機(jī)器人,如PR2,我會(huì)使用細(xì)粒度的地圖...將分辨率設(shè)置為0.025米。對(duì)于像roomba這樣的東西,我可能會(huì)以高達(dá)0.1米的分辨率去降低計(jì)算量。
- Rviz是驗(yàn)證代價(jià)地圖正常工作的好方法。我通常從代價(jià)地圖中查看障礙物數(shù)據(jù),并確保在操縱桿控制下驅(qū)動(dòng)機(jī)器人時(shí),它與地圖和激光掃描相一致。這是對(duì)傳感器數(shù)據(jù)以合理的方式進(jìn)入代價(jià)地圖的合理檢查。如果我決定用機(jī)器人跟蹤未知的空間,主要是這些機(jī)器人正在使用voxel_grid模型的代價(jià)地圖,我一定要看看未知的空間可視化,看看未知的空間被以合理的方式清除。是否正確地從代價(jià)地圖中清除障礙物的一個(gè)很好的檢查方法是簡(jiǎn)單地走在機(jī)器人的前面,看看它是否都成功地看到我,并清除我。
- 當(dāng)導(dǎo)航包僅運(yùn)行costmap時(shí),檢查系統(tǒng)負(fù)載是一個(gè)好主意。這意味著提高move_base節(jié)點(diǎn),但不會(huì)發(fā)送目標(biāo)點(diǎn)并查看負(fù)載。如果計(jì)算機(jī)在這個(gè)時(shí)候陷入僵局,我知道如果我想要運(yùn)行規(guī)劃器的話,我需要做一些CPU參數(shù)調(diào)整。
(3) 局部規(guī)劃器
如果通過(guò)代價(jià)地圖的操作令人滿意,我將繼續(xù)調(diào)整局部規(guī)劃器參數(shù)。在具有合理加速度限制的機(jī)器人上,我通常使用dwa_local_planner,對(duì)于那些具有較低加速度限制的機(jī)器人,并且可以從每個(gè)步驟考慮到加速限制的,我將使用base_local_planner。調(diào)整dwa_local_planner比調(diào)整base_local_planner更為愉快,因?yàn)樗膮?shù)是動(dòng)態(tài)可配置的。為導(dǎo)航包添加dynamic_reconfigure也已經(jīng)在計(jì)劃中。針對(duì)規(guī)劃器的提示:
-
對(duì)于給定的機(jī)器人最重要的是,正確設(shè)置了加速度限制參數(shù)。如果這些參數(shù)關(guān)閉,只能期望來(lái)自機(jī)器人的次優(yōu)行為。如果我不知道機(jī)器人的加速度極限是什么,我會(huì)花點(diǎn)時(shí)間寫出一個(gè)腳本,讓電機(jī)以最大平移和旋轉(zhuǎn)速度命令運(yùn)行一段時(shí)間,看看報(bào)告的里程計(jì)速度(假設(shè)里程會(huì)給出合理的估計(jì)),并從中得出加速度極限。合理設(shè)置這些參數(shù)可以節(jié)省很多時(shí)間。
-
如果我正在使用的機(jī)器人具有低加速度限制,我確保我正在運(yùn)行base_local_planner,其中dwa設(shè)置為false。將dwa設(shè)置為true后,我還將確保根據(jù)處理能力將vx_samples參數(shù)更新為8到15之間的值。這將允許在展示中生成非圓形曲線。
-
如果我正在使用的機(jī)器人的定位并不是很好,我將確保將目標(biāo)公差參數(shù)設(shè)置得比我想象的要高一些。如果機(jī)器人具有較高的最小旋轉(zhuǎn)速度以避免在目標(biāo)點(diǎn)的振蕩,那么我也將提高旋轉(zhuǎn)公差。
-
如果我使用低分辨率的CPU原因,我有時(shí)會(huì)提高sim_granularity參數(shù),以節(jié)省一些周期。
-
我實(shí)際上很少發(fā)現(xiàn)自己改變了path_distance_bias和goal_distance_bias(對(duì)于base_local_planner這些參數(shù)被稱為pdist_scale和gdist_scale)參數(shù)在計(jì)劃者上非常多。當(dāng)我這樣做時(shí),通常是因?yàn)槲以噲D限制本地規(guī)劃器自由,讓計(jì)劃的路徑與除NavFn以外的全局規(guī)劃器合作。將path_distance_bias參數(shù)增大,將使機(jī)器人更緊密地跟隨路徑,同時(shí)以快速向目標(biāo)向前移動(dòng)。如果這個(gè)值設(shè)置得太高,機(jī)器人將會(huì)拒絕移動(dòng),因?yàn)橐苿?dòng)的代價(jià)大于停留在路徑上的位置。簡(jiǎn)單來(lái)說(shuō)就是讓實(shí)際移動(dòng)更接近全局路徑還是本地路徑。
-
如果我想以聰明的方式介紹代價(jià)函數(shù),我將確保將meter_scoring參數(shù)設(shè)置為true。這使得它在代理函數(shù)中的距離以米而不是單元格,也意味著我可以調(diào)整一個(gè)地圖分辨率的代價(jià)函數(shù),并且當(dāng)我移動(dòng)到他人時(shí)期望合理的行為。此外,您現(xiàn)在可以通過(guò)將publish_cost_grid參數(shù)設(shè)置為true來(lái)顯示本地計(jì)劃程序在rviz中生成的代價(jià)函數(shù)。(這不管怎么說(shuō),從來(lái)沒(méi)有把它放入文檔,我會(huì)很快到那個(gè)時(shí)候)。考慮到以米為單位的代價(jià)函數(shù),我可以計(jì)算出移動(dòng)1米的成本與目標(biāo)平衡的成本的折衷。這傾向于給我一個(gè)如何調(diào)整東西的體面的想法。
-
軌跡從其端點(diǎn)得分。這意味著將sim_time參數(shù)設(shè)置為不同的值可能對(duì)機(jī)器人的行為有很大的影響。我通常將此參數(shù)設(shè)置在1-2秒之間,其中設(shè)置更高可以導(dǎo)致稍微平滑的軌跡,確保乘以sim_period的最小速度小于目標(biāo)的兩倍。否則,機(jī)器人將傾向于在其目標(biāo)位置的范圍之外的位置旋轉(zhuǎn),而不是朝向目標(biāo)移動(dòng)。
-
精確的軌跡模擬也取決于距離測(cè)距的合理速度估計(jì)。這來(lái)自于dwa_local_planner和base_local_planner都使用這種速度估計(jì)以及機(jī)器人的加速度限制來(lái)確定規(guī)劃周期的可行速度空間。雖然來(lái)自測(cè)距的速度估計(jì)不一定是完美的,但確保其至少接近得到最佳行為是重要的。
總結(jié)
以上是生活随笔為你收集整理的ROS与navigation教程——基本导航调整指南的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: (五)门级电路低功耗设计优化
- 下一篇: php 把一个数组分成有n个元素的二维数