剛剛開始做機器人,打算做SLAM,不知道機器人定位領域現在有哪些比較新的演算法?希望大家推薦推薦
也是初學者 說些比較基礎的 歡迎指正!
SLAM(Simultaneous localization and mapping),我們要達到的目的就是估計機器人(感測器-比如相機)的位置軌跡,然後創建地圖。locating和map兩者互相依賴,密不可分。然而我們已知的信息一個是observation,即感測器收集到的信息(現在研究的多的一般是基於RGB-D相機的,比如微軟Kinect,因為不僅能收集到深度和顏色信息,而且比以前laser scanner等輕巧便宜);還有一個就是我們施加給機器人的control commands.我們要解決的就是通過這兩個已知,去估計位置和地圖這樣一個問題。表達成概率問題如下:
Map形式的有好多種。最傳統就是去重建一些landmark,用Extend Kalman濾波器(EKF)去估計landmarks以及機器人的位置,是第一個SLAM的有效的解決方案。其他的map representation比如occupancy grids也比較常見,是把要重建的環境表達成網格的形式,通過比如Bayes濾波器family中的某種可以計算每個小格被佔用的概率,來還原地圖。在S. Thrun. 的《Robotic mapping: A survey》中有詳細的說明,如下表列舉了一些主要的演算法以及相關特性。這個在2002年就發表了,也算比較老了,但許多描述都是SLAM的重要基礎。
SLAM一個重要的首先要解決的問題是registration的問題,我的理解是把不同角度採集到的數據整合(alignment)到一個坐標系中。針對兩組數據(比如兩幅不同角度採集的畫面),可以點對點的進行匹配,尋找他們之間的transformation從而進行數據alignment並進行對sensor的定位,一個重要的演算法是ICP(Iterative closest point )。
(Example: Aligning Two 3D Maps)
從registration的角度,很多研究有把SLAM的問題分成dense和feature-based兩種(如下圖),前者(右圖)多是對密集的點雲(point cloud)通過ICP來進行點對點alignment ,這種做法比較準確,把所有的數據都聯合起來就可以得到地圖與sensor的軌跡。但因為純是點對點運算,可能會丟失一些畫面中屬於畫面特徵的重要信息。所以feature-based也被廣為應用,我們提取出SIFT,SURF等圖像特徵,再對這些特徵進行alignment,演算法比如RANSAC,可以實現對特徵的聯合。但針對特徵不明顯的環境,比如深夜環境,特徵的辦法就沒有dense的辦法有效了。兩種方法都可以實現對數據的registration,也有一些項目是結合兩種方法的。
(來源 http://vision.in.tum.de/research/vslam)
除了registration,SLAM(主要是graph-based SLAM)還有一個重要的待解決問題是Loop Closure Detection(閉環檢測?),它是檢測新的觀察到的環境來確定自己是不是到了一個曾經到過的地點, 以消除localization的不確定性。因為如果一直是通過對不同角度採集到的不同畫面(不同幀)一步一步的進行聯合來估計sensor的位置的話,這個定位誤差會累積,多以loop closure意義重大,這裡不展開了。
接下來我們需要對地圖的整體構建進行optimization,這是關鍵一步。我們要解決將特徵點re-project回3D空間時的誤差最小化問題,這就是bundle adjustment(BA)問題,用到least square等演算法,最小化誤差。g2o便是一個解決SLAM或者BA中這個誤差最小化問題的框架,原話是:an open-source C++ framework for optimizing graph-based nonlinear error functions。另外還有TORO,是通過梯度下降實現graph中constraint帶來的誤差從而達到優化的有效演算法。
最終我們要的3D地圖,有顏色,有表面,可能質地也可以展現出來。這是map representation的問題,相關的方法有Surfel,Volumetric Representation(代表KinectFusion),Mesh,等等...
--------------------------------------------------------------------------------------------------------------------------------以上是第一版,感謝朋友們的支持和贊!因為某些原因,我沒有再繼續做SLAM,所以了解的東西都不是很深。因此懇請私信的朋友們原諒我不能逐一回答專業問題。
openslam has been regarded as the collection of slam solutions for a long time. However, it consists code only and it is a little "old-fashion" in my personal viewpoint.
If you are interested, please fork GitHub - kanster/awesome-slam: A curated list of awesome SLAM tutorials, projects and communities.
It is a similar project as awesome-computer-vision. This repo is focused on SLAM problem and also other related topics such as Structure-from-Motion( from CV perspective), multivew geometry, visual odometry and probabilistic robotics.
It is only at the beginning stage right now, I find it helpful to organize the literature collected before when I write my thesis and I hope it can benefit more researchers or even people who only have interest in SLAM problem.
Thanks and regards
K
看到有人點贊了,更新一下吧
--------------------Dec. 4th. 2015
在這裡簡單的把RSS2015裡面關於SLAM,我自己深入看過的文章說下
ElasticFusion: Dense SLAM Without A Pose Graph
Thomas Whelan, Stefan Leutenegger, Renato Salas Moreno, Ben Glocker, Andrew Davison
Exploiting the Separable Structure of SLAM
Kasra Khosoussi, Shoudong Huang, Gamini Dissanayake
Monocular SLAM Supported Object Recognition
Sudeep Pillai, John Leonard
Probabilistic Semi-Dense Mapping from Highly Accurate Feature-Based Monocular SLAM
Raul Mur-Artal, Juan Tardos
第一篇文章完全沒有看過,在這裡就不說了,第二篇文章是我們組的,組會上聽說過,Kasra的主要工作我感覺是挖掘graph structure對於slam consistency的影響,什麼樣的graph是一個能夠保證好的slam結果的graph。說實話,工作很理論,我個人是看不太懂的,隱隱約約知道是在做什麼。
第三篇和第四篇我都有深入看過。sudeep其實一開始貌似是seth的學生,做的偏視覺,後來轉到john下面,然後就結合SLAM做了個升級的object recognition系統,效果提升也很好理解,你通過多幀信息對環境的理解,物體的識別,相對關係肯定比一幀圖像來的好,文章里側重提到scalability比較好,其實也是他使用編碼方法的原因。第四篇文章想必回答問題的人基本都知道,就是ORBSLAM的後續工作,但是是semidense,這一點和lsd有點像,而且同樣是一樣系統性的文章,我覺得他們工作的牛逼之處在於,你看看orbslam和這篇文章,基礎的貢獻有,但是你覺得有多牛逼,真不好說,但是人家出來真實跑的效果就是很好。
然後,在RSS今年有一個slam的workshop,大家可以參考一下
The problem of moving sensors
John,mingo 和shoudong的報告都很好看,推薦大家讀一讀
===================================================
補充幾個自己的拙見,碩士期間做SLAM相關工作,博士本來報導師是為了做SLAM,但是導師建議做了別的。以下回答可能說演算法不是很多,方向偏重一些:
現在還有哪些團隊在專門做SLAM:
理論上面,還專註於SLAM的團隊已經不多了,由於這個問題和BA有交叉,有些組習慣於發到CV的會上,專註於機器人SLAM的有西班牙ZARAGOZA,mit csail 的michael kaess,以及之前他的gatech的frank dallert. frank和zaragoza的jose據我們師兄說也是tro的這個方面的副主編,關注一下他們組的工作,可能會給你提供一些方向。我們組的shoudong也依然在這個方向上。Dr. Shoudong Huang"s Personal Page 感興趣的話也可以看看,通過seminar介紹貌似在做 graph optimization 中圖結構的事情。還有德國freiburg那個組的工作,也就是G2O作者的那個組。
哪些演算法比較新?
SLAM領域:
上個月的IJRR 特刊
Special Issue on Robot Vision
Parallax BA 已經有源代碼了 openslam上也有了,其他的我不清楚,該文做的是feature表述的工作
還有一個有源代碼,跑過的
http://vision.in.tum.de/research/lsdslam
現在SLAM想作出點東西著實不容易的,我們實驗室的內部郵件
Getting a paper in RSS is hard enough (I know well, mine was turned
down!), getting a paper accepted for RSS in SLAM is nearly impossible
these days,
為什麼沒人提Kinect fusion,還有mit的Michael kaess做的升級版kintinuous很牛逼的說。
另外,tum的計算機視覺組做的lsd slam,用單目相機做三維slam也是相當的生猛。
不過,其實SLAM和定位還是有點區別的,slam前端演算法和定位到是差不多,但後端那些優化演算法和定位還是不一樣的,樓主到底是想問定位還是slam?
關於slam的數學模型,其他答案很清楚了。我進入這個領域時間也不長,簡單談一下對這個問題的看法。如有錯誤還請大家多多斧正。
----------------------------------
從感測器角度,機器人做slam主要用激光雷達以及視覺感測器。其中使用的視覺感測器種類又可以分為單目、雙目立體以及以kinect為代表的深度攝像機。因此,slam可分為激光slam和視覺slam。
從slam演算法(方法論)角度,有兩大方法:filter-based 、graph_based。基於濾波器方法的slam是卡爾曼濾波那一套狀態估計模型;而基於姿態圖的slam則是基於優化的模型。
先說濾波器方法,比較出名的是EKF-SLAM和FAST-SLAM,當然也有一些其他濾波器方法,比如粒子濾波方法做slam。這是slam早期求解的方法。
以ekf-slam為代表的濾波器方法有一個明顯的問題:需要估計的狀態變數太多(機器人姿態以及map point), 計算量太大而不能滿足實時的要求。而如果選擇keyframe做計算,則可以極大減少計算量,做到實時,這也是07、08之後火起來的graph-based slam採用的策略。
因此,最近幾年的slam大都是基於圖的,使用圖優化技術。
SLAM這部分研究工作大體可分為兩類:『拼湊』SLAM系統 以及 slam某個細節演算法優化。
視覺SLAM領域比較好的slam系統有:
單目SLAM:
1. PTAM 2007 很牛逼的工作,論文中提出的關鍵幀以及多線程處理思想成為之後視覺slam標配;甚至能夠實時運行在手機上。不少AR是基於ptam的;
2. DTAM 2011 direct slam方法的鼻祖;
3. LSD-SLAM
4. ORB-SLAM
RGBD:
1. KinectFusion 2011
2. RGBD-SLAM2 2014
3. ElasticFusion 2015
這幾年最火熱的,dense visual slam 算是一個, visual-inertial tracking (各種sensor fusion)也算一個。
有沒有做激光雷達SLAM的大神啊
請問從零基礎開始學的話,有沒有什麼中文的書籍
謝謝,受用了
Monocular? Stereo? RGBD?
一般來說,傳統的就是EKF和bundle adjustment兩種方法g2o
推薦閱讀:
※個人職業如何更長遠發展?
※浙大女生選控制系自動化還是電氣學院的自動化?
※如何看待《歐盟草擬法案,對機器人徵稅》這一新聞?
※MATLAB機器人工具箱中機器人逆解是如何求出來的?
※固定翼無人機能否突破傳統飛機的機頭、機身、機翼設計?
TAG:機器人 |