Open3d: Beispiele für die Verwendung von Open3D mit PCL-Bibliothek und ROS

Erstellt am 26. Juni 2018  ·  14Kommentare  ·  Quelle: intel-isl/Open3D

Hallo,
Ich würde gerne wissen, wie man Open3D mit PCL-Bibliothek und ROS verwendet. Kann jemand ein Beispiel haben, wie man aus der Datenstruktur von Open3D in Punktwolken-pcl oder Mesh-pcl konvertiert?
Vielen Dank

question

Hilfreichster Kommentar

@ ipa-mah Ja, um diese undefinierten Referenzen beim Verknüpfen zu umgehen, müssen Sie beim Kompilieren von Open3D aus dem Quellcode sicherstellen, dass Sie das cmake-Build-Flag setzen

-DGLIBCXX_USE_CXX11_ABI=ON

z.B

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

Auf diese Weise kann alles in einem Catkin-Arbeitsbereich mit ROS ordnungsgemäß kompiliert und verknüpft werden

Alle 14 Kommentare

Die aktuelle E / A unterstützt das PCD-Format, das das primäre Format ist, das von PCL verwendet wird.
Für Mesh unterstützen sowohl PCL als auch Open3D .ply, was eher Standard ist.

Siehe dazu: http://www.open3d.org/docs/tutorial/Basic/file_io.html

Ich habe allerdings nicht viel Erfahrung mit ROS. Dies ist ein bekanntes Problem, bei dem Open3D keine Schnittstelle zu ROS hat. Wir planen, es anzugehen. Es steht auf unserer Roadmap.

Vielen Dank

Ich habe es geschafft, die Punktwolke durch Schreiben und Lesen aus / dev / shm zu konvertieren, einer im RAM gespeicherten Datei. Es ist wahrscheinlich nicht der beste Weg, aber es funktioniert.

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

Diese Konvertierung dauert auf meinem i7-8700 bei 4,3 GHz ca. 244 ms

@ airfield20 hast du ROS + open3d erfolgreich zusammen gebaut? Ohne das -D_GLIBCXX_USE_CXX11_ABI=0 CXX-Flag wird unser Code mit Open3D nicht kompiliert, aber mit ihm wird unser Code mit ROS nicht kompiliert - sind Sie nicht auf dieses Problem gestoßen?

@ finger563 Ich habe sie nicht zusammen erstellt, sondern Open3D separat installiert, bevor ich meinen Catkin-Arbeitsbereich erstellt habe

@ airfield20 das haben wir auch gemacht. Wenn wir jedoch open3d als Abhängigkeit zu einem unserer ROS-Pakete hinzufügen, erhalten wir eine unvollständige Verknüpfung - bestimmte Funktionen wie CreateVisualizerWindow( ... ) reference sind undefinierte Symbole (ich glaube aufgrund der mangelnden Zeichenfolgenkompatibilität, die durch das Flag I erzwungen wird oben erwähnt). Die Dokumente sagen, dass ${Open3D_CXX_FLAGS} , die dieses Flag enthalten, aber die Verwendung dieses Flags führt dazu, dass der Ros-Code nicht verknüpft werden kann.

Nevermind - wir mussten nur Open3D neu erstellen und dieses Flag explizit setzen, wenn wir Build-Dateien mit cmake generieren - der Standard hat dieses Flag auf 0 gesetzt, aber open3d funktioniert einwandfrei und lässt sich gut in ROS integrieren, wenn wir dieses Flag auf 1 setzen.

@ finger563 Wie rendern Sie Ros-Nachrichten damit?

Wir haben Code, der ein Tiefen- + RGB-Bild ( sensor_msgs/Image ) in eine Punktwolke projiziert und dann mit open3d ein Voxelgitter erstellt. Da es sich um einen einzelnen Knoten handelt und wir Animations- und Schlüsselrückrufe wollten, müssen wir das Fenster explizit erstellen und die Ereignisschleife verwalten. Ähnliches gilt für die C ++ - Seite, an der wir bereits gearbeitet haben.

Ich habe vor einigen Wochen auch versucht, Open3D mit ROS zu installieren, war aber nicht erfolgreich. Ich erinnere mich, dass es Konflikte zwischen Open3D- und ROS-Abhängigkeiten gibt, die zu undefined reference Visualisierungsfunktionen führen. Also habe ich beschlossen, Open3D aus ROS zu entfernen und meine eigenen Funktionen zu schreiben, die Open3D-Funktionen ähneln

@ ipa-mah Ja, um diese undefinierten Referenzen beim Verknüpfen zu umgehen, müssen Sie beim Kompilieren von Open3D aus dem Quellcode sicherstellen, dass Sie das cmake-Build-Flag setzen

-DGLIBCXX_USE_CXX11_ABI=ON

z.B

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

Auf diese Weise kann alles in einem Catkin-Arbeitsbereich mit ROS ordnungsgemäß kompiliert und verknüpft werden

Wir haben gerade open3d_ros , um die Funktionalität zum Konvertieren von Pointclouds von ROS nach Open3D und umgekehrt bereitzustellen

Ich habe vor einigen Wochen auch versucht, Open3D mit ROS zu installieren, war aber nicht erfolgreich. Ich erinnere mich, dass es Konflikte zwischen Open3D- und ROS-Abhängigkeiten gibt, die zu undefined reference Visualisierungsfunktionen führen. Also habe ich beschlossen, Open3D aus ROS zu entfernen und meine eigenen Funktionen zu schreiben, die Open3D-Funktionen ähneln

Ich habe das gleiche Problem, haben Sie es gelöst?

Ich habe das gleiche Problem, haben Sie es gelöst?

Gleiches Problem hier.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

edxsx picture edxsx  ·  3Kommentare

Timu777 picture Timu777  ·  3Kommentare

nrj127 picture nrj127  ·  4Kommentare

taochenshh picture taochenshh  ·  3Kommentare

HaiyongJiang picture HaiyongJiang  ·  3Kommentare