Gmapping——從原理到實踐

  • 概述

在SLAM中,機器人位姿和地圖都是狀態變量,我們需要同時對這兩個狀態變量進行估計,即機器人獲得一張環境地圖的同時確定自己相對于該地圖的位置。我們用x表示機器人狀態,m表示環境地圖,z表示傳感器觀測情況,u表示輸入控制,下標表示時刻,則對

進行估計。而由條件貝葉斯法則,可以得到

這一分解相當于把SLAM分離為定位和構建地圖兩步,大大降低的SLAM問題的復雜度。基于此,Gmaping算法的大致過程為用上一時刻的地圖和運動模型預測當前時刻的位姿,然后根據傳感器觀測值計算權重,重采樣,更新粒子的地圖,如此往復。ROS中實現的Gmapping算法框架大致如下,后面講述原理時將說明對應的代碼模塊:

  • 定位

Gmapping算法基于粒子濾波,因此定位部分和粒子濾波大致相同:粒子狀態預測,測量,更新,重采樣。接下來分別說明:

1、狀態預測(draw from motion)

??當前時刻粒子的狀態首先由運動模型進行更新,在初始值上增加高斯采樣的噪聲,進行一個粗略狀態估計。

??在Gmapping算法中,則采用以下算法對運動進行采樣:

2、測量(scan match)

??? 這一步是在粗略估計的基礎上做一次掃描匹配,找到一個使當前觀測最貼合地圖的位姿,以改進基于里程計模型的提議分布。基本思路是在基于運動模型預測的位姿,向負x,正x,負y,正y,左旋轉,右旋轉一共六個狀態移動預測位姿,計算每個狀態下的匹配得分,選擇最高得分對應的位姿為最優位姿。

掃描匹配的重點就在于如何計算匹配得分。所謂匹配,是將當前采集的激光數據與環境地圖進行對準:1)激光點的坐標轉換至網格地圖坐標;2)分別處理六個狀態:當確定激光點網格坐標的地圖值為障礙物時,進行打分(原理與NDT類似,距離越小,分數越大);3)得分最高的位姿為最優位姿。

?? 獲得最優粒子位姿后,可以把粒子采樣范圍從又扁又寬的區域更改到激光雷達觀測模型所代表的尖峰區域L,新的粒子分布就可以更貼近于真實分布。

???? 掃描匹配之后,我們就找到了L所代表的尖峰區域,接下來的任務是確定

該尖峰區域所代表的高斯分布的均值和方差。作者的方法是,在L中隨機采樣K個點,根據這K個點的里程計和觀測模型計算均值和方差,如下式所示。

3、計算權重

???? 然后,對于每個粒子,我們需要計算它的權重,以供后續的重采樣步驟使用。由于在前面我們利用激光數據對提議分布進行了優化:

???? 那么粒子的權重公式變成了:

??? 這里還有一個問題就是權重計算,權重描述的是目標分布和提議分布之間的差別。因此我們在計算權重時就是計算我們模擬出的提議分布和目標分布的不同。而這種不同體現在我們是由有限的采樣模擬出目標分布,因此權重的計算公式為:

4、重采樣(update Tree Weights)

??? 在執行重采樣之前計算了每個粒子的權重,有時會因為環境相似度高或是由于測量噪聲的影響會使接近正確狀態的粒子數權重較小而錯誤狀態的粒子的權重反而會大。重采樣是依據粒子權重來重新采粒子的,這樣正確的粒子就很有可能會被丟棄,頻繁的重采樣更加劇了正確但權重較小粒子被丟棄的可能性。

Gmapping算法中,作者采用權重值離差的量度進行重采樣的判定。

Neff越大,粒子權重差距越小。想象極端情況,當所有粒子權重都一樣的時候(比如重采樣之后),這些粒子恰好可以表示真實分布(類似于按照某個分布隨機采樣的結果)。當Neff降低到某個閾值以下,說明粒子的分布與真實分布差距很大,在粒子層面表現為某些粒子離真實值很近,而很多粒子離真實值較遠,這時候恰好進行重采樣。

  • 建圖

