1. 程式人生 > >通過稀疏擴充套件資訊濾波實現SLAM,並與EKF-SLAM進行效能對比

通過稀疏擴充套件資訊濾波實現SLAM,並與EKF-SLAM進行效能對比

綜述:對於EKF-SLAM需要對已存在的環境特徵點和機器人本身,計算一個符合高斯分佈的後驗概率

模型,不幸的是EKF-SLAM算需要很大的記憶體空間,並且隨著路標的增加,記憶體需求和計算量成平

方倍增長,計算量大約為路標N的平方。對於EKF-SLAM能處理包含幾百個特徵點(路標資訊)的

地圖。

    1.我們在EKF-SLAM方法的基礎上,在本文中我們提出一種SLAM演算法用最近特徵點

之間的資訊,和地圖中特徵點與機器人位置的資訊表示成一個後驗概率函式(或者

說與後驗概率函式匯出的轉移矩陣)。這種方法稱為擴充套件資訊濾波(EIF),這個濾

波器包含了一個資訊矩陣,我們在EIF的基礎上,提出了一種稀疏擴充套件資訊濾波,這

是本文所做的貢獻。

我們來看稀疏擴充套件資訊濾波,SLAM演算法的後驗分佈概率函式由地圖中臨近結點的相對

連結決定,我們來舉一個例子。


在圖1的左邊,是機器人和它周圍50個路標的位置資訊,中間部分是機器人和它

路標的標準化協方差,右圖是歸一化後的轉移矩陣。

我們發現歸一化後的資訊矩陣是十分稀疏的,這引導我們尋找一種方法,用稀疏

的轉移矩陣來表示SLAM的過程。

下面我們來看圖2


我們發現,不同於圖1,此時機器人只跟特定的路標相關聯(表現在圖中為黑色實心圓)

,這些點被稱為活動特徵點,我們發現儲存一個稀疏資訊矩陣,轉移矩陣的大小現在

只跟特徵點數目線性成比例(而不是原來的平方成比例).

2.首先介紹EIF

  

EIF的轉移矩陣如上圖所示,轉移矩陣的大小與路標N,構成一個N*N的矩陣,因此在

密集型的資訊矩陣中,計算量的大小與路標N的平方成比例。

(1)對於EIF的測量資訊更新


從圖ab的過程中,機器人在a圖中觀測到了路標y1,而在圖b中新增了觀測路標y2,

對於EIF,每一個觀測路標之間,以及觀測路標與機器人之間都是相關的,因此轉移矩陣中

增加了機器人與路標之間的聯絡資訊.

(2)對於EIF進行位置更新


我們發現從圖a到圖b中,根據a中路標的位置和路標轉移矩陣,確定了y1,y2之間的聯絡.

即確定了已有路標之間的相關性。


          3.對於SEIF

的介紹

對於密集的擴充套件資訊矩陣,所有觀測到的路標都與機器人相聯絡,而在稀疏擴充套件資訊矩

陣中,我們定義了一個約束變數XX表示與機器人相關的路標的約束數目,約束變數y

示路標之間的相關性約束!

好處:減少運算量,而且誤差也不會有太大的變化(相比於密集型的擴充套件資訊矩陣)


我們來看對比ab圖,我們發現,a是密集型的擴充套件資訊矩陣與b不同的是,b中的

y1與路標是不相連的(因為我們定義了約束變數x),因此在b中的轉移矩陣中,缺

少了y1xtxty2項,矩陣由密集變為稀疏,減少了儲存空間和計算量。


    4.比較SEIFVIO的模擬結果

    

    在第一次的模擬實驗中,我們對比了VIOSEIF,我們模擬的資料集中,假設一個汽

車在一個載滿樹的公園裡面運動,汽車上裝了一個鐳射測距器以及測試轉向角和汽車速度的裝置,

    我們可以看到如果直接用vio,我們理論上希望的是採用鐳射測距器觀測到樹作為我們的路

標,但是實際情況下,其他的影響(比如道路上的其他汽車?)會引入額外的誤差,使得我們所

繪製的運動模型與理論相差太遠。

  但是如果採用了SEIF情況則會改變,在短短的3.5KM的運動中,相比於GPS精準定位,SEIF的定

位誤差在0.5米左右。下圖為在模擬過程中實際觀察到的路標資訊。





相關推薦

通過稀疏擴充套件資訊濾波實現SLAM,EKF-SLAM進行效能對比

綜述:對於EKF-SLAM需要對已存在的環境特徵點和機器人本身,計算一個符合高斯分佈的後驗概率 模型,不幸的是EKF-SLAM計算需要很大的記憶體空間,並且隨著路標的增加,記憶體需求和計算量成平 方倍增長,計算量大約為路標N的平方。對於EKF-SLAM只能處理包含幾百個

插入排序的實現優化和選擇排序進行效能比較

插入排序 第一種:交換法 | 8 | 6 | 3 | 2 | 10 | 9 | 11 | 4 | 5 | 第一個元素就不需要考慮了,直接看第二個元素6,因為6<8,所以6與8交換位置得到: | 6 | 8 | 3 | 2 | 10 |

實現Onvif裝置發現前端配合進行快速部署

我們都知道EasyNVR支援Onvif協議接入裝置 並且之前也介紹瞭如何進行Onvif的裝置發現,探測,資訊獲取等等 那我們是如何使用的呢,我們是如何使用Onvif協議為實施人員減輕配置工作的呢 看圖 EasyNVR的通道配置頁面,可以對通道進行

