Main Content

gpsSensor

GPS 受信機シミュレーション モデル

R2022a 以降

説明

gpsSensor System object™ は、全地球測位システム (GPS) 受信機から出力されたデータをモデル化します。このオブジェクトは位置ノイズを 1 次ガウス マルコフ過程としてモデル化します。この過程では、シグマ値は HorizontalPositionAccuracy プロパティと VerticalPositionAccuracy プロパティで指定されます。このオブジェクトは、VelocityAccuracy プロパティで指定されたシグマ値を使用して、速度ノイズをガウス ノイズとしてモデル化します。

GPS 受信機をモデル化するには、次のようにします。

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

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

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

作成

説明

GPS = gpsSensor は、ローカル位置および速度入力信号に基づいて全地球測位システム受信機の読み取り値を計算する gpsSensor System object を返します。測地座標における既定の基準位置は次のとおりです。

  • 緯度: 0o N

  • 経度: 0o E

  • 高度: 0 m

GPS = gpsSensor('ReferenceFrame',RF) は、基準座標系 RF を基準として全地球測位システム受信機の読み取り値を計算する gpsSensor System object を返します。RF は、'NED' (北-東-下) または 'ENU' (東-北-上) として指定します。既定値は 'NED' です。

GPS = gpsSensor(___,Name,Value) は、各プロパティの Name を、指定された Value に設定します。指定されていないプロパティは既定値になります。

プロパティ

すべて展開する

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

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

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

受信機の更新頻度 (Hz)。正の実数スカラーとして指定します。

データ型: single | double

基準位置。測地座標 (緯度、経度、高度) の 3 要素の行ベクトルとして指定します。高度は、参照楕円体モデル WGS84 の楕円体からの高さです。基準位置の単位は [degrees degrees meters] です。度数の形式は 10 進数の度単位 (DD) です。

データ型: single | double

位置座標の入力形式。'Local' または 'Geodetic' として指定します。

  • プロパティを 'Local' として設定した場合、原点が固定され、ReferenceLcation プロパティによって定義されたローカル ナビゲーション座標系に基づいた直交座標として truePosition 入力を指定する必要があります。なお、trueVelocity 入力を指定する場合は、このローカル ナビゲーション座標系を基準としてその入力を指定する必要があります。

  • プロパティを 'Geodetic' として設定した場合、緯度、経度、および高度の測地座標として truePosition 入力を指定する必要があります。また、trueVelocity 入力を指定する場合は、原点が truePosition 入力に対応しているナビゲーション座標系 (NED または ENU) を基準としてその入力を指定する必要があります。プロパティを 'Geodetic' として設定すると、gpsSensor オブジェクトは ReferenceLocation プロパティを無視します。

データ型: character vector

水平方向の位置の精度 (メートル単位)。非負の実数スカラーとして指定します。水平方向の位置の精度では、水平方向の位置の測定値におけるノイズの標準偏差を指定します。

調整可能: Yes

データ型: single | double

垂直方向の位置の精度 (メートル単位)。非負の実数スカラーとして指定します。垂直方向の位置の精度は、垂直方向の位置の測定値におけるノイズの標準偏差を指定します。

調整可能: Yes

データ型: single | double

速度の精度 (メートル/秒単位)。非負の実数スカラーとして指定します。速度の精度は、速度測定におけるノイズの標準偏差を指定します。

調整可能: Yes

データ型: single | double

グローバル位置ノイズ減衰係数。範囲 [0,1] 内のスカラーとして指定します。

減衰係数 0 では、グローバル位置のノイズをホワイト ノイズ過程としてモデル化します。1 の減衰係数は、グローバル位置のノイズをランダム ウォーク過程としてモデル化します。

調整可能: Yes

データ型: single | double

乱数ソース。文字ベクトルまたは string として指定します。

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

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

データ型: char | string

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

依存関係

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

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

使用法

説明

[position,velocity,groundspeed,course] = GPS(truePosition,trueVelocity) は、位置と速度の入力から全地球航法衛星システムの受信機の読み取り値を計算します。

入力引数

すべて展開する

