問題タブ [point-cloud-library]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Boost.thread コードは、Ubuntu と Windows で異なる動作を示します
別のスレッドから点群を視覚化し、ターミナルで「q」と入力するまでメインスレッドで作業を続けることができるかどうかをテストするための少し簡単なプログラムがあります。
Ubuntu 10.04 では、コードが機能し、反復ごとに新しいポイントが雲に追加される様子を視覚化できます。ただし、Windows 7 ではこれは機能しません (私はQtCreatorでコンパイルしています)。クラウドが表示され、ターンごとに新しいポイントが計算されますが、これは終了しません。'q'と入力すると、ループは停止しますが、視覚化スレッドは実行され続けます。実行を停止する唯一の方法は、明示的にCTRL+Cを使用することです。
より多くの事:
- Visualize関数の!viewer->wasStopped()ループの前にaddPointCloud行のコメントを外さないと、点群が表示されません。ループの後半で明示的に追加しても問題ありません。ループの前に実行する必要があります (その動作を示すために、その行にコメントが付けられています)。
- また、*tbb::queuing_mutex* の代わりにboost::mutexを使用しようとしましたが、プログラムは終了しません。
スレッドが参加しない理由がわかりましたか? また、私のスレッドの使用法に関する建設的な批評はいつでも歓迎されます。私は改善し続けたいと思っています。
コードは次のとおりです。
御時間ありがとうございます!。
編集: Windows が実行可能形式を認識しないためにデバッガーを使用できないため (?) qDebug()
、関数にいくつかの行を追加しましたVisualize
(また、直接呼び出す代わりにviewer->wasStopped()
、揮発性の中間変数を使用して停止しました):
さて、前の spinOnceはiteration=0で一度だけ表示されます。Before a new loop行は印刷されません。
一方、メインスレッドは、 「q」が入力されるまで、それらのポイントを計算して標準出力に出力し続けます。
可視化スレッドがviewer->spinOnce(100)
呼び出しでフリーズしたようです。代わりにspinOnce(100)
他の視覚化方法を使用してもspin()
、何も変わりません。
私のコードにデータ競合があるのかもしれませんが、私はそれをチェックし続けていますが、自分で競合を見つけることができません。
注: PCL ライブラリのドキュメントによるとspinOnce(int time)
、インタラクターを呼び出して画面を一度更新するのに対しspin()
、インタラクターを呼び出して内部ループを実行します。
編集 #2:今日、Ubuntu でコードを再度実行しようとしたところ、PCL ビジュアライザーでデッドロックが発生しました。volatile
いくつかのキーワードと新しいループ チェックを追加しました。今はうまくいっているようです (少なくとも期待どおりに機能し、間違った方向に曲がることはありませんでした...)。新しいバージョンは次のとおりです。
グローバル変数:
視覚化方法:
主な機能:
ただし、新しい制御ループ var hack は好きではありません。いつ終了するかを知るためのより良い方法はありませんか?. 今のところ、それ以外の方法はわかりません...
opencv - KinectforWindowsをPCLおよびOpenCVに接続する
私の主な目標は、Cmakeを使用して基本的なc ++ソリューションをセットアップすることです。このソリューションでは、PCLとOpenCVの機能を使用して、KinectforWindowsセンサーから取得したデータを操作できます。
私は以下を使用します:-OpenNIはKinectの新しいバージョンと互換性がないため、KinectforWindowsとSDKも使用します。https://github.com/avin2/SensorKinectは解決策の1つですが、Windows 8では機能しません(READMEファイルによる)
次に、Cmakeを使用してVSソリューションを生成すると思い、このCMakeLists.txtを試してみました。
しかし、次のコンパイルエラーが発生します。
コード:
将来的には、プロジェクトのプロパティの下に適切なdirを設定するよりも、Cmakeを使用してC++ソリューションを生成する方が簡単になるでしょう。KinectforWindowsで使用するVisualStudioC ++ソリューションを作成するための推奨される方法は何ですか?
c++ - PCL XYZクラウドをXYに変換します(3Dから2D)
設定
タイプのPCLポイントクラウドがありPointXYZ
ます。タイプのグリッドマップに変換する必要があります。少なくとも1つのポイントがある場合はtrueである必要がありますvector<vector<bool> >
。map[x][y]
マップは、点群の特定の領域を表す必要があります(たとえば、x = [-10,10]、y=[-15,15]の点群の寸法をカバーする20x30セル。
私が今持っているもの
現在、私には2つのアプローチがあります。
- すべてのポイントをスキャンし、マップ内の対応するセルをtrueに設定します。
- ポイントを平面に投影し、Kdツリーを作成してから、マップ内のセルごとにツリーに最も近いポイントを照会し、セルに該当する場合はセルをtrueに設定します。
ここで、最初のアプローチは小さな点群に適しています。O(n)で、nは点群内の点の数です。
2番目のアプローチは大きな雲に適していると思います。最終的なクエリはO(m)のみです。ここで、mはマップのサイズです。ただし、Kdツリーの構築と平面へのクラウドの投影は、どちらも約O(n)である必要があります。
2番目のアプローチは常に悪いと思いますが、テストを実行して確認します。
質問
より良いアプローチはありますか?たぶん、OctreeまたはVoxel-Grid(2D)で何か?アプローチ1の問題は、関心領域外のポイントを不必要に見ていることです。
私がこの問題を最初に抱えることはできないようですよね?
visual-c++ - PCL ライブラリを使用した VS2012 のリンク エラー LNK2020 & 2001 Visual C++
点群の位置合わせに Open Point Cloud ライブラリを使用しようとしています。Visual Studio 2012 を使用して、新しい Visual c++ プロジェクトを作成しました。PCL のすべての .libs が格納されているディレクトリがプロジェクトのプロパティに追加されます (プロパティ -> c/c++ -> 一般 -> 追加のインクルード ディレクトリ) 使用するライブラリは、プロパティ -> リンカー -> に一覧表示されます入力 -> 追加の依存関係
私が今まで書いたコードは非常に単純です:
このチュートリアルに従いました: http://pointclouds.org/documentation/tutorials/reading_pcd.php
適切なライブラリとファイルをインクルードしました...特に「pcd_io.h」ですが、リンカー エラーが発生するのはなぜですか? ロードしたいpcdファイルは、cppファイルと同じフォルダーにあります。ライブラリを間違った方法で処理していますか?
Link-Errors Fehler 28 エラー LNK2020: Nicht aufgel÷stes Token (0A000C90) "void __cdecl pcl::console::print(enum pcl::console::VERBOSITY_LEVEL,char const *,...)" (?print@ console@pcl@@$$FYAXW4VERBOSITY_LEVEL@12@PBDZZ)。D:\Documents\ \Code\PCL_cpp\pcl_cpp\pcl_cpp\pcl_registration.obj pcl_cpp
Fehler 29 エラー LNK2020: Nicht aufgel÷stes Token (0A000CBD) "void __cdecl pcl::console::print(enum pcl::console::VERBOSITY_LEVEL,char const *,...)" (?print@console@pcl@ @$$FYAXW4VERBOSITY_LEVEL@12@PBDZZ)。D:\Documents\コード\PCL_cpp\pcl_cpp\pcl_cpp\pcl_registration.obj pcl_cpp
Fehler 30 エラー LNK2001: Nicht aufgel÷stes externes Symbol ""public: virtual int __thiscall pcl::PCDReader::readHeader(class std::basic_string,class std::allocator > const &,struct sensor_msgs::PointCloud2 &,class Eigen ::Matrix &,class Eigen::Quaternion &,int &,int &,unsigned int &,int)" (?readHeader@PCDReader@pcl@@UAEHABV?$basic_string@DU?$char_traits@D@std@@V ?$allocator@D@2@@std@@AAUPointCloud2@sensor_msgs@@AAV?$Matrix@M$03$00$0A@$03$00@Eigen@@AAV?$Quaternion@M$0A@@8@AAH4AAIH@Z) "。D:\Documents\コード\PCL_cpp\pcl_cpp\pcl_cpp\pcl_registration.obj pcl_cpp
Fehler 31 エラー LNK2001: Nicht aufgel÷stes externes Symbol ""public: virtual int __thiscall pcl::PCDReader::read(class std::basic_string,class std::allocator > const &,struct sensor_msgs::PointCloud2 &,class Eigen ::Matrix &,class Eigen::Quaternion &,int &,int)" (?read@PCDReader@pcl@@UAEHABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2 @@std@@AAUPointCloud2@sensor_msgs@@AAV?$Matrix@M$03$00$0A@$03$00@Eigen@@AAV?$Quaternion@M$0A@@8@AAHH@Z)". D:\Documents\コード\PCL_cpp\pcl_cpp\pcl_cpp\pcl_registration.obj pcl_cpp
Fehler 32 エラー LNK2001: Nicht aufgel÷stes externes Symbol ""void __cdecl pcl::console::print(enum pcl::console::VERBOSITY_LEVEL,char const *,...)" (?print@console@pcl@@ $$FYAXW4VERBOSITY_LEVEL@12@PBDZZ)". D:\Documents\Code\PCL_cpp\pcl_cpp\pcl_cpp\pcl_registration.obj pcl_cpp
エラーはドイツ語で「Nicht aufgelöstes」は未解決を意味します 適切なインストールに関するコメントについて... 私は確信が持てなかったので、もう一度ダウンロードしてインストールしました。その64ビット「Windows MSVC 2010(64ビット)」のフルインストーラー インストール後、同じ結果が得られます。
callback - VTKコールバックをQtスロットに接続します
VTK
コールバックをスロットに接続しようとしているQt
ので、コールバックが発生したときにスロットが起動されます。
(ポイントクラウドライブラリ、PCLから)QVTKWidget
に追加されたポイントクラウドをレンダリングするためにを使用しています。PCLVisualizer
いくつかのコードを示しましょう:
PointCloud.h
PointCloud.cpp
これはうまく機能します。クラウドレンダリングが開始されると、PointCloud --loadCallback startが出力され、レンダリングが終了してクラウドが表示されると、メッセージPointCloud--loadCallbackendedが出力されます。
さて、終了メッセージを印刷するだけでなく、Qt
スロットも発射したいと思います。vtkEventQtSlotConnect
コールバックをスロットに接続するための正しい選択であると思われるので、私はそのためにクラスを使用しようとしています。
PointCloud.hの新機能
PointCloud.cppの新機能
ビジュアライザー->addPointCloudを呼び出す前に、PointCloud :: load()に追加されました
これらの追加により、コールバック内のメッセージは出力されますが、test()
スロット内のメッセージは表示されません。
私が間違っていることについて何か考えはありますか?
編集
VTK
私が見たコールバックの例でvtkRendeWindowInteractor
は、コールバックを管理するためにaが使用されています。ただし、コールバックオブザーバーを追加すると、レンダリングウィンドウに直接追加するほど正確ではありません。
callback - コールバック関数のエラー
Point Cloud Library API を使用して、キーボード コールバック関数を 3D ビューアに登録しようとしています。
これを行うには、次のようにします。
しかし、次のエラー メッセージが表示されます。
エラーメッセージを理解しようとしています。私は何を意味するかを理解していますが、何void
を意味しますか??void *
void(*)(...)
void(RailExtraction< pcl::PointXYZI >::*>(...)
visual-c++ - CmakeはVisualStudios10amd64のプロジェクトを構成できません
私はCMAKEにx64アーキテクチャ用のmsvc10ExpressEditionのプロジェクトを作成させようとしています。MSVC2010ExpressとWindowsSDK7.1の両方をインストールしています。
CMakeを起動すると、通常は32ビットプロジェクトを作成できますが、64ビットプロジェクトを作成できません。また、Windows SDKコマンドプロンプト(cl cmdはx64バージョンにマップされます)内からCMAKEを起動しようとしましたが、それでも次のように失敗します。
c++ - サブクラスオブジェクトへのスーパークラス参照
クラスを自分のバージョンで上書きしてから、そのクラスへのスーパークラス参照を作成しようとしていますが、コンパイルエラーが発生します。これが私のコード構造です
ファイル:RailExtractionInteractorStyle.h(これはスーパークラスPCLVisualizerInteractorを継承する私のサブクラスです)
ファイル:RailExtractionInteractor.cpp:
ファイル:CloudPointPicker.hpp(RailExtractionInteractorStyleクラスを使用する任意のクラス)
CloudPointPickerコンストラクターのステートメントにより、次のエラーが発生します。
私は何が間違っているのですか?
c++ - 継承を使用して複数の並列階層 C++ でリダイレクトする
質問の要約のベストショットは次のとおりです。
複数の個別のクラスが複数の個別の基本クラスからそれぞれを継承する場合、継承機構を使用して、これらの複数の基本クラスからオブジェクトをパラメーターとして受け取る関数を作成するにはどうすればよいですか?
しかし、例で説明する方が良いでしょう。
API で次のクラスを提供するライブラリがあります。
これらのクラスは、使用するアプリケーションからテンプレートの複雑さを隠すためにあります。実装にはテンプレートが含まれます。
問題は、次のような関数が必要なことです:
関数が内部にある場合、 (動的キャストのリストなしで)AImpl
権利Type2
を自動的に選択する方法がないため、継承機構はここではあまり役に立たないようです。BImpl
これまでの私の最善の解決策は、クラスの 1 つを 2 回テンプレート化することです。
A
しかし、このアプローチは、いくつかの任意にテンプレート化されたインスタンス化を組み合わせて使用すると便利な状況には拡張されないようです(これには、パラメーターが実際に- または前述のリストB
であることが確実な場合にのみ機能する動的キャストが必要です)キャストの)。insta
AImpl<Type2>
A
andのユーザーに複雑さを加えることなく、B
ここでやろうとしていることを実行できますか、それとももっと慣用的なアプローチがありますか?
ありがとうございます。
編集
これは Bart van Ingen Schenau の回答に照らして無関係かもしれませんが、Nawaz と Andy Prowl の質問に応えて、次のサンプル ファイルを作成しました。PCL ライブラリが必要ですが、動作するコードです (ただし、私が達成しようとしているものの縮小例です)。
ご意見をお寄せいただきありがとうございます。
このクラスは、上と上にFeatures
類似しています。質問にもPCLタグを追加しました。A
Keypoint
B
c++ - PCL: 方向線をプロットする方法
ポイント クラウドとオブジェクトを構築し、ポーズを推定しました。中心点 (xyz) からポーズ (ピッチ、ヨー、ロール) の方向を指す方向線を視覚化に追加したいと考えています。
ただし、このオンラインの例を見つけることができず、pcl ライブラリに非常に慣れていません。
法線のプロットの例を見てきましたが、これは異なります。
どんな助けでも大歓迎です。
ありがとう