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

Flugdrohne, Serialport Datenverarbeitung -> Optimierung..

 

Willa
Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 80
Anmeldedatum: 23.05.08
Wohnort: Bremen
Version: Willa v1.0
     Beitrag Verfasst am: 26.07.2009, 12:42     Titel: Flugdrohne, Serialport Datenverarbeitung -> Optimierung..
  Antworten mit Zitat      
Hi!
Für meine Eigenbau Drohne möchte ich gerne die aktuelle Fluglaage grafisch darstellen. Ich stehe bei dieser Sache noch gaaaanz am Anfang. Die Drohne allerdings fliegt schon sehr gut.
Vielleicht erstmal ein Video vom aktuellen Stand:
- SIEHE Anhang

Der Quellcode dazu (erst das script welches ich manuell starte):
Code:

clc
clear
s = serial('COM5','BaudRate',115200);
fopen(s);
s.BytesAvailableFcnMode = 'terminator';
disp('Ready...')
s.BytesAvailableFcn = @empfangen3D;

figure;
[x,y] = meshgrid(-50:50:50,-50:50:50);
z=[1 1 1; 0 0.1 0; -1 0 0];
h=surface(x,y,z);
axis equal;
xlim([-50 50])
ylim([-50 50])
zlim([-50 50])
view(45,30)
setappdata(0,'h',h);
 


Und hier das Callback, welches beim Empfang von seriellen Daten automatisch aufgerufen wird:
Code:

function empfangen3D (s, event)
h=getappdata(0,'h');
A=getappdata(0,'A');
B=getappdata(0,'B');
try
    string=fscanf(s);
    k = strfind(string, 'A');
    fff = strfind(string, 'B');
    if k==1
        A=str2num(string(2:end));
        k=0;
    end
    if fff==1
        B=str2num(string(2:end));
        fff=0;
    end
    z=[-A+B -A -A-B; 0+B 0 0-B; A+B A A-B];
catch
    disp('error reading from serial...');
    fclose(s)
end

setappdata (0,'A',A);
setappdata (0,'B',B);
try
    set(h, 'zdata',z)
    axis equal;
    xlim([-50 50])
    ylim([-50 50])
    zlim([-50 50])
    drawnow;
catch
    fclose(s)
    disp('...something went wrong or figure was closed.....')
end
end
 


Meine Drohne sendet übrigens folgende Daten per RS232:
'A123' -> Nickwinkel
'B456' -> Rollwinkel

Und jetzt endlich meine Fragen....:
Im Moment wird die ganze Arbeit vom BytesAvailable - Callback erledigt. Ich denke, das ist nicht optimal. Denn das Callback soll ja eigentlich nur Daten aus dem Serialport holen. Wie kann ich die Arbeit auslagern? Ich bräuchte eine Funktion, die die ganze Zeit läuft (vielleicht mit 25Hz), die Daten aus dem BytesAvailable - Callback holt und einen surf plot malt. Aber wie geht soetwas...? "empfangen3D" müsste Bescheid sagen, wenn neue Daten da sind und jemand anderes müsste irgendwie diese Daten abholen....

Wäre sehr schön wenn ihr mir helfen könntet!

Viele Grüße,
William

matlab3d.wmv
 Beschreibung:

Download
 Dateiname:  matlab3d.wmv
 Dateigröße:  2.88 MB
 Heruntergeladen:  597 mal
Private Nachricht senden Benutzer-Profile anzeigen


Willa
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 80
Anmeldedatum: 23.05.08
Wohnort: Bremen
Version: Willa v1.0
     Beitrag Verfasst am: 27.07.2009, 21:20     Titel:
  Antworten mit Zitat      
Keiner einen Vorschlag...? Dabei hab ich doch sogar einen Praxisbezug und bunte & bewegte Bilder angehängt..... Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
Affenmann
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 95
Anmeldedatum: 22.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2009, 07:36     Titel:
  Antworten mit Zitat      
Sorry,
kein Vorschlag, aber das ding ist ja hammercool!!!!! Shocked

Wie kommt man auf die idee sowas zu bauen??
Wie baut man sowas???

Auch haben will Cool
Private Nachricht senden Benutzer-Profile anzeigen
 
Willa
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 80
Anmeldedatum: 23.05.08
Wohnort: Bremen
Version: Willa v1.0
     Beitrag Verfasst am: 28.07.2009, 08:28     Titel:
  Antworten mit Zitat      
Hallo!
Feedback zum Copter ist natürlich auch schön Very Happy. Ich bin Modellflieger und seit kurzem bastle ich ein bisschen mit Mikrocontrollern, und so ein Copter ist dann natürlich eine schicke Kombination.
Falls es dich interessiert, hier noch zwei Videos:
1. http://www.youtube.com/watch?v=VCKO3ku5cZg
2. SIEHE Anhang

Sowie diverse weitere auf meinem Youtube channel. Weitere Infos gibts im Roboternetz:
http://www.roboternetz.de/phpBB2/viewtopic.php?p=412187#412187

Aber zurück zu meiner Frage...:
Vielleicht kann ich es auch etwas konkreter formulieren:
Ist es sinnvoll aus dem BytesAvailable Callback die empfangenen Daten per setappdata(0,...) zu speichern? Oder dauert das auch sehr lange? Dann würde ich quasi parallel ein anderes Skript ausführen, welches ca so aussieht:
Code:

while "figure1 nicht geschlossen"
   z=getappdata(0,...);
   set(handleFig1, 'zdata', z);
   pause (0.04)
end
 


Während dem Pause Befehl, werden da noch Daten vom seriellen Port abgeholt? Oder wird ganz Matlab komplett blockiert? Kann man einen Timer oder so benutzen?

looperama.wmv
 Beschreibung:

Download
 Dateiname:  looperama.wmv
 Dateigröße:  24.56 MB
 Heruntergeladen:  571 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Willa
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 80
Anmeldedatum: 23.05.08
Wohnort: Bremen
Version: Willa v1.0
     Beitrag Verfasst am: 28.07.2009, 20:46     Titel:
  Antworten mit Zitat      
Ich hab ne Lösung gefunden (mit einem Timer wird das Bild gezeichnet). Ausserdem wurde das ganze noch etwas aufgehübscht:


Bild und Video siehe Anhang.

matlab2.wmv
 Beschreibung:

Download
 Dateiname:  matlab2.wmv
 Dateigröße:  3.77 MB
 Heruntergeladen:  610 mal
matlab.jpg
 Beschreibung:

Download
 Dateiname:  matlab.jpg
 Dateigröße:  77.31 KB
 Heruntergeladen:  611 mal
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.