В этом примере показано, как анализировать информацию из предложений NMEA и использовать полученную информацию для построения графика местоположения. В этом примере используется nmeaParser системный объект, доступный на панели инструментов навигации:
Получайте широту и долготу из текущих данных, полученных от приемника GNSS, и постройте график местоположения на карте.
Получение широты и долготы из предложений NMEA, сохраненных в файле журнала, и печать местоположения на карте.
Получить информацию о положении спутников в поле зрения и построить график азимута и высоты спутника с помощью skyplot.
Можно считывать местоположение, заданное приемником GNSS, подключенным к хост-ПК, и выводить данные о местоположении в реальном времени. Широта и долгота, используемые для построения графика местоположения, могут быть получены из нескольких предложений NMEA. В этом разделе мы используем предложения RMC, полученные из приемника, для извлечения широты и долготы.
Необходимое оборудование
Модуль Ublox NEO-6M GPS
Преобразователи последовательного сигнала в USB, такие как FTDI (если модуль GPS не может быть напрямую подключен к компьютеру с помощью USB)

Настройка оборудования
Если на ресивере имеется USB-разъем, подключите модуль непосредственно к хост-компьютеру с установленным Navigation Toolbox и установите необходимые драйверы для модуля. В противном случае для преобразования последовательных передач в сигналы USB следует использовать последовательно-USB-преобразователи.
Приемники ГНСС требуют спутниковых сигналов для определения информации о местоположении. Сигналы легко обнаруживаются в местах, которые имеют ясный вид на небо. Убедитесь, что антенна модуля или приемника сохранена таким образом, чтобы она имела ясный вид на небо. Приемнику может потребоваться некоторое время для получения сигналов.
Подключение к приемнику и анализ данных NMEA
Создайте соединение с последовательным портом, к которому подключен приемник GNSS, указав port и baudrate.
% Create a serial object. port = 'com8'; baudrate = 9600; gpsObj = serialport(port,baudrate);
Создайте объект nmaseParser, указав идентификатор сообщения предложения, которое будет проанализировано как «RMC»
parserObj = nmeaParser("MessageId","RMC");
Считывайте значения, полученные из приемника, анализируйте значение, чтобы получить широту и долготу, и постройте график местоположения на карте вместе с отметкой времени в течение периода времени, заданного параметром timeOut.
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, записанные в текстовый файл, анализировать необработанные данные для получения информации о местоположении и строить график местоположения, полученного на карте. Широта и долгота, используемые для построения графика местоположения, могут быть получены из нескольких предложений NMEA. В этом разделе мы используем предложение GGA для извлечения широты и долготы.
Откройте файл журнала, включенный в этот пример, и прочитайте данные из файла.
% Opens the file gpsLog.txt with read access. fileID = fopen('gpsLog.txt','r'); % Read the text file. gpsData = fscanf(fileID,'%c');
Создайте объект nmaseParser, указав идентификатор сообщения как GGA. Для синтаксического анализа данных, считанных из файла журнала, используется объект nmaseParser.
parserObj = nmeaParser('MessageId','GGA'); % Parse the NMEA Data. ggaData = parserObj(gpsData);
Считайте местоположение из проанализированного значения и постройте график местоположения на карте, чтобы увидеть путь, пройденный приемником ГНСС.
% 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';

В этом разделе вы считываете информацию о положении спутника из предложений GSV, хранящихся в файле журнала NMEA, и выводите данные по азимуту и отметке с помощью skyplot.
Откройте файл журнала, включенный в этот пример, и прочитайте данные из файла.
% Opens the file gpsLog.txt with read access fileID = fopen('gpsLog2.txt','r'); % Read the text file gpsData = fscanf(fileID,'%c');
Создайте объект nmaseParser, указывающий идентификатор сообщения как GSV. Для синтаксического анализа данных, считанных из файла журнала, используется объект nmaseParser.
parserObj = nmeaParser('MessageId','GSV'); % Parse the NMEA Data gsvData = parserObj(gpsData);
Считайте азимут и отметку из проанализированных данных и постройте график положения спутника с помощью скайплота. Полная спутниковая информация может быть доступна в нескольких предложениях GSV. В этом разделе мы объединяем всю спутниковую информацию за цикл перед построением их графика.
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
