exponenta event banner

Оценка положения приемника ГНСС с помощью моделируемых спутниковых группировок

Отслеживание положения наземного транспортного средства с использованием имитированного приемника Глобальной навигационной спутниковой системы (ГНСС). Спутники моделируются с помощью satelliteScenario (Satellite Communications Toolbox) объект, обработка спутникового сигнала приемника моделируется с использованием lookangles и pseudoranges функции, и положение приемника оценивается с помощью receiverposition функция.

В этом примере требуется Toolbox™ навигации.

Обзор

В этом примере основное внимание уделяется космическому сегменту или спутниковым группировкам, а также сенсорному оборудованию ГНСС для государственной системы. Чтобы получить оценку положения приемника GNSS, навигационный процессор требует положения спутника из космического сегмента и псевдодальности от процессора дальности в приемнике.

Задание параметров моделирования

Загрузите MAT-файл, который содержит положение «земля-истина» и скорость наземного транспортного средства, движущегося в направлении кампуса Natik, штат Массачусетс, Mathworks, Inc.

Укажите время начала, остановки и образца моделирования. Кроме того, укажите угол маскирования или минимальный угол возвышения приемника GNSS.

% Load ground truth trajectory.
load("routeNatickMA.mat","lat","lon","pos","vel","lla0");
recPos = pos;
recVel = vel;

% Specify simulation times.
startTime = datetime(2020,10,28,8,0,0,"TimeZone","America/New_York");
simulationSteps = size(pos,1);
dt = 1;
stopTime = startTime + seconds((simulationSteps-1)*dt);

% Specify mask angle.
maskAngle = 5; % degrees

% Convert receiver position from North-East-Down (NED) to geodetic
% coordinates. Requires Navitation Toolbox(TM).
receiverLLA = ned2lla(recPos,lla0,"ellipsoid");

% Set RNG seed to allow for repeatable results. 
rng("default");

Визуализация geoplot для траектории истинности земли.

figure
geoplot(lat,lon)
geobasemap("topographic")
title("Ground Truth Trajectory")

Figure contains an axes. The axes with title Ground Truth Trajectory contains an object of type line.

Моделирование положения спутника во времени

satelliteScenario позволяет задать начальные орбитальные параметры и визуализировать их с помощью satelliteScenarioViewer(Панель инструментов спутниковой связи). В этом примере используется satelliteScenario и MAT-файл с начальными орбитальными параметрами для моделирования созвездий GPS во времени. Кроме того, можно использовать gnssconstellation объект, который моделирует положение спутника с использованием номинальных орбитальных параметров, и только текущее время моделирования необходимо для вычисления положения спутника.

% Create scenario.
sc = satelliteScenario(startTime, stopTime, dt);

load("initialOrbitalParameters.mat","semiMajorAxis","eccentricity",...
    "inclination","rightAscensionOfAscendingNode",...
    "argumentOfPeriapsis","trueAnomaly","prnStr");

% Initialize satellites.    
satellite(sc,semiMajorAxis,eccentricity,inclination,...
    rightAscensionOfAscendingNode,argumentOfPeriapsis,trueAnomaly,...
    "Name",prnStr);

% Preallocate results.
numSats = numel(sc.Satellites);
allSatPos = zeros(numSats,3,simulationSteps);
allSatVel = zeros(numSats,3,simulationSteps);

% Save satellite states over entire simulation.
for i = 1:numel(sc.Satellites)
    [oneSatPos, oneSatVel] = states(sc.Satellites(i),"CoordinateFrame","ecef");
    allSatPos(i,:,:) = permute(oneSatPos,[3 1 2]);
    allSatVel(i,:,:) = permute(oneSatVel,[3 1 2]);
end

Вычислить псевдодиапазоны

Используйте положения спутника для вычисления псевдодальностей и видимости спутника на протяжении всего моделирования. Угол маски используется для определения спутников, которые видны приемнику. Псевдодальности представляют собой расстояния между спутниками и приемником ГНСС. Термин псевдодальности используется, поскольку это значение расстояния вычисляется путем умножения разности во времени между текущим временем синхронизации приемника и сигналом спутника с временной меткой на скорость света.

% Preallocate results.
allP = zeros(numSats,simulationSteps);
allPDot = zeros(numSats,simulationSteps);
allIsSatVisible = false(numSats,simulationSteps);

% Use the skyplot to visualize satellites in view.
sp = skyplot([], []);

for idx = 1:simulationSteps
    satPos = allSatPos(:,:,idx);
    satVel = allSatVel(:,:,idx);
    
    % Calculate satellite visibilities from receiver position.
    [satAz,satEl,allIsSatVisible(:,idx)] = lookangles(receiverLLA(idx,:),satPos,maskAngle);
    
    % Calculate pseudoranges and pseudorange rates using satellite and
    % receiver positions and velocities.
    [allP(:,idx),allPDot(:,idx)] = pseudoranges(receiverLLA(idx,:),satPos,recVel(idx,:),satVel);
    
    set(sp,"AzimuthData",satAz(allIsSatVisible(:,idx)), ...
        "ElevationData",satEl(allIsSatVisible(:,idx)), ...
        "LabelData",prnStr(allIsSatVisible(:,idx)))
    drawnow limitrate
end

Figure contains an object of type skyplot.

Оценка положения приемника по псевдодиапазонам и спутниковым позициям

Наконец, используйте положения спутника и псевдодальности для оценки положения приемника с помощью receiverposition функция.

% Preallocate results.
lla = zeros(simulationSteps,3);
gnssVel = zeros(simulationSteps,3);
hdop = zeros(simulationSteps,1);
vdop = zeros(simulationSteps,1);

for idx = 1:simulationSteps
    p = allP(:,idx);
    pdot = allPDot(:,idx);
    isSatVisible = allIsSatVisible(:,idx);
    satPos = allSatPos(:,:,idx);
    satVel = allSatVel(:,:,idx);
    
    % Estimate receiver position and velocity using pseudoranges,
    % pseudorange rates, and satellite positions and velocities.
    [lla(idx,:),gnssVel(idx,:),hdop(idx,:),vdop(idx,:)] = receiverposition(p(isSatVisible),...
        satPos(isSatVisible,:),pdot(isSatVisible),satVel(isSatVisible,:));
end

Визуализация результатов

Постройте график истинного положения земли и расчетного положения приемника на geoplot.

figure
geoplot(lat,lon,lla(:,1),lla(:,2))
geobasemap("topographic")
legend("Ground Truth","Estimate")

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Ground Truth, Estimate.

Постройте график абсолютной ошибки в оценке положения. Ошибка сглаживается движущейся медианой, чтобы сделать график более читаемым. Погрешность по осям x и y меньше, так как есть спутники с обеих сторон приемника. Ошибка заключается в том, что ось Z больше, потому что есть только спутники над приемником, а не под ним. Ошибка меняется с течением времени, когда приемник перемещается, и некоторые спутники попадают и выходят из поля зрения.

estPos = lla2ned(lla,lla0,"ellipsoid");
winSize = floor(size(estPos,1)/10);
figure
plot(smoothdata(abs(estPos-pos),"movmedian",winSize))
legend("x","y","z")
xlabel("Time (s)")
ylabel("Error (m)")
title("Position (NED) Error")

Figure contains an axes. The axes with title Position (NED) Error contains 3 objects of type line. These objects represent x, y, z.