WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

GPS-Tracking in Matlab

 

aemkey
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 07.06.10
Wohnort: Dresden
Version: ---
     Beitrag Verfasst am: 07.06.2010, 08:32     Titel: GPS-Tracking in Matlab
  Antworten mit Zitat      
Hallo,
ich bin neu hier und habe in der Suche nichts passendes gefunden.
Ich muss für eine Studienarbeit ein GPS-Signal in Matlab einlesen.
Ich bin soweit dass ich das Signal bekomme:
Code:
%
function [UTC lat_A lat_B long_A long_B x_gps velocity course] = GPS()

% create a object with serial port for gps device
gps = instrfind('Type','serial','Port', 'COM5', 'Tag', '');
if isempty (gps)
    gps = serial('COM5');
else
    fclose(gps);
    gps = gps(1);
end
fopen(gps); %connect object to serial port
set(gps, 'BaudRate', 57600);

info = fscanf(gps);

% get data from GPGGA (Global positioning system fix data)
while isempty(strmatch('$GPGGA',info))
    info = fscanf(gps);
end
data = textscan(info,'%s%f%f%c%f%c',1,'delimiter',',');

% compute UTC(HHMMSS.SSS), Universal Time Coordinated
hour = floor(data{2}/10000);
minute = floor((data{2}-hour*10000)/100);
second = round(data{2}-floor(data{2}/100)*100);
UTC = strcat(num2str(hour),':',num2str(minute),':',num2str(second));

%compute latitude(DDMM.MMM) and longitude(DDDMM.MMMM)
degree = floor(data{3}/100);
decimal = round((data{3}-degree*100)/60*10^6)/10^6;
lat_A = strcat(num2str(degree+decimal),data{4});

degree= floor(data{5}/100);
decimal = round((data{5}-degree*100)/60*10^6)/10^6;
long_A = strcat(num2str(degree+decimal),data{6});

% get data from GPVTG (Track made good and ground speed)
while isempty(strmatch('$GPVTG',info))
    info = fscanf(gps);
end
data = textscan(info,'%s%f%c%f%c%f%c%f%c',1,'delimiter',',');

% compute velocity(km/h) and course
velocity = data{8};
course = data{2};

% GPS-Koordinaten der Ampel
lat_B = 52;
long_B = 14;

% Entfernung zwischen GPS-Signalen
x_gps = arccos(sin(lat_B)*sin(lat_A) + cos(lat_B)*cos(lat_A)*cos(long_B - long_A));

% Display the results
disp({UTC,lat_A,long_A,lat_B,long_B,velocity, course});

end

Wie gesagt, ich befasse mich erst seit kurzem mit dem ganzen Thema, bin jetzt aber soweit, dass ich das Signal einlesen kann.
Nun ist meine Aufgabe die Entfernung zwischen den eingelesenen GPS-Daten mit weiteren fest vorgegebenen GPS-Daten zu berechnen. Dies möchte ich mich oben aufgeführter Formel berechnen, allerdings kommt beim Ausführen des Programms folgender Fehler:
"??? Undefined function or method 'sin' for input arguments of type 'char'.
Error in ==> GPS at 53
x_gps = (arccos(sin(lat_B)*sin(lat_A) + cos(lat_B)*cos(lat_A)*cos(long_B -long_A)));"
Was muss ich ändern damit die Funktion Sinuns und Cosinus verarbeitet werden kann?
Ziel dieses Programmes ist es kontinuierlich den Abstand zwischen den eingelesenen und den fest vorgegebenen GPS-Daten zu berechnen und bei bestimmten Entfernung Meldungen anzuzeigen. Nun erfasst dieses Programm aber nur einmalig die GPS-Daten und gibt mir ein Ergebnis aus.
Gibt es die Möglichkeit dies so umzuschreiben, dass es sozusagen live mitläuft?
Ich hoffe ihr könnt mir helfen und ich bin im richtigen Thema.
Vielen Dank schon mal für eure Hilfe.

MfG
Markus
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 07.06.2010, 09:59     Titel:
  Antworten mit Zitat      
Hallo

Code:

% Entfernung zwischen GPS-Signalen
x_gps = arccos(sin(lat_B)*sin(lat_A) + cos(lat_B)*cos(lat_A)*cos(long_B - long_A));
 


du hast ja zuvor lat_A und lat_B in STRING konvertiert,
SINUS-Fkt braucht aber Werte in Double, also STR2DOUBLE oder NUM2STR verwenden, um in DOUBLE-Werte zurückzukonvertieren.
Private Nachricht senden Benutzer-Profile anzeigen
 
aemkey
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 07.06.10
Wohnort: Dresden
Version: ---
     Beitrag Verfasst am: 08.06.2010, 08:25     Titel:
  Antworten mit Zitat      
Vielen Dank, da war der Fehler.
Gibt es die Möglichkeit das Programm "live" mitlaufen zu lassen, so dass die Entfernung immer berechnet wird und ich bei unterschreiten eines bestimmten Wertes Meldungen ausgeben kann?
Vielen Dank
MfG
Markus
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.07.2010, 09:10     Titel:
  Antworten mit Zitat      
Hallo,
habe ein Programm gefunden, welches dir weiterhelfen könnte. Allerdings bekomme ich es nicht zum laufen. Beim Ausführen kommt folgender Fehler:
Code:

> In OpenGPS at 6
??? Error using ==> ReadPacketHeader at 9
Expecting DLE at head of incoming packet, received ASCII 36

Error in ==> ReadPacket at 14
[id, sz] = ReadPacketHeader(gps);

Error in ==> WritePacketTerminator at 20
    [pid] = ReadPacket(gps);

Error in ==> WritePacket at 24
WritePacketTerminator(gps, id, data, type);

Error in ==> OpenGPS at 16
 

Aber vielleicht findest du ja den Fehler oder hier kann jemand helfen.
Gruß

SerialGPS.zip
 Beschreibung:

Download
 Dateiname:  SerialGPS.zip
 Dateigröße:  16.8 KB
 Heruntergeladen:  1012 mal
 
aemkey
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 07.06.10
Wohnort: Dresden
Version: ---
     Beitrag Verfasst am: 08.07.2010, 17:52     Titel:
  Antworten mit Zitat      
das ist genau das was ich brauche, leider bekomme ich beim ausführen des programms den gleichen fehler.
vielleicht kann ja mal jemand drüber schauen und weiter helfen.

vielen dank
markus
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.