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

Drehwinkel und -achse aus Roll, Nick- und Gierwinkel...

 

dabauer82
Forum-Century

Forum-Century



Beiträge: 184
Anmeldedatum: 21.03.08
Wohnort: ---
Version: R2008a, R2010b
     Beitrag Verfasst am: 28.08.2009, 11:49     Titel: Drehwinkel und -achse aus Roll, Nick- und Gierwinkel...
  Antworten mit Zitat      
Hallo liebe Gemeinde,

ich habe folgendes Problem. Mir liegen drei Winkel, die sogenannten Roll-, Nick- und Gierwinkel vor. Aus diesen drei Winkel soll ich eine Drehachse und einen Drehwinkel im Raum ermitteln.

Zur Zeit würde ich das so machen:

* Gesamtdrehmatrix bilden aus Rx*Ry*Rz
* Eigenwerte und Eigenvektoren bestimmen
* Eigenvektor zum Eigenwert = 1 ist meine Drehachse
* belibigen Vektor der Drehebene senkrecht zur Drehachse finden
* cos aus diesen beiden Vektoren ist der Drehwinkel

Gibt es in Matlab Funktionen und Routinen die diese Aufgabe erfüllen oder die mir helfen können? Oder gibt es einen besseren Weg?

Vielen Dank,

dabauer82
Private Nachricht senden Benutzer-Profile anzeigen


dabauer82
Themenstarter

Forum-Century

Forum-Century



Beiträge: 184
Anmeldedatum: 21.03.08
Wohnort: ---
Version: R2008a, R2010b
     Beitrag Verfasst am: 21.09.2009, 11:58     Titel:
  Antworten mit Zitat      
Hallo Freunde,

ich hab das Problem inzwischen eingrenzen können und habe herausgefunden, wie ich an Drehachse und Drehwinkel komme.

Nur habe ich das Problem, dass mein Drehwinkel imaginer ausgegeben wird. Woran liegt das?

Als Drehung habe ich einen Winkel von 0° für x- und y-Achse und einen Winkel von 45° um die z-Achse angesetzt.

Das sind die Ergebnisse

Code:


Hier die Parameter und Ergebnisse: Drehwinkel um X und Y-Achse = 0, Z = 45°

Rx =

     1     0     0     0
     0     1     0     0
     0     0     1     0
     0     0     0     1


Ry =

     1     0     0     0
     0     1     0     0
     0     0     1     0
     0     0     0     1


Rz =

    0.7071   -0.7071         0         0
    0.7071    0.7071         0         0
         0         0    1.0000         0
         0         0         0    1.0000


Rxyz =

    0.7071   -0.7071         0         0
    0.7071    0.7071         0         0
         0         0    1.0000         0
         0         0         0    1.0000


axis =

     0
     0
     1


spur =

    3.4142


angle =

        0 +36.2668i


 


und das der Code:

Code:

%% Bestimme Drehmatrix

% Drehwinkel radiant
angle_R_rad = angle_R*(pi/180);
angle_P_rad = angle_P*(pi/180);
angle_Y_rad = angle_Y*(pi/180);

% homogene Rotationsmatrizen erstellen
Rx = makehgtform('xrotate',angle_R_rad)
Ry = makehgtform('yrotate',angle_P_rad)
Rz = makehgtform('zrotate',angle_Y_rad)

% bestimme Gesamtrotationsmatrix
% Achtung, Konvention. Nur Rotationen um die gleiche Achse sind
% vertauschbar. Hier ist demnmach keine Rotationmatrix beliebig
% poristinierbar, deswegen wird grundsätzlich zu erst um x, dann y und dann
% z gedreht!
Rxyz = Rx*Ry*Rz
%Rzyx = Rz*Ry*Rx;

% bestimme Eigenvektoren und Eigenwerte
[Vxyz,Dxyz] = eig(Rxyz, 'nobalance');
%[Vzyx,Dzyx] = eig(Rzyx, 'nobalance');

% Finde Eigenwert 1 - betrachte nicht die homogene Zeile
[r,c] = find(round(Dxyz(1:3,1:3)) == 1);

% Finde Eigenvektor = Drehachse zum Eigenwert 1
axis = Vxyz(1:3,c)

%% Bestimme Drehwinkel
% TRACE(A) is the sum of the diagonal elements of A, which is
% also the sum of the eigenvalues of A.
% sum(diag(A)) ist sehr viel schneller als trace(A), vorallem wenn man Dxyz
% kennt!

spur = sum(diag(Dxyz))
angle = acosd(0.5*(spur-1))

%axis = {axis};
%angle = {angle};
Private Nachricht senden Benutzer-Profile anzeigen
 
dabauer82
Themenstarter

Forum-Century

Forum-Century



Beiträge: 184
Anmeldedatum: 21.03.08
Wohnort: ---
Version: R2008a, R2010b
     Beitrag Verfasst am: 21.09.2009, 12:36     Titel:
  Antworten mit Zitat      
gelöst, mann muss -2 rechnen statt -1!
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.