空間マッピングのベストプラクティス
Last updated: August 13, 2026
ZED SDKの空間マッピングモジュールは、スタンドアロンのZEDfuアプリケーションからも利用でき、シーンやオブジェクトの3Dスキャンを可能にします。複数の視点から取得した画像、深度、位置追跡データを時間経過に沿って統合することで、カラー3Dモデル(メッシュまたは融合点群)が作成されます。
モジュールの詳細については、空間マッピングのドキュメントを参照してください。ZEDfuツールについては、ZEDfuのドキュメントを参照してください。
対応カメラ
空間マッピングには、ZED 2/2i、ZED Mini、ZED X、ZED X Mini、ZED X Nanoなど、慣性センサー(IMU)を搭載したステレオカメラが必要です。
以下のカメラは対応していません:
- 内蔵IMUを搭載していない旧型のZED(生産終了品);
- モノキュラーカメラであるZED X One GS/4K/S。なお、Dual ZED X One Virtual Stereo Cameraのセットアップには対応しています。ZEDfuでは、ローカルストリーミング入力を使用してデータを受信してください。
スキャン時のベストプラクティス
- ゆっくりと滑らかに動かしてください。 速い動きはモーションブラーを引き起こします。ぼやけた画像は、位置追跡と再構築された3Dジオメトリの両方の品質を低下させます。
- シーンが十分に明るいことを確認してください。 光量の少ない領域では深度ノイズが増加し、モデルにアーティファクトや不正なサーフェスが発生する可能性があります。
- テクスチャのあるシーンを優先してください。 テクスチャのない均一な表面(むき出しの壁、ガラスなど)は、ステレオマッチングと追跡に利用できる視覚情報がほとんどありません。ニューラル深度モードにより、屋内スキャンは以前のSDKバージョンよりもはるかに改善されていますが、豊かなテクスチャがあると結果はさらに向上します。
- 反射性および透明な物体は避けてください。 鏡、ガラス、光沢のある表面では、無効な深度測定値が生成されます。
- 表面から適切な距離を保ってください。 カメラモデルの最小深度範囲より近づかないでください。また、距離が離れるほど深度の精度が低下することにも注意してください。このため、マッピング範囲は20 mに制限されています。
- ループを閉じてください。 部屋や物体をスキャンするときは、以前にスキャンした領域を再訪するようにしてください。これにより、位置追跡によるマップの改良が容易になります。エリアメモリを有効にすると、SDKは以前にマッピングした領域を認識し、追跡の一貫性を向上させることができます。VSLAMマッピングチュートリアルを参照してください。
- 追跡ステータスを確認してください。 ZEDfuで位置追跡ステータスが
SEARCHINGに切り替わった場合は、SDKが再位置推定を行い、マップ生成を続行できるように、カメラを既にマッピングされた領域の方向へ戻してください。
適切な設定の選択
- 深度モード: ZEDfuでは、
NEURAL LIGHT(ライブパフォーマンスに最適)、NEURAL(品質とパフォーマンスのバランスに優れる)、NEURAL PLUS(最高品質、SVOファイルのオフライン処理に推奨)から選択できます。 - マップタイプ: スキャン後にフィルタリングやテクスチャリングが可能な、防水性のある三角形の集合を生成するには
MESHを、色付きの融合点群を生成するにはPOINT CLOUDを選択します。点群形式では、各点に付加される色情報のため、より多くのメモリを使用します。 - マッピング解像度: 解像度は1 cmから12 cmの間で設定できます。高い解像度ではより詳細なマップが生成されますが、より多くのメモリと処理能力が必要となり、マップの更新速度が低下します。アプリケーションに適した最低解像度を使用してください。APIでは、
HIGH(2 cm、小規模エリア)、MEDIUM(5 cm、バランス型)、LOW(8 cm、大規模エリアまたは衝突メッシュ)のプリセットが提供されています。 - マッピング範囲: マップに統合される深度データの範囲は2 mから20 mの間で設定できます。範囲を広げると精度を犠牲にして大きなボリュームを迅速にキャプチャできます。範囲を狭めるとパフォーマンスが向上します。APIでは、
NEAR(3.5 m)、MEDIUM(5 m)、FAR(10 m)のプリセットが提供されています。 - メッシュフィルタリング: キャプチャ後にフィルタリングを行うと、幾何学的特徴を維持しながらポリゴン数を削減できます。
LOWでは穴を埋めて外れ値を除去し、MEDIUMとHIGHではさらにメッシュのデシメーションも実行します。さまざまなプリセットを試して、アプリケーションに最適なものを見つけてください。 - メッシュテクスチャリング: スキャン前にテクスチャオプションを有効にすると、左カメラの画像の一部が記録され、メッシュ表面に投影されます。これによりモデルの視覚品質が向上しますが、より多くの処理能力とメモリが必要になります。テクスチャリングはメッシュでのみ利用できます。
ライブスキャンまたはオフライン処理
ZEDfuを含む空間マッピングモジュールは、3種類の入力を受け付けます。
- ライブカメラ: 接続されたZEDステレオカメラによってリアルタイムでキャプチャされたデータ;
- ローカルストリーミング: ZEDローカルストリーミングサーバーを介してリモートカメラから受信したデータ;
- SVOファイル: カメラで記録され、後で処理されたデータ。 記録とオフライン処理の詳細。
ZEDfuでSVOファイルを処理する場合は、OFFLINEモードを有効にすることを推奨します。マップ生成の開始前にSVOファイル全体が前処理されるため、処理時間が長くなる代わりに、より高品質なマップが生成されます。NEURAL PLUS深度モードと組み合わせることで、可能な限り最高の3D再構成品質を提供するワークフローになります。
注: ZEDfuは生成されたマップをユーザーのホームディレクトリにあるZED/Meshesフォルダーに保存します。生成されたマップの完全なパスは、生成が完了したときにステータスバーに表示されます。
アプリケーションで空間マッピングAPIを使用する
ZEDfuで利用できるすべての機能は、ZED SDKを通じて独自のアプリケーションに統合できます。一般的なワークフローは次のとおりです。
- カメラを起動し、
enablePositionalTracking()で位置追跡を有効にします。 SpatialMappingParameters(解像度、範囲、マップタイプ、テクスチャ)を設定して、enableSpatialMapping()でモジュールを有効にします。- ループ内で
grab()を呼び出します。モジュールはバックグラウンドで画像、深度、ポーズを取り込みます。 extractWholeSpatialMap()でマップを一度取得するか、非同期のrequestSpatialMapAsync()/getSpatialMapRequestStatusAsync()/retrieveSpatialMapAsync()関数を使用して継続的に取得します。- 必要に応じて
Mesh::filter()およびMesh::applyTexture()でメッシュを改良し、その後save("mesh.obj")で保存します。 getSpatialMappingState()でモジュールを監視します。FPS_TOO_LOWは、一貫したマッピングに必要なフレームレートにシステムが到達できないことを示し、NOT_ENOUGH_MEMORYはメモリ制限に達したことを示します。どちらの場合も、モジュールは新しいデータの統合を停止しますが、3Dモデルは引き続き抽出できます。
空間マップのリクエストと取得はリソースを大量に消費します。パフォーマンスを向上させるには、新しい空間マップを頻繁にリクエストしないでください。
詳細については、以下を参照してください。