1. 程式人生 > >視覺慣性里程計Visual–Inertial Odometry(VIO)概述

視覺慣性里程計Visual–Inertial Odometry(VIO)概述

周圍很多朋友開始做vio了,之前在知乎上也和胖爺討論過這個問題,本文主要來自於知乎的討論。

如有問題,請及時反饋給我,部落格會持續更新

1.基本概述與分類

       按照Davide Scaramuzza的分類方法,首先分成filter-basedoptimization-based的兩個大類,這也和一般SLAM系統的分類方法類似。

       按照是否把影象特徵資訊加入狀態向量來進行分類,可以分為鬆耦合(loosely-coupled,下面的losely是筆誤)和緊耦合(tightly-coupled)。

       這是兩種獨立的分類方法,首先看是基於濾波還是優化的,然後進一步根據狀態向量中是否加入了影象的特徵資訊來判斷鬆緊耦合。

        VIO主要嘗試的是融合Viusal和IMU的資訊,因此後面的論述中也就主要考慮這兩種資料。

2.Filter-based

利用濾波的方法進行多感測器的資料融合是一個很正常的套路。

按照是否把影象特徵資訊加入特徵向量來進行分類,可以分為緊耦合和鬆耦合。

2.1緊耦合

緊耦合需要把影象feature進入到特徵向量去,因此整個系統狀態向量的維數會非常高,因此也就需要很高的計算量。比較經典的演算法是MSCKF,ROVIO。

image

2.2緊耦合舉例-msckf

以比較經典的msckf為例,據說這也是谷歌tango裡面的演算法,這要感覺Mingyang Li師兄在MSCKF的不懈工作。

在傳統的EKF-SLAM框架中,特徵點的資訊會加入到特徵向量和協方差矩陣裡,這種方法的缺點是特徵點的資訊會給一個初始深度和初始協方差,如果不正確的話,極容易導致後面不收斂,出現inconsistent的情況。

Msckf維護一個pose的FIFO,按照時間順序排列,可以稱為滑動視窗,一個特徵點在滑動視窗的幾個位姿都被觀察到的話,就會在這幾個位姿間建立約束,從而進行KF的更新。

image

2.3鬆耦合

而鬆耦合的方法則簡單的多,避免把影象的feature加入狀態向量,而是把影象當成一個black box,計算vo處理之後才和imu資料進行融合

Ethz的Stephen Weiss在這方面做了很多的研究,他的ssf和msf都是這方面比較優秀的開源演算法,有興趣的讀者可以參考他的博士論文。

image

2.4鬆耦合舉例-ssf

濾波器的狀態向量是24維,如下,相較於緊耦合的方法會精簡很多。

image

Ssf_core主要處理state的資料,裡面有預測和更新兩個過程。

Ssf_update則處理另外一個感測器的資料,主要完成測量的過程。

image

3.optimization-based

       隨著研究的不斷進步和計算平臺效能的不斷提升,optimization-based的方法在slam得到應用,很快也就在VIO中得到應用,緊耦合中比較經典的是okvis,鬆耦合的工作不多。

3.1鬆耦合舉例

        這方面的工作不多,而且效果顯然是沒有緊耦合好的。大佬Gabe Sibley在iros2016的一篇文章《Inertial Aided Dense & Semi-Dense Methods for Robust Direct Visual Odometry》提到了這個方法。簡單來說就是把vo計算產生的位姿變換新增到imu的優化框架裡面去。

3.2緊耦合舉例-okvis

image

image

       上圖左邊是純視覺的odemorty,右邊是視覺IMU融合的odemorty結構, 這個核心在於Frame通過IMU進行了聯合, 但是IMU自身測量有一個隨機遊走的偏置, 所以每一次測量又通過這個偏置聯合在了一起, 形成了右邊那個結構,對於這個新的結構, 我們需要建立一個統一的損失函式進行聯合優化

相關推薦

視覺慣性里程VisualInertial Odometry(VIO)概述

