點擊上方「3D視覺工坊」,選擇「星標」git
乾貨第一時間送達github
本文轉載自「計算機視覺工坊」,該公衆號重點在於介紹計算機視覺方向的知識點,主要包括3D算法、2D算法、自動駕駛、光學介紹、算法與編程等。
算法
論文題目:《Visual-lidar Odometry and Mapping: Low-drift, Robust, and Fast》 發表在2015年的ICRA上,是一篇經典的視覺激光融合的SLAM系統框架,可是做者未開源代碼。在公衆號「3D視覺工坊」後臺,回覆「V-LOAM」,便可得到原文。編程
摘要
本文提出了一個視覺激光融合的框架,提高了系統在缺少視覺特徵和在有挑戰的運動狀況下的魯棒性。這個方法利用視覺里程計估計機器的運動,高速率低精度的對準點雲。而後基於激光雷達的scan-match來優化運動估和點雲對準,在KITTI的01序列達到了0.75%的位置漂移,系統在高速運動和照明變化的場景中也有很高的魯棒性。微信
介紹
視覺里程計須要在光線漸變、特徵比較多的場景中運行;激光在測量點雲的時候存在運動畸變(激光采集一幀點雲鬚要0.1s,因此一幀的點並非在同一時刻採集的),所以激光雷達的運動每每須要大量的變量來求解。不只如此,在場景中平面較多的退化場景中,scan-match也很容易失敗。這個系統包括兩個交替的過程:併發
第一個是視覺里程計以60hz的速度來估計運動。app
激光里程計利用低頻率1hz來優化運動估計,去除因爲里程的漂移形成的點雲的運動畸變。框架
對無畸變的點雲進行匹配並配准以逐步構建地圖。結果是視覺里程計解決快速的運動,激光雷達可確保在不良照明條件下的低漂移和魯棒性。實驗結果代表地圖很準確的無需後期處理。儘管閉環能夠進一步改善地圖精度但本文選擇不這樣作,由於這項工做的重點是實現更精準的里程計。dom
V-LOAM能夠利用不一樣類型的測距傳感器,在有先驗地圖的時候本系統也能夠只定位。本文實驗獲得利用魚眼相機獲得更好的魯棒性,可是因爲大視角和嚴重的畸變精度比較差,通過激光雷達優化後精度能夠獲得提高。學習
本文的方法採用相機和激光雷達緊耦合的方式,從而僅需一個攝像機便可恢復運動。同時考慮了由視覺里程計的漂移引發的點雲畸變,即咱們將漂移建模爲短期(1s)內的線性運動,並在掃描匹配期間使用線性運動模型校訂畸變。
座標系統和任務
本文的任務是估計相機和雷達系統的運動,並利用估計的位姿構建環境的地圖。假設相機是經過中央相機模型來建模的參考文檔。利用這個模型系統能夠利用常規的或者是魚眼相機來定位。假設相機內參已知、相機和激光雷達外參經過標定已獲得,這就容許咱們利用一個座標系來表示兩個傳感器。爲了簡化計算,咱們選擇相機座標系做爲機體座標–全部激光點都投影到相機座標系中。
{S}表示相座標系:x->left、 y ->upwards、z -> forward
世界座標系{W}和{S}在0時刻是對齊的。
本文的問題能夠表述:利用在{S}中獲得的相機得到的圖像和激光雷達獲得的點雲,肯定{S}和{W}的位姿變換關係,在{W}系中構建地圖。
系統概述
系被分爲兩部分:
視覺里程計:按圖像的幀率利用圖像和激光點雲估計系統的運動。在這個部分特徵跟蹤模塊在連續的圖像幀中檢測和匹配視覺特徵點。深度圖配準模塊把局部的深度圖和點雲對齊並獲得視覺特徵點的深度。幀到幀的運動估計模塊利用特徵點計算機體運動。
激光里程計:激光雷達的一次完整的掃描定義爲sweep。在這個系統中,一個sweep是1s。激光里程計一個sweep執行一次來處理在sweep中接收到的點雲。首先sweep到sweep的refinement模塊匹配連續幀的點雲來優化運動估計並消除點雲中的畸變。而後sweep到map的配準模塊匹配和對齊當前點雲和地圖,併發布相對於地圖的傳感器的位姿。
最後位姿的輸出是集成了這兩部分,而後按照圖像的幀率進行輸出。
視覺里程計
利用激光雷達的點雲和視覺里程計獲得的位姿對齊和維護了一個深度圖。計算運動的時候,按照深度來源劃分能夠獲得三種特徵點:
來自深度圖的深度
利用先前的位姿三角化獲得的深度
沒有深度的特徵點
記號
最後的運動模型能夠定義爲:
對於k幀和k-1幀都沒有深度的點:
因此一個點若是有深度另一個沒有就用公式2,兩個點都沒有深度就用公式3。在求解運動時利於全部的方程用六個未知數來表示運動估計問題。這個問題由LM解決。運動估計採用一個魯棒的擬合框架來解決特徵跟蹤偏差。利用上邊兩個公式獲得每一個點的權重,殘差越大權重越小,當殘差大於某個閾值認爲是外點須要剔除。設置其權重爲0;若是找到收斂或知足最大迭代次數,則優化將終止。維護深度圖的時候,只添加相機前邊的雷達點,那些在必定時間前的點就被丟棄。深度圖會進行降採樣保證常數的密度,還要把這些點投影到已經獲得位姿的k-1幀。使用距離和兩個角度在球面座標上表示深度圖上的點。這些點基於兩個角座標存儲在2D KD樹中。當深度圖中的點關聯到特徵點的時候,在深度圖中剛找到3個和特徵點最近的深度點組成一個平面的patch,利用相機中心到平面的視線插值獲得特徵點的深度。若是屢次跟蹤特徵點在深度圖中始終得不到深度,就用三角化獲得深度。
雷達里程計
從視以爲到的幀到幀的運動估計能夠利用激光里程計作優化。從粗到細的處理點雲有兩個重要的步驟:
匹配連續的sweep的點雲來優化位姿估計
sweep to map配準來對準點雲到地圖上
上圖表示的是sweep-to-sweep的優化過程。橘色的線表示視覺里程計估計的傳感器的非線性的運動。漂移常常被看做慢運動,因此咱們在一個sweep把模型構建爲恆速的(藍色的線表示)。當利用視覺恢復的運動來對齊點雲,漂移會致使點雲畸變。sweep到sweep的優化過程表明一個線性的運動模型來匹配點雲,去除畸變。
把線特徵和平面特徵存在兩個容器中,利用m-1幀的特徵和m幀的特徵匹配,匹配以後m-1幀點雲的畸變就被去除。因此對於當前的sweep咱們只須要用線性的運動模型。定義T'表示第m個sweep的運動漂移,對於當前幀點i(線特徵或者面特徵)的運動漂移,能夠定義爲:
在m-1幀的線特徵找兩個和當前幀線特徵最近的點,在m-1幀的平面特徵中找三個和當前特徵最近的點,這裏用兩個3D的KD-tree,一個存儲線特徵點一個存儲平面特徵點。咱們利用下式來計算特徵點的距離:
參考文獻
[1] Zhang J , Singh S . Visual-lidar odometry and mapping: low-drift, robust, and fast[C]// IEEE International Conference on Robotics & Automation. IEEE, 2015.
[2] Zhang J , Singh S . LOAM: Lidar Odometry and Mapping in Real-time[C]// Robotics: Science and Systems Conference. 2014.
本文僅作學術分享,若有侵權,請聯繫刪文。
下載1
在「3D視覺工坊」公衆號後臺回覆:3D視覺,便可下載 3D視覺相關資料乾貨,涉及相機標定、三維重建、立體視覺、SLAM、深度學習、點雲後處理、多視圖幾何等方向。
下載2
在「3D視覺工坊」公衆號後臺回覆:3D視覺github資源彙總,便可下載包括結構光、標定源碼、缺陷檢測源碼、深度估計與深度補全源碼、點雲處理相關源碼、立體匹配源碼、單目、雙目3D檢測、基於點雲的3D檢測、6D姿態估計彙總等。
下載3
在「3D視覺工坊」公衆號後臺回覆:相機標定,便可下載獨家相機標定學習課件與視頻網址;後臺回覆:立體匹配,便可下載獨家立體匹配學習課件與視頻網址。