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

error in pcl object tracking code using 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 &' 的模板参数

您使用的是旧版本 PCL。 registerCallback 期望 boost::function 而不是 std::function

改变

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

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

应该修复它。