1. 程式人生 > >Gmapping、hector、Cartographer三種鐳射SLAM演算法簡單對比

Gmapping、hector、Cartographer三種鐳射SLAM演算法簡單對比

一、Gmapping是基於粒子濾波的演算法。

缺點:嚴重依賴里程計,無法適應無人機及地面不平坦的區域,無迴環(鐳射SLAM很難做迴環檢測),大的場景,粒子較多的情況下,特別消耗資源。


原始碼的核心函式:processScan()

演算法框架:

①  drawFromMotion()運動模型(因為有這步,所以特別依賴里程計資訊)



②  scanMatch()掃描匹配

這裡面有很多模型常用的


座標變換之後,雷達資料對映到地圖上,計算其距離最近障礙物的距離。

③  updateTreeWeights()權值更新

④  resample()重取樣,為了降低退化現象,權重大的粒子多生成一些,很像遺傳演算法。

⑤  地圖更新updateMap()得到最優的粒子,按照他的掃描資料,利用佔據柵格地圖演算法,更新地圖。

二、Hector SLAM

    基於優化的演算法(解最小二乘問題),優缺點:不需要里程計,但對於雷達幀率要求很高40Hz,估計6自由度位姿,可以適應空中或者地面不平坦的情況。初值的選擇對結果影響很大,所以要求雷達幀率較高。

核心函式:update()

①  Matchdate()利用上一幀位置和此幀雷達掃描,運用構造的最小二乘問題,估計此幀位姿。

②  UpdateByScan根據此幀位姿,雷達資料,利用佔據柵格地圖演算法,更新地圖。

掃描匹配演算法:利用g2o解公式7,泰勒展開,運用雙線性插值計算微分,雅克比矩陣。

函式M()該點是障礙物的概率。


三、Cartographer

累計誤差較前兩種演算法低,能天然的輸出協方差矩陣,後端優化的輸入項。成本較低的雷達也能跑出不錯的效果。

先有一定數量的laser scan構建submap,由submap拼接成地圖,所謂的迴環檢測,就是間隔一定數量的掃描進行一次所有submap的圖優化(SPA,運用了分支定界原理進行加速),但這種用有誤差的估計量去作為約束去優化估計量,總有種自己估計優化自己的嫌疑,跟喜歡視覺SLAM運用詞袋模型檢測是否回到之前來過的地方的演算法。


位姿估計:先用相關性掃描匹配(CSM)給一個初值,然後構造一個最小二乘問題(與Hector超不多),求解精確的位置。

CSM:簡單來說大概是:用鐳射末端點匹配取到佔據柵格地圖中的值,獲得得分,取得分最高的作為初值。加上多解析度計算可以加速,並且獲得解析度意義下的最優解。

用分支定界原理加速求解過程(相對於暴力求解),進行深度有限優先搜尋,CSM計算得到初始最高分數,確定深度,分支就是進行拓展,定界就是剪枝。提高運算效率。


                                                         如有錯誤請指出

相關推薦

GmappinghectorCartographer鐳射SLAM演算法簡單對比

一、Gmapping是基於粒子濾波的演算法。 缺點:嚴重依賴里程計,無法適應無人機及地面不平坦的區域,無迴環(鐳射SLAM很難做迴環檢測),大的場景,粒子較多的情況下,特別消耗資源。 原始碼的核心函式:processScan() 演算法框架: ①  drawFromMo

Gmapping hector cartogarpher 鐳射雷達演算法的比對

一、Gmapping是基於粒子濾波的演算法。 缺點:嚴重依賴里程計,無法適應無人機及地面不平坦的區域,無迴環(鐳射SLAM很難做迴環檢測),大的場景,粒子較多的情況下,特別消耗資源。 原始碼的核心函式:processScan() 演算法框架: ①  drawFromMot

Java模擬最短作業優先時間片輪轉最高響應比程序排程演算法

本次試驗是使用程式來模擬作業系統中程序排程的三種不同的排程策略,分別為最短作業有限、時間片輪轉、最高響應比。 模擬的情況下,程序數為8,程序所需執行時間為隨機產生的整數,單位為1S,預設程序同時到達。 以下是實驗的程式碼: Process.java是測試類,用於生成程序列表

工廠模式的簡單對比

很早就想把設計模式吃透,苦於懶,一直都是妄想,最近安排了一些時間,彷彿憑空多出了很多時間,現在在一點點摳摳設計模式裡面的東西。設計模式的學習是很必要的,尤其對優化程式碼結構,提現最為明顯。以下的靈感來源於:http://blog.csdn.net/jason0539/arti

限流消峰的辦法

鏈接 png ret unit 做了 pan mit append vertex 互聯網服務賴以生存的根本是流量, 產品和運營會經常通過各種方式來為應用倒流,比如淘寶的雙十一等,如何讓系統在處理高並發的同時還是保證自身系統的穩定,通常在最短時間內提高並發的做法就是加機器,

內參外參畸變參數參數與相機的標定方法與相機坐標系的理解

整體 沒有 建立 csdn ext 位置 nbsp ons 包含 博客轉載自:http://blog.csdn.net/yangdashi888/article/details/51356385 相機的內參數是六個分別為:1/dx、1/dy、r、u0、v0、f opencv

日常學習隨筆-數組單鏈表雙鏈表形式實現棧結構的基本操作

