使用kinect v2的pcl对象跟踪代码中的错误

时间:2019-07-14 10:46:05

标签: c++ boost point-cloud-library kinect-v2

我正在尝试使用要移动的对象的实时坐标来移动机械臂。该物体是由两个彩色的乒乓球制成的,它们由20厘米的杆相连。我正在尝试使用PCL库和Kinect v2来获取球的坐标(XYZ)。

要移动机械臂,我尝试使用Kinect SDK的联合数据,但我还需要确定机械臂末端执行器的方向。因此,我尝试从Kinect获取该对象的位置和方向并移动手臂。 我尝试使用在PCL网站和Github上找到的代码: http://pointclouds.org/documentation/tutorials/tracking.php

这是我正在使用的代码:

https://github.com/PointCloudLibrary/pcl/blob/master/apps/src/openni_tracking.cpp 它是为与openni一起使用而编写的,但我将其更改为openni2。

void
    run()
{
    pcl::Grabber* interface = new pcl::io::OpenNI2Grabber(device_id_);
    std::function<void(const CloudConstPtr&)> f =
        [this](const CloudConstPtr& cloud) { cloud_cb(cloud); };
    interface->registerCallback(f);

    viewer_.runOnVisualizationThread([this](pcl::visualization::PCLVisualizer& viz) { viz_cb(viz); }, "viz_cb");

    interface->start();

    while (!viewer_.wasStopped())
        std::this_thread::sleep_for(1s);
    interface->stop();
}

当我尝试调试时,出现以下错误:

错误C2672'pcl :: Grabber :: registerCallback':未找到匹配的重载函数

错误C2784'boost :: signals2 :: connection pcl :: Grabber :: registerCallback(const boost :: function&)':无法从'std :: function推断出'const boost :: function&'的模板参数>&)>'

1 个答案:

答案 0 :(得分:0)

您正在使用旧版本的PCL。 Input File (Reader1) Id;data1;data2;data3 Database (Reader2) Id|data4;data5;data6 Output File Id;data1;data2;data3;data4;data5;data6 期望registerCallback而不是boost::function

更改

std::function

std::function<void(const CloudConstPtr&)> f = [this](const CloudConstPtr& cloud) { cloud_cb(cloud); };

应该修复它。