Stránka 1 z 1

Wii Motion Plus =>vypočítání úhlu natočení (gyroskop)

Napsal: 20 zář 2011, 18:59
od radar0101
Zdravím,
potřeboval bych pomoci, mam doma gyroskop od konzole Wii a potřebuju z něj dostat úhly natočení. Data z něj přečtu ale bohužel ta čísla co z něj dostanu, mě nic neřikaj. Co je to za hodnoty?
Děkuji za pomoc.

Zde je můj program pro přečtení dat.


Kód: Vybrat vše

  '$sim
$regfile = "m8def.dat"                                      'Soubor s deklaracemi
$crystal = 8000000                                          'Kmitočet krystalu v Hz
$baud = 57600
$hwstack = 100
$swstack = 64
$framesize = 64

'''''''
Dim X_natoceni As integer
Dim Y_natoceni As Integer
Dim Z_natoceni As Integer
Dim X_natoceni_0 As Integer
Dim Y_natoceni_0 As Integer
Dim Z_natoceni_0 As Integer
Dim Soucet As Word
'''''''

Dim Gyro_prijem(6) As Integer
Dim Adresa_w As Byte
Dim Adresa_r As Byte
''''''''''


Dim I As Byte
                                              '
'''''''''''''
Adresa_w = &HA6
Adresa_r = &HA4


Config Scl = Portd.7
Config Sda = Portb.0
Config I2cdelay = 2.5us
'''''''''''''



Gosub Gyro_inic
Waitms 100
Gosub Gyro_kalibrace_nuly
Waitms 100

Do

Gosub Gyro_prijem_dat


Print X_natoceni ; "  ,  " ; Y_natoceni ; "  ,  " ; Z_natoceni


Waitms 200
''''''''''''''''

Loop
End

Gyro_kalibrace_nuly:
For I = 1 To 10
I2cstart
I2cwbyte Adresa_r
I2cwbyte &H00
I2cstop

I2creceive &HA5 , Gyro_prijem(1) , 0 , 6

Shift Gyro_prijem(4) , Right , 2
Shift Gyro_prijem(4) , Left , 8
Gyro_prijem(4) = Gyro_prijem(4) + Gyro_prijem(1)
Gyro_prijem(4) = Gyro_prijem(4) / 10
X_natoceni_0 = X_natoceni_0 + Gyro_prijem(4)

Shift Gyro_prijem(5) , Right , 2
Shift Gyro_prijem(5) , Left , 8
Gyro_prijem(5) = Gyro_prijem(5) + Gyro_prijem(2)
Gyro_prijem(5) = Gyro_prijem(5) / 10
Y_natoceni_0 = Y_natoceni_0 + Gyro_prijem(5)

Shift Gyro_prijem(6) , Right , 2
Shift Gyro_prijem(6) , Left , 8
Gyro_prijem(6) = Gyro_prijem(6) + Gyro_prijem(3)
Gyro_prijem(6) = Gyro_prijem(6) / 10
Z_natoceni_0 = Z_natoceni_0 + Gyro_prijem(6)
Next
Return

gyro_inic:
I2cstart
I2cwbyte Adresa_w
I2cwbyte &HFE
I2cwbyte &H04
I2cstop
Return

Gyro_prijem_dat:

I2cstart
I2cwbyte Adresa_r
I2cwbyte &H00
I2cstop

I2creceive &HA5 , Gyro_prijem(1) , 0 , 6

Shift Gyro_prijem(4) , Right , 2
Shift Gyro_prijem(4) , Left , 8
Gyro_prijem(4) = Gyro_prijem(4) + Gyro_prijem(1)
X_natoceni = Gyro_prijem(4) - X_natoceni_0
X_natoceni = X_natoceni / 20

Shift Gyro_prijem(5) , Right , 2
Shift Gyro_prijem(5) , Left , 8
Gyro_prijem(5) = Gyro_prijem(5) + Gyro_prijem(2)
Y_natoceni = Gyro_prijem(5) - Y_natoceni_0

Shift Gyro_prijem(6) , Right , 2
Shift Gyro_prijem(6) , Left , 8
Gyro_prijem(6) = Gyro_prijem(6) + Gyro_prijem(3)
Z_natoceni = Gyro_prijem(6) - Z_natoceni_0
Waitms 100
Return


Napsal: 20 zář 2011, 19:03
od radar0101
Ještě možnost že ten gyroskop nefunguje…pac je divný že ty výstupní hodnoty lítají jak splašený….. Noo poraďte :wink: dííky

Napsal: 20 zář 2011, 19:32
od Andrea
Neleze z toho gyra náhodou úhlová rychlost? Možná kdybys napsal, co tam máš za typ, dalo by se radit konkrétněji.

Napsal: 20 zář 2011, 20:01
od iginoiii
Čo ja poznám gyra, od analog devices, tak zo všetkých ide samozrejme uhlová rýchlosť ako spomína Andrea, takže jedine integrovať, signál by mohol byť použiteľný. i

Napsal: 21 zář 2011, 15:22
od radar0101
Dobře tak dejme tomu ze z toho leze ω. Tak jakej je nejlepší algoritmus na získání toho úhlu? Pač se ty data rychle mění tak se asi bude muset vzít průměr z pár vzorků? Pak dat nějakou časovou prodlevu a znova změřit a vypočítat, nebo jak?
Děkuji za rady…
A primo jaký v tom je gyro nevím. Tady je odkaz na nějaké info:
http://wiki.pinguino.cc/index.php/With-wii-motion%2B
http://wiibrew.org/wiki/Wiimote/Extension_Controllers#Wii_Motion_Plus

Napsal: 21 zář 2011, 16:02
od Andrea
radar0101 píše:A primo jaký v tom je gyro nevím.

Když nevíš, co je tam za gyro, tak jak víš, jak s ním komunikovat? 8O

Napsal: 21 zář 2011, 16:23
od radar0101
Protože jsem si našel jakej používá ta konzole wii, tedy přímo ten modul s gyroskopem, komunikační protokol.
A tak tam maj nějakej IDG600.

Napsal: 21 zář 2011, 16:36
od Andrea
IDG600 je dvojosý.

Napsal: 21 zář 2011, 20:12
od iginoiii
Algoritmus na získanie natočenia z rýchlosti? integrácia, ako som už spomenul, vo vašom prípade si naštudujte numerickú integráciu. Tú určite pôjde implementovať do mikroprocesoru, aj keď ja osobne tieto problémy riešim v Matlabe :)

Napsal: 21 zář 2011, 20:45
od radar0101
To je jasny ze z úhlovej rychlosti se integraci v case dostaneš na uhel...Matlab je super nastroj to taky...ale spis bych potřeboval vědět jak se pracuje s tím gyroskopem, jak se zpracovávají ty data z něj....Bych potřeboval poradit od někoho kdo už s gyroskopem pracoval a dostal z něj úhel natočení a hlavně jakej postup pro to použil atd…
Zatím děkují…ale potřeboval bych se s tím dostat dál.
:wink:

Napsal: 21 zář 2011, 22:02
od iginoiii
Niečo mi hovorí, že k podobnému hotovému projektu sa nedostanete, pretože ich moc nebude na internete zverejnených, a skôr či neskôr aj tak skončíte pri numerickej integrácii. Ale možno sa mýlim, i

Napsal: 21 zář 2011, 22:18
od radar0101
Tak je tam ITG 3205...asi nějaká činská kopie pac celej ten motion plus je z Číny za par korun. Tak se pokusím cist data prim z nej...vyzkouším nějaký věci a uvidíme zda z toho dostanu ten úhel.
Každopádně díky.