周圍很多朋友開始做vio了,之前在知乎上也和胖爺討論過這個問題,本文主要來自於知乎的討論。 如有問題,請及時反饋給我,部落格會持續更新。 1.基本概述與分類        按照Davide Scaramuzza的分類方法,首先分成filter-based和optimization-based的兩

視覺慣性里程中,速度的修正原理

只有視覺或者只有IMU的資料的時候,絕對的速度都是一個不可觀測量,但神奇的是,如果把兩者結合在一起,絕對速度就變成可觀測的了。原理可以大概這麼解釋: 假設imu觀察到一個加速度,那麼在加速之前和加速之後的量幀之間的移動距離的比例和絕對速度有關。 速度需要至少三幀影象才能被觀測。視覺能直

A Benchmark Comparsion of Monocular Visual-Inertial Odometry Algorithms for Flying Robots論文筆記

模型 fas con patch 最小 耦合 而且 測試平臺 style 摘要:   本文主要比較單目VIO的算法在飛行機器人上運行的性能,測試使用統一數據集為EuRoC。其中評價指標為:姿態估計精度、每幀處理時間以及CPU和內存負載使用率,同時還有RMSE(運行軌跡與真實

【ECCV2018】Modeling Varying Camera-IMU Time Offset in Optimization-Based Visual-Inertial Odometry

這篇文章是: 關於基於優化方法的視覺慣性里程計的的變化相機-IMU時間偏移的建模 (這裡需要提一下的是以後閱讀文章我覺得應該先整體過一遍,然後再整理,就和做英語閱讀題一樣,先快速的有個全域性的掌握和認識) ————————————————————————————

編譯Robust Stereo Visual Inertial Odometry for Fast Autonomous Flight

賓夕法尼亞大學kumar實驗室2018年釋出《Robust Stereo Visual Inertial Odometry for Fast Autonomous Flight 》,基於MSCKF基礎上實現雙目視覺慣導里程計。剛好這篇很新穎,又是雙目,我這個方向深入瞭解進去才

【論文翻譯】ADVIO: An Authentic Dataset for Visual-Inertial Odometry

ADVIO: An Authentic Dataset for Visual-Inertial Odometry 該資料集的特點:使用iPhone手機採集、真實複雜場景、對比現有商用和學術研究VIO系統性能 【摘要】對於行人場景的VIO的研究,由於缺少真實和公開的基準資料

什麼是視覺里程Visual Odometry)?

