Main Content

Unreal Engine から NVIDIA Jetson へのカメラ データ、深度データ、およびセマンティック セグメンテーション データのストリーミング

この例では、Simulink® の "Video Send" ブロックを使用して、シミュレートされたカメラ データ、深度データ、およびセマンティック セグメンテーション ラベル データを Unreal Engine® シーンから NVIDIA® Jetson™ ハードウェアにストリーミングする方法を示します。次に、受信データ ストリームごとに個別のモデルを展開して、Jetson プラットフォームに接続されたモニター上で受信データ ストリームを可視化する方法を示します。展開されるモデルには、MATLAB® Coder™ Support Package for NVIDIA Jetson and NVIDIA DRIVE® Platforms の "Network Video Receive" ブロックと "SDL Video Display" ブロックが含まれます。

Simulink からのデータ ストリームの送信

モデル StreamFromUnrealToJetsonExampleModel を開きます。

open_system("StreamFromUnrealToJetsonExampleModel.slx")

このモデルは、Unreal Engine の米国の街区シーンをシミュレートします。シーン内では、モデル ワークスペース内の定義済みの位置と方向の値によって定義された軌跡を UAV がたどります。UAV にはオンボード カメラが搭載されています。カメラは、シーン内のオブジェクトに対応するラベルの RGB イメージ、深度マップ、およびセマンティック セグメンテーション マップを出力するSimulation 3D Camera (UAV Toolbox)ブロックによってモデル化されます。Simulation 3D Scene Configuration (UAV Toolbox)ブロックの [Sample time] パラメーターで定義されているように、カメラのフレーム レートは 30 フレーム/秒 (fps) になるように構成されます。3 つの "Video Send" ブロックは、対応するデータを Jetson ハードウェアにストリーミングします。これらのブロックの IP アドレスとポート番号の値を、Jetson ハードウェアとネットワークの設定に対応する値に変更します。3 つのブロックすべての [Max frame time (ms)] パラメーターが、30 fps の入力フレーム レートに基づいて 34 ミリ秒に設定されていることに注意してください。3 つのブロックはすべて、同じリモート IP アドレスの異なるポートにストリーミングするように構成されています。

3 つのデータ ストリームのブロック パラメーター構成を検査します。深度マップは、非可逆再スケーリングを使用して uint16 データ型に変換され、VP9 圧縮形式の 16 ビット グレースケール イメージとしてストリーミングするように構成されます。さらに、segLabels2RGBImage MATLAB Function ブロックは、セグメンテーション ラベル マップをカメラ イメージ ストリームに類似した RGB 値の行列として、VP8 圧縮形式でストリームに変換することに注意してください。ラベル可視化向けのカラーマップの詳細については、Depth and Semantic Segmentation Visualization Using Unreal Engine Simulation (UAV Toolbox)を参照してください。

StreamFromUnrealToJetsonExampleModel を実行して、Jetson へのデータのストリーミングを開始します。

sim("StreamFromUnrealToJetsonExampleModel.slx");

Jetson でのデータ ストリームの受信および可視化

Jetson にストリーミング中のデータを可視化するには、3 つの個別のモデルを Jetson ハードウェアに個別に展開しなければなりません。これは、Simulink モデルに含めることができる "SDL Video Display" ブロックが 1 つのみであるのに、3 つの個別のデータ ストリームが存在するためです。最初に、モデル VideoStreamReceiveOnJetsonExampleModel を開きます。

open_system("VideoStreamReceiveOnJetsonExampleModel.slx")

"Network Video Receive" ブロックのポート番号と圧縮パラメーターが、対応する "Video Send" ブロック ストリーミング カメラ イメージのものと同じであることに注意してください。サンプル時間は、データ ストリームのサンプル時間以下の任意の値にすることができます。ツールストリップの [ハードウェア] タブで、[ハードウェア設定] を選択します。[ハードウェア ボード設定]、[Target hardware resources] で、[Device Address]、[Username]、および [Password] フィールドに、お使いの Jetson ボードに対応する値を入力します。次に、[ハードウェア] タブの [展開] セクションで[ビルド、展開、起動] を選択して、モデルのコードを生成し、Jetson に展開します。[SDL Video Display] ウィンドウが開き、Jetson に接続されたモニターに RGB イメージ ストリームが表示されます。

シミュレーションの完了後にストリーミングを再開するには、StreamFromUnrealToJetsonExampleModel を再実行します。次に、モデル DepthStreamReceiveOnJetsonExampleModel, を開いて展開し、Jetson に接続されたモニターで深度マップ ストリームを可視化します。

sim("StreamFromUnrealToJetsonExampleModel.slx");
open_system("DepthStreamReceiveOnJetsonExampleModel.slx")

シミュレーションの完了後にストリーミングを再開するには、StreamFromUnrealToJetsonExampleModel を再実行します。次に、モデル LabelStreamReceiveOnJetsonExampleModel を開いて展開し、Jetson に接続されたモニターでセマンティック セグメンテーション ラベル マップのストリームを可視化します。

sim("StreamFromUnrealToJetsonExampleModel.slx");
open_system("LabelStreamReceiveOnJetsonExampleModel.slx")