robotScenario
説明
robotScenario
オブジェクトは、3 次元環境内の静的メッシュ、ロボット プラットフォーム、およびセンサーで構成されるシミュレーション シナリオを生成します。
作成
説明
は、既定のプロパティ値をもつ空のロボット シナリオを作成します。既定の慣性座標系は、東-北-上 (ENU) 座標系と北-東-下 (NED) 座標系です。scenario
= robotScenario
は、1 つ以上の名前と値の引数を使用してscenario
= robotScenario(Name=Value
)robotScenario
オブジェクトのプロパティを構成します。
プロパティ
UpdateRate
— シミュレーションの更新頻度
10
(既定値) | 正のスカラー
シミュレーションの更新頻度。正のスカラー (Hz 単位) として指定します。オブジェクト関数 advance
を使用する場合、シナリオのステップ サイズは更新頻度の逆数と等しくなります。
例: 2
データ型: single
| double
StopTime
— シミュレーションの終了時間
inf
(既定値) | 非負のスカラー
シミュレーションの終了時間。非負のスカラー (秒単位) として指定します。シナリオが終了時間に達すると、その進行が停止します。
例: 60
データ型: single
| double
HistoryBufferSize
— シナリオに保存される最大ステップ数
100
(既定値) | 1
より大きい正の整数
シナリオに保存される最大ステップ数。1
より大きい正の整数として指定します。このプロパティは、シナリオに保存されるプラットフォーム姿勢の座標系の最大数を決定します。シミュレーションのステップ数がこのプロパティの値を超えた場合、シナリオには最新のステップのみが保存されます。
例: 60
データ型: single
| double
ReferenceLocation
— 測地座標でのシナリオの原点
[0 0 0]
(既定値) | [latitude longitude altitude]
の形式のベクトル
測地座標でのシナリオの原点。[latitude longitude altitude]
の形式の 3 要素ベクトルとして指定します。latitude と longitude は測地座標 (度単位) です。altitude は WGS84 準拠楕円体を基準とした高度 (メートル単位) です。
例: [46.017 7.750 1673]
データ型: single
| double
MaxNumFrames
— シナリオ内の座標系の最大数
50
(既定値) | 正の整数
シナリオ内の座標系の最大数。正の整数として指定します。シナリオに追加する慣性座標系、プラットフォーム、およびセンサーの数の和は、このプロパティの値以下でなければなりません。
例: 15
データ型: single
| double
CurrentTime
— 現在のシミュレーション時間
非負のスカラー
この プロパティ は読み取り専用です。
現在のシミュレーション時間。非負のスカラーとして指定されます。
データ型: single
| double
IsRunning
— シナリオが実行中かどうかを示す
true
| false
この プロパティ は読み取り専用です。
シナリオが実行中かどうかを示します。true
または false
として指定されます。シナリオのシミュレーションを開始すると、終了時間に達するまで実行されます。
データ型: logical
TransformTree
— 座標系間の変換情報
transformTree
オブジェクト
この プロパティ は読み取り専用です。
シナリオにあるすべての座標系間の変換情報。transformTree
オブジェクトとして指定します。このプロパティは、シナリオに関連付けられた慣性座標系、プラットフォームの座標系、およびセンサーの座標系の間の変換情報を保持します。
InertialFrames
— シナリオでの慣性座標系の名前
string のベクトル
この プロパティ は読み取り専用です。
シナリオでの慣性座標系の名前。string ベクトルとして指定します。
データ型: string
Meshes
— シナリオの静的メッシュ
1 行 N 列の extendedObjectMesh
オブジェクトの cell 配列
この プロパティ は読み取り専用です。
シナリオの静的メッシュ。1 行 N 列の extendedObjectMesh
オブジェクトの cell 配列として指定します。
CollisionMeshes
— シナリオの衝突メッシュ
1 行 N 列の衝突オブジェクトの cell 配列
この プロパティ は読み取り専用です。
シナリオの衝突メッシュ。1 行 N 列の衝突オブジェクトの cell 配列として指定します。サポートされる衝突オブジェクトのタイプは、collisionBox
、collisionCapsule
、collisionCylinder
、collisionMesh
、および collisionSphere
です。
Platforms
— シナリオのロボット プラットフォーム
robotPlatform
オブジェクトの配列
この プロパティ は読み取り専用です。
シナリオのロボット プラットフォーム。robotPlatform
オブジェクトの配列として指定します。
オブジェクト関数
addInertialFrame | Define new inertial frame in robot scenario |
addMesh | Add new static mesh to robot scenario |
advance | Advance robot scenario simulation by one time step |
binaryOccupancyMap | Create 2-D binary occupancy map from robot scenario |
restart | Reset simulation of robot scenario |
setup | Prepare robot scenario for simulation |
show3D | Visualize robot scenario in 3-D |
updateSensors | Update 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
バージョン履歴
R2022a で導入
参考
オブジェクト
関数
addInertialFrame
|addMesh
|advance
|binaryOccupancyMap
|restart
|setup
|show3D
|updateSensors
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)