概念:什麼是里程計? 在里程計問題中,我們希望測量一個運動物體的軌跡。這可以通過許多不同的手段來實現。例如,我們在汽車輪胎上安裝計數碼盤,就可以得到輪胎轉動的距離,從而得到汽車的估計。或者,也可以測量汽車的速度、加速度,通過時間積分來計算它的位移。完成這種運動估計的裝置(包括硬體和演算法

SLAM入門之視覺里程(6):相機標定 張正友經典標定法詳解

https://www.cnblogs.com/wangguchangqing/p/8335131.html 想要從二維影象中獲取到場景的三維資訊,相機的內參數是必須的,在SLAM中,相機通常是提前標定好的。張正友于1998年在論文:"A Flexible New Technique fro C

初始視覺里程

起因 臨近大四的時候,被告知畢業設計要做與機器人相關的題目。於是導師給了一個足球場上實現移動機器人視覺自定位的功能。拿到這個題目,萬般無奈,毫無頭緒,身邊的人也沒有搞過這個的,根本不知道這個東西到底是個啥。查看了很多很多文章,都是很多的理論性的東西,對於想實現但基本零基礎的我來說真的是毫

VO:簡單的視覺里程程式碼註釋

走完SLAM十四講前端之後,程式碼都已經註釋完,但還是感覺有點迷茫,所以專門參考馮兵的部落格,實現簡單的視覺里程計。 收穫是又重新認識到了C++基礎的薄弱,決定之後的晚上要刷牛客題。不過就SLAM前端而言這部分基本可以理解程式碼了,這篇對VO程式碼進行註釋。 基本過程: 1、獲取影象 2、對

無人駕駛視覺-單目視覺里程

対極幾何 通過兩幀影象的運動,利用匹配點,求解相機的位姿變換。(就是得到R,t)步驟: 1. 根據配對點的畫素位置,求出 E 或者 F ; 2. 根據 E 或者 F ,求出 R, t。   問題 單目視覺的尺度不確定性(Scale Ambiguity)。例如,程式中

里程、推算定位與視覺里程

本文來自 lxiaoxiaot 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/lxiaoxiaot/article/details/6779936?utm_source=copy 里程計(Odometry):原文連結在此:http://e

乾貨 | Matlab實現單目視覺里程基於SURF特徵(程式碼類)

博主github:https://github.com/MichaelBeechan    博主CSDN:https://blog.csdn.net/u011344545  SURF特徵提取參考:https://blog.csdn.net/u01134454

第7講 視覺里程2 --- 求解相機的運動

上一篇部落格中學習了特徵提取和匹配的概念,並且呼叫OpenCV庫實現了ORB特徵的提取和匹配。 找到了匹配點後,我們希望能夠根據匹配的  點對 來估計相機的運動。由於相機的原理不同,情況就變得有點複雜了: 當相機為單目的時候,我們只知道2D的畫素座標,因而問題是根據兩組2

視覺里程(VisualOdometry)原理及實現

一、視覺里程計(VisualOdometry)介紹 目前,有不止一種方式可以確定移動機器人的軌跡,這裡將重點強調“視覺里程計”這種方法。在這種方法中,單個相機或者雙目相機被用到,其目的是為了重構出機器

SLAM入門之視覺里程(5):單應矩陣

在之前的博文OpenCV,計算兩幅影象的單應矩陣,介紹呼叫OpenCV中的函式,通過4對對應的點的座標計算兩個影象之間單應矩陣HH,然後呼叫射影變換函式,將一幅影象變換到另一幅影象的視角中。當時只是知道通過單應矩陣,能夠將影象1中的畫素座標(u1,v1)(u1,v1)變換到影象2中對應的位置上(u2

SLAM入門之視覺里程(1):特徵點的匹配

SLAM 主要分為兩個部分:前端和後端,前端也就是視覺里程計(VO),它根據相鄰影象的資訊粗略的估計出相機的運動,給後端提供較好的初始值。VO的實現方法可以根據是否需要提取特徵分為兩類:基於特徵點的方法,不使用特徵點的直接方法。 基於特徵點的VO執行穩定,對光照、動態物體不敏感。 影象特徵點的提取和匹配是計算

rovio視覺里程的筆記

rovio是一個緊耦合,基於影象塊的濾波實現的VIO。 他的優點是:計算量小(EKF,稀疏的影象塊),但是對應不同的裝置需要調引數,引數對精度很重要。沒有閉環,沒有mapping thread。經常存在誤差會殘留到下一時刻。 我試了一些裝置,要是精度在幾十釐米,裝置運動不快的,一般攝像頭加一般imu,不是硬體

視覺里程2(SLAM十四講ch7)-對極幾何,三角測量

對極幾何 2D2D 對極幾何(Epipolar Geometry)是Structure from Motion問題中,在兩個相機位置產生的兩幅影象的之間存在的一種特殊幾何關係,是sfm問題中2D-2D求解兩幀間相機姿態的基本模型。 相機位姿估計問題——》 1.根據配對點

第三篇 視覺里程(VO)的初始化過程以及openvslam中的相關實現詳解

視覺里程計(Visual Odometry, VO),通過使用相機提供的連續幀影象資訊(以及區域性地圖,先不考慮)來估計相鄰幀的相機運動,將這些相對執行轉換為以第一幀為參考的位姿資訊,就得到了相機載體(假設統一的剛體)的里程資訊。 初始化例項 在例項化跟蹤器的時候會例項化一個初始化例項,有一些比較重要的引數需