pcl::IntegralImageNormalEstimation< PointInT, PointOutT >::setInputCloud() 导致运行时 SFINAE 异常

问题描述 投票:0回答:1

我在 Ubuntu 22 上使用 PCL 版本 1.12.1。 eigen3版本是3.4.0

完整的代码写在这里

这里使用了

pcl::IntegralImageNormalEstimation< PointInT, PointOutT >

int main ()
{
    // load point cloud
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
    pcl::io::loadPCDFile ("./img/table_scene_mug_stereo_textured.pcd", *cloud);

    // estimate normals
    pcl::PointCloud<pcl::Normal>::Ptr normals (new pcl::PointCloud<pcl::Normal>);

    pcl::IntegralImageNormalEstimation<pcl::PointXYZ, pcl::Normal> ne;
    ne.setNormalEstimationMethod (ne.AVERAGE_3D_GRADIENT);
    ne.setMaxDepthChangeFactor(0.02f);
    ne.setNormalSmoothingSize(10.0f);
    ne.setInputCloud(cloud); /*Here comes a problem.*/
    ne.compute(*normals); /*The debugger couldn't reach here.*/

    // visualize normals
    pcl::visualization::PCLVisualizer viewer("PCL Viewer");
    viewer.setBackgroundColor (0.0, 0.0, 0.5);
    viewer.addPointCloudNormals<pcl::PointXYZ,pcl::Normal>(cloud, normals);

    while (!viewer.wasStopped ())
    {
        viewer.spinOnce();
    }
    return 0;
}

它不会产生编译错误,但会产生运行时错误并终止程序。

normal_estimation_using_integral_images:/usr/include/eigen3/Eigen/src/Core/util/XprHelper.h:133:Eigen::internal::variable_if_dynamic::variable_if_dynamic(T) [其中T = long int; int Value = 3]:断言“v == T(Value)”失败。

调用堆栈如下。

libc.so.6!__pthread_kill_implementation(int no_tid,intsigno,pthread_t threadid)(pthread_kill.c:44) libc.so.6!__pthread_kill_internal(int Signo, pthread_t threadid) (pthread_kill.c:78) libc.so.6!__GI___pthread_kill(pthread_t threadid, intsigno) (pthread_kill.c:89) libc.so.6!__GI_raise(int sig) (raise.c:26) libc.so.6!__GI_abort() (abort.c:79) libc.so.6!__assert_fail_base(const char * fmt、const char * 断言、const char * 文件、unsigned int 行、const char * 函数) (assert.c:92) libc.so.6!__GI___assert_fail(const char * 断言、const char * 文件、unsigned int 行、const char * 函数) (assert.c:101) libpcl_features.so.1.12![未知/即时编译代码](未知来源:0) libpcl_features.so.1.12!pcl::IntegralImageNormalEstimation::initAverage3DGradientMethod() (来源未知:0) pcl::IntegralImageNormalEstimation::setInputCloud(pcl::IntegralImageNormalEstimation * const this, const pcl::PointCloud::ConstPtr & cloud) (/usr/include/pcl-1.12/pcl/features/integral_image_normal.h:251) main() (/home/sagal/bire/pcl_tutorial/src/normal_estimation_using_integral_images.cpp:91)

我怀疑问题来自于PCL库的即时代码生成失败,该库无法通过Eigen库的SFINAE检查。

但我不知道为什么以及在哪里需要进行型式试验。

如何解决或绕过该错误?

templates eigen feature-extraction point-cloud-library
1个回答
0
投票

PCL 版本 1.12.1 尚未修复该问题。您需要从 master 分支或 1.30.0 更新版本编译并安装 PCL。

了解更多详情,可以点击链接:https://github.com/PointCloudLibrary/pcl/issues/5063

© www.soinside.com 2019 - 2024. All rights reserved.