ext return lse efi CA 需要 kde 當前 default 一、棧結構   棧(stack)是限制插入和刪除只能在一個位置上的表,該位置是 表的末端,叫做棧的頂(Top)。對棧的基本操作有push(進棧),pop(出棧),peak(棧頂元素),size(

用華為eNSP模擬器配置HybridTrunk和Access鏈路類型端口

acc 數據包 相互 子網劃分 幫助 system-v 兩個 5.0 能夠   上一篇文章寫到三層交換機實現多個VLAN之間互相通訊,有朋友提問要如何進行配置,可有案例分析。其實那天我在寫的時候也有做過模擬,只是後來沒有保存。今天重新模擬一次,並附上詳細配置命令,希望能夠幫

Apache PreforkWorker和EventMPM分析

更多 可用 make ret 負載 install 插入 mic per 三種MPM介紹   Apache 2

用GsonFastJsonAndroid原生類方式做Json節點解析

一、用Gson做節點解析 json: {'flag':true,'data':{'name':'張三','age':18,'sex':true}} 步驟 : 獲得 解析者 JsonParser parser = new JsonParser(); 獲

jvm 垃圾回收演算法:標記-清除複製演算法標記-整理

標記-清除:先標記出GC Roots能關聯到的物件,然後清除這些被標記的物件,剩下的就是存活的物件了。 缺點: 1、清除需要被清理的物件後剩下的記憶體都是破碎的,如果要建立大物件,可能會因為找不到足夠的記憶體而再次觸發垃圾收集。 2、標記和清除的效率相對於其他演算法來說都不高,標記的原理

簡單談談我對Java 中 Class.forName()Class.class例項物件.getClass() 獲取位元組碼物件的理解?(內含程式碼分析和總結)

首先得明白的知識點: 1靜態屬性初始化載入類的時候初始化( 只會初始化一次),而非靜態屬性的初始化就是new類例項物件的時候初始化的 2三種獲取位元組碼物件的共同點就是都會預先的判斷記憶體是否已經載入此類,弱沒有載入,則會把.class檔案裝入到記憶體,若是載入了,則會根據class檔案生成例

vue+element ui專案總結點(一)selectCascader級聯選擇器encodeURIdecodeURI轉碼解碼一級mockjs用法路由懶載入方式

不多說上程式碼: <template> <div class="hello"> <h1>{{ msg }}</h1> <p>Element UI簡單Cascader級聯選擇器使用</p> <

matlab生成隨機數的randrandi和randn形式

matlab中關於隨機數的產生有3種庫函式,下面我們來看看它們的形式:   1、rand(…)    它是生成0~1之間(開環,不包含0和1兩個數)均勻分佈的偽隨機數,也就是無窮次試驗其中每個數產生的概率是一樣的。    它的函式格式如下: <span sty

多執行緒基礎概念實現執行緒方法中斷執行緒方法,以及執行緒狀態轉化

1、CPU核心數和執行緒數的關係 1:1的關係,引入超執行緒之後,就是1:2 2、cpu時間輪轉機制,即RR排程 3、程序和執行緒 程序:程式執行資源分配最小單位,程序內部有多個執行緒,多個執行緒之間會共享程序資源 執行緒:CPU排程的最小單位 4、並行和併發

Laravel實現小程式使用openid登陸手機號驗證碼登陸賬戶密碼登陸登陸方式

目前開發小程式,按需求要實現3種登陸方式: 1、微信授權登陸 2、賬戶密碼登陸 3、手機號、驗證碼登陸 我使用laravel自帶的Auth認證機制,通過attempt方法進行賬戶驗證,但是預設的認證機制必須包含password欄位,而我的第1、3種登陸方式都沒有

有了html頁面,進行二次顯示,通過htmlJavaScriptjQuery的ajax技術,我可以實現任何介面效果

當前j2ee的web工程開發, 最常用的前端顯示技術,有兩種:html、jsp。 場景: 以html為例,當用戶執行了某個操作,j2ee的web工程反饋了一個html頁面給使用者(其實不是這麼簡單,中間有渲染的過程,這裡略過,就當使用者得到了一個html頁面)。例如點選“新

DASSAN和NAS伺服器儲存方式

一、儲存的分類 根據伺服器型別分為:封閉系統的儲存和開放系統的儲存, 封閉系統主要指大型機, 開放系統指基於Windows、UNIX、Linux等作業系統的伺服器; 開放系統的儲存分為: 內建儲存 外掛儲存 外掛儲存根據連線的方式分為: 直連式儲存

解讀x86ARM和MIPS主流晶片架構

指令集可分為複雜指令集(CISC)和精簡指令集(RISC)兩部分,代表架構分別是x86、ARM和MIPS。   ARMRISC是為了提高處理器執行速度而設計的晶片體系,它的關鍵技術在於流水線操作即在一個時鐘週期裡完成多條指令。相較複雜指令集CISC而言,以RISC為架構體

基礎排序演算法(選擇排序插入排序氣泡排序)

注:  圖片轉自點選開啟連結  以下均使用升序介紹。 選擇排序: 從陣列中找到最小的元素,和第一個位置的元素互換。  從第二個位置開始,找到最小的元素,和第二個位置的元素互換。  ........  直到選出array.length