Gmapping算法會構建一個柵格地圖,對二維環境進行了柵格尺度劃分,而假設每一個柵格的狀態是獨立的。

對于環境中的一個點,我們用 來表示它是Free狀態的概率,用 來表示它是Occupied狀態的概率,當然兩者的和為1。為了更方便的表示,我們用 作為該點的狀態,比值越大說明該點約可能是障礙物。

對于一個點,對于一個點,新來了一個測量值z之后我們需要更新它的狀態。假設測量值來之前,該點的狀態為 ,我們要更新它為:

由貝葉斯公式計算可得:

為了方便計算,我們對兩邊取對數:

在沒有任何測量值的初始狀態下,一個點的初始狀態為0,而這一部分關鍵的地方在于 的計算,我們稱這個比值為測量值的模型,標記為lomeas。實際上測量值的模型只有兩種: ?,而且都是定值。這樣每獲得一次測量值,我們都能用加減法對點狀態進行更新。從而完成更新地圖的工作。以下圖為例:

x是真實世界中的坐標, 為柵格地圖中的坐標,r為一格的長度,1/r表示分辨率,則 。則二維情況下: 。假設圖中機器人的位姿為(x,y, ),我們可以很容易計算障礙物的位置:

其中,d為測量得到的距離, 為激光線與機器人位姿角的夾角。我們得到兩個坐標后能計算出兩點在柵格地圖的位置(i,j )與( )。

然后,我們利用bresenham算法(compute active area)來計算非障礙物格點的集合。然后利用上文所述結論,更新柵格地圖即可。

Bresenham算法基本思想是采用遞推步進的辦法,令每次最大變化方向的坐標步進一個像素,同時另一個方向的坐標依據誤差判別式的符號來決定是否也要步進一個像素。舉例說明:

由于顯示直線的象素點只能取整數值坐標,可以假設直線上第i個像素點坐標為(xi,yi),它是直線上點(xi,yi)的最佳近似,并且xi=xi(假設直線斜率小于1)。那么,直線上下一個像素點的可能位置是(xi+1,yi)或(xi+1,yi+1)。由圖中可以知道,在x=xi+1處,直線上點的y值是y=m(xi+1)+b,該點離像素點(xi+1,yi)和像素點(xi+1,yi+1)的距離分別是d1和d2:?

 這兩個距離差是

分析d1-d2,有以下三種情況:

  1. 當此值為正時,d1>d2,說明直線上理論點離(xi+1,yi+1) 像素較近,下一個像素點應取(xi+1,yi+1)。
  2. 當此值為負時,d1<d2,說明直線上理論點離(xi+1,yi) 像素較近,則下一個像素點應取(xi+1,yi)。
  3. 當此值為零時,說明直線上理論點離上、下兩個像素點的距離相等,取哪個點都行,算法規定這種情況下取(xi+1,yi+1)作為下一個像素點。

因此只要利用(d1-d2)的符號就可以決定下一個像素點的選擇。

參考文獻

  1. https://blog.csdn.net/qq_36355662/article/details/90301219
  2. https://blog.csdn.net/shixiaolu63/article/details/93739379
  3. https://www.jianshu.com/p/f044da681454
  4. https://blog.csdn.net/liuyanpeng12333/article/details/81946841
  5. https://www.cnblogs.com/yhlx125/p/5634128.html
  6. 概率機器人
  7. 粒子濾波:從推導到應用
  8. Improved Techniques for Grid Mapping with Rao-Blackwellized Particle Filters

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

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

相關文章

關于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…

[TOOLS] 移動端調試進行時 - whistle

1、本地安裝、啟動whistle 安裝實操請查看官方文檔不贅述 復制代碼 2、手機設置代理 實操請查看官方文檔 !!!注意&#xff1a;代理ip填寫whistle右上角online選項中的ip 復制代碼 3、whistle上設置對應rules、weinre whistle設置代理(!!!注意支持tunnel協議)&#xff1a; rules…

函數動態參數實現format

