Как преобразовать ROS PointCloud2 в Pcl Pointcloud2, используя только Pcl 1,8? - PullRequest
0 голосов
/ 26 апреля 2018

Я работаю с ros, но мне нужны некоторые новые функции из pcl 1.8.Вот почему я включаю его как системную зависимость, используя find_package(PCL 1.8 Required), и не могу включить ни один пакет ros_pcl, потому что я прочитал в списке рассылки об этой проблеме, что смешивание ros_pcl и автономного pcl - плохая идея.

Теперь я не могу найти метод, как преобразовать облако точек росы sensor_msgs::PointCloud2 в облако точек pcl::PointCloud2.Я нашел только void pcl::toPCLPointCloud2 (const pcl::PointCloud< PointT >& cloud, pcl::PCLPointCloud2 & msg), который имеет неправильный тип и выдает ошибку компиляции.

Теперь в пакете pcl_conversion есть эта функция: void pcl::fromROSMsg (const sensor_msgs::PointCloud2 &cloud, pcl::PointCloud< T > &pcl_cloud), и я успешно использовал ее только для того, чтобы попробовать, нотогда не мог использовать pcl 1.8 одновременно.Теперь мой вопрос: лучше ли будет самому скопировать / реализовать функцию fromROSMsg, чтобы иметь возможность использовать 1.8, или есть лучший способ, как это сделать?

1 Ответ

0 голосов
/ 20 января 2019

Если у вас все еще есть проблемы, связанные с этим, вам могут помочь следующие подсказки:

В CMakeLists.txt

find_package(catkin_simple REQUIRED)
catkin_simple(ALL_DEPS_REQUIRED)

.
.
.

find_package(PCL 1.8 REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})

Затем добавьте ${PCL_LIBRARIES} в target_link_libraries.

Для преобразования в 1.8 я использовал этот способ, и он работал.

pcl::PointCloud<pcl::PointXYZI> in_cloud;
pcl::fromROSMsg(in_msg, in_cloud);

, где in_msg - это тип const sensor_msgs::PointCloud2&.

...