有哪些開源項目是關於單目+imu做slam的?

希望能從耦合程度、優化方法等等不同的角度進行介紹。


分享一下組裡剛開源的項目。一個linux版,一個iOS版,有視頻有代碼有真相。?(???????)?
VINS-Mono: https://github.com/HKUST-Aerial-Robotics/VINS-Mono

VINS-Mobile: https://github.com/HKUST-Aerial-Robotics/VINS-Mobile


感覺細節還是看paper比較清楚呢。知道的V+I開源項目就下面OKVIS和ROVIO這倆:

OKVIS,緊耦合,BRISK的稀疏前端,滑動窗口優化後端。支持單目、多目。
( Stefan Leutenegger, Simon Lynen, Michael Bosse, Roland Siegwart and Paul Timothy Furgale. Keyframe-based visual–inertial odometry using nonlinear optimization. The International Journal of Robotics Research, 2015. )

ROVIO,緊耦合,圖像patch的稀疏前端(?),EKF後端。
( Paper: http://dx.doi.org/10.3929/ethz-a-010566547 )

松耦合的沒怎麼找過。其他緊耦合的貌似就沒了……除了ETHZ,其他作者暫時都還沒有把VSLAM融合IMU的開源出來?

另外最近自己參考ORB作者的Visual Inertial ORBSLAM論文寫了個非實時的學習代碼,歡迎一起玩一起改進。
( Github: https://github.com/jingpang/LearnVIORB )
( ORB作者的Paper: https://arxiv.org/abs/1610.05949 ,緊耦合、ORB稀疏前端、圖優化後端、帶閉環檢測和重定位)

========================分隔線=============================
附個收藏的有Visual Inertial SLAM/Odometry視頻但不一定開源的Youtube頻道、用戶列表。(應該還有些沒注意到的,歡迎補充~~)

ETHZ-ASL https://www.youtube.com/user/aslteam/videos
(ROVIO: https://www.youtube.com/watch?v=ZMAISVy-6ao)
(OKVIS的在作者自己的頻道: https://www.youtube.com/watch?v=TbKEPA2_-m4)

UZH-AILAB-RPG https://www.youtube.com/channel/UCCdZk1Icvh0HbhVzlXRDRdw
(SVO+IMU: https://www.youtube.com/watch?v=CsJkci5lfco)

ORB作者 https://www.youtube.com/channel/UC_jh6pkpTd3movgveqdILuQ
(有兩個Visual Inertial ORBSLAM的視頻)

港科沈劭劼老師 https://www.youtube.com/user/frankerssj
(很多Visual Inertial項目視頻,還有另一個頻道 https://www.youtube.com/channel/UCUc35anCXfPI5U763nWbyKw)

MARS MINNESOTA https://www.youtube.com/channel/UCILSlKhpfZAdF6yLMFJXgLA
(同樣很多相關視頻)

TUM的CV組 https://www.youtube.com/user/cvprtum/videos
(放了一個雙目直接法VIO: https://www.youtube.com/watch?v=XSvFpPYfKWA)


前面 @jing胖 胖爺寫得太好了,我補充一些。

目錄

1.VIO的基本概述與分類

2.Filter-based

2.1緊耦合

2.2緊耦合舉例-msckf

2.3松耦合

2.4松耦合舉例-ssf

3.optimization-based

3.1 松耦合舉例

3.2 緊耦合,以okvis為例說明

4.吐槽

1.VIO的基本概述與分類

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

按照是否把圖像特徵信息加入狀態向量來進行分類,可以分為松耦合(loosely-coupled)和緊耦合(tightly-coupled)。

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

VIO主要嘗試的是融合Viusal和IMU的信息,因此後面的論述中也就主要考慮這兩種數據

2.Filter-based

利用濾波的方法進行多感測器的數據融合是一個很正常的套路。按照是否把圖像特徵信息加入特徵向量來進行分類,可以分為緊耦合和松耦合。

2.1緊耦合

緊耦合需要把圖像feature進入到特徵向量去,因此整個系統狀態向量的維數會非常高,因此也就需要很高的計算量。比較經典的演算法是MSCKF,ROVIO https://github.com/ethz-asl/rovio

2.2緊耦合舉例-msckf

以比較經典的msckf為例,據說這也是谷歌tango裡面的演算法,這要感謝Mingyang
Li師兄在MSCKF的不懈工作。msckf有專利,暫時並沒有開源。看論文https://pdfs.semanticscholar.org/2e79/75fb0351638bd2646a217e5885ae56ca5cff.pdf

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

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

2.3松耦合

松耦合的方法則簡單的多,避免把圖像的feature加入狀態向量,而是把圖像當成一個black box,計算vo處理之後才和imu數據進行融合。

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

Vision Based Navigation for Micro Helicopters https://e-collection.library.ethz.ch/eserv.php?pid=eth:5889amp;dsID=eth-5889-02.pdf

2.4松耦合舉例-ssf

代碼在ethz-asl/ethzasl_sensor_fusion

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

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

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

Weiss把這個演算法和ptam的前端結合一起用在無人機上,取得了不錯的效果。

答主之前曾經利用手機的imu加相機做了一個小demo。ROS實時採集Android的圖像和IMU數據 - hitcm - 博客園

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

代碼在ethz-asl/okvis,okvis在代碼的實現上使用了ceres solver的優化庫。

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

4.吐槽

理論規理論,slam的工程系統還是非常複雜的,更何況再加上一個低成本imu呢?畢竟人家論文裡面的設備都是ADIS16488或者3DM-GX2,手上的mpu9250不得玩死人啊!!!

最後,最近學習胖爺搞個新的vio優化框架,還得向胖爺 @jing胖 低頭。

hitcm (hitcm)

ROS實時採集Android的圖像和IMU數據 - hitcm - 博客園

希望大佬多多指教


HKUST 的VINS-mobile, 20170507建立的開源項目, 提供了完整的演算法代碼, 以及一個可以在蘋果的iphone6S及後續機型上實時運行的demo, demo效果非常令人驚艷。

項目地址: HKUST-Aerial-Robotics/VINS-Mobile

視頻: https://www.youtube.com/watch?v=qazzGT84Sccamp;amp;amp;feature=youtu.be

相關的三篇論文可以在項目介紹里找到下載地址。

感謝這些科研人員的無私奉獻。

屬於optimized-based的緊耦合方法,系統框架如下圖,前端基於KLT跟蹤演算法, 後端基於滑動窗口的優化(採用ceres庫), 基於DBoW的迴環檢測。


目前來說,受到業界肯定的比較成熟的主要是:

1、西班牙Universidad de Zaragoza的ORB_SLAM2:raulmur/ORB_SLAM2

2、港科大的VIO:HKUST-Aerial-Robotics/VINS-Mobile

3、Google的SLAM:googlecartographer/cartographer

其中,

第一個mono、stereo和RGBD都支持,較多應用於AR應用領域,可以說是一套state-of-art的indoor camera SLAM系統,原版本暫不支持IMU,stereo_IMU可以參考:henrywen2011/orb_slam_imu;

第二個支持mono+IMU,出名於無人機地圖繪製;第三個支持2Dlidar(3Dlidar)+IMU,在無人駕駛中的地圖構建領域著稱。

=======================================分割線======================

ORB_SLAM2 支持IMU的版本雖沒有放出來,效果感覺還是不錯:https://www.youtube.com/watch?v=rdR5OR8egGI

1、基於ORB_SLAM2,Wang Jing加入了IMU,可參看

OpenSLAM/LearnViORB_NOROS

2、基於LearnViORB_NOROS,RomaTeng貢獻了一個具有IMU+monoSLAM:

ORB-VINS_RK4

3、另外一個支持IMU+monoSLAM的版本為OKVIS:

ethz-asl/okvis


推薦閱讀:

研究SLAM,對編程的要求有多高?
學習SLAM需要哪些預備知識?
螞蟻如何找到最短的回窩路徑?

TAG:機器人 | 計算機視覺 | 同時定位和地圖構建SLAM | 視覺慣性里程計VIO |