Portal > Forum > Raketen Technik > Naturwissenschaftliche Grundlagen > Lagebestimmung im Raum mit 3-Achsen Sensoren
Autor | Thema |
---|---|
Neil
99.9% harmless nerd
Registriert seit: Aug 2000 Wohnort: Delft Verein: SOLARIS Beiträge: 7776 Status: Offline |
Beitrag 7631709
[02. Juli 2014 um 21:18]
Hi,
wie wäre es mit Lookup-Table anstatt Winkelberechnungen. Oder ein Winkelsystem das nicht auf 360 Grad aufbaut sondern etwas was besser ins binäre System passt --> 256 Grad. Was liefert den der Sensor für Werte? Gruß Neil Die Erde ist eine Scheibe. Egal in welche Richtung sich die Menschheit bewegt, sie geht immer auf einen Abgrund zu. |
Lschreyer
Grand Master of Rocketry Registriert seit: Nov 2006 Wohnort: Zeven Verein: AGM, L3 Beiträge: 2035 Status: Offline |
Beitrag 7631740
[04. Juli 2014 um 10:24]
Die vielen Float-Multiplikationen sind das Problem, die müssen 200x pro Sekunde durchlaufen. Mit Lookup ist da nichts zu machen.
Ich habe nur ca. 3ms pro Zyklus frei, momentan braucht mein Controller aber 4ms für die Berechnung des Winkels. Das sind einige 3x3 Matrixmultiplikationen, das läppert sich. Der läuft ja nur mit 32 MHz, der Altus hat einen weitaus leistungsfähigeren Controller, da geht das problemlos. Evtl. werde ich die Samplingrate von 200 auf 100 reduzieren, dann kann ich die Berechnungen in mehrere Häppchen aufteilen. 100x/sekunde reichen auch immer noch dicke für die Winkelbestimmung. ich werde da am Sonntag wieder zu kommen, dann werde ich mal schauen was sich da noch optimieren lässt. Louis Always keep the pointy side up! |
Neil
99.9% harmless nerd
Registriert seit: Aug 2000 Wohnort: Delft Verein: SOLARIS Beiträge: 7776 Status: Offline |
Beitrag 7631741
[04. Juli 2014 um 10:57]
Hi,
muss das den Float sein? Reicht nicht ein ungenaueres aber dafür schnelleres Format? Der Sensor wird doch höchst wahrscheinlich einen 16 Bit Wandler haben. Genauer kann der Wert also nicht sein. Es wäre hier zu überlegen ob man sich zu große Fehler einhandelt wenn man nicht einfach mit 16 Bit weiter rechnet. Das meinte ich im übrigen auch mit den Einheiten. Wenn ich z.B. die Drehrate in Grad/s rechne, werde ich da immer Kommawerte haben. Wenn ich aber die Werte die der Wandler liefert betrachte, dann sind das +- 15 Bit die dann den Messbereich abdecken der da (nur geraten) 500°/s sein kann. Da ist dann die Auflösung 0,015258789 °/s. Wirkt schon ziemlich krumm, aber nur im 10 Zehner System der Grade. Im Bit System des Wandlers ist das einfach ein sehr schöner ganzteiliger Wert mit dem man super rechnen kann. Gruß Neil Die Erde ist eine Scheibe. Egal in welche Richtung sich die Menschheit bewegt, sie geht immer auf einen Abgrund zu. |
Lschreyer
Grand Master of Rocketry Registriert seit: Nov 2006 Wohnort: Zeven Verein: AGM, L3 Beiträge: 2035 Status: Offline |
Beitrag 7631768
[08. Juli 2014 um 11:21]
Das stimmt schon, aber stellenweise werden da Matrizen mit Sinus/Cosinuswerten des Drehwinkels gefüllt, ich wüsste nicht wie ich das mit den Rohwerten machen könnte.
Momentan hakt es bei mir aber wieder mit der Zeit, das ruht. Ich werde später das Sampling reduzieren und die Berechnungen in 2 Häppchen machen, dann klappt es zeitlich auch gut. Louis Always keep the pointy side up! |
Neil
99.9% harmless nerd
Registriert seit: Aug 2000 Wohnort: Delft Verein: SOLARIS Beiträge: 7776 Status: Offline |
Beitrag 7631769
[08. Juli 2014 um 11:35]
Hi,
wenn du dir eine Gewisse Auflösung eingestehst, kannst du die Sinuswerte von Winkeln in einer Tabelle ablegen. Nehmen wir mal eine Genauigkeit von 1/10 Grad an. Dann sind das nur 3600 Werte. Deine Berechnungen führst du dann auch nicht in Grad durch, sondern in 1/10 Grad. Du kannst dann den direkten Winkelwert nutzen um die Speicherstelle anzuspringen wo der passende Sinuswert davon steht. Also der Winkelwert adressiert die Variable. In etwa so: sinus_x = Sinusarray(x) Da es sich nur um ein einfaches kopieren von Werten im Speicher handelt, sollte das sehr schnell sein. Das Array mit den Werten muss natürlich einmal erstellt werden. Aber das macht man vorher wo man noch viel Zeit für so etwas hat. Gruß Neil Die Erde ist eine Scheibe. Egal in welche Richtung sich die Menschheit bewegt, sie geht immer auf einen Abgrund zu. |
thomasm
Epoxy-Meister Registriert seit: Jun 2013 Wohnort: Mechernich Verein: AGM TRA Beiträge: 464 Status: Offline |
Beitrag 7631770
[08. Juli 2014 um 12:24]
Ok ich weiß zwar nicht wirklich was du gerade machst aber vielleich hilft auch ein Blick auf die Freeimu libary, das läuft immerhin auf nem Atmega328P mit ein paar hundert Herz.
Der Algorithmus ist hier beschrieben: http://www.di.unito.it/~varesano/publications/palla_2011/palla_2011.pdf |