ROS与navigation教程——概述
navigation是ROS的二維導(dǎo)航功能包,簡(jiǎn)單來(lái)說(shuō),就是根據(jù)輸入的里程計(jì)等傳感器的信息流和機(jī)器人的全局位置,通過(guò)導(dǎo)航算法,計(jì)算得出安全可靠的機(jī)器人速度控制指令。
代碼庫(kù):https://github.com/ros-planning/navigation
代碼里文件較多,進(jìn)行梳理后如下圖
- map_server:地圖服務(wù)器,主要功能是保存地圖和導(dǎo)入地圖。
- costmap_2d:可以生產(chǎn)代價(jià)地圖,以及提供各種相關(guān)的函數(shù)。
- robot_pose_ekf:擴(kuò)展卡爾曼濾波器,輸入是里程計(jì)、IMU、VO中的任意兩個(gè)或者三個(gè),輸出是一個(gè)融合之后的pose。
- localization:這里是兩個(gè)定位用的package。fake_localization一般是仿真用的,amcl才是實(shí)際定位用的package。
- nav_core:這里面只有三個(gè)文件,對(duì)應(yīng)的是全局路徑規(guī)劃、局部路徑規(guī)劃、recovery_action的通用接口定義,具體功能實(shí)現(xiàn)則是在各個(gè)對(duì)應(yīng)的規(guī)劃器package里。
- move_base:這里實(shí)現(xiàn)的是整個(gè)導(dǎo)航的流程。什么時(shí)候調(diào)用全局路徑規(guī)劃、什么時(shí)候調(diào)用局部路徑規(guī)劃、什么時(shí)候調(diào)用recovery_action都是這個(gè)package管的。就是下圖中間方框里做的事情,可以說(shuō)是整個(gè)navigation stack的核心。
?
?
總體框架圖中可以看到,
一、move_base
move_base提供了ROS導(dǎo)航的配置、運(yùn)行、交互接口,它主要包括兩個(gè)部分:
(1) 全局路徑規(guī)劃(global planner):根據(jù)給定的目標(biāo)位置進(jìn)行總體路徑的規(guī)劃.
在ROS的導(dǎo)航中,首先會(huì)通過(guò)全局路徑規(guī)劃,計(jì)算出機(jī)器人到目標(biāo)位置的全局路線。這一功能是navfn這個(gè)包實(shí)現(xiàn)的。
navfn通過(guò)Dijkstra最優(yōu)路徑的算法,計(jì)算costmap上的最小花費(fèi)路徑,作為機(jī)器人的全局路線。將來(lái)在算法上應(yīng)該還會(huì)加入A*算法。
(2) 本地實(shí)時(shí)規(guī)劃(local planner):根據(jù)附近的障礙物進(jìn)行躲避路線規(guī)劃。
本地的實(shí)時(shí)規(guī)劃是利用base_local_planner包實(shí)現(xiàn)的。該包使用Trajectory Rollout 和Dynamic Window approaches算法計(jì)算機(jī)器人每個(gè)周期內(nèi)應(yīng)該行駛的速度和角度(dx,dy,dtheta velocities)。
base_local_planner這個(gè)包通過(guò)地圖數(shù)據(jù),通過(guò)算法搜索到達(dá)目標(biāo)的多條路經(jīng),利用一些評(píng)價(jià)標(biāo)準(zhǔn)(是否會(huì)撞擊障礙物,所需要的時(shí)間等等)選取最優(yōu)的路徑,并且計(jì)算所需要的實(shí)時(shí)速度和角度。
二、map_server
?map_server提供map_server?ROS節(jié)點(diǎn),它提供地圖數(shù)據(jù)作為一個(gè)ROS服務(wù)器。
也提供map_saver命令行功能,能動(dòng)態(tài)生成保存到文件中的地圖。?包中通過(guò)工具操作的地圖是以成堆的文件存儲(chǔ)的。YAML文件描述地圖的元數(shù)據(jù),并命名image文件。Image文件編碼占用數(shù)據(jù)。
Image?以對(duì)應(yīng)單元的顏色描述世界中每個(gè)單元的占用狀態(tài)。白色單元格表示自由,黑色單元格表示占用,兩種顏色之間的單元表示未知。接受彩色圖像,但顏色值平均為灰度值。
三、costmap_2d
costmap_2d包提供了一種2D代價(jià)地圖的實(shí)現(xiàn)方案,該方案從實(shí)際環(huán)境中獲取傳感器數(shù)據(jù),構(gòu)建數(shù)據(jù)的2D或3D占用柵格(取決于是否使用基于體素的實(shí)現(xiàn)),以及基于占用柵格和用戶定義膨脹半徑的2D代價(jià)地圖的膨脹代價(jià)。
該包也支持基于map_server初始化代價(jià)地圖,基于滾動(dòng)窗口的代價(jià)地圖,以及基于參數(shù)化訂閱和配置傳感器主題。
costmap_2d包提供了一種可配置框架來(lái)維護(hù)機(jī)器人在占用柵格應(yīng)該如何導(dǎo)航的信息。代價(jià)地圖使用傳感器數(shù)據(jù)和來(lái)自靜態(tài)地圖的信息,通過(guò)costmap_2d :: Costmap2DROS對(duì)象來(lái)存儲(chǔ)和更新實(shí)際環(huán)境中的障礙物信息。
初始化costmap_2d :: Costmap2DROS對(duì)象的方法主要有兩種。
- 第一種是使用用戶生成的靜態(tài)地圖進(jìn)行初始化(有關(guān)構(gòu)建地圖的文檔,請(qǐng)參閱map_server包)。在這種情況下,代價(jià)地圖被初始化來(lái)匹配與靜態(tài)地圖提供的寬度,高度和障礙物信息。這種方式通常與定位系統(tǒng)(如AMCL)結(jié)合使用,允許機(jī)器人在地圖坐標(biāo)系注冊(cè)障礙物,并且當(dāng)基座在環(huán)境中移動(dòng)時(shí)可以根據(jù)傳感器數(shù)據(jù)更新其代價(jià)地圖。
- 第二種是給出一個(gè)寬度和高度,并將rolling_window參數(shù)設(shè)置為true。當(dāng)機(jī)器人在移動(dòng)時(shí),rolling_window參數(shù)將機(jī)器人保持在代價(jià)地圖的中心。然而當(dāng)機(jī)器人在給定區(qū)域移動(dòng)得太遠(yuǎn)時(shí),障礙物信息將會(huì)被從地圖中丟棄。這種方式的配置最常用于里程計(jì)坐標(biāo)系中,機(jī)器人只關(guān)注局部區(qū)域內(nèi)的障礙物
四、robot_pose_ekf
Robot Pose EKF 包用于評(píng)估機(jī)器人的3D位姿,基于來(lái)自不同來(lái)源的位姿測(cè)量信息。
它使用帶有6D(3D position and 3D orientation)模型信息的擴(kuò)展卡爾曼濾波器來(lái)整合來(lái)自輪式里程計(jì),IMU傳感器和視覺(jué)里程計(jì)的數(shù)據(jù)信息。
基本思路就是用松耦合方式融合不同傳感器信息實(shí)現(xiàn)位姿估計(jì)。
五、acml
amcl是一種機(jī)器人在2D中移動(dòng)的概率定位系統(tǒng)。 它實(shí)現(xiàn)了自適應(yīng)(或KLD采樣)蒙特卡羅定位方法,該方法使用粒子濾波器來(lái)針對(duì)已知地圖跟蹤機(jī)器人的位姿。
?
參考資料:
https://blog.csdn.net/tansir94/article/details/83720740
http://wiki.ros.org/navigation
https://blog.csdn.net/bazinga_IIIIII/article/details/79369451
https://blog.csdn.net/jinking01/article/details/79455962
https://www.ncnynl.com/archives/201708/1911.html
總結(jié)
以上是生活随笔為你收集整理的ROS与navigation教程——概述的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql-用正则表达式进行搜索
- 下一篇: 算法训练 6-1 递归求二项式系数值