Постройте положение приемника GNSS Используя живые данные NMEA или файл журнала NMEA

В этом примере показано, как проанализировать информацию от предложений NMEA и использовать полученную информацию, чтобы построить местоположение. В этом примере вы используете nmeaParser системный объект, доступный в Navigation Toolbox к:

  • Получите широту и долготу из живых данных, полученных из приемника GNSS, и постройте местоположение в карте.

  • Получите широту и долготу от предложений NMEA, сохраненных в файле журнала, и постройте местоположение в карте.

  • Получите постионную информацию спутников в поле зрения и постройте спутниковый азимут и данные о вертикальном изменении с помощью skyplot.

Постройте местоположение Используя живые данные NMEA из приемника GNSS

Можно считать местоположение, данное приемником GNSS, соединенным с PC хоста, и отобразить живые данные о местоположении на графике. Широта и долгота, используемая, чтобы построить местоположение, могут быть получены из нескольких предложений NMEA. В этом разделе мы используем предложения RMC, полученные из приемника, чтобы извлечь широту и долготу.

Необходимое оборудование

  • Модуль GPS Ublox NEO-6M

  • Последовательные к USB конвертеры сигнала как FTDI (если модуль GPS не может быть непосредственно соединен с использующим компьютеры USB),

Настройка оборудования

Если разъем USB доступен на приемнике, используйте USB-кабель, чтобы соединить модуль непосредственно с хостом - компьютером с Navigation Toolbox, установленным и установить необходимые драйверы для модуля. В противном случае используйте последовательные к USB конвертеры, чтобы преобразовать последовательные передачи в сигналы USB.

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

Свяжите с приемником и проанализируйте данные NMEA

Создайте связь с последовательным портом, где приемник GNSS соединяется specifiying port и baudrate.

% Create a serial object.
port = 'com8';
baudrate = 9600;
gpsObj = serialport(port,baudrate);

Создайте объект nmeaParser путем определения Идентификатора сообщения предложения, которое будет проанализировано как "RMC"

parserObj = nmeaParser("MessageId","RMC");

Считайте значения, полученные из приемника, проанализируйте значение, чтобы получить широту и долготу, и построить местоположение на карте наряду с timstamp, на время, заданное тайм-аутом.

an = [];
timeOut = 10;
ts = tic;
while(toc(ts)<timeOut)
    % Read line by line from the serial object.
    data = readline(gpsObj);
    rmcData = parserObj(data);
    % Status = 0, indicates, the input NMEA sentence is an valid RMC
    % sentence.
    if rmcData.Status == 0
        fixStatus = rmcData.FixStatus;
        latitude = rmcData.Latitude;
        longitude = rmcData.Longitude;
        gpsTime = rmcData.UTCDateTime;
        % Plot the position in geographic coordinates.
        geoplot(latitude,longitude,'Marker',"diamond",'MarkerSize',10,'Color','b', ...
            'MarkerFaceColor','r');
        % Selects the basemap.
        geobasemap streets;
        % Fix Status A represents the satellite fix is obtained.
        if fixStatus == "A"
            % Adjust the geographic limits of the current geographic axes.
            geolimits([latitude-2.5,latitude+2.5],[longitude-2.5,longitude+2.5]) ;
            txt = strcat("Timestamp: ",string(gpsTime));
        else
            txt =  "No Fix";
        end
        % Update time or Fix Status on the figure.
        delete(an);
        an = annotation('textbox', [0.005, 0.98, 0.6, 0.01], 'FitBoxToText','on', ...
            'string', txt,'Color','blue','FontSize',10);
    end
end

Постройте Местоположение путем Чтения Предложений NMEA, Сохраненных в Файле журнала

Этот раздел показывает, как читать, данные о приемнике GNSS в формате NMEA вошли в систему текстовый файл, проанализируйте необработанные данные, чтобы получить информацию местоположения и построить местоположение, полученное в карте. Широта и долгота, используемая, чтобы построить местоположение, могут быть получены из нескольких предложений NMEA. В этом разделе мы используем предложение GGA для широты экс-такта и долготы.

