私は以下のように新しいポイントタイプを宣言しました。しかし、私は利用可能なすべてのPCL機能を使用する必要があります。セグメンテーション、ボクセルグリッドなどのようなものです。すべての実装ヘッダーにPCL_INSTANTIATEコールを含めるのは苦痛です。すべての主要な機能についてこれを行うためにとにかくありますか?たとえば、セグメンテーションライブラリ内のすべての関数のポイントタイプをコンパイルしますか?PCLすべての関数の新しいポイントタイプのインスタンス化
#define PCL_NO_PRECOMPILE
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/impl/instantiate.hpp>
#include <pcl/kdtree/kdtree.h>
#include <pcl/kdtree/kdtree_flann.h>
#include <pcl/kdtree/impl/kdtree_flann.hpp>
#include <pcl/search/impl/kdtree.hpp>
#include <pcl/octree/octree_search.h>
#include <pcl/octree/impl/octree_search.hpp>
#include <pcl/segmentation/sac_segmentation.h>
#include <pcl/segmentation/impl/sac_segmentation.hpp>
struct FeaturePoint
{
PCL_ADD_POINT4D;
PCL_ADD_RGB;
PCL_ADD_NORMAL4D;
static const int DESCRIPTOR_SIZE = 128;
float descriptor[DESCRIPTOR_SIZE];
FeaturePoint() {}
FeaturePoint(const FeaturePoint& input)
{
this->x = input.x;
this->y = input.y;
this->z = input.z;
this->rgb = input.rgb;
this->normal_x = input.normal_x;
this->normal_y = input.normal_y;
this->normal_z = input.normal_z;
for(int i = 0; i < DESCRIPTOR_SIZE; ++i) { this->descriptor[i] = input.descriptor[i]; } // Ugly, as I was lazy
}
EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
} EIGEN_ALIGN16;
POINT_CLOUD_REGISTER_POINT_STRUCT (FeaturePoint,
(float, x, x)
(float, y, y)
(float, z, z)
(float, rgb, rgb)
(float, normal_x, normal_x)
(float, normal_y, normal_y)
(float, normal_z, normal_z)
(float, descriptor, descriptor)
);
PCL_INSTANTIATE(KdTree, FeaturePoint);
PCL_INSTANTIATE(KdTreeFLANN, FeaturePoint);
PCL_INSTANTIATE(OctreePointCloudSearch, FeatureP
これは正確には何ですか?私はまだimplヘッダ/ファイルを含める必要がありますか? – power2
私はちょうどそれを試してまだ未定義の参照を得る – raaj
すべての機能を試した後、まだ動作しません。 使用しているPCLのバージョンは何ですか? – jmlg91