ナビゲーション座標系における GPS 受信機の位置。N 行 3 列の実数の有限行列として指定します。N は現在の座標系のサンプル数です。

  • PositionInputFormat プロパティを 'Local' として指定した場合、原点が ReferenceLocation に固定されたローカル ナビゲーション座標系を基準とした直交座標として truePosition を指定します。

  • PositionInputFormat プロパティを 'Geodetic' として指定した場合、[latitude longitude altitude] に測地座標として truePosition を指定します。Latitudelongitude の単位はメートルです。altitude は WGS84 楕円体モデルの楕円体からの高さ (メートル単位) です。

データ型: single | double

ナビゲーション座標系における GPS 受信機の速度 (メートル/秒単位)。N 行 3 列の実数の有限行列として指定します。N は現在の座標系のサンプル数です。

  • PositionInputFormat プロパティを 'Local' として指定した場合、原点が ReferenceLocation に固定されたローカル ナビゲーション座標系 (NED または ENU) を基準として trueVelocity を指定します。

  • PositionInputFormat プロパティを 'Geodetic' として指定した場合、原点が truePosition 入力に対応するナビゲーション座標系 (NED または ENU) を基準として trueVelocity を指定します。

データ型: single | double

出力引数

すべて展開する

測地緯度、経度、高度 (LLA) 座標系における GPS 受信機の位置。N 行 3 列の実数の有限配列として返されます。緯度と経度は北と東を正方向として度単位で表されます。高度はメートル単位です。

N は現在の座標系のサンプル数です。

データ型: single | double

ローカル ナビゲーション座標系における GPS 受信機の速度 (メートル/秒単位)。N 行 3 列の実数の有限配列として返されます。N は現在の座標系のサンプル数です。

  • PositionInputFormat プロパティを 'Local' として指定した場合、返される速度は、原点が ReferenceLocation に固定されたローカル ナビゲーション座標系に基づきます。

  • PositionInputFormat プロパティを 'Geodetic' として指定した場合、返される速度は、原点が position 出力に対応するナビゲーション座標系 (NED または ENU) に基づきます。

データ型: single | double

ローカル ナビゲーション座標系における GPS 受信機の水平速度の大きさ (メートル/秒)。有限で実数の N 行 1 列の列ベクトルとして返されます。

N は現在の座標系のサンプル数です。

データ型: single | double

ローカル ナビゲーション座標系における GPS 受信機の水平速度の方向 (度単位)。0 ~ 360 の値の有限で実数の N 行 1 列の列ベクトルとして返されます。北は 360 度に対応し、東は 90 度に対応します。

N は現在の座標系のサンプル数です。

データ型: single | double

オブジェクト関数

オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj という名前の System object のシステム リソースを解放するには、以下の構文を使用します。

release(obj)

すべて展開する

stepSystem object のアルゴリズムの実行
releaseリソースを解放し、System object のプロパティ値と入力特性の変更を可能にします。
resetSystem object の内部状態のリセット

すべて折りたたむ

GPS 受信機データをモデル化するために gpsSensor System object™ を作成します。標準的な 1 Hz のサンプル レートと 1000 秒のシミュレーション時間を想定します。マサチューセッツ州ネイティック (米国) の緯度、経度、高度 (LLA) に基づいて基準位置を定義します。zeros を使用して実際の位置と速度を指定して、センサーを静止しているものとして定義します。

fs = 1;
duration = 1000;
numSamples = duration*fs;

refLoc = [42.2825 -71.343 53.0352];

truePosition = zeros(numSamples,3);
trueVelocity = zeros(numSamples,3);

gps = gpsSensor('SampleRate',fs,'ReferenceLocation',refLoc);

指定された truePosition および trueVelocity を使用して gps を呼び出し、静止プラットフォームの GPS データの受信をシミュレートします。

position = gps(truePosition,trueVelocity);

実際の位置と GPS センサーの位置の読み取り値をプロットします。

t = (0:(numSamples-1))/fs;

subplot(3, 1, 1)
plot(t, position(:,1), ...
     t, ones(numSamples)*refLoc(1))
title('GPS Sensor Readings')
ylabel('Latitude (degrees)')

