我正在尝试使用要移动的对象的实时坐标来移动机械臂。该物体是由两个彩色的乒乓球制成的,它们由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&'的模板参数>&)>'
答案 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); };
应该修复它。