资源简介
利用PCL开源库编写代码NDT+ICP算法实现点云高精度配准,包括粗配准+精配准,并计算配准误差!基于PCL库版本1.9!
代码片段和文件信息
#include
#include
#include
#include //icp头文件
#include //ndt头文件
#include
#include
#include
#include
#include
#include //去除NAN点的头文件
#include //官网上采样过滤,先不用
using namespace std;
typedef pcl::PointXYZ PointT;
typedef pcl::PointCloud PointCloud;
//点云可视化
void visualize_pcd(PointCloud::Ptr pcd_src PointCloud::Ptr pcd_tgt PointCloud::Ptr pcd_final)
{
pcl::visualization::PCLVisualizer viewer(“registration Viewer“);
//原始点云绿色
pcl::visualization::PointCloudColorHandlerCustom src_h(pcd_src 0 255 0);
//目标点云红色
pcl::visualization::PointCloudColorHandlerCustom tgt_h(pcd_tgt 255 0 0);
//匹配好的点云蓝色
pcl::visualization::PointCloudColorHandlerCustom final_h(pcd_final 0 0 255);
viewer.setBackgroundColor(255 255 255);
viewer.addPointCloud(pcd_src src_h “source cloud“);
viewer.addPointCloud(pcd_tgt tgt_h “target cloud“);
viewer.addPointCloud(pcd_final final_h “result cloud“);
while (!viewer.wasStopped())
{
viewer.spinOnce(100);
boost::this_thread::sleep(boost::posix_time::microseconds(100000));
}
}
//由旋转平移矩阵计算旋转角度
void matrix2angle(Eigen::Matrix4f &result_trans Eigen::Vector3f &result_angle)
{
double ax ay az;
if (result_trans(2 0) == 1 || result_trans(2 0) == -1)
{
az = 0;
double dlta;
dlta = atan2(result_trans(0 1) result_trans(0 2));
if (result_trans(2 0) == -1)
{
ay = M_PI / 2;
ax = az + dlta;
}
else
{
ay = -M_PI / 2;
ax = -az + dlta;
}
}
else
{
ay = -asin(result_trans(2 0));
ax = atan2(result_trans(2 1) / cos(ay) result_trans(2 2) / cos(ay));
az = atan2(result_trans(1 0) / cos(ay) result_trans(0 0) / cos(ay));
}
result_angle << ax ay az;
cout << “x轴旋转角度:“ << ax << endl;
cout << “y轴旋转角度:“ << ay << endl;
cout << “z轴旋转角度:“ << az << endl;
}
int main(int argc char** argv)
{
//创建点云指针
PointCloud::Ptr cloud_source(new PointCloud);
PointCloud::Ptr cloud_target(new PointCloud);
// 加载点云文件
pcl::io::loadPCDFile(“E:/vs13/pcldata/bun/rabbit.pcd“ *cloud_source);
std::cout << “source loaded!“ << std::endl;
pcl::io::loadPCDFile(“E:/vs13/pcldata/bun/rabbit_1.pcd“ *cloud_target);
std::cout << “target loaded!“ << std::endl;
clock_t start = clock();
//去除NAN点
std::vector indices_src; //保存去除的点的索引
pcl::removeNaNFromPointCloud(*cloud_source *cloud_source indices_src);
std::cout << “remove *cloud_source nan“ << endl;
std::vector indices_tgt; //保存去除的点的索引
pcl::removeNaNFromPointCloud(*cloud_target *cloud_target indices_tgt);
std::cout << “remove *cloud_target nan“ << endl;
//下采样滤波
pcl::VoxelGrid v
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 7466 2019-03-04 20:19 ndt+icp.cpp
----------- --------- ---------- ----- ----
7466 1
相关资源
- 超级场景清理器(SPCleaner)v1.0免费版
- httpclient4.3工具类
- Ti对Al-Ag-Cu反应扩散连接SiCp/2618Al复合
- SfM稀疏三维点云重建--完整工程文件
- AndreaMosaicPortable蒙太奇马赛克拼图制作
- 计算机程序的构造和解释-中文版SIC
- 全面的点云库PCL学习教程
- ICP+NDT点云配准
- CPCL查看器.rar
- 论文研究 - 墨西哥中西部莱尔马河沉
- Linux ntpclient代码
- 点云库PCL学习教程 完整版
- icp三维点云配准文件
- 中英文PCL5语言参考手册_11086676.zip
-
swift-YLFollowMusicPla
yer一个在线音乐播 - stm32f4+w5500+tcpclient/server源码
- PC-lint 9 + 中文手册
- sap ICP320
- GA+ICP代码
- FTPclinet客户端
- Fast ICP算法源码
- 2018年ACM国际大学生程序设计竞赛真题
- PCL点云库SACSegmentation用法demo
- 小兔子pcd点云数据pcl官方案例1)
- PCL5编程指南中文版
- Generalized-ICP 论文
- osg显示点云
- 利用PCL,OpenCV求取点云的体积
- 计算机程序的构造和解释pdf 带目录非
- pcl5语言详细介绍
评论
共有 条评论