subplot(3, 1, 2)
plot(t, position(:,2), ...
     t, ones(numSamples)*refLoc(2))
ylabel('Longitude (degrees)')

subplot(3, 1, 3)
plot(t, position(:,3), ...
     t, ones(numSamples)*refLoc(3))
ylabel('Altitude (m)')
xlabel('Time (s)')

Figure contains 3 axes objects. Axes object 1 with title GPS Sensor Readings, ylabel Latitude (degrees) contains 1001 objects of type line. Axes object 2 with ylabel Longitude (degrees) contains 1001 objects of type line. Axes object 3 with xlabel Time (s), ylabel Altitude (m) contains 1001 objects of type line.

位置の読み取り値のノイズは、HorizontalPositionAccuracyVerticalPositionAccuracyVelocityAccuracy、および DecayFactor によって制御されます。DecayFactor プロパティは、ノイズ モデルのドリフトを制御します。既定では、DecayFactor0.999 に設定されており、ランダム ウォーク過程に近づきます。DecayFactor プロパティの効果を観察するには、以下のようにします。

  1. gps オブジェクトをリセットします。

  2. DecayFactor0.5 に設定します。

  3. 静止位置を指定する変数を使用して gps を呼び出します。

  4. 結果をプロットします。

GPS の位置の読み取り値は、実際の位置を中心として振動するようになりました。

reset(gps)
gps.DecayFactor = 0.5;
position = gps(truePosition,trueVelocity);

subplot(3, 1, 1)
plot(t, position(:,1), ...
     t, ones(numSamples)*refLoc(1))
title('GPS Sensor Readings - Decay Factor = 0.5')
ylabel('Latitude (degrees)')

subplot(3, 1, 2)
plot(t, position(:,2), ...
     t, ones(numSamples)*refLoc(2))
ylabel('Longitude (degrees)')

subplot(3, 1, 3)
plot(t, position(:,3), ...
     t, ones(numSamples)*refLoc(3))
ylabel('Altitude (m)')
xlabel('Time (s)')

Figure contains 3 axes objects. Axes object 1 with title GPS Sensor Readings - Decay Factor = 0.5, ylabel Latitude (degrees) contains 1001 objects of type line. Axes object 2 with ylabel Longitude (degrees) contains 1001 objects of type line. Axes object 3 with xlabel Time (s), ylabel Altitude (m) contains 1001 objects of type line.

GPS 受信機で達成されるコース精度は、対地速度が増加するにつれて高くなります。この例では、GPS 受信機シミュレーション オブジェクトを作成し、静止位置から加速するプラットフォームから受信したデータをシミュレートします。

GPS 受信機から返されたデータをモデル化するために既定の gpsSensor System object™ を作成します。

GPS = gpsSensor
GPS = 
  gpsSensor with properties:

                    SampleRate: 1                  Hz         
           PositionInputFormat: 'Local'                       
             ReferenceLocation: [0 0 0]            [deg deg m]
    HorizontalPositionAccuracy: 1.6                m          
      VerticalPositionAccuracy: 3                  m          
              VelocityAccuracy: 0.1                m/s        
                  RandomStream: 'Global stream'               
                   DecayFactor: 0.999                         

NED 座標系でプラットフォームの位置と速度を記述する行列を作成します。プラットフォームは静止位置から開始し、60 秒かけて北東方向に 60 m/s まで加速し、次に 2 秒かけて 2 m/s まで垂直方向に加速し、その後さらに 8 秒間上昇率 2 m/s を保ちます。速度が位置の単純な微分であるように速度が一定であると仮定します。

duration = 70;
numSamples = duration*GPS.SampleRate;

