通過稀疏擴充套件資訊濾波實現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的測量資訊更新
從圖a到b的過程中,機器人在a圖中觀測到了路標y1,而在圖b中新增了觀測路標y2,
對於EIF,每一個觀測路標之間,以及觀測路標與機器人之間都是相關的,因此轉移矩陣中
增加了機器人與路標之間的聯絡資訊.
(2)對於EIF進行位置更新
我們發現從圖a到圖b中,根據a中路標的位置和路標轉移矩陣,確定了y1,y2之間的聯絡.
即確定了已有路標之間的相關性。
3.對於SEIF
對於密集的擴充套件資訊矩陣,所有觀測到的路標都與機器人相聯絡,而在稀疏擴充套件資訊矩
陣中,我們定義了一個約束變數X,X表示與機器人相關的路標的約束數目,約束變數y表
示路標之間的相關性約束!
好處:減少運算量,而且誤差也不會有太大的變化(相比於密集型的擴充套件資訊矩陣)
我們來看對比a和b圖,我們發現,a是密集型的擴充套件資訊矩陣與b不同的是,b中的
y1與路標是不相連的(因為我們定義了約束變數x),因此在b中的轉移矩陣中,缺
少了y1xt和xty2項,矩陣由密集變為稀疏,減少了儲存空間和計算量。
4.比較SEIF與VIO的模擬結果
在第一次的模擬實驗中,我們對比了VIO和SEIF,我們模擬的資料集中,假設一個汽
車在一個載滿樹的公園裡面運動,汽車上裝了一個鐳射測距器以及測試轉向角和汽車速度的裝置,
我們可以看到如果直接用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 streaming與kafka整合進行流式計算
背景:網上關於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