【毕业课题学习】PCL-基于对应分组的三维物体识别

本教程介绍了如何使用PCL的pcl_recognition模块进行3D对象识别,特别是对应分组算法。该算法将点对点对应集合聚类,以识别场景中的模型实例并估计其6DOF姿态。在实践中,遇到了包括RGBA字段匹配错误、线程数设置问题、SHOT特征计算错误、可视化问题等,并逐一解决,最终成功实现3D物体识别。
摘要由CSDN通过智能技术生成

来自http://pointclouds.org/documentation/tutorials/correspondence_grouping.php#correspondence-grouping

本教程旨在解释如何基于pcl_recognition模块执行3D对象识别。 具体来说,它解释了如何使用对应分组算法,以便将在3D描述符匹配阶段之后获得的点对点对应集合聚类到当前场景中存在的模型实例中。 对于表示场景中可能的模型实例的每个聚类,对应分组算法还输出识别当前场景中该模型的6DOF姿态估计的变换矩阵。

在开始之前,您应该从GitHub(milk.pcd和milk_cartoon_all_small_clorox.pcd)下载本教程中使用的PCD数据集,并将文件放在方便的文件夹中。

另外,将以下代码复制并粘贴到编辑器中,并将其另存为correspondence_grouping.cpp(或在此处下载源文件)。

注意点:首先是项目的配置问题,一定要配置好,然后一步一步往下测试。

我遇到的问题有:

1,Failed to find match for field "rgba".

找不到匹配的RGBA,这个错误不影响结果,原因是程序在输入的PCD文件中找不到RGBA数据。

2,第二个问题就是User Error 1001:argument to num_threads clause must be positive.

这个原因是由于设置的线程数必须为正,而程序中可能没有设置,有时候甚至环境变量中设置了,但是依然报错,我们不妨手动设置一下。(来自CSDN的文章)

设置后,就没这个错误了。

3,[pcl::SHOTEstimation::computeFeature] The local reference frame is not valid! Aborting description of point with index 3045

这个错误是由于正常半径较小的事实,一些法线是NaN(在设置半径的球体内它们的邻域中没有点)。这曾经导致SHOT出现问题。

只需要把代码中的,

搜索半径改大点。

在这处代码中,同样需要设置线程数,否则会出现报错。

4,哭了,可视化部分一直出现堆栈错误,提醒异常,最后搜了好久百度(实验室服务器到期了,吐血,只能艰难百度),总算是靠在附加依赖项添加了opengl32.lib文件解决了。

原因不知道,谁知道了留言下呗。

给大家看看运行的结果:

这个时候问题又出现了,RT值不变,而且VIsualization界面没有显示点云图……

5,解决下4的问题

EMM,原来是调试的时候我把最后的那句显示点云图的While循环给删了,暴风哭泣。现在成功啦~

用的是GC,没有用Hough3D

 

6,改用H3D试试。

成功啦!
鼓掌!

现在开始用自己的数据和模板来写了。 

代码备份如下:

// ObjectRecongnition.cpp: 定义控制台应用程序的入口点。
#include "stdafx.h"
#include <stdlib.h>
#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/point_cloud.h>
#include <pcl/correspondence.h>
#include <pcl/features/normal_3d_omp.h>
#include <pcl/features/shot_omp.h>
#include <pcl/features/board.h>
#include <pcl/filters/uniform_sampling.h>
#include <pcl/recognition/cg/hough_3d.h>
#include <pcl/recognition/cg/geometric_consistency.h>
#include <pcl/kdtree/kdtree_flann.h>    //Kdtree库
#include <pcl/kdtree/impl/kdtree_flann.hpp>
#include <pcl/common/transforms.h>
#include <pcl/console/parse.h>
#include <pcl/visualization/cloud_viewer.h>//点云查看窗口头文件
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/visualization/boost.h>

#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);



typedef pcl::PointXYZ PointType; //文中的PintType即为PointXYZRGBA
typedef pcl::Normal NormalType;
typedef pcl::ReferenceFrame RFType;
typedef pcl::SHOT352 DescriptorType;//SHOT特征的数据结构

std::string model_filename_;
std::string scene_filename_;

//Algorithm params
bool show_keypoints_(true);
bool show_correspondences_(true);
bool use_cloud_resolution_(false);
bool use_hough_(true);
float model_ss_(7.5f); //0.01f
float scene_ss_(20.0f);//0.03f-20
float rf_rad_(10.0f);  //0.015f-10
float descr_rad_(15.0f);//0.02f -19 - 
float 
  • 8
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值