ROS與navigation教程——概述

navigation是ROS的二維導航功能包,簡單來說,就是根據輸入的里程計等傳感器的信息流和機器人的全局位置,通過導航算法,計算得出安全可靠的機器人速度控制指令。

代碼庫:https://github.com/ros-planning/navigation

代碼里文件較多,進行梳理后如下圖

  • map_server:地圖服務器,主要功能是保存地圖和導入地圖。
  • costmap_2d:可以生產代價地圖,以及提供各種相關的函數。
  • robot_pose_ekf:擴展卡爾曼濾波器,輸入是里程計、IMU、VO中的任意兩個或者三個,輸出是一個融合之后的pose。
  • localization:這里是兩個定位用的package。fake_localization一般是仿真用的,amcl才是實際定位用的package。
  • nav_core:這里面只有三個文件,對應的是全局路徑規劃、局部路徑規劃、recovery_action的通用接口定義,具體功能實現則是在各個對應的規劃器package里。
  • move_base:這里實現的是整個導航的流程。什么時候調用全局路徑規劃、什么時候調用局部路徑規劃、什么時候調用recovery_action都是這個package管的。就是下圖中間方框里做的事情,可以說是整個navigation stack的核心。
    ?


?

總體框架圖中可以看到,

一、move_base

move_base提供了ROS導航的配置、運行、交互接口,它主要包括兩個部分:

(1) 全局路徑規劃(global planner):根據給定的目標位置進行總體路徑的規劃.

在ROS的導航中,首先會通過全局路徑規劃,計算出機器人到目標位置的全局路線。這一功能是navfn這個包實現的。

navfn通過Dijkstra最優路徑的算法,計算costmap上的最小花費路徑,作為機器人的全局路線。將來在算法上應該還會加入A*算法。

(2) 本地實時規劃(local planner):根據附近的障礙物進行躲避路線規劃。

本地的實時規劃是利用base_local_planner包實現的。該包使用Trajectory Rollout 和Dynamic Window approaches算法計算機器人每個周期內應該行駛的速度和角度(dx,dy,dtheta velocities)。

base_local_planner這個包通過地圖數據,通過算法搜索到達目標的多條路經,利用一些評價標準(是否會撞擊障礙物,所需要的時間等等)選取最優的路徑,并且計算所需要的實時速度和角度。

二、map_server

?map_server提供map_server?ROS節點,它提供地圖數據作為一個ROS服務器。

也提供map_saver命令行功能,能動態生成保存到文件中的地圖。?包中通過工具操作的地圖是以成堆的文件存儲的。YAML文件描述地圖的元數據,并命名image文件。Image文件編碼占用數據。

Image?以對應單元的顏色描述世界中每個單元的占用狀態。白色單元格表示自由,黑色單元格表示占用,兩種顏色之間的單元表示未知。接受彩色圖像,但顏色值平均為灰度值。

三、costmap_2d

costmap_2d包提供了一種2D代價地圖的實現方案,該方案從實際環境中獲取傳感器數據,構建數據的2D或3D占用柵格(取決于是否使用基于體素的實現),以及基于占用柵格和用戶定義膨脹半徑的2D代價地圖的膨脹代價。

該包也支持基于map_server初始化代價地圖,基于滾動窗口的代價地圖,以及基于參數化訂閱和配置傳感器主題。

costmap_2d包提供了一種可配置框架來維護機器人在占用柵格應該如何導航的信息。代價地圖使用傳感器數據和來自靜態地圖的信息,通過costmap_2d :: Costmap2DROS對象來存儲和更新實際環境中的障礙物信息。

初始化costmap_2d :: Costmap2DROS對象的方法主要有兩種。

  • 第一種是使用用戶生成的靜態地圖進行初始化(有關構建地圖的文檔,請參閱map_server包)。在這種情況下,代價地圖被初始化來匹配與靜態地圖提供的寬度,高度和障礙物信息。這種方式通常與定位系統(如AMCL)結合使用,允許機器人在地圖坐標系注冊障礙物,并且當基座在環境中移動時可以根據傳感器數據更新其代價地圖。
  • 第二種是給出一個寬度和高度,并將rolling_window參數設置為true。當機器人在移動時,rolling_window參數將機器人保持在代價地圖的中心。然而當機器人在給定區域移動得太遠時,障礙物信息將會被從地圖中丟棄。這種方式的配置最常用于里程計坐標系中,機器人只關注局部區域內的障礙物

