В этом примере показано, как проанализировать информацию от предложений NMEA и использовать полученную информацию, чтобы построить местоположение. В этом примере вы используете nmeaParser
системный объект, доступный в Navigation Toolbox к:
Получите широту и долготу из живых данных, полученных из приемника GNSS, и постройте местоположение в карте.
Получите широту и долготу от предложений NMEA, сохраненных в файле журнала, и постройте местоположение в карте.
Получите постионную информацию спутников в поле зрения и постройте спутниковый азимут и данные о вертикальном изменении с помощью skyplot
.
Можно считать местоположение, данное приемником 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
Этот раздел показывает, как читать, данные о приемнике 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';
В этом разделе вы читаете спутниковую информацию о положении из предложений 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