реклама на сайте
подробности

 
 
> NMEA информация с GPS, Как правильно считать и разобрать NMEA информацию
wookX
сообщение Apr 13 2007, 14:23
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 30-03-07
Пользователь №: 26 626



День добрый.
У меня возникла проблема.
Подключил ГПС приемник к компу.
Открыл в Матлаб СОМ порт. Подключился к ГПС приемнику. Считал NMEA информацию. А как теперь ее разобрать? Чтоб выделить Широту, долготу, время?
Листинг программы следующй:

%Create a serial port object.
obj1 = instrfind('Type', 'serial', 'Port', 'COM3', 'Tag', '');

%Create the serial port object if it does not exist
%otherwise use the object that was found.
if isempty(obj1)
obj1 = serial('COM3');
else
fclose(obj1);
obj1 = obj1(1)
end

%Connect to instrument object, obj1.
fopen(obj1);

%Read NMEA sequencies
for i=1:100
data1 = fscanf(obj1);
ID=sscanf(data1,'%6c',1)
If ID == '$GPRMC'
[UTC, Status, Latitude, NS, Longitude, EW, Speed, Course, Date, Magnetic, Mode]=strread(data1(8:end),'%s %s %s %s %s %s %s %s %s %s %s', 'delimiter',',')
Time(i)=str2num(UTC(1:2));
Time(i)=Time(i)+str2num(UTC(3:4))/60;
Time(i)=Time(i)+str2num(UTC(5:end))/3600;
%Time(i)=Time(i)+str2num(UTC(5:9))/3600;
Lat(i)=str2num(Latitude(1:2));
Lat(i)=Lat(i)+str2num(Latitude(3:end))/60;
%Lat(i)=Lat(i)+str2num(Latitude(3:10))/60;
if (NS == 'S')|(NS == 's')
Lat(i)=-Lat(i);
end
Long(i)=str2num(Longitude(1:3));
Long(i)=Long(i)+str2num(Longitude(4:end))/60;
%Long(i)=Long(i)+str2num(Longitude(4:11))/60;
if (EW == 'W')|(EW == 'w')
Long(i)=360-Long(i);
end
Vt(i)=str2num(Speed);
Psi(i)=str2num(Course);
end
%Disconnect from instrument object, obj1.
fclose(obj1);

%Clean up all objects.
delete(obj1);

Но вот не работает код sad.gif
После строки
[UTC, Status, Latitude, NS, Longitude, EW, Speed, Course, Date, Magnetic, Mode]=strread(data1(8:end),'%s %s %s %s %s %s %s %s %s %s %s', 'delimiter',',')

вылезает ошибка. Index Exceed Matrix Dimension
Когда я открыл переменную Status, то там было следующее:
UTC =
'182524'
С ковычками!!!!
А str2num не воспринимает строковую переменную в данном виде!
Может кто подскажет в чем проблема и как выделить информацию из NMEA???
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Doka
сообщение Apr 13 2007, 15:53
Сообщение #2


Electrical Engineer
******

Группа: СуперМодераторы
Сообщений: 2 163
Регистрация: 4-10-04
Пользователь №: 778



Цитата(wookX @ Apr 13 2007, 15:23) *
Когда я открыл переменную Status, то там было следующее:
UTC =
'182524'
С кaвычками!!!!
А str2num не воспринимает строковую переменную в данном виде!
Может кто подскажет в чем проблема и как выделить информацию из NMEA???


так и удалите эти кавычки (если не изменяет память в матлабе со строками можно обращаться также как с элементами массивов, т.е. просто перекопируйте символы, исключив первый и последний)


PS: тему переношу, как не имеющу. отношения к "Rf & Microwave Design"


--------------------
Блог iDoka.ru
CV linkedin.com/in/iDoka
Sources github.com/iDoka


Never stop thinking...........................
Go to the top of the page
 
+Quote Post
wookX
сообщение Apr 16 2007, 15:45
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 30-03-07
Пользователь №: 26 626



Цитата(Doka @ Apr 13 2007, 15:53) *
так и удалите эти кавычки (если не изменяет память в матлабе со строками можно обращаться также как с элементами массивов, т.е. просто перекопируйте символы, исключив первый и последний)


Я не понимаю, почему, когда вводишь:
A='ABC'
Ответ:
A=
ABC
Без кавызек???

А когда я считал он сам поставил эти ковычки?
И если считать без кавычек, то строки будут выглядеть так????

Time(i)=str2num(UTC(2:3));
Time(i)=Time(i)+str2num(UTC(4:5))/60;
Time(i)=Time(i)+str2num(UTC(6:end-1))/3600; % Не уверен можно ли так записать --> end-1
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 02:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01408 секунд с 7
ELECTRONIX ©2004-2016