Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

Unreal Engine を使用した未踏環境における UAV の安全な着陸のシミュレーション

この例では、Unreal Engine® を使用して、未踏環境における無人航空機 (UAV) の安全な着陸操作をシミュレートする方法を説明します。未踏環境で安全に動作するには、UAV は自律的に安全に着陸できる機能を備えている必要があります。UAV がバッテリーやナビゲーション システムの異常などの重大な異常を検出した場合、UAV は環境をスキャンし、安全な着陸ゾーンを決定し、障害物に衝突することなく安全に着陸できなければなりません。

この例では、LiDAR センサー データを使用して未踏環境のマップを作成し、マルチローター UAV 用の安全な着陸領域を決定します。

安全な着陸操作は、次の操作モードで構成されます。

  1. Mission Mode — UAV はミッション ウェイポイントで指定された飛行経路を飛行します。

  2. Emergency Mode — UAV は LiDAR センサーから収集された点群データから環境マップを作成します。

  3. Hover and Detect Mode — UAV はホバリングし、マップを使用して安全な着陸ゾーンを特定します。

  4. Land Mode — 安全な着陸ゾーンが決定されると、UAV は着陸します。

この例では、Simulink® モデルに組み込まれている Stateflow® チャートを使用して安全着陸操作モードを実装します。

次の手順に従って安全な着陸操作をシミュレートします。

  1. Simulink® モデルで UAV ミッション ウェイポイントを指定します。

  2. Unreal Engine® で Simulink モデルと Suburban シーンとのインターフェイスをとります。

  3. LiDAR センサーを搭載した UAV を追加します。

  4. 緊急時間を指定します。

  5. Simulink モデルを実行します。

モデルの概要

uavSafeLanding.slx は次のサブシステムで構成されます。

  1. Safe Landing Stateflow Chart — Stateflow チャートを使用して、安全な着陸操作のさまざまな操作モードを実装します。

  2. 3D Simulation Environment — Unreal Engine® を使用して 3D シミュレーション環境をレンダリングします。

  3. 3D Lidar Sensor — Unreal Engine® を使用してレンダリングされた 3D シミュレーション環境で任意の LiDAR センサーをシミュレートします。

  4. Plant + Controller — UAV プラント モデルと位置コントローラーをシミュレートします。

Simulink モデルを開きます。

open_system("uavSafeLanding.slx") 

NED フレームでミッション ウェイポイントを指定します。

mission = [41 15.3 0; 41 15.3 -50; 100 -100 -50; 100 -100 0];

Emergency Time ブロックの [Emergency time (s)] パラメーターを指定して、緊急モードがトリガーされる時間を秒単位で設定します。

Safe Landing Stateflow Chart

この例では、Stateflow® チャート ステートを使用して各安全着陸操作モードを表します。

チャートは次のステートで構成されます。

  • MissionMode — Mission Mode ステートを表します。このステートでは、UAV は緊急モードがトリガーされるまで、離陸時からのミッション ウェイポイントで指定された飛行経路を飛行します。UAV はWaypoint Followerブロックを使用して、現在の姿勢、前方注視距離、および指定されたミッション ウェイポイントに基づいて、Controller サブシステムの目的の姿勢を計算します。

  • EmergencyMode — Emergency Mode ステートを表します。Emergency Mode (mode == 2) は、[Emergency time (s)] パラメーターで指定された時間にトリガーされます。このモードでは、UAV は LiDAR センサーを使用して点群データを収集し、未踏環境のマップを作成します。マップの作成が完了すると、このモードは isMapDonetrue に設定し、UAV は Hover and Detect Mode に遷移します。

  • HoverAndDetect — Hover and Detect Mode ステートを表します。このステートでは、UAV はホバリングし、生成されたマップを使用して安全な着陸エリアを決定します。詳細については、Determine Safe Landing Area for Aerial Vehicles (Lidar Toolbox)の例を参照してください。UAV が安全な着陸エリアを決定すると、このモードは isDetectedtrue に設定し、Land Mode をトリガーします。次のマップでは、UAV (緑の点) と安全な着陸ゾーン (赤の点) が示されています。

