Open3d: exemples d'utilisation d'Open3D avec la bibliothèque PCL et ROS

Créé le 26 juin 2018  ·  14Commentaires  ·  Source: intel-isl/Open3D

Salut,
J'aimerais savoir comment utiliser Open3D avec la bibliothèque PCL et ROS. Quelqu'un peut-il avoir un exemple de conversion en nuage de points pcl ou en maillage pcl à partir de la structure de données d'Open3D?
Je vous remercie

question

Commentaire le plus utile

@ ipa-mah oui pour contourner ces références non définies lors de la liaison, vous devez vous assurer lorsque vous compilez Open3D à partir de la source que vous définissez l'indicateur de construction cmake

-DGLIBCXX_USE_CXX11_ABI=ON

par exemple

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

Cela permettra à tout de se compiler et de se lier correctement dans un espace de travail catkin avec ROS

Tous les 14 commentaires

Les E / S actuelles prennent en charge le format .pcd qui est le format principal utilisé par PCL.
Pour le maillage, PCL et Open3D prennent en charge .ply, ce qui est plutôt standard.

Voir ceci: http://www.open3d.org/docs/tutorial/Basic/file_io.html

Cependant, je n'ai pas beaucoup d'expérience avec ROS. Il s'agit d'un problème connu selon lequel Open3D n'a pas d'interface avec ROS. Nous prévoyons de le résoudre. C'est sur notre feuille de route.

Merci

J'ai réussi à convertir le nuage de points en écrivant et en lisant à partir de / dev / shm qui est un fichier stocké dans la RAM. Ce n'est probablement pas la meilleure façon, mais cela fonctionne.

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

Cette conversion prend environ 244 ms sur mon i7-8700 à 4,3 Ghz

@ airfield20 avez-vous construit avec succès ROS + open3d ensemble? Sans le drapeau -D_GLIBCXX_USE_CXX11_ABI=0 CXX, notre code utilisant Open3D ne sera pas compilé, mais avec lui notre code utilisant ROS ne se compilera pas - n'avez-vous pas rencontré ce problème?

@ finger563 Je ne les ai pas construits ensemble, j'ai installé Open3D séparément avant de construire mon espace de travail catkin

@ airfield20 c'est aussi ce que nous avons fait. Cependant, si nous ajoutons open3d en tant que dépendance à l'un de nos packages ROS, nous obtenons une liaison incomplète - certaines fonctions comme CreateVisualizerWindow( ... ) reference sont des symboles indéfinis (je crois en raison du manque de compatibilité des chaînes imposé par le drapeau I mentionné ci-dessus). La documentation dit d'utiliser ${Open3D_CXX_FLAGS} qui contient cet indicateur, mais l'utilisation de cet indicateur entraîne l'échec de la liaison du code ros.

Nevermind - nous avons juste dû reconstruire Open3D et définir explicitement cet indicateur lors de la génération des fichiers de construction avec cmake - la valeur par défaut a tourné cet indicateur à 0, mais open3d fonctionne bien et s'intègre parfaitement à ROS si nous définissons cet indicateur sur 1.

@ finger563 comment

Nous avons un code qui projette une image de profondeur + rgb ( sensor_msgs/Image ) dans un nuage de points, puis crée une grille de voxel en utilisant open3d. parce que c'est un nœud unique et que nous voulions des animations et des rappels de touches, nous devons créer explicitement la fenêtre et gérer la boucle d'événements. La même chose est vraie du côté C ++ des choses sur lesquelles nous avons travaillé et que nous avons rencontré plus tôt.

J'ai également essayé d'installer Open3D avec ROS il y a quelques semaines, mais sans succès. Je me souviens qu'il y a des conflits de dépendances Open3D et ROS, qui conduisent à undefined reference de fonctions de visualisation. J'ai donc décidé de supprimer Open3D de ROS, d'écrire mes propres fonctions similaires aux fonctions Open3D

@ ipa-mah oui pour contourner ces références non définies lors de la liaison, vous devez vous assurer lorsque vous compilez Open3D à partir de la source que vous définissez l'indicateur de construction cmake

-DGLIBCXX_USE_CXX11_ABI=ON

par exemple

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

Cela permettra à tout de se compiler et de se lier correctement dans un espace de travail catkin avec ROS

Nous venons de publier open3d_ros pour fournir la fonctionnalité de conversion de nuages ​​de points de ROS vers Open3D et vice versa

J'ai également essayé d'installer Open3D avec ROS il y a quelques semaines, mais sans succès. Je me souviens qu'il y a des conflits de dépendances Open3D et ROS, qui conduisent à undefined reference de fonctions de visualisation. J'ai donc décidé de supprimer Open3D de ROS, d'écrire mes propres fonctions similaires aux fonctions Open3D

J'ai le même problème, l'avez-vous résolu?

J'ai le même problème, l'avez-vous résolu?

Même problème ici.

Cette page vous a été utile?
0 / 5 - 0 notes