MikroKopter-Wiki   •   SHOP   •   Video-Liste   •   MikroKopter-FAQ   •    English translation

Mikrocontroller- & MicroSPS-Forum » Software & Programmierung » Gyro - Daten interpretieren

Gyro - Daten interpretieren

Moderatoren: jamiro, ligi, P_Latzhalter.

Seite: < 1 2

Autor Neuer Beitrag
MK-Betatester
Registriert seit: May 2007
Beiträge: 574
Ort: Otterbach bei Kaiserslautern
Hi,

Nee, :lol: sind Byte.
sizeof gibt Byte zurück.


Bye
Mikeljo
Mitglied
Registriert seit: Jul 2008
Beiträge: 59
Hallo Dank,

also, was ich jetzt wohl erstmal mache. (Gemäß dem Artikel )

http://www.sprut.de/electronic/referenz/index.htm#lm336

eine Referenzspannung einbauen. Kostet nix siehe (www.farnell.com)

und dann ggf. später nochmal einen externen ADC Wandler 12Bit, da
PICs insg. sehr noisy sein sollen.

Ich denke so wirds auf jeden Fall gehen, wenn nicht, ist das
Gyro kaputt :)

Sobald ich hier Ergebnisse habe, poste ich das hier.

Viele Grüße & Danke fürs ausführliche Feedback
Askan
Mitglied
Registriert seit: Jul 2008
Beiträge: 59
Hallo zusammen,

für alle die es interessiert. Es gibt einen ganz einfachen Mikrokopter-Aufbau
unter http://www.roboternetz.de/phpBB2/viewtopic.php?t=35143
Es fliegt (so lala ?), mit ~100 Zeilen Quellcode :-)

Ich hatte hier mal die wesentlichen Schritte mit Beispielwerten (in [...] ) aufgelistet.
Ich hoffe man kann's verstehen.

Schritt 1. "Analoge Werte"

// Differenz zum Ausgangswert errechnen
Gyro_nick [-14] = Getadc(7) [637] - Gyro_nick_init [646 - Mittel aus 100 Messungen]
Gyro_roll [-11] = Getadc(4) [594] - Gyro_roll_init [594 - Mittel aus 100 Messungen]
Gyro_yaw [20] = Getadc(5) [621] - Gyro_yaw_init [603 - Mittel aus 100 Messungen]
Besch_x [7] = Getadc(2) [376] - Besch_x_init [357 - Mittel aus 100 Messungen]
Besch_y [13] = Getadc(1) [355] - Besch_y_init [354 - Mittel aus 100 Messungen]
Besch_z [-17] = Getadc(3) [363] - Besch_z_init [~356 - Mittel aus Besch_x_init & Besch_y_init]

// Differenz zum Motorwerte hinzuaddieren
Gyro_nick_m [-9] += Gyro_nick [-14]
Gyro_roll_m [-24] += Gyro_roll [-11]
Gyro_yaw_m [44] += Gyro_yaw [20]

// Differenz zum Motorwerte hinzuaddieren
Besch_x_m [94] += Besch_x [101]
Besch_y_m [59] += Besch_y [13]
Besch_z_m [-45] += Besch_z [-17]

Schritt 2. "Fernsteuerungdaten"

// Differenz zum Ausgangswert errechnen
Kanal_nick [19] = Puls(3) [276] - Kanal_nick_init [276]
Kanal_roll [3] = Puls(2) [332] - Kanal_roll_init [319]
Kanal_yaw [-8] = Puls(4) [511] - Kanal_yaw_init [496]
Kanal_pitch [9] = Puls(5) [768] - Kanal_pitch_init [783]

Schritt 3. "Wert mixen"

// Die Motor_soll Werte neu berechnen

// Pitch (plus 40?) vorab auf alle Motoren verteilen
Motor_soll_v [49] = Kanal_pitch [9] + 40
Motor_soll_r [49] = Kanal_pitch [9] + 40
Motor_soll_h [49] = Kanal_pitch [9] + 40
Motor_soll_l [49] = Kanal_pitch [9] + 40

// ggf. Maximalwerte abfangen (Motor_soll_v [24] > Motorbegrenzung [130] ...)

// Nicken.

// 1. Funke - Steuersignal Nick auf Motor vorne(- ab) und hinten (+ auf) verteilen
Motor_soll_v [30] -= Kanal_nick [19]
Motor_soll_h [68] += Kanal_nick [19]

// 2. Gyro - Gyro Differenz ebenfalls auf das Motor-Steuersignal verteilen
Motor_soll_v [21] += Gyro_nick_m [-9]
Motor_soll_h [77] -= Gyro_nick_m [-9]

// 3. Acc - Beschleunigungs Differenz letztlich auf das Motor-Steuer-Gyro Signal verteilen
Motor_soll_v [122] += Besch_x_m [101]
Motor_soll_h [-24] -= Besch_x_m [101]

// Rollen.

// roll
Motor_soll_r [46] -= Kanal_roll [3]
Motor_soll_l [52] += Kanal_roll [3]
// gyro roll
Motor_soll_r [70] -= Gyro_roll_m [-24]
Motor_soll_l [28] += Gyro_roll_m [-24]
// acc roll
Motor_soll_r [129] += Besch_y_m [59]
Motor_soll_l [-31] -= Besch_y_m [59]

// Vertikal drehen

// yaw
Motor_soll_v [130] -= Kanal_yaw [-8]
Motor_soll_l [-39] += Kanal_yaw [-8]
Motor_soll_r [93] += Kanal_yaw [-8]
Motor_soll_h [137] -= Kanal_yaw [-8]

// ggf. Minimalwerte abfangen Motor_soll_v [24] < 1 ...

Schritt 4. "Daten an die Motoren senden"


Vermutlich fehlt "nur" noch der Kalmanfilter und man hat die
absoluten Basics zusammen. Sozusagen V0.01, oder? ;)

Jetzt zu mein Frage, der Autor des Script hat das gleiche Problem mit den Gyrowerten -
einen fixen Winkel nur mit den Gyros zur errechnen war auch unmöglich durch Aufsummieren.

Zitat (goara)

Zitat
die gyros messen nur eine drehung im raum, keinen absoluten winkel.. habe mal versucht die drehung aufzuaddieren, aber dazu sind sie viel zu ungenau... die 0 lage haut so um 2° / sec ab.. also unbrauchbar...
allerdings kann man nur den D-anteil ( also das signal selbst ) fuer die regelstrecke benutzen.. das bewirkt dann wenn der copter z.b. nach links kippt der linke motor ein bsichen shcneller wird und der rechte langsamer.. dadurch hebt sich das kippen dann auf...


Hat es den irgendjemand schon geschafft - allein mit den Murata-Gyros den Winkel
in etwa zu bestimmen (Ohne ACC, Ohne Filter u.ä.)?

Nicht das ich da insg. auf dem Holzweg bin ... hmmm

Vorab schon mal vielen Dank & Viele Grüße aus Neuss
ABSimon

Seite: < 1 2

Mikrocontroller- & MicroSPS-Forum » Software & Programmierung » Gyro - Daten interpretieren

© Holger Buss & Ingo Busker   •  Mikrocontroller- & MicroSPS-Forum is powered by UseBB Forum Software