演算法 -- 四種方法獲取的最長“迴文串”,對時間複雜進行分析對比&PHP

迴文串: “迴文串”是一個正讀和反讀都一樣的字串,比如“level”或者“noon”等等就是迴文串。 -- 來自百度百科 關於獲取字串中最長的迴文串的演算法中,目前有很多演算法,本文中主要是用PHP來實現的演算法之一。 演算法一:暴力解法 暴力計算出所有的字串並判斷。時間複雜

java實現spark streamingkafka整合進行流式計算

背景:網上關於spark streaming的文章還是比較多的,可是大多數用scala實現,因我們的電商實時推薦專案以java為主,就踩了些坑,寫了java版的實現,程式碼比較意識流,輕噴,歡迎討論。流程:spark streaming從kafka讀使用者實時點選資料,過濾資

通過git命令,將原生代碼github,進行上傳下載操作。

此篇預設大家已經瞭解git的一些基本命令,如不瞭解,可以參考這篇基本命令介紹git基本命令。 1.進行本地的一些初始化操作  (一). 先初始化一個倉儲,其中包含我們需要上傳的程式碼。 git init //在資料夾內開啟git命令,輸入上面命令即可初始化 (二).

初識GitHub同伴共同進行原始碼管理操作

源程式程式碼Github連結:https://github.com/LloydQ/Software-engineering-comprehensive-practice.git        我們作為磨合用的程式的功能:求最大子陣列之和。        首先當我把我們的簡短程

如何新建gitHub帳號自己電腦進行關聯

配置Git 我們先在電腦硬盤裡找一塊地方存放本地倉庫,比如我們把本地倉庫建立在C:\MyRepository\1ke_test資料夾下 進入1ke_test資料夾 滑鼠右鍵操作如下步驟: 1)在本地倉庫裡右鍵選擇Git Init Here,會多出來一個.git資料夾,這就表示本地git建立成功。右

10.4通過生成器yield實現

Python yield 偽並發 生成器 通過生成器yield實現偽並發 可以直接作用於for循環的數據類型有以下幾種:一類是集合數據類型,如list ,tuple,dict,string,set等;一類是generator,包括生成器和帶yield的generator function;這些

通過字串生成Style設定Style實現對ListBox裡面的呈現進行修改

最近專案中需要實現對ListBox呈現內容的外觀進行動態的修改,實現方式是通過修改DataTemplate裡面控制元件的Style,具體實現如下: Xaml檔案: <Window x:Class="StrStyle.MainWindow" xmlns="ht

Docker-通過docker-maven-plugin外掛實現docker映象構建自動釋出到遠端docker伺服器

我們知道,docker能實現應用打包隔離,實現快速部署和遷移。如果我們開發應用使用了spring cloud + spring boot架構,那麼,通過docker-maven-plugin實現快速構建映象併發布到遠端docker伺服器會非常方便。相關步驟參考如下: step1、開啟docker伺服器的tc

三輪全向輪底盤SLAM挖坑系列-ekf擴充套件卡爾曼濾波

5000塊以上的陀螺儀可以考慮使用,或者自己買個好點的陀螺儀自己做板子,寫linux驅動,後積分為角度。下面貼一個我自己使用的launch檔案: <?xml version="1.0"?>

通過服務發現來訪問Config Server獲取Git倉庫中的配置資訊,但是Config Client註冊不到服務註冊中心

錯誤資訊: Caused by: org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://LAPTOP-G1O0G3I5:16000/didis

微信小程式(表單登入獲取個人資訊實現)

首先先建立一個index的目錄和page,在xml裡面通過程式碼設計一個登入頁面,程式碼如下:<view class='container'> <form bindsubmit="formSubmit" bindreset="formReset"&g

JAVA-通過介面讀取本地jar包,呼叫其中實現了介面的類中的方法

URLClassLoader classLoader = new URLClassLoader(new URL[]{new URL("jar 本地路徑,例如:file:D:/project/inputsplit-1.0-SNAPSHOT.jar")}, Thread.currentThread().ge

Laravel通過ajax的POST方式傳值實現頁面跳轉

1.新增測試按鈕 <button class='test' >ajax測試</button> 2.ajax部分程式碼 @section('js') <scr

Linux下,指令碼實現:查詢tomcat的程序號,殺死該程序;通過查詢絕對路徑 ,啟動tomcat檢視日誌

查詢tomcat的程序號,並殺死該程序;通過查詢絕對路徑 ,啟動tomcat;啟動之後檢視tomcat的啟動日誌。#!/bin/bash #----自動部署-------- #加入環境變數 PATH-/bin:/sbin:/usr/bin:/usr/sbin export

通過繼承泛型類實現輸出學生資訊

class BStuInfo<T> { public T ID; //宣告學生編號欄位 public T N

Servlet通過Cookie儲存使用者資訊實現自動登入的demo.

開始介面HTML,跳轉到判斷是否有Cookie的Servlet. SessionStartPage.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <

通過Inkscape匯出字型的path路徑通過snap實現素描動畫

本部落格中的兩個例子我已經放到codepen上了,可以開啟連結檢視效果和程式碼: http://codepen.io/fonglezen/pen/gbxGQY http://codepen.io/fonglezen/pen/QwMqZE 第一步: 首先開啟inkscap