本博文主要介绍关于点云配准的ICP和NDT两种方法的实现代码,并贴出具有参考意义的博文地址.
关于点云配准的较好的参考博客 :
http://robot.czxy.com/docs/pcl/chapter03/registration/#ndt
https://blog.youkuaiyun.com/sru_alo/article/details/88285135
https://blog.youkuaiyun.com/yuxuan20062007/article/details/80914102
一. ICP 点云配准方法-迭代最近点算法(ICP)
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/registration/icp.h> //!!Mar26: ICP method head file
/*Demo for Point cloud registration-ICP method
* ICP: Iterative Closest Point
* Step By Step: 1. Establish two saperate point cloud data with off-set
* 2. Using ICP method to find the transformatio matrix between the two Point cloud data
*/
using namespace std;
int main(int argc, char **argv){
// Step1: Establish two point cloud data with off-set
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_in(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_out(new pcl::PointCloud<pcl::PointXYZ>);
// Step2: Assign random points into the point cloud data and show coordinate
cloud_in ->width =5;
cloud_in ->height =1;
cloud_in ->is_dense =false;
cloud_in ->points.resize(cloud_in ->width * cloud_in ->height);
for(size_t i=0; i< cloud_in ->size(); ++i){
cloud_in ->points[i].x = 1024 * rand() /(RAND_MAX +1.0f);
cloud_in ->points[i].y = 1024 * rand() /(RAND_MAX +1.0f);
cloud_in ->points[i].z = 1024 * rand() /(RAND_MAX +1.0f);
}
cout << "Saved " << cloud_in ->points.size() << "data points to input: " <<endl;
for(size_t i=0; i< cloud_in ->size(); ++i){
std::cout << " " <<
cloud