Open3d: PCLライブラリとROSでOpen3Dを使用する方法の例

作成日 2018年06月26日  ·  14コメント  ·  ソース: intel-isl/Open3D

こんにちは、
PCLライブラリとROSでOpen3Dを使用する方法を知りたいのですが。 Open3Dのデータ構造からポイントクラウドpclまたはメッシュpclに変換する方法の例を誰かが持っていますか?
ありがとうございました

question

最も参考になるコメント

@ ipa-mah yeaリンク中にこれらの未定義の参照を回避するには、ソースから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は、PCLで使用される主要な形式である.pcd形式をサポートしています。
メッシュの場合、PCLとOpen3Dの両方が.plyをサポートします。これはかなり標準的です。

これを参照してください: http

しかし、私はROSの経験があまりありません。 これは、Open3DにROSとのインターフェイスがないという既知の問題です。 私たちはそれに対処することを計画しています。 それは私たちのロードマップにあります。

ありがとう

RAMに保存されているファイルである/ dev / shmからの書き込みと読み取りにより、点群を変換することができました。 それはおそらく最善の方法ではありませんが、機能します。

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

この変換には、4.3Ghzのi7-8700で約244ミリ秒かかります

@ airfield20 ROS + open3dを一緒に構築できましたか? -D_GLIBCXX_USE_CXX11_ABI=0 CXXフラグがないと、Open3Dを使用するコードはコンパイルされませんが、ROSを使用するコードはコンパイルされません。この問題は発生しませんでしたか?

@ finger563一緒にビルドしませんでした。catkinワークスペースをビルドする前に、Open3Dを個別にインストールしました。

@ airfield20それも私たちがやったことです。 ただし、ROSパッケージの1つに依存関係としてopen3dを追加すると、リンクが不完全になります- CreateVisualizerWindow( ... )参照などの特定の関数は未定義のシンボルです(フラグIによって強制される文字列の互換性がないためだと思います)上記の通り)。 ドキュメントには、そのフラグを含む${Open3D_CXX_FLAGS}を使用すると書かれていますが、そのフラグを使用すると、rosコードのリンクに失敗します。

気にしないでください-cmakeでビルドファイルを生成するときにOpen3Dを再構築し、そのフラグを明示的に設定する必要がありました-デフォルトではそのフラグは0になりましたが、open3dは正常に機能し、そのフラグを1に設定するとROSと正常に統合されます。

@ finger563それを使用してrosメッセージをどのようにレンダリングしていますか?

深さ+ RGB画像( sensor_msgs/Image )を点群に投影し、open3dを使用してボクセルグリッドを作成するコードがいくつかあります。 これは単一ノードであり、アニメーションとキーコールバックが必要だったため、ウィンドウを明示的に作成し、イベントループを管理する必要があります。 同様のことがC ++側にも当てはまります。これは、私たちが取り組んできたものであり、以前にこれに遭遇しました。

また、数週間前にROSでOpen3Dをインストールしようとしましたが、成功しませんでした。 Open3DとROSの依存関係の競合があり、視覚化関数のundefined referenceにつながることを覚えています。 そこで、ROSからOpen3Dを削除し、Open3D関数に似た独自の関数を作成することにしました。

@ ipa-mah yeaリンク中にこれらの未定義の参照を回避するには、ソースから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ワークスペースですべてを適切にコンパイルおよびリンクできるようになります

ポイントクラウドをROSからOpen3Dに、またはその逆に変換する機能を提供するために、 open3d_rosをリリースしました。

また、数週間前にROSでOpen3Dをインストールしようとしましたが、成功しませんでした。 Open3DとROSの依存関係の競合があり、視覚化関数のundefined referenceにつながることを覚えています。 そこで、ROSからOpen3Dを削除し、Open3D関数に似た独自の関数を作成することにしました。

私は同じ問題を抱えています、あなたはそれを解決しましたか?

私は同じ問題を抱えています、あなたはそれを解決しましたか?

ここで同じ問題。

このページは役に立ちましたか?
0 / 5 - 0 評価