Open3d: ejemplos de cómo utilizar Open3D con la biblioteca PCL y ROS

Creado en 26 jun. 2018  ·  14Comentarios  ·  Fuente: intel-isl/Open3D

Hola,
Me gustaría saber cómo usar Open3D con la biblioteca PCL y ROS. ¿Alguien puede tener un ejemplo de cómo convertir a pcl de nube de puntos o pcl de malla a partir de la estructura de datos de Open3D?
Gracias

question

Comentario más útil

@ ipa-mah sí, para sortear esas referencias indefinidas durante la vinculación, debe asegurarse de que, cuando compile Open3D desde la fuente, configure el indicador de compilación cmake

-DGLIBCXX_USE_CXX11_ABI=ON

p.ej

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 ..

Esto permitirá que todo se compile y se vincule correctamente en un espacio de trabajo catkin con ROS

Todos 14 comentarios

La E / S actual admite el formato .pcd, que es el formato principal utilizado por PCL.
Para malla, tanto PCL como Open3D admiten .ply, que es bastante estándar.

Vea esto: http://www.open3d.org/docs/tutorial/Basic/file_io.html

Sin embargo, no tengo mucha experiencia con ROS. Este es un problema conocido que Open3D no tiene interfaz con ROS. Estamos planeando abordarlo. Está en nuestra hoja de ruta.

Gracias

Me las arreglé para convertir la nube de puntos escribiendo y leyendo desde / dev / shm, que es un archivo almacenado en la RAM. Probablemente no sea la mejor manera, pero funciona.

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;
}

Esta conversión tarda unos 244 ms en mi i7-8700 a 4,3 Ghz

@ airfield20 ¿construyeron con éxito ROS + open3d juntos? Sin el indicador -D_GLIBCXX_USE_CXX11_ABI=0 CXX, nuestro código que usa Open3D no se compilará, pero con él nuestro código que usa ROS no se compilará, ¿no se encontró con este problema?

@ finger563 No los construí juntos, instalé Open3D por separado antes de construir mi espacio de trabajo catkin

@ airfield20 eso es lo que también hemos hecho. Sin embargo, si agregamos open3d como una dependencia a uno de nuestros paquetes ROS, entonces obtenemos un enlace incompleto: ciertas funciones como CreateVisualizerWindow( ... ) reference son símbolos indefinidos (creo que debido a la falta de compatibilidad de cadenas impuesta por la bandera I mencionado anteriormente). Los documentos dicen usar ${Open3D_CXX_FLAGS} que contienen esa bandera, pero usar esa bandera hace que el código ros no se vincule.

No importa: solo tuvimos que reconstruir Open3D y establecer explícitamente ese indicador al generar archivos de compilación con cmake; el valor predeterminado cambió ese indicador a 0, pero open3d funciona bien y se integra con ROS perfectamente si establecemos ese indicador en 1.

@ finger563 ¿cómo estás

Tenemos un código que proyecta una imagen de profundidad + rgb ( sensor_msgs/Image ) en una nube de puntos y luego crea una cuadrícula de voxel usando open3d. debido a que es un solo nodo y queríamos animación y devoluciones de llamada de teclas, tenemos que crear explícitamente la ventana y administrar el bucle de eventos. Similar es cierto en el lado C ++ de las cosas, que es en lo que hemos estado trabajando y nos encontramos con esto antes.

También intenté instalar Open3D con ROS hace unas semanas, pero no tuve éxito. Recuerdo que hay conflictos de dependencias de Open3D y ROS, que conducen a undefined reference de funciones de visualización. Así que decidí eliminar Open3D de ROS, escribir mis propias funciones similares a las funciones de Open3D

@ ipa-mah sí, para sortear esas referencias indefinidas durante la vinculación, debe asegurarse de que, cuando compile Open3D desde la fuente, configure el indicador de compilación cmake

-DGLIBCXX_USE_CXX11_ABI=ON

p.ej

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 ..

Esto permitirá que todo se compile y se vincule correctamente en un espacio de trabajo catkin con ROS

Acabamos de lanzar open3d_ros para proporcionar la funcionalidad de convertir nubes de puntos de ROS a Open3D y viceversa

También intenté instalar Open3D con ROS hace unas semanas, pero no tuve éxito. Recuerdo que hay conflictos de dependencias de Open3D y ROS, que conducen a undefined reference de funciones de visualización. Así que decidí eliminar Open3D de ROS, escribir mis propias funciones similares a las funciones de Open3D

Tengo el mismo problema, ¿lo ha resuelto?

Tengo el mismo problema, ¿lo ha resuelto?

El mismo problema aquí.

¿Fue útil esta página
0 / 5 - 0 calificaciones