Open3d: 如何将Open3D与PCL库和ROS一起使用的示例

创建于 2018-06-26  ·  14评论  ·  资料来源: intel-isl/Open3D

你好
我想知道如何将Open3D与PCL库和ROS一起使用。 谁能举例说明如何从Open3D的数据结构转换为点云pcl或网格pcl?
谢谢

question

最有用的评论

@ ipa-mah是的,要在链接期间解决那些未定义的引用,您需要确保在从源代码编译Open3D时设置了cmake构建标记

-DGLIBCXX_USE_CXX11_ABI=ON

例如

cmake -DBUILD_EIGEN3=ON -DBUILD_GLEW=ON -DBUILD_GLFW=ON -DBUILD_JSONCPP=ON -DBUILD_PNG=ON -DGLIBCXX_USE_CXX11_ABI=ON -DPYTHON_EXECUTABLE=/usr/bin/python ..

这将使所有内容都能在带有ROS的catkin工作区中正确编译和链接

所有14条评论

当前的I / O支持.pcd格式,这是PCL使用的主要格式。
对于网格,PCL和Open3D都支持.ply,这是相当标准的。

看到这个: http :

我在ROS方面经验不足。 这是一个已知问题,Open3D没有与ROS的接口。 我们正计划解决这个问题。 这是我们的路线图。

谢谢

我已经设法通过从/ dev / shm进行读写来转换点云,该文件是存储在RAM中的文件。 它可能不是最好的方法,但它可行。

void point_cloud_callback(const sensor_msgs::PointCloud2::ConstPtr& msg)
{
    auto start = std::chrono::steady_clock::now();
    pcl::PCLPointCloud2 pcl_cloud;
    pcl_conversions::toPCL(*msg, pcl_cloud);
    pcl::PLYWriter pclWrite;
    pclWrite.writeBinary("/dev/shm/point_cloud.ply", pcl_cloud);
    open3d::geometry::PointCloud pc;
    pc = *open3d::io::CreatePointCloudFromFile("/dev/shm/point_cloud.ply","ply").get();
    auto end = std::chrono::steady_clock::now();
    std::cout << "Elapsed time in nanoseconds : "
         << std::chrono::duration_cast<std::chrono::nanoseconds>(end - start).count()
         << " ns" << std::endl;
}

我的i7-8700在4.3Ghz上进行此转换大约需要244毫秒

@ airfield20您是否一起成功构建了ROS + open3d? 没有-D_GLIBCXX_USE_CXX11_ABI=0 CXX标志,使用Open3D的代码将无法编译,但是使用ROS的代码将无法编译-您是否遇到此问题?

@ finger563我没有一起构建它们,在构建我的柳絮工作区之前,我分别安装了Open3D

@ airfield20这也是我们所做的。 但是,如果将open3d作为依赖项添加到我们的ROS程序包之一,则将得到不完整的链接-某些函数(如CreateVisualizerWindow( ... ) reference)是未定义的符号(我相信由于标记I强制缺乏字符串兼容性)上文提到的)。 文档说使用${Open3D_CXX_FLAGS}包含该标志,但是使用该标志会导致ros代码无法链接。

没关系-我们只需要重建Open3D并在使用cmake生成构建文件时显式设置该标志-默认将该标志设置为0,但是如果我们将该标志设置为1,则open3d可以正常工作并与ROS集成在一起。

@ finger563您如何使用它渲染ros消息?

我们有一些代码将深度+ rgb图像( sensor_msgs/Image )投影到点云中,然后使用open3d创建体素网格。 因为它是单个节点,并且我们需要动画和按键回调,所以我们必须显式创建窗口并管理事件循环。 C ++方面的情况与此类似,这是我们一直在努力并在较早时遇到的问题。

几周前,我还尝试使用ROS安装Open3D,但未成功。 我记得Open3D和ROS依赖项之间存在冲突,导致undefined reference可视化功能。 因此,我决定从ROS中删除Open3D,编写类似于Open3D funcs的函数

@ ipa-mah是的,要在链接期间解决那些未定义的引用,您需要确保在从源代码编译Open3D时设置了cmake构建标记

-DGLIBCXX_USE_CXX11_ABI=ON

例如

cmake -DBUILD_EIGEN3=ON -DBUILD_GLEW=ON -DBUILD_GLFW=ON -DBUILD_JSONCPP=ON -DBUILD_PNG=ON -DGLIBCXX_USE_CXX11_ABI=ON -DPYTHON_EXECUTABLE=/usr/bin/python ..

这将使所有内容都能在带有ROS的catkin工作区中正确编译和链接

我们刚刚发布了open3d_ros以提供将点云从ROS转换为Open3D的功能,反之亦然

几周前,我还尝试使用ROS安装Open3D,但未成功。 我记得Open3D和ROS依赖项之间存在冲突,导致undefined reference可视化功能。 因此,我决定从ROS中删除Open3D,编写类似于Open3D funcs的函数

我有同样的问题,您解决了吗?

我有同样的问题,您解决了吗?

这里同样的问题。

此页面是否有帮助?
0 / 5 - 0 等级