在《slam for dummy》中,有一句話說的好:"slam並不是一種演算法,而是乙個概念。(slam is more like a concept than a single algorithm.)"所以,你可以和導師、師兄弟(以及師妹,如果有的話)說你在研究slam,但是,作為同行,我可能更關心:你在研究slam中的哪乙個問題。有些研究者專注於實現乙個具體的slam系統,而更多的人則是在研究slam裡某些方法的改進。做應用和做理論的人往往彼此看不起,不過二者對科研都是有貢獻的。作為研究生,我還是建議各位抓住slam中乙個小問題,看看能否對現有的演算法進行改進或者比較。不要覺得這種事情膚淺,它是對研究有實際幫助和意義的。同時,我也有一些朋友,做了乙個基於濾波器/圖優化的slam實現。程式是跑起來了,但他/她不知道自己有哪些貢獻,鑽研了哪個問題,寫**的時候就很頭疼。所以,作為研究生,我建議你選擇slam中的乙個問題,改進其中的演算法,而不是先找一堆程式跑起來再說。
那麼問題來了:slam方面究竟有哪些可以研究的地方呢?我為大家上乙個腦圖。
slam的基本理論,是指它的數學建模。也就是你如何用數學模型來表達這個問題。為什麼說它"基本"呢?因為數學模型影響著整個系統的效能,決定了其他問題的處理方法。在早先的研究中(86年提出[1]至21世紀前期[2]),是使用卡爾曼濾波器的數學模型的。那裡的機械人,就是乙個位姿的時間序列;而地圖,就是一堆路標點的集合。什麼是路標點的集合?就是用(x
,y,z
) 表示每乙個路標,然後在濾波器更新的過程中,讓這三個數慢慢收斂。
那麼,請問這樣的模型好不好?
好處是可以直接套用濾波器的求解方法。卡爾曼濾波器是很成熟的理論,比較靠譜。
缺點呢?首先,濾波器有什麼缺點,基於它的slam就有什麼缺點。所以ekf的線性化假設啊,必須儲存協方差矩陣帶來的資源消耗啊,都成了缺點(之後的文章裡會介紹)。然後呢,最直觀的就是,用(x
,y,z
) 表示路標?萬一路標變了怎麼辦?平時我們不就把屋裡的桌子椅子挪來挪去的嗎?那時候濾波器就掛了。所以啊,它也不適用於動態的場合。
這種侷限性就是數學模型本身帶來的,和其他的演算法無關。如果你希望在動態環境中跑slam,就要使用其他模型或改進現有的模型了。
slam的基本理論,向來分為濾波器和優化方法兩類。濾波器有擴充套件卡爾曼濾波(ekf)、粒子濾波(pf),fastslam等,較早出現。而優化方向用姿態圖(pose graph),其思想在先前的文章中介紹過。近年來用優化的逐漸增多,而濾波器方面則在13年出現了基於random finite set的方法[3],也是乙個新興的浪潮[4]。關於這些方法的詳細內容,我們在今後的文章中再進行討論。
作為slam的研究人員,應該對各種基本理論以及優缺點有乙個大致的了解,儘管它們的實現可能非常複雜。
感測器是機械人感知世界的方式。感測器的選擇和安裝方式,決定了觀測方程的具體形式,也在很大程度上影響著slam問題的難度。早期的slam多使用雷射感測器(laser range finder),而現在則多使用視覺相機、深度相機、聲吶(水下)以及感測器融合。我覺得該方向可供研究點有如下幾個:
建圖,顧名思議,就是如何畫地圖唄。其實,如果知道了機械人的真實軌跡,畫地圖是很簡單的一件事。不過,地圖的具體形式也是研究點之一。比如說常見的有以下幾種:
地圖由一堆路標點組成。ekf中的地圖就是這樣的。但是,也有人說,這真的是地圖嗎(這些零零碎碎的點都是什麼啊喂)?所以路標圖儘管很方便,但多數人對這種地圖是不滿意的,至少看上去不像個地圖啊。於是就有了密集型地圖(dense map)。
通常指2d/3d的網格地圖,也就是大家經常見的那種黑白的/點雲式地圖。點雲地圖比較酷炫,很有種高科技的感覺。它的優點是精度比較高,比如2d地圖可以用0-1表示某個點是否可通過,對導航很有用。缺點是相當吃儲存空間,特別是3d,把所有空間點都存起來了,然而大多數角角落落裡的點除了好看之外都沒什麼意義……
拓撲地圖是比度量地圖更緊湊的一種地圖。它將地圖抽象為圖論中的"點"和"邊",使之更符合人類的思維。比如說我要去五道口,不知道路,去問別人。那人肯定不會說,你先往前走621公尺,向左拐94.2度,再走1035公尺……(這是瘋子吧)。正常人肯定會說,往前走到第二個十字路口,左拐,走到下乙個紅綠燈,等等。這就是拓撲地圖。
既然有人要分類,就肯定有人想把各類的好處揉到一起。這個就不多說了吧。
回環檢測,又稱閉環檢測(loop closure detection),是指機械人識別曾到達場景的能力。如果檢測成功,可以顯著地減小累積誤差。
回環檢測目前多採用詞袋模型(bag-of-word),研究計算機視覺的同學肯定不會陌生。它實質上是乙個檢測觀測資料相似性的問題。在詞袋模型中,我們提取每張影象中的特徵,把它們的特徵向量(descriptor)進行聚類,建立類別資料庫。比如說,眼睛、鼻子、耳朵、嘴等等(實際當中沒那麼高階,基本上是一些邊緣和角)。假設有10000個類吧。然後,對於每乙個影象,可以分析它含有資料庫中哪幾個類。以1表示有,以0表示沒有。那麼,這個影象就可用10000維的乙個向量來表達。而不同的影象,只要比較它們的向量即可。
前面的都是基礎的slam,只有"定位"和"建圖"兩件事。這兩件事在今天已經做的比較完善了。近幾年的rgb-d slam[5], svo[6], kinect fusion[7]等等,都已經做出了十分炫的效果。但是slam還未走進人們的實際生活。為什麼呢?
因為實際環境往往非常複雜。燈光會變,太陽東昇西落,不斷的有人從門裡面進進出出,並不是一間安安靜靜的空屋子,讓乙個機械人以2cm/s的速度慢慢逛。**中看起來酷炫的演算法,在實際環境中往往捉襟見肘,處處碰壁。向實際環境挑戰,是slam技術的主要發展方向,也就是我們所說的高階話題。主要有:動態場景、語義地圖、多機械人協作等等。
本文向大家介紹了slam中的各個研究點。我並不想把它寫成綜述,因為不一定有人願意看一堆的參考文獻,我更想把它寫成小故事的形式。
最後,讓我們想象一下未來slam的樣子吧:
有一天,小蘿蔔被領進了一家新的實驗樓。在短暫的自我介紹之後,他飛快地在樓裡逛了一圈,記住了**是走廊,哪兒是房間。他刻意地觀察各個房間特有的物品,以便區分這些看起來很相似的房間。然後,他回到了科學家身邊,協助他的研究。有時,科學家會讓他去各個屋裡找人,找資料,有時,也帶著他去認識新安裝的儀器和裝置。在閒著沒事時,小蘿蔔也會在樓裡逛逛,看看那些屋裡都有什麼變化。每當新的參觀人員到來,小蘿蔔會給他們看樓裡的平面圖,向他們介紹各個樓層的方位與狀況,為他們導航。大家都很喜歡小蘿蔔。而小蘿蔔明白,這一切,都是過去幾十年裡slam研究人員不斷探索的結果。
視覺SLAM漫談 三 研究點介紹
在 slam for dummy 中,有一句話說的好 slam並不是一種演算法,而是乙個概念。slam is more like a concept than a single algorithm.所以,你可以和導師 師兄弟 以及師妹,如果有的話 說你在研究slam,但是,作為同行,我可能更關心 你...
視覺SLAM漫談 三 研究點介紹
在 slam for dummy 中,有一句話說的好 slam並不是一種演算法,而是乙個概念。slam is more like a concept than a single algorithm.所以,你可以和導師 師兄弟 以及師妹,如果有的話 說你在研究slam,但是,作為同行,我可能更關心 你...
視覺SLAM漫談 三 研究點介紹
在 slam for dummy 中,有一句話說的好 slam並不是一種演算法,而是乙個概念。slam is more like a concept than a single algorithm.所以,你可以和導師 師兄弟 以及師妹,如果有的話 說你在研究slam,但是,作為同行,我可能更關心 你...