course = 45*ones(duration,1);
groundspeed = [(1:60)';60*ones(10,1)];

Nvelocity   = groundspeed.*sind(course);
Evelocity   = groundspeed.*cosd(course);
Dvelocity   = [zeros(60,1);-1;-2*ones(9,1)];
NEDvelocity = [Nvelocity,Evelocity,Dvelocity];

Ndistance   = cumsum(Nvelocity);
Edistance   = cumsum(Evelocity);
Ddistance   = cumsum(Dvelocity);
NEDposition = [Ndistance,Edistance,Ddistance];

速度行列と位置行列を使用して GPS オブジェクトを呼び出して、GPS 測定データをモデル化します。

[~,~,groundspeedMeasurement,courseMeasurement] = GPS(NEDposition,NEDvelocity);

対地速度と、実際のコースと GPS シミュレーターによって返されたコースとの差をプロットします。

対地速度が上がると、コースの精度も上がります。なお、最後の 10 秒間の速度の増加は、地面に対してではないため、影響はありません。

t = (0:numSamples-1)/GPS.SampleRate;

subplot(2,1,1)
plot(t,groundspeed);
ylabel('Speed (m/s)')
title('Relationship Between Groundspeed and Course Accuracy')

subplot(2,1,2)
courseAccuracy = courseMeasurement - course;
plot(t,courseAccuracy)
xlabel('Time (s)');
ylabel('Course Accuracy (degrees)')

Figure contains 2 axes objects. Axes object 1 with title Relationship Between Groundspeed and Course Accuracy, ylabel Speed (m/s) contains an object of type line. Axes object 2 with xlabel Time (s), ylabel Course Accuracy (degrees) contains an object of type line.

マサチューセッツ州ネイティック市からマサチューセッツ州ボストンまでの軌跡で受信した GPS データをシミュレートします。

米国マサチューセッツ州ネイティック市と米国マサチューセッツ州ボストンの小数の緯度と経度を定義します。単純化するために、両位置の高度をゼロに設定します。

NatickLLA = [42.27752809999999, -71.34680909999997, 0];
BostonLLA = [42.3600825, -71.05888010000001, 0];

ネイティックからボストンまで 20 分でプラットフォームを移動できる運動を定義します。ローカル NED 座標系の原点をネイティックに設定します。waypointTrajectory オブジェクトを作成して、一度に軌跡として 10 サンプルを出力します。

fs = 1;
duration = 60*20;

bearing = 68; % degrees
distance = 25.39e3; % meters
distanceEast = distance*sind(bearing);
distanceNorth = distance*cosd(bearing);

NatickNED = [0,0,0];
BostonNED = [distanceNorth,distanceEast,0];

trajectory = waypointTrajectory( ...
    'Waypoints', [NatickNED;BostonNED], ...
    'TimeOfArrival',[0;duration], ...
    'SamplesPerFrame',10, ...
    'SampleRate',fs);

プラットフォームの GPS データの受信をモデル化するために gpsSensor オブジェクトを作成します。HorizontalPositionalAccuracy25 に、DecayFactor0.25 に設定して、ノイズを強調します。ReferenceLocation をネイティックの座標 (LLA) に設定します。

GPS = gpsSensor( ...
    'HorizontalPositionAccuracy',25, ...
    'DecayFactor',0.25, ...
    'SampleRate',fs, ...
    'ReferenceLocation',NatickLLA);

Figure を開いて、ネイティックとボストンの位置 (LLA) をプロットします。単純化するために高度は無視します。

ループ内で、グラウンド トゥルースの軌跡を使用して gpsSensor オブジェクトを呼び出し、受信した GPS データをシミュレートします。グラウンドトゥルースの軌跡と受信した GPS データのモデルをプロットします。

figure(1)
plot(NatickLLA(1),NatickLLA(2),'ko', ...
     BostonLLA(1),BostonLLA(2),'kx')
xlabel('Latitude (degrees)')
ylabel('Longitude (degrees)')
title('GPS Sensor Data for Natick to Boston Trajectory')
hold on

while ~isDone(trajectory)
    [truePositionNED,~,trueVelocityNED] = trajectory();
    reportedPositionLLA = GPS(truePositionNED,trueVelocityNED);

    figure(1)
    plot(reportedPositionLLA(:,1),reportedPositionLLA(:,2),'r.')
end

Figure contains an axes object. The axes object with title GPS Sensor Data for Natick to Boston Trajectory, xlabel Latitude (degrees), ylabel Longitude (degrees) contains 122 objects of type line.

ベスト プラクティスとして、完了したら System object を解放します。

release(GPS)
release(trajectory)

拡張機能

バージョン履歴

R2022a で導入

参考

オブジェクト