四、robot_pose_ekf

Robot Pose EKF 包用于評估機器人的3D位姿,基于來自不同來源的位姿測量信息。

它使用帶有6D(3D position and 3D orientation)模型信息的擴展卡爾曼濾波器來整合來自輪式里程計,IMU傳感器和視覺里程計的數據信息。

基本思路就是用松耦合方式融合不同傳感器信息實現位姿估計。

五、acml

amcl是一種機器人在2D中移動的概率定位系統。 它實現了自適應(或KLD采樣)蒙特卡羅定位方法,該方法使用粒子濾波器來針對已知地圖跟蹤機器人的位姿。

?

參考資料:

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/253903.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253903.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253903.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux下c開發 之 線程通信與pthread_cond_wait()的使用

pthread_cond_wait() /************pthread_cond_wait()的使用方法**********/pthread_mutex_lock(&qlock); pthread_cond_wait(&qready, &qlock);pthread_mutex_unlock(&qlock);/*****************************************************/The mutex passed …

ROS與navigation教程——ACML參數配置

<launch> <!--//后為wiki官網的參數說明 &#xff08;&#xff09;中為粗讀算法參數說明及理解 面臨的問題常用地圖有2種&#xff1a;1.基于特征&#xff0c;僅指明在指定位置&#xff08;地圖中包含的對象的位置&#xff09;的環境的形狀。特征表示使得調節對象的位置…

【設計模式】單例模式 Singleton Pattern

通常我們在寫程序的時候會碰到一個類只允許在整個系統中只存在一個實例&#xff08;Instance&#xff09; 的情況&#xff0c; 比如說我們想做一計數器&#xff0c;統計某些接口調用的次數&#xff0c;通常我們的數據庫連接也是只期望有一個實例。Windows系統的系統任務管理器…

修改輸入框placeholder的默認樣式

一般網頁中都用到input的placeholder屬性&#xff0c;想讓這個默認樣式和網頁保持一致&#xff0c;就需要重新設定樣式&#xff0c;百度百度&#xff1a; :-moz-placeholder { / color: #000; opacity:1; }支持/* Mozilla Firefox 4 to 18 * ::-moz-placeholder { color: #000;…

進程及線程通信總結

上文我們介紹了如何建立一個簡單的多線程程序&#xff0c;多線程之間不可避免的需要進行通信 。相比于進程間通信來說&#xff0c;線程間通信無疑是相對比較簡單的。 首先我們來看看最簡單的方法&#xff0c;那就是使用全局變量&#xff08;靜態變量也可以&#xff09;來進行通…

ROS multi-master——multimaster_fkie配置

多主站ROS配置和mutimaster_fkie ROS版本&#xff1a;kinetic 操作系統&#xff1a;Ubuntu 16.04。 multimaster_fkie&#xff1a;github 1網絡配置 1.1路由器 設置無線路由器并連接兩臺計算機/機器人。為這兩臺計算機設置靜態IP地址。相互測試ping命令和ssh。 1.2主機 …

Docker入門

1. Docker簡介: docker是一個基于LXC的高級容器引擎。簡單地說&#xff0c;docker是一個輕量級的虛擬解決方案&#xff0c;或者說它是一個超輕量級的虛擬機&#xff08;容器&#xff09;。 Docker是一個開源的引擎&#xff0c;可以輕松的為任何應用創建一個輕量級的、可移植的、…

樂器庫的混合

每臺微機一個聲卡&#xff0c;也就是一片D/A&#xff0c;驅動按波特率、采樣位數、采樣通道傳輸給D/A&#xff0c;輸出模擬音頻。播放時僅一種與硬件支持格式對應&#xff0c;其他需驅動&#xff08;有損&#xff09;變換到硬件支持格式。每個應用都可單獨播放聲音&#xff0c;…

kafka認知--(1)

文檔參考&#xff1a;http://kafka.apache.org/documentation.html 下載代碼&#xff1a; tar -xzf kafka_2.11-0.11.0.0.tgz cd kafka_2.11-0.11.0.0 啟動 bin/zookeeper-server-start.sh config/zookeeper.properties 創建topic&#xff08;主題為test&#xff0c;只有一個分…

帶頭尾指針的list的C實現

