Odg: alexmos problem
Reply #19 –
Položaj ( nagib, "attitude") nekog objekta u 3D prostoru može se reprezentirati na mnogo načina - matrica rotacije, eulerovi kutevi, quaternioni...
Najintuitivniji su eulerovi kutevi, i posebno su pogodni pošto se njihov iznos može direktno ubaciti u PID regulator, dok je za ostale načine potrebno računanje koje mali AVR vrlo sporo izvodi.
Eulerovi kutevi ( yaw, pitch roll) nisu strogo definirani, već ovise o redoslijedu rotacija:
- avion je okrenut prema sjeveru, poravnat sa horizontom - zakrećemo ga npr. roll=90, pitch=90
1. Ako prvo zakrenemo roll, spuštamo desno krilo prema zemlji, nakon toga pitch - gledamo na istok, sa desnim krilom prema zemlji...
2. Ako prvo zakrenemo pitch, gledamo u nebo, zatim roll - i dalje gledamo u nebo, sa desnim krilom prema sjeveru...
Očito će različit redoslijed rotacije dati potpuno različit položaj aviona, iako su kutevi rotacije isti - u točki 1. avion gleda na istok, dok u točki dva gleda prema nebu...
Primjer singulariteta kod yaw-pitch-roll redoslijeda:
1. Avion je u globalnom sustavu okrenut prema sjeveru, horizontalno, i želimo definirati njegovu orjentaciju u odnosu na taj položaj ( neka vrsta "ishodišta")
2. Okrećemo ga prvo po yaw oko vertikalne osi, npr za 90, pa gledamo na zapad...
3. Zatim ga okrećemo po NOVONASTALOJ pitch osi (sjever-jug, gledano iz aviona) za 90, znači gleda u nebo
4. Zatim ga okrećemo po NOVONASTALOJ roll osi za neki kut, međutim, roll os aviona se poklopila sa vertikalnom osi od zemlje, te u globalu samo ponavljamo rotaciju iz točke 2 - izgubili smo jednu os, jer je pitch od 90 stupnjeva doveo roll os točno u poziciju gdje je bila yaw os...
Singularitet radi srednja rotacija, u slučaju yaw-PITCH-roll redoslijeda to je PITCH, koji pravi probleme na +- 90 stupnjeva. Ako promijenimo redoslijed rotacije u našoj reprezentaciji, singularitet se samo seli na rotaciju koja je druga (srednja) u nizu od 3 rotacije.
Eulerovi kutevi mogu zapisati sve položaje u prostoru, ali problem je oko točaka singulariteta gdje mali pomaci objekta u prostoru uzrokuju velike pomake u kutevima, što radi probleme npr. kod interpolacije u 3D grafici ( mislim da ima jedan član foruma koji to bolje poznaje nego ja ) i našem PID regulatoru.
Dakle:
- Eulerovi kutevi su zgodni za male mikrokontrolere bez CPU snage, manje računanja pa ih zato koristimo
- Imaju singularitete koje ne možemo izbjeći ( zato se uglavnom prelazi na quaternione)
- Možemo odabrati redoslijed rotacije te pozicionirati singularitete na pozicije koje ne koristimo
AlexMos ima singularitete na roll-u, na +- 90 stupnjeva, jer je to položaj koji nam za kameru uglavnom ne treba, dok na pitch=+-90 radi, jer je srednja matrica očito roll...
Prema tome, ako ne možeš okrenuti kameru pogled prema dole, što bi bio pitch po konvenciji, vjerojatno si zamijenio pitch i roll - ne samo motore, kao prvi puta, već sve skupa. Okreni senzor za 90 stupnjeva i ponovo zamijeni motore. Ili općenito, gledaj u GUI prikaz da ti je roll i pitch 0 u horizontalnom položaju, te da se mijenja pitch kada kameru zakrećeš prema dole, a ne roll ...