/ Forside / Karriere / Uddannelse / Højere uddannelser / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Højere uddannelser
#NavnPoint
Nordsted1 1588
erling_l 1224
ans 1150
dova 895
gert_h 800
molokyle 661
berpox 610
creamygirl 610
3773 570
10  jomfruane 570
rotationsmatrix
Fra : Troels Thomsen


Dato : 06-03-03 16:10

Hej,

Jeg har en 3x3 rotationsmatrix med tal, som beskriver et objekts rotationer
omkring akserne A,E,R. Se definition sidst i mailen. Men hvordan regner jeg
baglæns for at finde f.eks. R?

R = atan( M32 / M33 )
Men dette går jo galt når R nærmer sig 90 grader og jeg dividerer med nul?

E = -asin( M31 )
Dette er heller ikke entydigt idet sin(80 grader) = sin(100 grader)

(vælg en fast-afstands-font for at dette bliver smukt)

---------------------------------------------------------------

COS(E)*COS(A) | -COS(R)*SIN(A) | SIN(R)*SIN(A)

| +SIN(R)*SIN(E)*COS(A) | +COS(R)*SIN(E)*COS(A)

---------------------------------------------------------------

COS(E)*SIN(A) | COS(R)*COS(A) | -SIN(R)*COS(A)

| +SIN(R)*SIN(E)*SIN(A) | +COS(R)*SIN(E)*SIN(A)

---------------------------------------------------------------

-SIN(E) | SIN(R)*COS(E) | COS(R)*COS(E)

| |

---------------------------------------------------------------




(folkeskole kombinatorik siger mig at jeg kan lave 3 ligninger med 3
ubekendte på 84 forskellige måder ud fra dette.)

mvh
Troels



 
 
Jonas Møller Larsen (08-03-2003)
Kommentar
Fra : Jonas Møller Larsen


Dato : 08-03-03 06:55

Troels Thomsen wrote:
>
> Hej,
>
> Jeg har en 3x3 rotationsmatrix med tal,

Det ligner noget Euler-rotation. Ifølge
http://mathworld.wolfram.com/EulerAngles.html er der mange
konventioner for, hvad de enkelte vinkler betyder.

> som beskriver et objekts rotationer omkring akserne A,E,R.

A, E og R er vinkler. Der skal to vinkler til at fastlægge en
akse.

> Se definition sidst i mailen. Men hvordan regner jeg
> baglæns for at finde f.eks. R?
>
> R = atan( M32 / M33 )
> Men dette går jo galt når R nærmer sig 90 grader og jeg dividerer med nul?