一、緣起 很早寫了一個帶頭尾指針的list&#xff0c;該list支持從尾部插入元素&#xff0c;在任意位置刪除元素&#xff0c;最近用這個list時發現一個bug&#xff0c;修正了&#xff0c;并加了幾個接口函數。貼出來&#xff0c;希望對C的初學者有用。 二、基本說明 2.1、數據結…

Gmapping——從原理到實踐

概述 在SLAM中&#xff0c;機器人位姿和地圖都是狀態變量&#xff0c;我們需要同時對這兩個狀態變量進行估計&#xff0c;即機器人獲得一張環境地圖的同時確定自己相對于該地圖的位置。我們用x表示機器人狀態&#xff0c;m表示環境地圖&#xff0c;z表示傳感器觀測情況&#xf…

關于git分支

1.關于git分支 git的“分支”乍一聽是一個特別容易讓人產生錯覺的概念&#xff0c;以為它和樹枝一樣是分叉的枝節&#xff0c;其實Git中的分支本質上是個指向commit對象的指針,每次commit&#xff0c;git都把它們串成一條時間線&#xff0c;這條時間線就是一個分支。 2.直接切換…

【機器學習經典算法源碼分析系列】-- 邏輯回歸

1.邏輯回歸&#xff08;Logistic Regression&#xff09;又常被成為“邏輯斯蒂回歸”&#xff0c;實質上是一個二元分類問題。 邏輯回歸代價函數&#xff1a; 代價函數導數&#xff1a; Matlab實現&#xff1a; 采用matlab中自帶的無約束最小化函數fminunc來代替梯度下降法&…

求特殊自然數

總時間限制: 1000ms 內存限制: 65536kB 描述一個十進制自然數,它的七進制與九進制表示都是三位數&#xff0c;且七進制與九進制的三位數碼表示順序正好相反。編程求此自然數,并輸出顯示。 輸入無。輸出三行&#xff1a;第一行是此自然數的十進制表示&#xff1b;第一行是此自然…

ROS——不同版本間ROS進行通信

在相同版本間的ROS進行通信不在贅述了&#xff0c;修改/etc/hosts文件即可。 最近項目遇到在Ubuntu16.04 與Ubuntu18.04兩個系統間進行ROS通信&#xff0c;ROS版本分別為Kinetic和Melodic。配置網絡后&#xff0c;兩邊都能夠ping通&#xff0c;但是在獲取ros數據是&#xff0c…

大數據開發實戰:數據流圖及相關數據技術

1、大數據流程圖 2、大數據各個環節主要技術 2.1、數據處理主要技術 Sqoop&#xff1a;&#xff08;發音&#xff1a;skup&#xff09;作為一款開源的離線數據傳輸工具&#xff0c;主要用于Hadoop(Hive) 與傳統數據庫&#xff08;MySql,PostgreSQL&#xff09;間的數據傳遞。它…

oracle 中時間類型 date 與 long 互轉

我們在保存時間到數據庫時&#xff0c;有時候會保存long型的數據&#xff0c;固定長度是13位&#xff0c;是用當前時間減去1970-01-01&#xff0c;再換算成毫秒得到的結果。 但是要考慮到時區問題中國的時區時8區所以時間要加上8小時 oracle中的實現方式&#xff1a; ---------…

Linux對包管理闡述

Centos/Redhat/Fedora的軟件包&#xff0c;都是rpm后綴的文件。包管理器rpm(Redhat packages manager) linux的哲學思想是簡單命令解決復雜任務&#xff0c;因此每個軟件的功能較單一&#xff0c;所以各種包之間有著復雜的依賴關系&#xff0c;為了解決這種可以使用前端工具&am…

跨時鐘域電路設計——亞穩態及雙鎖存器

一、同步電路 定義&#xff1a;電路中所有受時鐘控制的單元&#xff0c;全部由一個統一的時鐘控制。 優點&#xff1a;在同步設計中&#xff0c;EDA工具可以保證電路系統的時序收斂&#xff0c;避免電路設計中的競爭冒險。 缺點&#xff1a;時鐘樹綜合需要加入大量延遲單元&…

linux setsockopt詳解

1.closesocket&#xff08;一般不會立即關閉而經歷TIME_WAIT的過程&#xff09;后想繼續重用該socket&#xff1a; BOOL bReuseaddrTRUE; setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL)); 2. 如果要已經處于連接狀態的soket在調用closes…