在3D點雲中定位由於從3D數據中提取信息的複雜度的緣由是很是挑戰的。咱們提出了一個增量的方法來高效的解決這個問題。算法
咱們展示說這個增量方案能夠在10Hz的urban場景下進行全局定位,比起batch solution快了7.1倍。數據結構
感知能力是很重要的。因此移動機器人常常會配備3D的time-of-filght的傳感器來產生環境的精準重建。咱們專一於3D點雲的定位。能夠在3D數據中作全局關聯使得咱們能夠重建要給unified表達方式,不須要假設low drife,或者已知的相對起始點。app
Contributionside
a) Incremental point cloud segmentation測試
[3]提出了稠密點雲分割的區域生長方法。 對每一個輸入點雲,分割只會作一次,還有後續的融合步驟。這裏只會考慮平面的分割,而咱們的方案更泛化。【5】提出分割深度圖。上述的全部方案都沒有基於分割結果提出retrieving models的方案。優化
b) Efficient geometric verificationspa
在stereo images的時候,有提出減小匹配數量的策略。【7】提出了RANSAC只能作空間一致性的檢查。上述的方法都有圖像的視差的假設,全部他們的精度受高disparity和視角強烈變化的影響。rest
持續的3D點雲輸入被filtered,而後再一個Local cloud裏用voxel的方法累積。咱們沒有用每次有新觀測的時候更新整個local cloud的batch voxel filtering方法,而是更新只有被新的點雲影響的voxel。咱們用DVG,一個高效的數據結構可以支持動態的插入和移除。code
被佔的voxel會被保存在一個vector裏,每一個voxel保存它的index,centroid和包含的點數。爲了減小噪聲,一個voxel會在有特定數量的點數的時候被認爲是active。orm
1) Voxel Indexing
一個voxel就是一個大小是\(l\times w \times h\), 每個voxel有惟一的index(再區間\([0, l\cdot w \cdot h - 1]\)。 grid有一個固定的分辨率\(r\),一個rigid T從是世界繫到grid系 \(T_{mg}\)。爲了計算的高效,咱們要grid的大小是2的倍數,\(l=2^{l_{bits}}\), \(w=2^{w_{bits}}\), \(h=2^{h_{bits}}\)
2)Insertion and Removal
當新的點被插入的時候,DVG會計算它的indices,而後根據voxel id的增序排列。考慮到排列有\(\mathcal{O}(n\log(n))\)的複雜度,因此用batch voxelization來排序就很重要。當\(m\)個點\(q_i\)被插入到要給voxel(centroid是\(p\)是從\(n\)個點降採樣)的時候,咱們有:
\(p \leftarrow\left(n \cdot p+\sum_{i=1}^{m} q_{i}\right) \cdot \frac{1}{n+m}, \quad n \leftarrow n+m\)
3) Rigid Transformation
當迴環檢測的時候,。。。
一個點\(p_i\)在3D點雲裏計算它的normal的時候,一般是用neighborhood點集\(\mathcal{N}(p_i)\)的協方差矩陣\(M\)來衡量的。在用fixed-radius Nearest Neighbors(NN)找到鄰居後,\(M_{i}:=\overline{\left(\nu_{j}-\bar{\nu}\right)\left(\nu_{j}-\bar{\nu}\right)^{\top}}\)
normal的估計等於\(M_i\)的normalized eigenvector。curvature是\(\sigma=\lambda_{0}\left(\lambda_{0}+\lambda_{1}+\lambda_{2}\right)^{-1}\),這裏\(\lambda_{0}<\lambda_{1}<\lambda_{2}\)是\(M_i\)的eigenvalues。
這裏咱們作了兩個主要的優化步驟。協方差矩陣\(M_i\)是增量算的,而且只有被新掃到的點影響的normal纔會被更新。
1)Incremental Updates 重看一遍
2) Rigid Transform
region growing policies 區域生長策略
1)Clusters merging:
2)Growing policies
在準備階段,PREPARESEEDS會蒐集經過CANBESEED測試的點的id,而後把他們經過curvature的增序排列。這樣保證區域生長的起始點是最平坦的點,減小segments的數量。
CANGROWTO會返回true,若是seed的normal和鄰居點是平行的。由於normals的旋轉未知,這個大概經過點乘來確認。另一個max閾值是點的curvature,爲了經過CANBESEED測試。
歐氏距離policies很容易理解,由於增量的區域生長已經基於歐氏距離找到鄰居candidate。因此,CANGROWTO和CANBESEED總會返回true,PREPARESEEDS只是蒐集尚未被assign的點的id。
3) Segment Tracking
cluster ID僅僅是臨時的值來定義點歸屬於一樣的cluster,segment ID是lingtime-long的定義。segmentation的階段可以讓咱們魯棒的跟蹤segments和他們在局部地圖的持續的views,這也會帶來不少好處。
在【1】中,多views不能和同一個segment聯繫,也會得到不一樣的IDs,從而致使目標地圖的insertion of segment duplicates。
從局部點雲中提取的segments會被一個generic feature vector描述(【13】中eigenvalue-based descriptor)。局部和target map的segments的候選匹配就會被經過NN搜索找到。若是一個對\(c_i, c_j\)的segment centorids的歐式舉例少於一個閾值,那麼就是幾何一致的。在咱們的方案中,咱們用graph problem來描述recognition的問題,來定義個Maximum Pairwise Consistent Set (MPCS).
咱們也利用了章節3-C.3的segment tracking。
\(\mathcal{S}\left(c_{i}\right)=\left\{c_{j} \in V | j \leq i \wedge \Delta\left(c_{i}, c_{j}\right) \leq \theta_{\Delta}+\epsilon\right\}\)
1)Cache Maintenance
若是一個匹配\(c_i\)第一次被找到,\(\mathcal{S}(c_i)\)就會被計算保存。若是這個匹配沒有再被觀測,那麼就會被刪掉。
2)Consistent candidates set identification
爲了讓兩個匹配一致,他們的target segments的舉例必須小於等於local map的直徑。
3)Consistency Graph Construction
4)MPCS Identification
當一個MPCS的大小大於一個閾值的時候,咱們認爲一個recognition是成功的。
用來比較的baseline是原版的SegMatch[1],是用標註的PCL庫組成的。batch voxel filtering是由pcl::VoxelGrid
,而batch normals estimation是用pcl::NormalEstimation
. Batch Segmentation使用pcl::EuclidianClusterExtraction
和pcl::RegionGrowing
. Recognition是用pcl::GeometricConsistencyGrouping
.
1)硬件: 全部實驗都是再32GB的RAM,Intel i7-6700K上完成的。RAM的使用歷來沒有超過1.6G.
。。。
咱們突出了3D點雲定位的incremental的方案。跟以前的不一樣,這個方案會維護一個segmented local map,而後用增量的幾何驗證。這個加速能夠達到10Hz,能夠支持實時。