глубина — Данные Wrtie из файла C ++ (библиотека облака точек)

Я использую библиотеку облаков точек, чтобы получить карту глубины и затем каждую секунду или около того записывать файл PCD в память, чтобы он мог быть загружен другой программой.

У меня есть программа, правильно отображающая карту глубины с помощью визуализатора, и все это работает, за исключением одной строки, которая фактически записывает файл.

Вот мой код:

 #include <pcl/io/openni_grabber.h>
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/cloud_viewer.h>

class SimpleOpenNIViewer
{
public:
SimpleOpenNIViewer () : viewer ("PCL OpenNI Viewer") {}

void cloud_cb_ (const pcl::PointCloud<pcl::PointXYZ>::ConstPtr &cloud)
{
if (!viewer.wasStopped())
viewer.showCloud (cloud);
//this is the line to write the file.
//I am not sure it is the correct location.
pcl::io::savePCDFileASCII ("test_pcd_here.pcd", cloud);
}

void run ()
{
pcl::Grabber* interface = new pcl::OpenNIGrabber();

boost::function<void (const pcl::PointCloud<pcl::PointXYZ>::ConstPtr&)> f =
boost::bind (&SimpleOpenNIViewer::cloud_cb_, this, _1);

interface->registerCallback (f);

interface->start ();

while (!viewer.wasStopped())
{
boost::this_thread::sleep (boost::posix_time::seconds (1));
}

interface->stop ();
}

pcl::visualization::CloudViewer viewer;
};

int main ()
{
SimpleOpenNIViewer v;
v.run ();
return 0;
}

Вот ошибка, которую я получаю при попытке создать файл:

/home/patrick/Desktop/kinect/grabber/openni_grabber.cpp: In member function ‘void SimpleOpenNIViewer::cloud_cb_(const ConstPtr&)’:
/home/patrick/Desktop/kinect/grabber/openni_grabber.cpp:15:59: error: no matching function for call to ‘savePCDFileASCII(const char [18], const ConstPtr&)’
/home/patrick/Desktop/kinect/grabber/openni_grabber.cpp:15:59: note: candidate is:
/usr/include/pcl-1.6/pcl/io/pcd_io.h:704:5: note: template<class PointT> int pcl::io::savePCDFileASCII(const string&, const pcl::PointCloud<PointT>&)
make[2]: *** [CMakeFiles/openni_grabber.dir/openni_grabber.cpp.o] Error 1
make[1]: *** [CMakeFiles/openni_grabber.dir/all] Error 2
make: *** [all] Error 2

0

Решение

savePCDFileASCII() функция ожидает постоянную ссылку на PointCloud пока вы поставляете указатель. Вы должны разыменовать указатель:

pcl::io::savePCDFileASCII ("test_pcd_here.pcd", *cloud);

Имейте в виду, что ваша функция обратного вызова запускается как можно чаще (чаще, чем раз в секунду), поэтому вы можете захотеть ограничить экспорт.
И что еще более важно, если вы попытаетесь записать данные, пока другая программа их читает (или наоборот), любая из программ может завершиться сбоем (состояние гонки)
поэтому вам понадобится какая-то форма синхронизации или потоковая передача PointCloud напрямую через другие средства (например, через сокет или канал).

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector