在激光SLAM中,我們經常會遇到過濾離散點以及幾何特征提取等需求,這裏分享基於網絡開原始碼的直線提取和區域分割的小demo,依賴PCL庫和ROS。
程式碼地址:
一、 直線提取
PCL庫中的直線提取較為簡單,我們可以直接套用setDistanceThreshold函數進行分割,函數使用流程如下:
pcl::RandomSampleConsensus<pcl::PointXYZ> ransac(model_line);
ransac.setDistanceThreshold(0.02); //內點到模型的最大距離
ransac.setMaxIterations(100); //最大叠代次數
ransac.computeModel();
Eigen::VectorXf coef;
ransac.getModelCoefficients(coef); //coef會被賦值成直線模型參數
效果 :
![](https://img.jasve.com/2024-2/c8a5d9a714e8e6629d641d737c42d24b.webp)
二、區域分割
區域分割可以不依賴pcl完成,我的處理邏輯是,遍歷點雲的所有點,計算兩點之間的距離,如果距離在某一點上有突變,則證明該點是一個撕裂點。
效果:
![](https://img.jasve.com/2024-2/9b261798c4a76e84c5894cf724b51a98.webp)