Open3d: contoh bagaimana menggunakan Open3D dengan pustaka PCL dan ROS

Dibuat pada 26 Jun 2018  ·  14Komentar  ·  Sumber: intel-isl/Open3D

Hai,
Saya ingin tahu bagaimana menggunakan Open3D dengan perpustakaan PCL dan ROS. Adakah yang punya contoh bagaimana mengkonversi ke titik cloud pcl atau mesh pcl dari struktur data Open3D?
Terima kasih

question

Komentar yang paling membantu

@ ipa-mah ya untuk menyiasati referensi yang tidak ditentukan selama penautan, Anda perlu memastikan saat Anda mengkompilasi Open3D dari sumber yang Anda setel bendera build cmake

-DGLIBCXX_USE_CXX11_ABI=ON

misalnya

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

Ini akan memungkinkan semuanya untuk dikompilasi dan ditautkan dengan benar di ruang kerja catkin dengan ROS

Semua 14 komentar

I / O saat ini mendukung format .pcd yang merupakan format utama yang digunakan oleh PCL.
Untuk mesh, baik PCL dan Open3D mendukung .ply, yang merupakan standar.

Lihat ini: http://www.open3d.org/docs/tutorial/Basic/file_io.html

Saya tidak punya banyak pengalaman dengan ROS. Ini adalah masalah yang diketahui bahwa Open3D tidak memiliki antarmuka dengan ROS. Kami berencana untuk mengatasinya. Itu ada di peta jalan kita.

Terima kasih

Saya telah berhasil mengubah point cloud dengan menulis dan membaca dari / dev / shm yang merupakan file yang disimpan dalam RAM. Ini mungkin bukan cara terbaik, tapi berhasil.

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

Konversi ini membutuhkan waktu sekitar 244 ms pada i7-8700 saya pada 4.3Ghz

@ airfield20, apakah Anda berhasil membangun ROS + open3d bersama-sama? Tanpa tanda -D_GLIBCXX_USE_CXX11_ABI=0 CXX, kode kita menggunakan Open3D tidak akan dapat dikompilasi, tetapi dengan itu kode kita yang menggunakan ROS tidak dapat dikompilasi - apakah Anda tidak mengalami masalah ini?

@ finger563 Saya tidak membuatnya bersama, saya menginstal Open3D secara terpisah sebelum membangun ruang kerja catkin saya

@ airfield20 itulah yang kami lakukan juga. Namun, jika kita menambahkan open3d sebagai ketergantungan ke salah satu paket ROS kita, maka kita mendapatkan penautan yang tidak lengkap - fungsi tertentu seperti CreateVisualizerWindow( ... ) referensi adalah simbol yang tidak terdefinisi (saya percaya karena kurangnya kompatibilitas string yang ditegakkan oleh bendera I disebutkan di atas). Dokumen mengatakan untuk menggunakan ${Open3D_CXX_FLAGS} yang berisi bendera itu, tetapi menggunakan tanda itu menyebabkan kode ros gagal ditautkan.

Nevermind - kami hanya perlu membangun kembali Open3D dan secara eksplisit menyetel flag tersebut saat membuat file build dengan cmake - default mengubah flag tersebut menjadi 0, tetapi open3d berfungsi dengan baik dan terintegrasi dengan ROS dengan baik jika kami menetapkan flag itu ke 1.

@ finger563 bagaimana Anda merender pesan ros menggunakannya?

Kami memiliki beberapa kode yang memproyeksikan gambar kedalaman + rgb ( sensor_msgs/Image ) menjadi pointcloud dan kemudian membuat kisi voxel menggunakan open3d. karena ini adalah satu node dan kami menginginkan animasi & callback kunci, kami harus secara eksplisit membuat jendela dan mengelola loop acara. Hal serupa juga terjadi di sisi C ++ dari hal-hal yang telah kami kerjakan dan temukan sebelumnya.

Saya juga mencoba menginstal Open3D dengan ROS beberapa minggu yang lalu tetapi tidak berhasil. Saya ingat bahwa ada konflik ketergantungan Open3D dan ROS, yang menyebabkan fungsi visualisasi undefined reference . Jadi saya memutuskan untuk menghapus Open3D dari ROS, menulis fungsi saya sendiri yang mirip dengan fungsi Open3D

@ ipa-mah ya untuk menyiasati referensi yang tidak ditentukan selama penautan, Anda perlu memastikan saat Anda mengkompilasi Open3D dari sumber yang Anda setel bendera build cmake

-DGLIBCXX_USE_CXX11_ABI=ON

misalnya

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

Ini akan memungkinkan semuanya untuk dikompilasi dan ditautkan dengan benar di ruang kerja catkin dengan ROS

Kami baru saja merilis open3d_ros untuk menyediakan fungsionalitas untuk mengubah pointclouds dari ROS ke Open3D dan sebaliknya

Saya juga mencoba menginstal Open3D dengan ROS beberapa minggu yang lalu tetapi tidak berhasil. Saya ingat bahwa ada konflik ketergantungan Open3D dan ROS, yang menyebabkan fungsi visualisasi undefined reference . Jadi saya memutuskan untuk menghapus Open3D dari ROS, menulis fungsi saya sendiri yang mirip dengan fungsi Open3D

Saya punya masalah yang sama, sudahkah Anda menyelesaikannya?

Saya punya masalah yang sama, sudahkah Anda menyelesaikannya?

Masalah yang sama di sini.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

mike239x picture mike239x  ·  4Komentar

Timu777 picture Timu777  ·  3Komentar

mike239x picture mike239x  ·  3Komentar

blackccpie picture blackccpie  ·  3Komentar

edxsx picture edxsx  ·  3Komentar