Main Content

insSensor

慣性ナビゲーション システムと GNSS/GPS のシミュレーション モデル

R2022a 以降

説明

insSensor System object™ は、慣性航法システム (INS) および GPS などの全地球航法衛星システム (GNSS) からの測定値を融合し、融合した測定値を出力するデバイスをモデル化します。

融合した INS および GNSS の測定値を出力するには、以下のようにします。

  1. insSensor オブジェクトを作成して、そのプロパティを設定します。

  2. 関数と同様に、引数を指定してオブジェクトを呼び出します。

System object の機能の詳細については、System object とはを参照してください。

作成

説明

INS = insSensor は、INS および GNSS からの測定値を出力するデバイスをモデル化する System object INS を返します。

INS = insSensor(Name,Value) は、1 つ以上の名前と値のペアを使用してプロパティを設定します。指定されていないプロパティは既定値になります。プロパティ名はそれぞれ引用符で囲みます。

プロパティ

すべて展開する

特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトを呼び出した後にプロパティ値を変更することはできません。オブジェクトは呼び出し時にロックされ、関数 release でロック解除されます。

プロパティが "調整可能" な場合は、いつでも値を変更できます。

プロパティ値の変更の詳細については、System object を使用した MATLAB でのシステム設計を参照してください。

プラットフォーム上のセンサーの位置 (メートル単位)。[x y z] 形式の 3 要素の実数値ベクトルとして指定します。このベクトルは、プラットフォームの原点からのセンサーの原点のオフセットを定義します。

調整可能: Yes

データ型: single | double

センサー ボディのロール測定精度 (度単位)。非負の実数スカラーとして指定します。

"ロール" はセンサー ボディの x 軸を中心とした回転です。ロール ノイズはホワイト ノイズ過程としてモデル化されます。RollAccuracy はロール測定ノイズの標準偏差を設定します。

調整可能: Yes

データ型: single | double

センサー ボディのピッチ測定精度 (度単位)。非負の実数スカラーとして指定します。

"ピッチ" はセンサー ボディの y 軸を中心とした回転です。ピッチ ノイズはホワイト ノイズ過程としてモデル化されます。PitchAccuracy はピッチ測定ノイズの標準偏差を定義します。

調整可能: Yes

データ型: single | double

センサー ボディのヨー測定精度 (度単位)。非負の実数スカラーとして指定します。

"ヨー" はセンサー ボディの z 軸を中心とした回転です。ヨー ノイズはホワイト ノイズ過程としてモデル化されます。YawAccuracy はヨー測定ノイズの標準偏差を定義します。

調整可能: Yes

データ型: single | double

センサー ボディの位置測定精度 (メートル単位)。非負の実数スカラーまたは 3 要素の実数値ベクトルとして指定します。ベクトルの要素はそれぞれ x、y、および z 位置の測定精度を設定します。スカラー値として PositionAccuracy を指定すると、オブジェクトは 3 つの位置すべての精度をその値に設定します。

位置ノイズはホワイト ノイズ過程としてモデル化されます。PositionAccuracy は位置測定ノイズの標準偏差を定義します。

調整可能: Yes

データ型: single | double

センサー ボディの速度測定精度 (メートル/秒単位)。非負の実数スカラーとして指定します。

速度ノイズはホワイト ノイズ過程としてモデル化されます。VelocityAccuracy は速度測定ノイズの標準偏差を定義します。

調整可能: Yes

データ型: single | double

センサー ボディの加速度測定精度 (メートル/秒単位)。非負の実数スカラーとして指定します。

加速度ノイズはホワイト ノイズ過程としてモデル化されます。AccelerationAccuracy は加速度測定ノイズの標準偏差を定義します。

調整可能: Yes

データ型: single | double

センサー ボディの角速度測定精度 (メートル/秒単位)。非負の実数スカラーとして指定します。

角速度はホワイト ノイズ過程としてモデル化されます。AngularVelocityAccuracy は加速度測定ノイズの標準偏差を定義します。

調整可能: Yes

データ型: single | double

シミュレーション時間の入力の有効化。logical 0 (false) または 1 (true) として指定します。引数 simTime を使用してシミュレーション時間を入力するには、このプロパティを true に設定します。

調整可能: No

データ型: logical

GNSS 確定の有効化。logical 1 (true) または 0 (false) として指定します。GNSS 受信機の確定の損失をシミュレートするには、このプロパティを false に設定します。GNSS 受信機の確定が失われると、位置測定は PositionErrorFactor プロパティで指定された割合でドリフトします。

調整可能: Yes

依存関係

このプロパティを有効にするには、TimeInputtrue に設定します。

データ型: logical

GNSS 確定なしの位置誤差要因。スカラーまたは 1 行 3 列のスカラーのベクトルとして指定します。

HasGNSSFix プロパティが false に設定されている場合、加速度計の一定のバイアスのため、位置誤差は 2 次関数的に増加します。位置成分 E(t) の位置誤差は、E(t) = 1/2αt2 と表すことができます。ここで、α は対応する成分の位置誤差係数であり、t は GNSS 確定が失われてからの時間です。実行中、オブジェクトは simTime 入力に基づいて t を計算します。x、y、および z 成分の計算された E(t) 値は、gTruth 入力の対応する位置成分に加算されます。

