カメラ付きステレオビジョン、ライダー、飛行時間センサーなど、深度認識システムの開発
にはさまざまな3Dセンサーオプションがあります。各オプションには長所と短所があります。
ステレオ・システムは、通常、低コストで屋外での使用に十分な堅牢性を備え、高解像度
のカラー・ポイント・クラウドを提供できます。
この記事では、まずステレオビジョンシステムの主な部分について説明し、その後、既製のハードウェアコンポーネントとオープンソースソフトウェアを使用して、独自のカスタムステレオカメラを作成する方法を説明します。このセットアップは組み込み用途に焦点を当てているため、ホストコンピューターを必要とせずに、あらゆるシーンの深度マップをリアルタイムで計算します。別の記事では、スペースの制約が少ないホストコンピューターで使用するカスタムステレオシステムを構築する方法について説明します。
このようなオンボード処理システムを活かすことができる他のアプリケーションは、オブジェクト検出です。ディープラーニングの進歩により、オブジェクト検出をアプリケーションに追加することは比較的簡単になりましたが、専用のGPUリソースが必要なため、多くのユーザーにとって致命的なものになっています。この記事では、高価なホストGPUを必要とせずにステレオビジョンアプリケーションにディープラーニングを追加する方法についても説明します。この記事のサンプルコードとセクションをステレオビジョンとディープラーニングに分けましたので、アプリケーションでディープラーニングが必要ない場合は、ディープラーニングのセクションをスキップしてください。
ステレオビジョンとは、2つの視点からシーン内の情報を比較し、デジタル画像から3D情報を抽出することです。2つの画像平面におけるオブジェクトの相対位置は『カメラ』からのオブジェクトの深度に関する情報を提供します。
ステレオビジョンシステムの概要を図1に示しています。このシステムは、以下のように重要なステップで構成されています。
ディープラーニングは、脳の構造と機能に触発されたアルゴリズムを扱う機械学習のサブフィールドです。それは人間の脳の学習能力を模倣しようとします。ディープラーニングアルゴリズムは、物体認識、分類、セグメンテーションなどの複雑な操作を効率的に実行できます。とりわけ、ディープラーニングにより、機械はそれに供給された画像内の人や物体を認識できます。私たちが興味を持っているアプリケーションは、人の検出です。独自のディープラーニングアルゴリズムをトレーニングするには、ラベル付けされた大量のトレーニングデータが必要ですが、オープンソースの事前トレーニング済みモデルを使用すると、誰でも簡単にこれらのアプリケーションを開発できます。
ディープラーニングにも高性能 GPUが必要ですが、TX2用のQuartet ソリューションには、ほんの一部のフォームファクターと消費電力で、より大きなGPUのすべての機能が付属しています。TX2でディープラーニングモデルを実行することには、モビリティの付加価値でもあり、人を検出して人を避ける必要があるモバイルロボットの完璧な候補です。
ステレオシステムの設計例を見てみましょう。動きの速い物体による動的な環境での移動ロボットアプリケーションの要件は次のとおりです。対象の対象サイズは2m、カメラから対象までの距離は3m、求められる精度は3mで1cmです。深度誤差は、以下によって求められます。ΔZ=Z²/Bf *Δd は、以下の要因に依存します。
・Zは範囲
・Bはベースライン(筐体のベース)です。
・fはピクセル単位の焦点距離で、カメラの視野と画像の解像度に関連しています。
これらの要件を満たすことができる、さまざまな設計オプションがあります。上記の対象のサイズと距離の要件に基づいて、特定のセンサーのレンズの焦点距離を決定できます。ベースラインと共に、上記の式を使用して3mでの予想される深度誤差を計算し、精度要件を満たしていることを確認します。
より長いベースラインを持つ低解像度カメラ、またはより短いの高解像度カメラを使用した2つのオプションを図2に示しています。最初のオプションは大型カメラですが、コンピュータ処理の必要性が低く、2番目のオプションは小型カメラで、コンピュータ処理の必要性が高くなります。モバイルロボットにとってはコンパクトなサイズがより望ましいため、このアプリケーションでは2つ目のオプションを選択しました。処理ニーズに対処するために強力なGPUを搭載したTX2用Quartet Embedded Solutionを使用できます。
この例では、IMX273 Sony Pregiusグローバルシャッターセンサーを使用して、ベースライン12cmのバーに、2台のBlackfly Sボードレベル1.6 MPカメラを取り付けます。どちらのカメラも、同様の6mmのSマウントレンズを備えています。
カメラは、2本のFPCケーブルを使用してTX2 カスタム・キャリア・ボード用のQuartet Embedded Solutionに接続します。左右のカメラを同期して画像を同時に捉えるには、2つのカメラを接続する同期ケーブルを制作します。図3に、カスタム埋め込みステレオシステムの前面図と背面図を示します。
a. Spinnaker
Teledyne FLIR Spinnaker SDKはQuartet Embedded SolutionsのTX2用にプレインストールされています。Spinnakerはカメラと通信する必要があります。
b. CUDAサポート付きOpenCV 4.5.2
使用しているステレオマッチングアルゴリズムであるSGMには、OpenCVバージョン4.5.1以降が必要です。この記事のコードを含むzipファイルをダウンロードし、StereoDepthフォルダーに解凍します。OpenCVをインストールするスクリプトはOpenCVInstaller.sh.です。ターミナルに次のコマンドを入力します。
cd ~/ StereoDepth
chmod +x OpenCVInstaller.sh
./OpenCVInstaller.sh
インストーラーが管理者パスワードの入力を求めます。OpenCV 4.5.2のインストールを開始します。OpenCVのダウンロードと構築には、2時間ほどかかる場合があります。
ステレオ画像を取り込み、キャリブレーションするコードは、“Calibration”フォルダー内にあります。SpinView GUIを使用して、左右のカメラのシリアル番号を特定します。設定では、右のカメラがマスター、左のカメラがスレーブです。マスターおよびスレーブカメラのシリアル番号をgraveStereoImages.cppファイルの60行目と61行目にコピーします。ターミナルで次のコマンドを使用して、実行可能なファイルを作成します。
cd ~/StereoDepth/Calibration
mkdir build
mkdir -p image/{left, right}
cd build
cmake ..
make
このリンクからチェッカーボードパターンを印刷し、平らな表面に取り付けてキャリブレーション対象として使用します。図5に示すように、較正中に最良の結果を得るには、SpinViewで自動露出をオフに設定し、チェッカーボードパターンをクリアにして、白い四角形が露出しすぎないように露出を調整します。キャリブレーション画像を収集した後、ゲインと露出をSpinViewで自動に設定することができます。
リアルタイムで差異を計算するコードは、“Depth”フォルダー内にあります。カメラのシリアル番号をlive_disparity.cpp ファイルの230行目と231行目にコピーします。最後に次のコマンドを使用して、実行可能なファイルを作成します。
cd ~/StereoDepth/Depth
mkdir build
cd build
cmake ..
make
“intrinsics.yml ” とキャリブレーションのステップで取得した “extrinsics.yml” ファイルをこのフォルダーにコピーします。リアルタイム深度マップデモを実行するには、次のように入力します。
Jetson-inference によって提供される DetectNet を使用して、画像フレーム内の人間を検出します。DetectNet には、オブジェクト検出用のディープラーニングモデルアーキテクチャを選択するオプションが付属しています。シングルショット検出(SSD)アーキテクチャと MobileNetV2 バックボーンを使用して、速度と精度の両方を最適化します。デモを初めて実行するとき、TensorRT はシリアル化されたエンジンを作成して推論速度をさらに最適化しますが、完了するまでに数分かかる場合があります。このエンジンは、さらに実行するためにファイルに自動的に保存されます。使用されるアーキテクチャは非常に効率的であり、~50fpsで検出モジュールを実行することが期待できます。人物検出機能とリアルタイムのステレオ深度のコードは、「DepthAndDetection」フォルダーにあります。カメラのシリアル番号を271行目と 272行目live_disparity.cppファイルにコピーします。最後に次のコマンドを使用して実行可能ファイルをビルドします。
cd ~/StereoDepth/DepthAndDetection
mkdir
buildcd
buildcmake ..
make
キャリブレーション手順で取得した「intrinsics.yml」ファイルと「extrinsics.yml」ファイルをこのフォルダにコピーします。リアルタイムの深度マップのデモを実行するには、次のように入力します。
レスターは、
これまで蓄積された豊富な実績とノウハウを活かし、
お客様に最適なソリューションをご提案いたします。
まずはお気軽にご相談ください。