Contenuto principale

Questa pagina è stata tradotta con la traduzione automatica. Fai clic qui per vedere l'ultima versione in inglese.

Panoramica sulla simulazione GNSS

La simulazione del sistema globale di navigazione satellitare (GNSS) genera stime della posizione del ricevitore. Queste stime della posizione del ricevitore provengono dai modelli di sensori GPS e GNSS come oggetti gpsSensor e gnssSensor. Monitorare lo stato della stima della posizione in gnssSensor utilizzando la diluizione degli output di precisione e confrontare il numero di satelliti disponibili.

Parametri di simulazione

Specificare i parametri da utilizzare nella simulazione GNSS:

  • Frequenza di campionamento del ricevitore GNSS

  • Sistema di riferimento per la navigazione locale

  • Posizione sulla Terra in coordinate di latitudine, longitudine e altitudine (LLA)

  • Numero di campioni da simulare

Fs = 1;
refFrame = "NED";
lla0 = [42.2825 -71.343 53.0352];
N = 100;

Creare una traiettoria per un sensore stazionario.

pos = zeros(N, 3);
vel = zeros(N, 3);
time = (0:N-1) ./ Fs;

Creazione del modello del sensore

Creare gli oggetti di simulazione GNSS, gpsSensor e gnssSensor, utilizzando gli stessi parametri iniziali per ciascuno.

gps = gpsSensor("SampleRate", Fs, "ReferenceLocation", lla0, ...
    "ReferenceFrame", refFrame);

gnss = gnssSensor("SampleRate", Fs, "ReferenceLocation", lla0, ...
    "ReferenceFrame", refFrame);

Simulazione con gpsSensor

Generare output da un ricevitore stazionario utilizzando il sensore GPS. Visualizza la posizione in coordinate LLA e la velocità in ciascuna direzione.

% Generate outputs.
[llaGPS, velGPS] = gps(pos, vel);

% Visualize position.
figure
subplot(3, 1, 1)
plot(time, llaGPS(:,1))
title('Latitude')
ylabel('degrees')
xlabel('s')
subplot(3, 1, 2)
plot(time, llaGPS(:,2))
title('Longitude')
ylabel('degrees')
xlabel('s')
subplot(3, 1, 3)
plot(time, llaGPS(:,3))
title('Altitude')
ylabel('m')
xlabel('s')

Figure contains 3 axes objects. Axes object 1 with title Latitude, xlabel s, ylabel degrees contains an object of type line. Axes object 2 with title Longitude, xlabel s, ylabel degrees contains an object of type line. Axes object 3 with title Altitude, xlabel s, ylabel m contains an object of type line.

% Visualize velocity.
figure
plot(time, velGPS)
title('Velocity')
legend('X', 'Y', 'Z')
ylabel('m/s')
xlabel('s')

Figure contains an axes object. The axes object with title Velocity, xlabel s, ylabel m/s contains 3 objects of type line. These objects represent X, Y, Z.

Simulazione con gnssSensor

Generare output da un ricevitore stazionario utilizzando il sensore GNSS. Visualizza la posizione e la velocità e nota le differenze nella simulazione.

% Generate outputs.
[llaGNSS, velGNSS] = gnss(pos, vel);

% Visualize positon.
figure
subplot(3, 1, 1)
plot(time, llaGNSS(:,1))
title('Latitude')
ylabel('degrees')
xlabel('s')
subplot(3, 1, 2)
plot(time, llaGNSS(:,2))
title('Longitude')
ylabel('degrees')
xlabel('s')
subplot(3, 1, 3)
plot(time, llaGNSS(:,3))
title('Altitude')
ylabel('m')
xlabel('s')

Figure contains 3 axes objects. Axes object 1 with title Latitude, xlabel s, ylabel degrees contains an object of type line. Axes object 2 with title Longitude, xlabel s, ylabel degrees contains an object of type line. Axes object 3 with title Altitude, xlabel s, ylabel m contains an object of type line.

% Visualize velocity.
figure
plot(time, velGNSS)
title('Velocity')
legend('X', 'Y', 'Z')
ylabel('m/s')
xlabel('s')

Figure contains an axes object. The axes object with title Velocity, xlabel s, ylabel m/s contains 3 objects of type line. These objects represent X, Y, Z.

Diluizione della precisione

L'oggetto gnssSensor ha una simulazione più fedele rispetto a gpsSensor. Ad esempio, l'oggetto gnssSensor utilizza posizioni satellitari simulate per stimare la posizione del ricevitore. Ciò significa che la diluizione orizzontale della precisione (HDOP) e la diluizione verticale della precisione (VDOP) possono essere riportate insieme alla stima della posizione. Questi valori indicano il grado di precisione della stima della posizione in base alla geometria del satellite. Valori più piccoli indicano una stima più precisa.

% Set the RNG seed to reproduce results. 
rng('default')

% Specify the start time of the simulation.
initTime = datetime(2020, 4, 20, 18, 10, 0, "TimeZone", "America/New_York");

% Create the GNSS receiver model.
gnss = gnssSensor("SampleRate", Fs, "ReferenceLocation", lla0, ...
    "ReferenceFrame", refFrame, "InitialTime", initTime);

% Obtain the receiver status. 
[~, ~, status] = gnss(pos, vel);
disp(status(1))
      SatelliteAzimuth: [7x1 double]
    SatelliteElevation: [7x1 double]
                  HDOP: 1.1290
                  VDOP: 1.9035

Visualizzare l'HDOP durante la simulazione. Si verifica una diminuzione dell'HDOP. Ciò significa che la geometria del satellite è cambiata.

hdops = vertcat(status.HDOP);

figure
plot(time, vertcat(status.HDOP))
title('HDOP')
ylabel('m')
xlabel('s')

Figure contains an axes object. The axes object with title HDOP, xlabel s, ylabel m contains an object of type line.

Verificare che la geometria del satellite sia cambiata. Trova l'indice in cui l'HDOP è diminuito e verifica se ciò corrisponde a una variazione nel numero di satelliti in vista. La variabile numSats aumenta da 7 a 8.

% Find expected sample index for a change in the
% number of satellites in view.
[~, satChangeIdx] = max(abs(diff(hdops)));

% Visualize the satellite geometry before the
% change in HDOP.
satAz = status(satChangeIdx).SatelliteAzimuth;
satEl = status(satChangeIdx).SatelliteElevation;
numSats = numel(satAz);
skyplot(satAz, satEl);
title(sprintf('Satellites in View: %d\nHDOP: %.4f', ...
    numSats, hdops(satChangeIdx)))

Figure contains an object of type skyplot.

% Visualize the satellite geometry after the
% change in HDOP.
satAz = status(satChangeIdx+1).SatelliteAzimuth;
satEl = status(satChangeIdx+1).SatelliteElevation;
numSats = numel(satAz);
skyplot(satAz, satEl);
title(sprintf('Satellites in View: %d\nHDOP: %.4f', ...
    numSats, hdops(satChangeIdx+1)))

Figure contains an object of type skyplot.

I valori HDOP e VDOP possono essere utilizzati come elementi diagonali nelle matrici di covarianza delle misurazioni quando si combinano le stime della posizione del ricevitore GNSS con altre misurazioni del sensore utilizzando un filtro di Kalman.

% Convert HDOP and VDOP to a measurement covariance matrix.
hdop = status(1).HDOP;
vdop = status(1).VDOP;
measCov = diag([hdop.^2/2, hdop.^2/2, vdop.^2]);
disp(measCov)
    0.6373         0         0
         0    0.6373         0
         0         0    3.6233