調整可能: Yes

依存関係

このプロパティを有効にするには、TimeInputtrue に設定し、HasGNSSFixfalse に設定します。

データ型: single | double

乱数ソース。次のオプションのいずれかとして指定します。

  • 'Global stream' –– 現在のグローバル乱数ストリームを使用して乱数を生成。

  • 'mt19937ar with seed' –– Seed プロパティで指定されたシードを用いて mt19937ar アルゴリズムを使用して乱数を生成。

データ型: char | string

mt19937ar 乱数発生器アルゴリズムの初期シード。非負の整数として指定します。

依存関係

このプロパティを有効にするには、RandomStream'mt19937ar with seed' に設定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

使用法

説明

measurement = INS(gTruth) は、INS センサーの読み取り値と GNSS センサーの読み取り値から受信したデータをモデル化します。出力測定値は、センサー ボディの慣性グラウンド トゥルース状態 gTruth に基づきます。

measurement = INS(gTruth,simTime) はさらにシミュレーション時間 simTime を指定します。この構文を有効にするには、TimeInput プロパティを true に設定します。

入力引数

すべて展開する

ローカル直交座標におけるセンサー ボディの慣性グラウンド トゥルース状態。次のフィールドを含む構造体として指定します。

フィールド説明
'Position'

位置 (メートル単位)。ベクトル [x y z] の N 行 3 列の実数の有限行列として指定します。N は現在の座標系のサンプル数です。

'Velocity'

速度 (v) (メートル/秒単位)。ベクトル [vx vy vz] の N 行 3 列の実数の有限行列として指定します。N は現在の座標系のサンプル数です。

'Orientation'

ローカル直交座標系を基準とした方向。次のオプションのいずれかとして指定します。

  • quaternion オブジェクトの N 要素の列ベクトル

  • 回転行列の 3×3×N の配列

  • [xroll ypitch zyaw] 角度 (度単位) の N 行 3 列の行列

各四元数または回転行列は、ローカル直交座標系から現在のセンサーのボディ座標系への座標系の回転です。N は現在の座標系のサンプル数です。

'Acceleration'

加速度 (a) (メートル毎秒毎秒)。ベクトル [ax ay az] の N 行 3 列の実数の有限行列として指定します。N は現在の座標系のサンプル数です。

'AngularVelocity'

角速度 (ω) (度毎秒毎秒)。ベクトル [ωx ωy ωz] の N 行 3 列の実数の有限行列として指定します。N は現在の座標系のサンプル数です。

フィールド値は double 型または single 型でなければなりません。

PositionVelocity、および Orientation フィールドは必須です。その他のフィールドはオプションです。

例: struct('Position',[0 0 0],'Velocity',[0 0 0],'Orientation',quaternion([1 0 0 0]))

シミュレーション時間 (秒単位)。非負の実数スカラーとして指定します。

データ型: single | double

出力引数

すべて展開する

ローカル直交座標におけるセンサー ボディの運動の測定値。次のフィールドを含む構造体として返されます。

フィールド説明
'Position'

位置 (メートル単位)。ベクトル [x y z] の N 行 3 列の実数の有限行列として指定します。N は現在の座標系のサンプル数です。

'Velocity'

速度 (v) (メートル/秒単位)。ベクトル [vx vy vz] の N 行 3 列の実数の有限行列として指定します。N は現在の座標系のサンプル数です。

'Orientation'

ローカル直交座標系を基準とした方向。次のオプションのいずれかとして指定します。

  • quaternion オブジェクトの N 要素の列ベクトル

  • 回転行列の 3×3×N の配列

  • [xroll ypitch zyaw] 角度 (度単位) の N 行 3 列の行列

各四元数または回転行列は、ローカル直交座標系から現在のセンサーのボディ座標系への座標系の回転です。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)

すべて展開する

perturbationsPerturbation defined on object
perturb摂動をオブジェクトに適用する
stepSystem object のアルゴリズムの実行
cloneSystem object の複製
isLockedSystem object が使用中かどうかの判定
resetSystem object の内部状態のリセット
releaseリソースを解放し、System object のプロパティ値と入力特性の変更を可能にします。

すべて折りたたむ

ローカルの北-東-下 (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')

Figure contains 3 axes objects. Axes object 1 with title Position, xlabel Time (s), ylabel Position (m) contains 3 objects of type line. These objects represent North, East, Down. Axes object 2 with title Velocity, xlabel Time (s), ylabel Velocity (m/s) contains 3 objects of type line. These objects represent North, East, Down. Axes object 3 with title Orientation, xlabel Time (s), ylabel Rotation (degrees) contains 3 objects of type line. These objects represent Roll, Pitch, Yaw.

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 を作成します。PositionAccuracy0.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)')

Figure contains 2 axes objects. Axes object 1 with title Path, xlabel North (m), ylabel East (m) contains an object of type line. Axes object 2 with title Orientation, xlabel Time (s), ylabel Rotation (degrees) contains 3 objects of type line. These objects represent Yaw, Pitch, Roll.

拡張機能

バージョン履歴

R2022a で導入

参考

オブジェクト