背景:算法
最近寫了一個包,使用ndt算法拼接點雲,構建三維壁面環境的點雲地圖。spa
設計一個lidar類,表徵激光雷達。能夠獲取點雲數據並存儲到容器 std::vector<PointCloudPtr> 。設計
設計一個RegistrationWithNDTandGICP類,表徵基於ndt_icp的slam方案。該類中有一個lidar類的成員,該成員能夠獲取點雲數據,而後計算激光里程計,拼接地圖。指針
建立一個lidar的對象,lidar;建立一個RegistrationWithNDTandGICP類的對象,ndt;code
問題描述:對象
lidar獲取點雲後,以指針(shared_ptr)的形式存放在容器中,以後ndt從容器中逐個取出點雲指針,計算里程計。blog
在lidar中,每次把點雲指針存入容器以前,將點雲的部分點座標數據打印出來;it
在ndt中,每次把點雲指針從容器中取出後,將點雲的部分點座標數據打印出來;io
對比發現,點的座標數據發生了變化!class
進一步檢查。
在lidar中,每次把點雲指針存入容器以前,輸出點雲的大小和指針地址;
在lidar中,每次把點雲指針從容器中取出後,輸出點雲的大小和指針地址;
對比發現,上述兩個變量的值徹底同樣!
解決方案:
把容器改成 std::vector<PointCloudType> 類型,該錯誤當即消失。
具體錯誤緣由不詳!期待高手或前輩指點!