Откройте файл журнала, включенный с этим примером, и считайте данные из файла.

% Opens the file gpsLog.txt with read access.
fileID = fopen('gpsLog.txt','r');
% Read the text file.
gpsData = fscanf(fileID,'%c');

Создайте объект nmeaParser путем определения идентификатора сообщения как GGA. Используйте объект nmeaParser проанализировать данные, считанные из файла журнала.

parserObj = nmeaParser('MessageId','GGA');
% Parse the NMEA Data.
ggaData = parserObj(gpsData);

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

% Initialize variables.
latVector = zeros(1,numel(ggaData));
lonVector = zeros(1,numel(ggaData));
for i=1:length(ggaData)
    % Check if the parsed GGA sentences are valid and if they are valid, get the
    % latitude and longitude from the output structures. Status = 0,
    % indicates the data is valid
    if ggaData(i).Status == 0
        latVector(i) = ggaData(i).Latitude;
        lonVector(i) = ggaData(i).Longitude;
    end
end
% Remove Nan value in latitude and longitude data, if any. nmeaParser object
% returns NaN for a value if the value is not available in the sentence.
% For example, latitude and longitude data are not available if there is no
% satellite fix.
latVector = latVector(~isnan(latVector));
lonVector = lonVector(~isnan(lonVector));

% Plot the position in geographic coordinates
geoplot(latVector,lonVector,'Marker',"*",'MarkerSize',3, ...
    "Color",'blue','MarkerFaceColor','red');
% Selects the basemap
geobasemap 'topographic';

Постройте Спутниковое Положение Используя skyplot

В этом разделе вы читаете спутниковую информацию о положении из предложений GSV, сохраненных в файле журнала NMEA, и строите азимут и данные о вертикальном изменении с помощью skyplot.

Откройте файл журнала, включенный с этим примером, и считайте данные из файла.

% Opens the file gpsLog.txt with read access
fileID = fopen('gpsLog2.txt','r');
% Read the text file
gpsData = fscanf(fileID,'%c');

Создайте объект nmeaParser определение идентификатора сообщения как GSV. Используйте объект nmeaParser проанализировать данные, считанные из файла журнала.

parserObj = nmeaParser('MessageId','GSV');
% Parse the NMEA Data
gsvData = parserObj(gpsData);

Считайте азимут и вертикальное изменение из проанализированных данных и постройте спутниковое положение с помощью skyplot. Полная спутниковая информация может быть доступной в нескольких предложениях GSV. В этом разделе мы комбинируем всю satellilte информацию на цикл прежде, чем построить их.

az = []; el = []; satID = []; prevSentenceNumber = 0;
% Create an empty skyplot
sp = skyplot([], [],[]);
for dataCount = 1:numel(gsvData)
    % The complete satellite information for the GPS frame might be
    % available in multiple GSV sentences. The various fields in the GSV
    % sentence can be used to combine the information into a single frame.
    % In this example, we use sentence number and number of satellites in
    % view to combine the information. The SentenceNumber of the GSV data
    % is expected to be sequential for a given frame of GPS data and total
    % number of azimuth and elevation data should be equal to satellites
    % in view.
    if gsvData(dataCount).SentenceNumber == prevSentenceNumber + 1
        az = [az, gsvData(dataCount).Azimuth];
        el = [el, gsvData(dataCount).Elevation];
        satID = [satID, gsvData(dataCount).SatelliteID];
        prevSentenceNumber = gsvData(dataCount).SentenceNumber;
        satellitesinView = gsvData(dataCount).SatellitesInView;
        % Once all the satellite information in a GPS frame is obtained,
        % plot the  satellite position using skyplot
        if numel(az) == satellitesinView && numel(el) == satellitesinView
            set(sp, 'AzimuthData', az, 'ElevationData', el,'LabelData', satID);
            drawnow;
            az = []; el = []; satID = []; prevSentenceNumber = 0;
            % The pause is just to see the satellite position changes in
            % the plot
            pause(2);
        end
    else
        az = []; el = []; satID = []; prevSentenceNumber = 0;
    end
end

Смотрите также