額外拓展記錄: IMU的濾波手段: AHRS + Mahony
IMU+Visual融合: https://github.com/ygling2008/direct_edge_imu
1. 點雲開源匹配算法
-
其他衆多點雲配准算法
“常用的點雲配准算法” 1. 正態分佈變換方法 NDT 正態分佈變換進行配準(normal Distributions Transform) 2. 和著名的 迭代最近點 Iterative Closest Point (ICP) 點雲配準 “其他的配准算法” 1.ICP:穩健ICP、point to plane ICP、point to line ICP、MBICP、GICP 2.NDT: NDT 3D、Multil-Layer NDT 3.FPCS、KFPSC、SAC-IA 4.Line Segment Matching、ICL
2. 點雲配準ICP算法–原理簡介
- 點雲配準的基本流程
1.識別最能代表兩個數據集中場景中的興趣點(關鍵點)
;
2.在每個關鍵點處,計算特徵描述符(如FPFH)
;
關鍵點 keypoints(NARF, SIFT 、FAST、均勻採樣 UniformSampling)、
特徵描述符 descriptions,NARF、 FPFH、BRIEF 、SIFT、ORB )
3.從特徵描述符集合以及他們在兩個數據集中的x,y,z位置,基於特徵和位置之間的相似性
來估計對應關係;
4.假設數據是包含噪聲
的,即不是所有的對應關係都是有效的,所以捨棄
對配準過程產生負面影響的那些對應關係
;
可以採用隨機採樣一致性估計,或者其他方法剔除錯誤的對應關係
5.從剩下的一組好的對應關係中,估計一個變換行爲。
`變換矩陣的估算步驟`
1. 在對應關係的基礎上評估一些錯誤的度量標準
2. 在攝像機位姿(運動估算)和最小化錯誤度量標準下估算一個剛體變換( rigid transformation )
3. 優化點的結構 (SVD奇異值分解 運動估計;使用Levenberg-Marquardt 優化 運動估計;)
4. 使用剛體變換把源旋轉/平移到與目標所在的同一座標系下,用所有點,點的一個子集或者關鍵點運算一個內部的ICP循環
5. 進行迭代,直到符合收斂性判斷標準爲止。
- 點雲配準的核心術語
**特徵描述: ** 點雲基於發現的關鍵點,提取特徵組合信息並生成向量來進行比較(PCL有專門的模塊講述點雲特徵
)
Feature based registration 配準
1. SIFT 關鍵點 (pcl::SIFT…something)
2. FPFH 特徵描述符 (pcl::FPFHEstimation)
3. 估計對應關係 (pcl::CorrespondenceEstimation)
4. 錯誤對應關係的去除( pcl::CorrespondenceRejectionXXX )
5. 座標變換的求解
一致性估計: 給定兩組數據獲取的特徵描述向量,找到相應的特徵以在數據中找到重疊的部分;
- ICP的迭代過程
1.對於目標點雲中的每個點,匹配參考點雲(或選定集合)中的最近點。
2.求得使上述對應點對計算均方根(root mean square,RMS)最小的剛體變換,求得平移參數和旋轉參數。
3.使用獲得的轉換矩陣來轉換目標點雲。
4.迭代(重新關聯點),直到滿足終止迭代的條件(迭代次數或誤差小於閾值)。這裏的誤差最小,可以是相鄰兩次均方根差的絕對值小於某一限差。
使用點匹配(XYZ)
時, ICP配準,針對有序點雲和無序點雲
具有不同的策略:
1. 窮舉配準(brute force matching);
2. kd樹最近鄰查詢(FLANN);
3. 在有序點雲數據的圖像空間中查找;
4. 在無序點雲數據的索引空間中查找.
特徵描述符匹配(如FPFH)
:
1. 窮舉配準(brute force matching);
2. kd樹最近鄰查詢(FLANN)。
ICP迭代最近點算法 pcl::IterativeClosestPoint<pcl::PointXYZ, pcl::PointXYZ> icp;
pcl::IterativeClosestPoint<pcl::PointXYZ, pcl::PointXYZ> icp;
//創建IterativeClosestPoint的對象
icp.setInputCloud(cloud_in); //cloud_in設置爲點雲的源點
icp.setInputTarget(cloud_out); //cloud_out設置爲與cloud_in對應的匹配目標
pcl::PointCloud<pcl::PointXYZ> Final; //存儲經過配準變換點雲後的點雲
icp.align(Final);
結果:
icp.hasConverged()
icp.getFitnessScore()
icp.getFinalTransformation()
- 點雲配準種類
手動配準: 依賴儀器的配準;
自動配準: 通過一定的算法或者統計學規律計算兩塊點雲之間的錯位,從而達到兩塊點雲自動配準的效果。
問題的關鍵: 如何讓得到的變換參數R+T,使得兩個不同時刻視角下測得的三維數據經過座標變換後的距離最小。
配准算法可分爲: 整體配準和局部配準;PCL庫中有單獨的配準模塊,可以使用模塊實現ICP算法,如(PCL中ICP實現) 。
-
ICP迭代最近點算法
-
非線性ICP 配準對象 逐步匹配多幅點雲
-
交互式ICP可視化
-
正態分佈變換進行配準
參考鏈接:
[1]. ICP原理介紹
[2]. pcl整體框架闡述