變量賦值一種是字符串格式化&#xff0c;一種是通過format的方式 1.字符串格式化 s"i am %s,age %d"%(Jasper,23)print(s)打印輸出&#xff1a;i am Jasper,age 232.format格式化 s"i am {name},age {age}".format(namejasper,age23)print(s)或 s2"i …

跨時鐘域電路設計——單bit信號

前面提到了簡單的雙電平鎖存器&#xff0c;下面是一些單bit同步電路。 一、慢時鐘域向快時鐘域 邊沿檢測同步器 將慢時鐘域的脈沖搬移并縮小為快時鐘域的脈沖。 既可以檢測上升沿&#xff0c;也可以檢測下降沿。 如上圖&#xff0c;慢時鐘下一個有效脈沖的最短周期為慢時鐘的…

數據同步 rsync+notify架構

rsync 同步命令&#xff0c;非常好用 notify是監控本地文件的變化的 、安裝配置 1. 安裝rsync&#xff0c;inotify-tools sudo apt-get install rsync inotify-tools 2. 拷貝rsync配置文件 mkdir /etc/rsync cp /usr/share/doc/rsync/examples/rsyncd.conf /etc/rsync/ 3. 服…

OC_KVC與KVO簡單介紹

KVC KVC概述 KVC 即 Key-value coding 鍵值編碼&#xff0c;是指iOS的開發中&#xff0c;可以允許開發者通過Key名直接訪問對象的屬性&#xff0c;或者給對象的屬性賦值。 KVC案例 interface Person : NSObjectproperty (nonatomic,assign) int age; property (nonatomic,copy)…

C語言100例01 PHP版(練習)

題目&#xff1a;有1、2、3、4個數字&#xff0c;能組成多少個互不相同且無重復數字的三位數&#xff1f;都是多少&#xff1f; 程序分析&#xff1a;可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列后再去 掉不滿足條件的排列。 代碼&#xff1a; 1 for($i1;$i&l…

嵌入式根文件系統制作

1:文件系統分類&#xff1a; 基于flash的文件系統&#xff1a;flash有兩種&#xff0c;一種是NOR,另一種NAND。NOR型 FLASH主要用于存放程序。NAND型 FLASH主要用于存放數據。NOR的特點是可在芯片內執行。這樣應用程序可以直接在flash內存內運行&#xff0c;不必再把代碼讀到…

跨時鐘域電路設計——結繩法

信號從快時鐘域到慢時鐘域過渡時&#xff0c;慢時鐘可能無法對快時鐘變化太快的信號進行采樣。 之前的同步器法對兩個時鐘間的關系有要求&#xff0c;結繩法適用于任何時鐘域之間的過渡。 結繩法的原理是將快時鐘信號的脈沖周期延長&#xff0c;等到慢時鐘周期采樣后再“解繩”…

我之理解---計時器setTimeout 和clearTimeout

今天在寫個圖片切換的問題 有動畫滯后的問題&#xff0c;才動手去查setTimeout 和clearTimeout。之前寫的圖片播放器也有類似的問題&#xff0c;有自動start按鈕 和stop按鈕&#xff0c; 其他都正常&#xff0c;問題出在每次多次快速的點擊start按鈕時&#xff0c;圖片播放的速…

002服務提供者Eureka

1、POM配置 和普通Spring Boot工程相比&#xff0c;僅僅添加了Eureka、Spring Boot Starter Actuator依賴和Spring Cloud依賴管理 <dependencies><!--添加Eureka Server依賴--><dependency><groupId>org.springframework.cloud</groupId><art…

使用Busybox構造cramfs根文件系統

使用Busybox構造cramfs根文件系統 11.1、下載Busybox&#xff0c;如果系統中沒有mkcramfs工具則還要下載mkcramfs壓縮工具。本文件系統使用Busybox-1.10.1&#xff0c;cramfs-1.1。壓縮文件Busybox-1.10.1.tar.bz2&#xff0c;cramfs-1.1.tar.gz。 22.解壓文件&#xff1a; tar…