情報詳細Q:3D点群のマッチングでサーフェスマッチングを使っています。サーフェスマッチングでうまくモデルにマッチングしません。何が原因でしょうか。A:サーフェスマッチングでマッチングがうまくいかない場合はまずは以下を確認してください。①モデルを確認する■外れ値がないか確認する create_surface_model でサンプリングされた点群は、 get_surface_model_param により、値 'sampled_model' を使って取得できます。 オブジェクトモデルの輪郭をなす点群に極端な外れ値が含まれている場合はRelSamplingDistanceなどを調整して取り除くようにします。 ただし、RelSamplingDistance を減らすと、サンプリングされる点の数が増え安定性が向上しますが、処理速度が遅くなります。 逆にRelSamplingDistance を増やすと、点の数が減り安定性が低下しますが、処理速度が速くなります。■スケールがあっているか確認する read_object_modelやセンサーから取得した点群データがミリメートルなのかメートルなのか、単位を確認する。 シーンのデータとモデルの間でスケールが異なっているとマッチングに失敗してしまいます。■法線の向きを確認する サーフェスマッチングは点群の法線を使用するため、シーンとモデルで法線の向きを合わせる必要があります。 CADデータを使用する際には特に注意が必要で、read_object_modelで読み込む際に'invert_normals'というパラメータを有効化することで、 法線の方向を逆向きにして読み込むことができます。■法線の長さを確認する サーフェスマッチングに使用する3Dオブジェクトにあらかじめ法線が設定されている場合、法線の長さが1である必要があります。②マッチング結果を確認する■どの段階までマッチングしているのか確認する find_surface_modelのマッチングは3段階で行われています。 a.概略マッチング:シーン内のオブジェクトモデルインスタンスの大まかな姿勢が 検索されます。 b.概略姿勢修正:手順2では、前の手順で検出した大まかな姿勢をさらに修正します。 c.精密姿勢修正: 前の手順で検出された姿勢を正確に修正します。 a→b→cと順に詳細なマッチングになりますので、どの段階でマッチングしていないのかを確認し、パラメータを調整します。 b(概略姿勢修正)は、デフォルトで有効です。無効にするには、 一般パラメーター 'sparse_pose_refinement' を 'false' に設定します。c(精密姿勢修正)はデフォルトで有効です。無効にするには、一般パラメーター 'dense_pose_refinement' を'false' に設定します。 ※ a、b、cで返ってくるScoreの値も異なりますので、小さなスコアで確認するとわかりやすいかと思います。 (モデルが大きかったりたくさん検出されたりすると時間かかるので注意が必要です)18.05 Progress以降ではdebug_find_surface_modelというプロシージャを使用することができます。モデルとシーンのデータに異常がないかであったり、法線やマッチング結果を視覚化することができますので、こちらも活用してください。また、20.05 Progress以降ではサーフェスマッチングに関する技術資料が準備されました。Documentation.htmlのTechnical NotesのSurface-Based Matching(またはHALCONインストールディレクトリのdoc\pdf\surface_based_matching.pdf)もご参照ください。添付ファイルタイトルサーフェスマッチングでうまくマッチングしない場合URL 名000005650公開状況公開済み検証状況公開済み