Отслеживание положения наземного транспортного средства с использованием имитированного приемника Глобальной навигационной спутниковой системы (ГНСС). Спутники моделируются с помощью satelliteScenario объект, имитируют обработку спутникового сигнала приемника, используя 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")

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

Наконец, используйте положения спутника и псевдодальности для оценки положения приемника с помощью 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")

Постройте график абсолютной ошибки в оценке положения. Ошибка сглаживается движущейся медианой, чтобы сделать график более читаемым. Погрешность по осям 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")

access | conicalSensor | groundStation | receiver | satellite | satelliteScenario | satelliteScenarioViewer | transmitter