欢迎点云相关产学研的学者和团体加入我们。
接着打印输出结果,看一下拟合系数(best_alignment.fitness_score)然后就可以知道配准是否成功有效,并且打印出变换矩阵(best_alignment.final_transformation),可以知道配准的模板在目标点云中的位姿。特别的,因为这是一个刚体变换矩阵,所以可被分解为一个平移向量和一个3 x 3旋转矩阵)
//打印出拟合系数 (小于0.00002较好)
printf ("Best fitness score: %f\n", best_alignment.fitness_score);
// 打印旋转矩阵与平移向量
Eigen::Matrix3f rotation =best_alignment.final_transformation.block<3,3> (0, 0);
Eigen::Vector3f translation =best_alignment.final_transformation.block<3,1> (0, 3);
printf ("\n");
printf (" | %6.3f %6.3f %6.3f | \n", rotation (0,0), rotation (0,1), rotation (0,2));
printf ("R = | %6.3f %6.3f %6.3f | \n", rotation (1,0), rotation (1,1), rotation (1,2));
printf (" | %6.3f %6.3f %6.3f | \n", rotation (2,0), rotation (2,1), rotation (2,2));
printf ("\n");
printf ("t = < %0.3f, %0.3f, %0.3f >\n", translation (0), translation (1), translation (2));
最后,我们可以采用最佳匹配模板,应用变换将其与目标云进行配准,并且将配准后的模板点云保存成.PCD文档以便于后续可视化观察配准后的效果。
// 保存配准后的模板
pcl::PointCloud<pcl::PointXYZ> transformed_cloud;
pcl::transformPointCloud (*best_template.getPointCloud (), transformed_cloud, best_alignment.final_transformation);
pcl::io::savePCDFileBinary ("output.pcd", transformed_cloud);
利用光盘提供的CMakeLists.txt文件,在cmake中建立工程文件,并生成相应的可执行文件。生成执行文件后,就可以运行了,在cmd中键入命令:
...>template_alignment.exe data/object_templates.txt data/person.pcd
运行之后你将看到类似如图1所示的结果,打印输出程序的运行处理流程,以及最终找到的模型的匹配系数以及对应的旋转和平移矩阵,利用该变换对匹配最好的模型进行变换后,存储点云到当前目录下产生文件output.pcd。{C}{C}
图1 运行模板对齐与配准程序结果
...>pcd_viewer data/person.pcd output.pcd
运行上面命令,可视化最终的变换后的模板结果如图2所示,可以看出模型与找到的变换后的模板之间匹配的比较好,说明整个程序符合刚开始的需求。
图2 对齐对象模板后可视化
敬请关注PCL(Point Cloud Learning)中国更多的点云库PCL(Point Cloud Library)相关官方教程。
参考文献:
1.朱德海、郭浩、苏伟.点云库PCL学习教程(ISBN 978-7-5124-0954-5)北京航空航天出版社2012-10