Main Content

robotScenario

ロボット シミュレーション シナリオを生成

R2022a 以降

    説明

    robotScenario オブジェクトは、3 次元環境内の静的メッシュ、ロボット プラットフォーム、およびセンサーで構成されるシミュレーション シナリオを生成します。

    作成

    説明

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

    scenario = robotScenario(Name=Value) は、1 つ以上の名前と値の引数を使用してrobotScenario オブジェクトのプロパティを構成します。

    プロパティ

    すべて展開する

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

    例: 2

    データ型: single | double

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

    例: 60

    データ型: single | double

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

    例: 60

    データ型: single | double

    測地座標でのシナリオの原点。[latitude longitude altitude] の形式の 3 要素ベクトルとして指定します。latitude と longitude は測地座標 (度単位) です。altitude は WGS84 準拠楕円体を基準とした高度 (メートル単位) です。

    例: [46.017 7.750 1673]

    データ型: single | double

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

    例: 15

    データ型: single | double

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

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

    データ型: single | double

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

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

    データ型: logical

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

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

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

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

    データ型: string

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

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

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

    シナリオの衝突メッシュ。1 行 N 列の衝突オブジェクトの cell 配列として指定します。サポートされる衝突オブジェクトのタイプは、collisionBoxcollisionCapsulecollisionCylindercollisionMesh、および collisionSphere です。

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

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

    オブジェクト関数

    addInertialFrameDefine new inertial frame in robot scenario
    addMeshAdd new static mesh to robot scenario
    advanceAdvance robot scenario simulation by one time step
    binaryOccupancyMapCreate 2-D binary occupancy map from robot scenario
    restartReset simulation of robot scenario
    setupPrepare robot scenario for simulation
    show3DVisualize robot scenario in 3-D
    updateSensorsUpdate sensor readings in robot scenario

    すべて折りたたむ

    ロボット シナリオを作成します。

    scenario = robotScenario(UpdateRate=100,StopTime=1);

    地面とボックスをメッシュとして追加します。

    addMesh(scenario,"Plane",Size=[3 3],Color=[0.7 0.7 0.7]);
    addMesh(scenario,"Box",Size=[0.5 0.5 0.5],Position=[0 0 0.25], ...
            Color=[0 1 0])

    ENU 基準座標系を使用してロボット プラットフォームのウェイポイント軌跡を作成します。

    waypoint = [0 -1 0; 1 0 0; -1 1 0; 0 -1 0];
    toa = linspace(0,1,length(waypoint));
    traj = waypointTrajectory("Waypoints",waypoint, ...
                              "TimeOfArrival",toa, ...
                              "ReferenceFrame","ENU");

    TurtleBot 3 Waffle Pi ロボットの rigidBodyTree オブジェクトを loadrobot で作成します。

    robotRBT = loadrobot("robotisTurtleBot3WafflePi");

    軌跡をもつロボット プラットフォームを作成します。

    platform = robotPlatform("TurtleBot",scenario, ...
                             BaseTrajectory=traj);

    rigidBodyTree オブジェクトでプラットフォームのメッシュを設定します。

    updateMesh(platform,"RigidBodyTree",Object=robotRBT)

    INS センサー オブジェクトを作成し、そのセンサーをプラットフォームに取り付けます。

    ins = robotSensor("INS",platform,insSensor("RollAccuracy",0), ...
                      UpdateRate=scenario.UpdateRate);

    シナリオを可視化します。

    [ax,plotFrames] = show3D(scenario);
    axis equal
    hold on

    ループで軌跡をステップ実行し、位置、向き、速度、加速度、角速度を出力します。

    count = 1;
    while ~isDone(traj)
        [Position(count,:),Orientation(count,:),Velocity(count,:), ...
         Acceleration(count,:),AngularVelocity(count,:)] = traj();
        count = count+1;
    end

    軌跡のライン プロットを作成します。まず、plot3 を使用してプロットを作成してから、プロットのデータ ソースのプロパティを手動で変更します。これにより、プロットのパフォーマンスが向上します。

    trajPlot = plot3(nan,nan,nan,"Color",[1 1 1],"LineWidth",2);
    trajPlot.XDataSource = "Position(:,1)";
    trajPlot.YDataSource = "Position(:,2)";
    trajPlot.ZDataSource = "Position(:,3)";

    シミュレーションを設定します。次に、位置を使用して反復し、INS センサーが更新されるたびにシーンを表示します。シーンを進めてロボット プラットフォームを移動し、センサーを更新します。

    setup(scenario)
    for idx = 1:count-1
        % Read sensor readings.
        [isUpdated,insTimestamp(idx,1),sensorReadings(idx)] = read(ins);
        if isUpdated
            % Use fast update to move platform visualization frames.
            show3D(scenario,FastUpdate=true,Parent=ax);
            % Refresh all plot data and visualize.
            refreshdata
            drawnow limitrate
        end
        % Advance scenario simulation time.
        advance(scenario);
        % Update all sensors in the scene.
        updateSensors(scenario)
    end
    hold off

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

    バージョン履歴

    R2022a で導入