insSensor
説明
insSensor
System object™ は、慣性航法システム (INS) および GPS などの全地球航法衛星システム (GNSS) からの測定値を融合し、融合した測定値を出力するデバイスをモデル化します。
融合した INS および GNSS の測定値を出力するには、以下のようにします。
insSensor
オブジェクトを作成して、そのプロパティを設定します。関数と同様に、引数を指定してオブジェクトを呼び出します。
System object の機能の詳細については、System object とはを参照してください。
作成
プロパティ
特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトを呼び出した後にプロパティ値を変更することはできません。オブジェクトは呼び出し時にロックされ、関数 release
でロック解除されます。
プロパティが "調整可能" な場合は、いつでも値を変更できます。
プロパティ値の変更の詳細については、System object を使用した MATLAB でのシステム設計を参照してください。
MountingLocation
— プラットフォーム上のセンサーの位置 (m)
[0 0 0]
(既定値) | [x y z] 形式の 3 要素の実数値ベクトル
プラットフォーム上のセンサーの位置 (メートル単位)。[x y z] 形式の 3 要素の実数値ベクトルとして指定します。このベクトルは、プラットフォームの原点からのセンサーの原点のオフセットを定義します。
調整可能: Yes
データ型: single
| double
RollAccuracy
— ロール測定精度 (度)
0.2
(既定値) | 非負の実数スカラー
センサー ボディのロール測定精度 (度単位)。非負の実数スカラーとして指定します。
"ロール" はセンサー ボディの x 軸を中心とした回転です。ロール ノイズはホワイト ノイズ過程としてモデル化されます。RollAccuracy
はロール測定ノイズの標準偏差を設定します。
調整可能: Yes
データ型: single
| double
PitchAccuracy
— ピッチ測定精度 (度)
0.2
(既定値) | 非負の実数スカラー
センサー ボディのピッチ測定精度 (度単位)。非負の実数スカラーとして指定します。
"ピッチ" はセンサー ボディの y 軸を中心とした回転です。ピッチ ノイズはホワイト ノイズ過程としてモデル化されます。PitchAccuracy
はピッチ測定ノイズの標準偏差を定義します。
調整可能: Yes
データ型: single
| double
YawAccuracy
— ヨー測定精度 (度)
1
(既定値) | 非負の実数スカラー
センサー ボディのヨー測定精度 (度単位)。非負の実数スカラーとして指定します。
"ヨー" はセンサー ボディの z 軸を中心とした回転です。ヨー ノイズはホワイト ノイズ過程としてモデル化されます。YawAccuracy
はヨー測定ノイズの標準偏差を定義します。
調整可能: Yes
データ型: single
| double
PositionAccuracy
— 位置測定精度 (m)
[1 1 1]
(既定値) | 非負の実数スカラー | 3 要素の実数値ベクトル
センサー ボディの位置測定精度 (メートル単位)。非負の実数スカラーまたは 3 要素の実数値ベクトルとして指定します。ベクトルの要素はそれぞれ x、y、および z 位置の測定精度を設定します。スカラー値として PositionAccuracy
を指定すると、オブジェクトは 3 つの位置すべての精度をその値に設定します。
位置ノイズはホワイト ノイズ過程としてモデル化されます。PositionAccuracy
は位置測定ノイズの標準偏差を定義します。
調整可能: Yes
データ型: single
| double
VelocityAccuracy
— 速度測定精度 (m/s)
0.05
(既定値) | 非負の実数スカラー
センサー ボディの速度測定精度 (メートル/秒単位)。非負の実数スカラーとして指定します。
速度ノイズはホワイト ノイズ過程としてモデル化されます。VelocityAccuracy
は速度測定ノイズの標準偏差を定義します。
調整可能: Yes
データ型: single
| double
AccelerationAccuracy
— 加速度測定精度 (m/s2)
0
(既定値) | 非負の実数スカラー
センサー ボディの加速度測定精度 (メートル/秒単位)。非負の実数スカラーとして指定します。
加速度ノイズはホワイト ノイズ過程としてモデル化されます。AccelerationAccuracy
は加速度測定ノイズの標準偏差を定義します。
調整可能: Yes
データ型: single
| double
AngularVelocityAccuracy
— 角速度測定精度 (度/秒)
0
(既定値) | 非負の実数スカラー
センサー ボディの角速度測定精度 (メートル/秒単位)。非負の実数スカラーとして指定します。
角速度はホワイト ノイズ過程としてモデル化されます。AngularVelocityAccuracy
は加速度測定ノイズの標準偏差を定義します。
調整可能: Yes
データ型: single
| double
TimeInput
— シミュレーション時間の入力の有効化
false
または 0
(既定値) | true
または 1
シミュレーション時間の入力の有効化。logical 0
(false
) または 1
(true
) として指定します。引数 simTime
を使用してシミュレーション時間を入力するには、このプロパティを true
に設定します。
調整可能: No
データ型: logical
HasGNSSFix
— GNSS 確定の有効化
true
または 1
(既定値) | false
または 0
GNSS 確定の有効化。logical 1
(true
) または 0
(false
) として指定します。GNSS 受信機の確定の損失をシミュレートするには、このプロパティを false
に設定します。GNSS 受信機の確定が失われると、位置測定は PositionErrorFactor
プロパティで指定された割合でドリフトします。
調整可能: Yes
依存関係
このプロパティを有効にするには、TimeInput
を true
に設定します。
データ型: logical
PositionErrorFactor
— GNSS 確定なしの位置誤差要因
[0 0 0]
(既定値) | 非負のスカラー | 1 行 3 列のスカラーのベクトル
GNSS 確定なしの位置誤差要因。スカラーまたは 1 行 3 列のスカラーのベクトルとして指定します。
HasGNSSFix
プロパティが false
に設定されている場合、加速度計の一定のバイアスのため、位置誤差は 2 次関数的に増加します。位置成分 E(t) の位置誤差は、E(t) = 1/2αt2 と表すことができます。ここで、α は対応する成分の位置誤差係数であり、t は GNSS 確定が失われてからの時間です。実行中、オブジェクトは simTime
入力に基づいて t を計算します。x、y、および z 成分の計算された E(t) 値は、gTruth
入力の対応する位置成分に加算されます。
調整可能: Yes
依存関係
このプロパティを有効にするには、TimeInput
を true
に設定し、HasGNSSFix
を false
に設定します。
データ型: single
| double
RandomStream
— 乱数ソース
'Global stream'
(既定値) | 'mt19937ar with seed'
乱数ソース。次のオプションのいずれかとして指定します。
'Global stream'
–– 現在のグローバル乱数ストリームを使用して乱数を生成。'mt19937ar with seed'
––Seed
プロパティで指定されたシードを用いて mt19937ar アルゴリズムを使用して乱数を生成。
データ型: char
| string
Seed
— 初期シード
67
(既定値) | 非負の整数
mt19937ar 乱数発生器アルゴリズムの初期シード。非負の整数として指定します。
依存関係
このプロパティを有効にするには、RandomStream
を 'mt19937ar with seed'
に設定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
使用法
説明
は、INS センサーの読み取り値と GNSS センサーの読み取り値から受信したデータをモデル化します。出力測定値は、センサー ボディの慣性グラウンド トゥルース状態 measurement
= INS(gTruth
)gTruth
に基づきます。
はさらにシミュレーション時間 measurement
= INS(gTruth
,simTime
)simTime
を指定します。この構文を有効にするには、TimeInput
プロパティを true
に設定します。
入力引数
gTruth
— センサー ボディの慣性グラウンド トゥルース状態
構造体
ローカル直交座標におけるセンサー ボディの慣性グラウンド トゥルース状態。次のフィールドを含む構造体として指定します。
フィールド | 説明 |
---|---|
'Position' | 位置 (メートル単位)。ベクトル [x y z] の N 行 3 列の実数の有限行列として指定します。N は現在の座標系のサンプル数です。 |
'Velocity' | 速度 (v) (メートル/秒単位)。ベクトル [vx vy vz] の N 行 3 列の実数の有限行列として指定します。N は現在の座標系のサンプル数です。 |
'Orientation' | ローカル直交座標系を基準とした方向。次のオプションのいずれかとして指定します。
各四元数または回転行列は、ローカル直交座標系から現在のセンサーのボディ座標系への座標系の回転です。N は現在の座標系のサンプル数です。 |
'Acceleration' | 加速度 (a) (メートル毎秒毎秒)。ベクトル [ax ay az] の N 行 3 列の実数の有限行列として指定します。N は現在の座標系のサンプル数です。 |
'AngularVelocity' | 角速度 (ω) (度毎秒毎秒)。ベクトル [ωx ωy ωz] の N 行 3 列の実数の有限行列として指定します。N は現在の座標系のサンプル数です。 |
フィールド値は double
型または single
型でなければなりません。
Position
、Velocity
、および Orientation
フィールドは必須です。その他のフィールドはオプションです。
例: struct('Position',[0 0 0],'Velocity',[0 0 0],'Orientation',quaternion([1 0 0 0]))
simTime
— シミュレーション時間
非負の実数スカラー
シミュレーション時間 (秒単位)。非負の実数スカラーとして指定します。
データ型: single
| double
出力引数
measurement
— センサー ボディの運動の測定値
構造体
ローカル直交座標におけるセンサー ボディの運動の測定値。次のフィールドを含む構造体として返されます。
フィールド | 説明 |
---|---|
'Position' | 位置 (メートル単位)。ベクトル [x y z] の N 行 3 列の実数の有限行列として指定します。N は現在の座標系のサンプル数です。 |
'Velocity' | 速度 (v) (メートル/秒単位)。ベクトル [vx vy vz] の N 行 3 列の実数の有限行列として指定します。N は現在の座標系のサンプル数です。 |
'Orientation' | ローカル直交座標系を基準とした方向。次のオプションのいずれかとして指定します。
各四元数または回転行列は、ローカル直交座標系から現在のセンサーのボディ座標系への座標系の回転です。N は現在の座標系のサンプル数です。 |
'Acceleration' | 加速度 (a) (メートル毎秒毎秒)。ベクトル [ax ay az] の N 行 3 列の実数の有限行列として指定します。N は現在の座標系のサンプル数です。 |
'AngularVelocity' | 角速度 (ω) (度毎秒毎秒)。ベクトル [ωx ωy ωz] の N 行 3 列の実数の有限行列として指定します。N は現在の座標系のサンプル数です。 |
返されるフィールド値は double
型または single
型で、gTruth
入力の対応するフィールド値と同じ型です。
オブジェクト関数
オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj
という名前の System object のシステム リソースを解放するには、以下の構文を使用します。
release(obj)
例
定常入力からの INS 測定値の生成
ローカルの北-東-下 (NED) の原点で静止位置を定義する運動構造体を作成します。プラットフォームは静止しているため、定義する必要があるサンプルは 1 つだけです。グラウンド トゥルースの運動が 100 Hz のサンプル レートで 10 秒間サンプリングされたとします。既定の insSensor
System object™ を作成します。insSensor
オブジェクトからの出力を保持する変数を事前に割り当てます。
Fs = 100; duration = 10; numSamples = Fs*duration; motion = struct( ... 'Position',zeros(1,3), ... 'Velocity',zeros(1,3), ... 'Orientation',ones(1,1,'quaternion')); INS = insSensor; positionMeasurements = zeros(numSamples,3); velocityMeasurements = zeros(numSamples,3); orientationMeasurements = zeros(numSamples,1,'quaternion');
ループ内で、静止運動構造体を使用して INS
を呼び出し、ローカル NED 座標系における位置、速度、および方向の測定値を返します。位置、速度、および方向の測定値をログ記録します。
for i = 1:numSamples measurements = INS(motion); positionMeasurements(i,:) = measurements.Position; velocityMeasurements(i,:) = measurements.Velocity; orientationMeasurements(i) = measurements.Orientation; end
可視化のために方向を四元数からオイラー角に変換します。位置、速度、および方向の測定値を経時的にプロットします。
orientationMeasurements = eulerd(orientationMeasurements,'ZYX','frame'); t = (0:(numSamples-1))/Fs; subplot(3,1,1) plot(t,positionMeasurements) title('Position') xlabel('Time (s)') ylabel('Position (m)') legend('North','East','Down') subplot(3,1,2) plot(t,velocityMeasurements) title('Velocity') xlabel('Time (s)') ylabel('Velocity (m/s)') legend('North','East','Down') subplot(3,1,3) plot(t,orientationMeasurements) title('Orientation') xlabel('Time (s)') ylabel('Rotation (degrees)') legend('Roll', 'Pitch', 'Yaw')
旋回プラットフォームの INS 測定値の生成
insSensor
System object™ を使用して INS 測定値を生成します。waypointTrajectory
を使用してグラウンド トゥルース パスを生成します。
北に位置合わせされたセンサー ボディの "x" 軸で開始し、東に位置合わせされたセンサー ボディの "x" 軸で終了するグラウンド トゥルースの方向を指定します。弧の軌跡のウェイポイントと、対応するウェイポイントの到着時間ベクトルを指定します。100 Hz のサンプル レートを使用します。ウェイポイント制約を指定して waypointTrajectory
System object を作成し、軌跡全体が 1 回の呼び出しで出力されるように SamplesPerFrame
を設定します。
eulerAngles = [0,0,0; ... 0,0,0; ... 90,0,0; ... 90,0,0]; orientation = quaternion(eulerAngles,'eulerd','ZYX','frame'); r = 20; waypoints = [0,0,0; ... 100,0,0; ... 100+r,r,0; ... 100+r,100+r,0]; toa = [0,10,10+(2*pi*r/4),20+(2*pi*r/4)]; Fs = 100; numSamples = floor(Fs*toa(end)); path = waypointTrajectory('Waypoints',waypoints, ... 'TimeOfArrival',toa, ... 'Orientation',orientation, ... 'SampleRate',Fs, ... 'SamplesPerFrame',numSamples);
INS データの受信をモデル化するために insSensor
System object を作成します。PositionAccuracy
を 0.1
に設定します。
ins = insSensor('PositionAccuracy',0.1);
ウェイポイント軌跡オブジェクト path
を呼び出して、グラウンド トゥルース運動を生成します。グラウンド トゥルース動作を指定して INS シミュレーター ins
を呼び出して、INS 測定値を生成します。
[motion.Position,motion.Orientation,motion.Velocity] = path(); insMeas = ins(motion);
可視化のために、ins
から返された方向を度単位のオイラー角に変換します。完全なパスと方向を経時的にプロットします。
orientationMeasurementEuler = eulerd(insMeas.Orientation,'ZYX','frame'); subplot(2,1,1) plot(insMeas.Position(:,1),insMeas.Position(:,2)); title('Path') xlabel('North (m)') ylabel('East (m)') subplot(2,1,2) t = (0:(numSamples-1)).'/Fs; plot(t,orientationMeasurementEuler(:,1), ... t,orientationMeasurementEuler(:,2), ... t,orientationMeasurementEuler(:,3)); title('Orientation') legend('Yaw','Pitch','Roll') xlabel('Time (s)') ylabel('Rotation (degrees)')
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
オブジェクト関数 perturbations
および perturb
ではコード生成はサポートされていません。
使用に関するメモと制限:
MATLAB コード生成における System object (MATLAB Coder)を参照してください。
バージョン履歴
R2020b で導入
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)