Main Content

uavScenario

UAV シミュレーション シナリオの生成

R2020b 以降

    説明

    uavScenario オブジェクトは、3-D 環境内の固定メッシュ、UAV プラットフォーム、およびセンサーで構成されるシミュレーション シナリオを生成します。

    作成

    scene = uavScenario は、既定のプロパティ値をもつ空の UAV シナリオを作成します。既定の慣性座標系は、北-東-下 (NED) 座標系と東-北-上 (ENU) 座標系です。

    scene = uavScenario(Name,Value) は、1 つ以上の Name,Value のペアの引数を使用して、プロパティをもつ uavScenario オブジェクトを構成します。Name はプロパティ名で、Value は対応する値です。Name は引用符で囲む必要があります。名前と値のペアの引数を複数、任意の順序で、Name1,Value1,...,NameN,ValueN のように指定できます。指定されていないプロパティはすべて既定値を取ります。

    この構文を使用して、UpdateRateStopTimeHistoryBufferSizeReferenceLocation、および MaxNumFrames の各プロパティを指定できます。uavScenario オブジェクトのその他のプロパティは指定できず、読み取り専用です。

    プロパティ

    すべて展開する

    シミュレーションの更新頻度。正のスカラー (Hz 単位) として指定します。オブジェクト関数 advance を使用する場合、シナリオのステップ サイズは更新頻度の逆数と等しくなります。

    例: 2

    データ型: double

    シミュレーションの終了時間。非負のスカラーとして指定します。シナリオが終了時間に達すると、その進行が停止します。

    例: 60.0

    データ型: double

    シナリオに保存される最大ステップ数。1 より大きい正の整数として指定します。このプロパティは、シナリオに保存されるプラットフォーム姿勢の座標系の最大数を決定します。シミュレーションのステップ数がこのプロパティの値を超えた場合、シナリオには最新のステップのみが保存されます。

    例: 60

    データ型: double

    測地座標でのシナリオの原点。[latitude longitude altitude] の形式のスカラーの 3 要素ベクトルとして指定します。latitudelongitude は測地座標 (度単位) です。altitude は、WGS84 準拠楕円体から上の高さ (m 単位) です。

    データ型: double

    シナリオ内の座標系の最大数。正の整数として指定します。シナリオに追加する慣性座標系、プラットフォーム、およびセンサーの数の和は、このプロパティの値以下でなければなりません。

    例: 15

    データ型: double

    この プロパティ は読み取り専用です。

    現在のシミュレーション時間。非負のスカラーとして指定されます。

    データ型: double

    この プロパティ は読み取り専用です。

    シナリオが実行中かどうかを示します。true または false として指定されます。シナリオのシミュレーションを開始すると、終了時間に達するまで実行されます。

    データ型: logical

    この プロパティ は読み取り専用です。

    シナリオにあるすべての座標系間の変換情報。transformTree オブジェクトとして指定します。このプロパティは、シナリオに関連付けられた慣性座標系、プラットフォームの座標系、およびセンサーの座標系の間の変換情報を保持します。

    データ型: object

    この プロパティ は読み取り専用です。

    シナリオでの慣性座標系の名前。string ベクトルとして指定します。

    データ型: string

    この プロパティ は読み取り専用です。

    シナリオの UAV プラットフォーム。uavPlatform オブジェクトの配列として指定します。

    シナリオの静的メッシュ。extendedObjectMesh オブジェクトの配列として指定します。

    オブジェクト関数

    setupPrepare UAV scenario for simulation
    addCustomTerrainAdd custom terrain data
    addMeshAdd new static mesh to UAV scenario
    addInertialFrameDefine new inertial frame in UAV scenario
    advanceAdvance UAV scenario simulation by one time step
    copyCopy UAV scenario
    updateSensorsUpdate sensor readings in UAV scenario
    removeCustomTerrainRemove custom terrain data
    restartReset simulation of UAV scenario
    showVisualize UAV scenario in 2-D
    show3DVisualize UAV scenario in 3-D
    terrainHeightReturns terrain height in UAV scenarios
    targetPosesFind positions, orientations, velocities, angular velocities, and accelerations of targets relative to ego UAV platform

    すべて折りたたむ

    UAV シナリオを作成し、そのローカル原点を設定します。

    scene = uavScenario("UpdateRate",200,"StopTime",2,"ReferenceLocation",[46, 42, 0]); 

    MAP という慣性座標系をシナリオに追加します。

    scene.addInertialFrame("ENU","MAP",trvec2tform([1 0 0])); 

    シナリオに地面メッシュを 1 つ、円柱の障害物メッシュを 2 つ追加します。

    scene.addMesh("Polygon", {[-100 0; 100 0; 100 100; -100 100],[-5 0]},[0.3 0.3 0.3]);
    scene.addMesh("Cylinder", {[20 10 10],[0 30]}, [0 1 0]); 
    scene.addMesh("Cylinder", {[46 42 5],[0 20]}, [0 1 0], "UseLatLon", true); 

    シナリオ内に、指定されたウェイポイント軌跡をもつ UAV プラットフォームを作成します。UAV プラットフォームのメッシュを定義します。

    traj = waypointTrajectory("Waypoints", [0 -20 -5; 20 -20 -5; 20 0 -5],"TimeOfArrival",[0 1 2]); 
    uavPlat = uavPlatform("UAV",scene,"Trajectory",traj); 
    updateMesh(uavPlat,"quadrotor", {4}, [1 0 0],eul2tform([0 0 pi])); 
    addGeoFence(uavPlat,"Polygon", {[-50 0; 50 0; 50 50; -50 50],[0 100]},true,"ReferenceFrame","ENU"); 

    UAV プラットフォームの前部に INS センサーを取り付けます。

    insModel = insSensor(); 
    ins = uavSensor("INS",uavPlat,insModel,"MountingLocation",[4 0 0]); 

    3-D でシナリオを可視化します。

    ax = show3D(scene); 
    axis(ax,"equal"); 

    シナリオのシミュレーションを実行します。

    setup(scene); 
    while advance(scene) 
        % Update sensor readings 
        updateSensors(scene); 
    
        % Visualize the scenario 
        show3D(scene,"Parent",ax,"FastUpdate",true); 
        drawnow limitrate 
    end 

    Figure contains an axes object. The axes object with xlabel East (m), ylabel North (m) contains 4 objects of type patch.

    この例では、UAV シナリオに地形とカスタムの建物メッシュを追加する方法を説明します。

    地形表面の追加

    n39_w106_3arc_v2.dt1 DTED ファイルの地形標高データに基づく地形表面を追加します。

    addCustomTerrain("CustomTerrain","n39_w106_3arc_v2.dt1");
    scenario = uavScenario("ReferenceLocation", [39.5 -105.5 0]);
    addMesh(scenario,"terrain", {"CustomTerrain", [-200 200], [-200 200]}, [0.6 0.6 0.6]);
    show3D(scenario);

    Figure contains an axes object. The axes object with xlabel East (m), ylabel North (m) contains an object of type patch.

    建物の追加

    頂点とポリゴン メッシュを使用して、2 棟のカスタム建物をシナリオに追加します。各建物の底面の標高を取得するには、関数terrainHeightを使用します。

    buildingCenters = [-50, -50; 100 100];
    
    buildingHeights = [30 100];
    buildingBoundary = [-25 -25; -25 50; 50 50; 50 -25];
    for idx = 1:size(buildingCenters,1)
        buildingVertices = buildingBoundary+buildingCenters(idx,:);
        buildingBase = min(terrainHeight(scenario,buildingVertices(:,1),buildingVertices(:,2)));
        addMesh(scenario,"polygon", {buildingVertices, buildingBase+[0 buildingHeights(idx)]}, [0.3922 0.8314 0.0745]);
    end
    
    show3D(scenario);
    view([0 15])

    Figure contains an axes object. The axes object with xlabel East (m), ylabel North (m) contains 3 objects of type patch.

    カスタム地形の削除

    インポートしたカスタム地形を削除します。

    removeCustomTerrain("CustomTerrain")

    バージョン履歴

    R2020b で導入