abcdefg.png

  • LandMode — Land Mode ステートを表します。このステートでは、UAV は水平に移動し、着陸エリアの上でホバリングします。着陸エリアに到達した後、UAV は垂直に降下して着陸します。

3D Simulation Environment

このサブシステムは、Unreal Engine® 環境でシーンと UAV を構成します。sim3d.maps.Map.Server から Suburban シーンをダウンロードして、Simulation 3D Scene Configurationブロックを構成します。Simulation 3D UAV Vehicleブロックでクワッドローター ビークルを選択します。このサブシステムの構成の詳細については、Simulate Simple Flight Scenario and Sensor in Unreal Engine Environmentの例を参照してください。

sim3d.maps.Map.server;
        MapName                        Description                    Version
    ________________    __________________________________________    _______

    "Suburban scene"    "a suburban area beyond the city's border"      "1"  
sim3d.maps.Map.download("Suburban scene");
Map is successfully downloaded and is up-to-date
sim3d.maps.Map.local;
        MapName                        Description                    Version
    ________________    __________________________________________    _______

    "Suburban scene"    "a suburban area beyond the city's border"      "1"  
set_param("uavSafeLanding","SimulationCommand","update");
set_param("uavSafeLanding/Simulation 3D Scene Configuration","SceneDesc","Suburban scene");

3D Lidar Sensor

Simulation 3D Lidar ブロックを使用して、LiDAR センサーを UAV に取り付けます。航空アプリケーションで一般的に使用される VLP-16 Velodyne LiDAR センサー [1] をモデル化するためにパラメーターを設定します。LiDAR センサーには、センサーが地面をスキャンできるように 90 度の相対ピッチ回転があることに注意してください。

LidarParams.jpglidarMount.png

プラントおよびコントローラー

Plant + Controller サブシステムは、クワッドローター プラント モデルとコントローラーで構成されます。クワッドローター プラントは、Guidance Modelブロックを使用した低次元化されたマルチローター UAV モデルを表し、制御と環境の入力に基づいて UAV の状態を推定します。このコントローラーは、外側の PID 位置コントローラーと内側の姿勢 PID コントローラーで構成されます。このコントローラーは、目的の位置、目的のヨー、および UAV の状態からロール、ピッチ、ヨー、および推力の制御コマンドを計算します。

PlandAndController.jpg

UAV の安全な着陸のシミュレーション

シミュレーションを開始します。UAV は最初のウェイポイントから離陸し、後続のウェイポイントに移動します。UAV は、Emergency Mode が開始すると、安全な着陸ゾーンを計算して着陸します。

sim("uavSafeLanding.slx")
Warning: Method 'getInstance' is not defined for class 'CloneDetector.ExclusionEditorUIService' or is removed from MATLAB's search path.

Figure contains an axes object. The axes object contains an object of type scatter.

Figure contains an axes object. The axes object contains 3 objects of type scatter.

Figure UAV Animation contains an axes object. The axes object with xlabel North, ylabel West contains 5 objects of type patch, line.

ans = 
  Simulink.SimulationOutput:

                logsout: [1x1 Simulink.SimulationData.Dataset] 
                   tout: [191701x1 double] 

     SimulationMetadata: [1x1 Simulink.SimulationMetadata] 
           ErrorMessage: [0x0 char] 

まとめ

この例は、マルチローター UAV の安全な着陸操作の実装を示しています。LiDAR センサー データを使用して Unreal Engine® の未踏環境のマップが作成され、安全な着陸領域が決定されます。この例は、Stateflow® を使用して安全な着陸操作のさまざまなモードを実装する方法も示しています。

参考文献

[1] VLP-16 User Manual. https://velodynelidar.com/wp-content/uploads/2019/12/63-9243-Rev-E-VLP-16-User-Manual.pdf