wookX 0 13 апреля, 2007 Опубликовано 13 апреля, 2007 · Жалоба День добрый. У меня возникла проблема. Подключил ГПС приемник к компу. Открыл в Матлаб СОМ порт. Подключился к ГПС приемнику. Считал 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); Но вот не работает код :( После строки [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??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Doka 4 13 апреля, 2007 Опубликовано 13 апреля, 2007 · Жалоба Когда я открыл переменную Status, то там было следующее: UTC = '182524' С кaвычками!!!! А str2num не воспринимает строковую переменную в данном виде! Может кто подскажет в чем проблема и как выделить информацию из NMEA??? так и удалите эти кавычки (если не изменяет память в матлабе со строками можно обращаться также как с элементами массивов, т.е. просто перекопируйте символы, исключив первый и последний) PS: тему переношу, как не имеющу. отношения к "Rf & Microwave Design" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
by-pass 0 13 апреля, 2007 Опубликовано 13 апреля, 2007 (изменено) · Жалоба Если не принципиальное сделать все на матлабе, то "все украдено до нас". http://www.visualgps.net/Papers/NMEAParser/ Изменено 13 апреля, 2007 пользователем by-pass Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
wookX 0 16 апреля, 2007 Опубликовано 16 апреля, 2007 · Жалоба так и удалите эти кавычки (если не изменяет память в матлабе со строками можно обращаться также как с элементами массивов, т.е. просто перекопируйте символы, исключив первый и последний) Я не понимаю, почему, когда вводишь: 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
wookX 0 17 апреля, 2007 Опубликовано 17 апреля, 2007 · Жалоба Всем большое спасибо. Получилось. Правда наверно не оптимально, но всетаки :) clear s = serial('COM2'); set(s,'BaudRate',4800); fopen(s); for i=1:10%00 data1=fgetl(s); ID = sscanf(data1,'%6c',1); if ID == '$GPRMC' X=strread(data1(8:end),'%s', 'delimiter', ','); UTC=char(X(1)); Time(i)=str2num(UTC(1:2))*3600; Time(i)=Time(i)+str2num(UTC(3:4))*60; Time(i)=Time(i)+str2num(UTC(5:end)); Latitude=char(X(3)); Lat(i)=str2num(Latitude(1:2)); Lat(i)=Lat(i)+str2num(Latitude(3:end))/60; NS=char(X(4)); if (NS == 'S')|(NS == 's') Lat(i)=-Lat(i); end Longitude=char(X(5)); Long(i)=str2num(Longitude(1:3)); Long(i)=Long(i)+str2num(Longitude(4:end))/60; EW=char(X(6)); if (EW == 'W')|(EW == 'w') Long(i)=360-Long(i); end Speed=char(X(7)); Vt(i)=str2num(Speed); Course=char(X(8)); Psi(i)=str2num(Course); end end fclose(s); delete(s); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться