1. 程式人生 > >SLAM程式碼(SLAM簡介)

SLAM程式碼(SLAM簡介)

SLAM是什麼呢?Google一下,就會發現很長的一串名字-Simultaneous Localization and Mapping,哇感覺第一單詞就不明白是幹啥的啊!聽我慢慢道來,先看後邊的,Localization就是定位,Mapiing就是建圖。所以從這裡可以看到,這個東東至少玩了2個併發的執行緒。”同時“這個詞就是要告訴我們localization 和mapping是同時發生的。問題是為什麼要同時進行呢?這個我們稍後會講。
第一個執行緒是定位,那麼定位的結果是什麼呢?一般我們知道飛機在空中有一個三維的座標,這是位置。然後有一個飛行的方向,也是三維的,這是姿態,所以總共6維的資訊。知道了這六維資訊機器人就知道自己在哪裡,地圖,我們生活中的地圖(百度地圖)和這裡的地圖有啥不一樣呢?百度地圖呢,是為人而服務的,那麼這裡的地圖既是給機器人用的,同時也給人看,所謂的視覺化。有了地圖呢,機器人就知道往哪裡去,這就是導航,總而言之捏,slam演算法就是為了導航而來滴。

SLAM怎麼實現呢

感覺還是很有意思的啊,那麼搞起來。

我們首先要考慮一個問題,人自己是怎麼定位導航的呢?人使用眼和前廳系統綜合完成自己定位,詳細請參考部落格玩轉四旋翼無人機(sensor資料融合)。中的內容。
為了模擬人,機器人裝了視覺和各種感測器。那麼我們先從硬體著手,硬體呢得有一個機器人,當然沒有也沒關係,把自己模擬機器人好啦。然後可以把各種感測器啊,攝像頭啊,掛在身上,拿著筆記本到處轉。
好,迴歸正經模式。

按照感測器種類和安裝方式的不同,SLAM呢,玩起來,搞法和難度完全不一樣啊。現在的SLAM主要有2種,鐳射和視覺。鐳射SLAM被早些年玩slam的人搞的很好很好啦,可謂‘理論和工程均比較成熟”。視覺SLAM還是還沒有被“玩壞”,“尚處於實驗室研究階段”。這樣的發展的的原因是什麼呢?為什麼視覺感測器的方式比鐳射的slam更加困難,更難解決?

這個可以歸咎於視覺的緩慢發展和近期的突破。近期計算機能力的提高和一些不變形特徵描述子的發現,使得機器人上的計算機能夠實時的處理影象資訊。

SLAM研究自1988年提出以來,已經過了近三十年。早期SLAM研究側重於使用濾波器理論,最小化運動體位姿和地圖的路標點的噪聲。21世紀之後,學者們開始借鑑SfM(Structure from Motion)中的方式,以優化理論為基礎求解SLAM問題。這種方式取得了一定的成就,並且在視覺SLAM領域中取得了主導地位。

視覺感測器很難直接獲得相對於環境的直接距離資訊,而必須通過兩幀或多幀影象來估計自身的位姿(這裡的位子就是之前介紹的6自由度定位資訊)變化,再通過累積位姿變化計算當前位置。這種方法更類似於直接用里程計進行定位,即視覺里程計(Visual Odometry),關於視覺里程計的詳細內容可參考部落格

SLAM程式碼(VO簡介)。里程計的測量積分後才相當於鐳射感測器直接獲得的定位資訊,這就是圖優化SLAM框架中的前端。而後端對定位和位姿軌跡的優化本質上與鐳射感測器的優化相同,都基於最優估計的理論框架進行。

通過累計位姿變換這樣的方式計算當前機器人的位姿資訊的執行較長的時間之後會發生較大的偏移,這個誤差稱為累計誤差。那麼slam通過地圖記錄機器人走過的軌跡,當機器人重新回到走過的位置的時候,演算法會完成迴環檢測,這樣可以將累計誤差歸零。這也就是為什麼會在定位的同時進行建圖。因為地圖的存在可以有效的提高定位的精度。

使用SLAM的機器人

來來我們看一看最高階的,火星車,先來張照片
這裡寫圖片描述
好,有請我們的掃地機器人閃亮登場。掃地機器人對於slam的普及工作做出了巨大的貢獻SLAM曾經只有掃地機器人用,如今成了最火技術。其次是大疆的Guidance,使用的飛機就是精靈4,以及後來的mavic。

使用SLAM的AR

AR上使用SLAM演算法就是典型的AR中inside out的定位方式,這樣節約基站的搭建。讓AR的運動範圍變廣。具體的可以參照知乎上的回答Magic Leap 和微軟的 HoloLens 相比有哪些異同點?magic leap 主頁。另外一個比較出名的是project Tango

refer