Skal det bruges i et computerprogram? Så kan du sætte R til 90,
hvis M33 er lig nul og ellers bruge formlen. Derudover skal der
lægges 180 grader til resultatet, hvis cos(R) < 0, fordi atan(...)
returnerer en vinkel i intervallet ]-90; +90[ grader.

(Måske har dit programmeringssprog en arcustangensfunktion, som
tager to parametre - atan2(x, y) - og som automatisk gør
ovenstående.)

> E = -asin( M31 )
> Dette er heller ikke entydigt idet sin(80 grader) = sin(100 grader)

I hvilke intervaller ligger vinklerne? Mit gæt er, at E er
begrænset til intervallet [-90; 90[, mens A og R ligger i hele [0;
360[, sådan at E kan bestemmes alene ud fra SIN(E).

> (vælg en fast-afstands-font for at dette bliver smukt)
>
> ---------------------------------------------------------------
>
> COS(E)*COS(A) | -COS(R)*SIN(A) | SIN(R)*SIN(A)
>
> | +SIN(R)*SIN(E)*COS(A) | +COS(R)*SIN(E)*COS(A)
>
> ---------------------------------------------------------------
>
> COS(E)*SIN(A) | COS(R)*COS(A) | -SIN(R)*COS(A)
>
> | +SIN(R)*SIN(E)*SIN(A) | +COS(R)*SIN(E)*SIN(A)
>
> ---------------------------------------------------------------
>
> -SIN(E) | SIN(R)*COS(E) | COS(R)*COS(E)
>
> | |
>
> ---------------------------------------------------------------
>
> (folkeskole kombinatorik siger mig at jeg kan lave 3 ligninger med 3
> ubekendte på 84 forskellige måder ud fra dette.)

Jeg ville nok gøre følgende:

1. bestemme E ud fra -SIN(E).
2. beregne COS(E) (som er positiv) med idiotformlen.
3. finde A og R ud fra henholdsvis (COS(A), SIN(A)) og (COS(R),
SIN(R)), som er givet ved M11, M21, M33 og M32.
4. evt. overveje tilfældet COS(E)=0 nærmere.

(Hvad skal det bruges til?)

--
Jonas Møller Larsen

Troels Thomsen (12-03-2003)
Kommentar
Fra : Troels Thomsen


Dato : 12-03-03 16:55

> 4. evt. overveje tilfældet COS(E)=0 nærmere.

Tak for svaret, jeg har bakset med det siden og er selv kommet et stykke
også.

> I hvilke intervaller ligger vinklerne? Mit gæt er, at E er
> begrænset til intervallet [-90; 90[, mens A og R ligger i hele [0;
> 360[, sådan at E kan bestemmes alene ud fra SIN(E).

Jeg får data fra en sensor der kan positioneres frit i rummet (inden for en
kasse med sidelængden 32 tommer, tror jeg). Jeg får x,y,z position + en
rotationsmatrix som beskrevet. Jeg skal måle og vise maksvinklerne for
objektet. Forestil dig f.eks. at sensoren var monteret på dit håndled og du
så skulle måle hvor meget du kunne bevæge den.

>
> 4. evt. overveje tilfældet COS(E)=0 nærmere.
Ja, så ser matrixen således ud:

--------------------------------------------------

0 | -COS(R)*SIN(A) | SIN(R)*SIN(A)

| +SIN(R)*COS(A) | +COS(R)* COS(A)

--------------------------------------------------

0 | COS(R)*COS(A) | -SIN(R)*COS(A)

| +SIN(R)* SIN(A) | +COS(R)* SIN(A)

--------------------------------------------------

1 | 0 | 0

--------------------------------------------------



Hvis man har gymnasie-trigenometrien helt på dupperne, ser man at i disse 4
celler står sin(r+a)og cos(r+a) (og samme negativt). Dvs at man kun kan
isolere summen af r+a drejningen.
Denne matrix er lavet ud fra drejning om akserne z , y , x (i denne
rækkefølge) med værdierne R , E , A . Hvis du udnævner tommeltot pegefinger
og langemand til x,y,z akse og drejer med disse værdier :
(i grader)
0 , 90 , 90
eller
90 , 90 , 0
eller
45 , 90 , 45
- så havner man det samme sted, som formelen også siger.


Så helt fundementalt er problemet altså at når E er 90 grader så kan man
ikke sige hvor meget A og R er, kun summen.
Når man regner 'forlæns', altså vil dreje fx en vektor med værdierne a,90,r
så havner den det rigtige sted, og man kan være bedøvende ligeglad med at
det faktisk kunne have ladet sig gøre med værdierne r,90,a også. Men jeg har
det problem at jeg skal regne 'baglæns' dvs. måle og vise
max-vinkeldrejningen i alle retningerne, og det er jo lidt problematisk så
....
Der er en fysisk begrænsning på vandringen af objektet vi måler på. Den
sørger vi for at få til at falde sammen med den akse, der ikke må give 90
grader.


Jeg har en alternativ ide, men den tager noget tid at lave, tror jeg:


Når sin(e) kommer "for tæt på" 1 (og de fire andre elementer nærmer sig nul)
gemmer man
r og a rotationerne. Derefter skifter man udregningsmetode og får dermed kun
summen af r og a. Dem deler man i samme forhold som de gemte r og a
rotationer. Når sin(e) igen har en fornuftig størrelse skifter man tilbage
til den første udregningsmetode. Alle resultater køres igennem et FIR
lavpas filter for at udjævne springet i vinklerne som skiftet af
udregningsmetode nok vil lave.
Fusk på en måde, men husk at det er helt
usansynligt at nogen er i stand til at holde f.eks. håndledet på 90 grader
+/- 1 grad
og samtidig lave den helt bestemte a-r rotation som vi ikke kan detektere
(idet vi kun har summen som vi som beskrevet deler ud på a og r). Hvis man
svinger lidt mere med hånden vil man skifte frem og tilbage mellem
udregningsmetoderne, og så vil a og r blive opdateret og bevægelsen vil se
kontinuert ud på skærmen.

?????



mvh Troels





Jonas Møller Larsen (13-03-2003)
Kommentar
Fra : Jonas Møller Larsen


Dato : 13-03-03 06:32

Troels Thomsen wrote:
> Jeg får data fra en sensor der kan positioneres frit i rummet (inden for en
> kasse med sidelængden 32 tommer, tror jeg). Jeg får x,y,z position + en
> rotationsmatrix som beskrevet. Jeg skal måle og vise maksvinklerne for
> objektet.

Isoleret set er de tre vinkler vist ikke synderligt interessante,
fordi de konkrete gradtal afhænger af, hvordan du tilfældigvis har
valgt at lægge det fiktive koordinatsystem. Men hvis du bruger
vinklerne til at beregne fysiske egenskaber ved sensoren - f.eks.
farten af et fast punkt på sensoren eller sensorens øjeblikkelige
rotationsfrekvens - så har det heldigvis ingen betydning, hvordan
du vælger E, A og R; De skal bare opfylde ligningerne og give den
rigtige matrix, så bør de fysiske størrelser komme rigtigt ud. Du
bekymrer dig unødigt

[klip, matrix]

Der er vist et par forkerte fortegn i matricen, men pointen er god
nok:

> Så helt fundementalt er problemet altså at når E er 90 grader så kan man
> ikke sige hvor meget A og R er, kun summen.

Med andre ord er afbildningen fra (A, E, R) til rotationsmatricer
surjektiv (alle matricer "rammes") men ikke injektiv (fordi samme
matrix rammes af flere kombinationer af vinkler). Det svarer til
problemstillingen med at beskrive Jordens overflade med længde- og
breddegrader (l, b): Det virker fint, bortset fra de to kedelige
tilfælde b = +-90 grader (nord- og sydpolen), hvor l ikke er
entydigt defineret. Jeg mener, at det generelt er umuligt at vælge
en (pæn) parametrisering af en kugleoverflade, sådan at der er en
bijektiv sammenhæng mellem tal-par og punkter på kugleoverfladen.
Det ville ikke overraske mig, om det samme skulle gælde for
sammenhængen mellem tal-tripler og 3-d rotationer (måske nogen vil
uddybe?). Hvis ellers dette holder, er konsekvensen, at det er
umuligt at definere tre tal (vinkler), som ændrer sig kontinuert,
selvom sensoren drejes kontinuert.

> Der er en fysisk begrænsning på vandringen af objektet vi måler på. Den
> sørger vi for at få til at falde sammen med den akse, der ikke må give 90
> grader.

Det forstod jeg ikke, men hvis det betyder, at I kan undgå E=90
grader, er det jo fint.

> Jeg har en alternativ ide, men den tager noget tid at lave, tror jeg:
>
> Når sin(e) kommer "for tæt på" 1 (og de fire andre elementer nærmer sig nul)
> gemmer man
> r og a rotationerne. Derefter skifter man udregningsmetode og får dermed kun
> summen af r og a. Dem deler man i samme forhold som de gemte r og a
> rotationer. Når sin(e) igen har en fornuftig størrelse skifter man tilbage
> til den første udregningsmetode.

Jeg er ikke overbevist om, at det vil virke, fordi selv med en
jævn bevægelse vil du bevæge dig ind og ud af "det kritiske
område" ad to forskellige ruter. r og a (og sikkert også r/a) vil
springe diskontinuert.

--
Jonas Møller Larsen

Søg
Reklame
Statistik
Spørgsmål : 177503
Tips : 31968
Nyheder : 719565
Indlæg : 6408541
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste