Raketenmodellbau.org Portal > Forum > Raketen Technik > Naturwissenschaftliche Grundlagen > Lagebestimmung im Raum mit 3-Achsen Sensoren
Du kannst keine neue Antwort schreiben
Seiten (2): « 1 [2]

Autor Thema 
Neil

99.9% harmless nerd


Administrator

Neil

Registriert seit: Aug 2000

Wohnort: Delft

Verein: SOLARIS

Beiträge: 7776

Status: Offline

Beitrag 7631709 [Alter Beitrag02. Juli 2014 um 21:18]

[Melden] Profil von Neil anzeigen    Neil eine private Nachricht schicken   Neil besitzt keine Homepage    Mehr Beiträge von Neil finden

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

Lschreyer

Registriert seit: Nov 2006

Wohnort: Zeven

Verein: AGM, L3

Beiträge: 2035

Status: Offline

Beitrag 7631740 [Alter Beitrag04. Juli 2014 um 10:24]

[Melden] Profil von Lschreyer anzeigen    Lschreyer eine private Nachricht schicken   Lschreyer besitzt keine Homepage    Mehr Beiträge von Lschreyer finden

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


Administrator

Neil

Registriert seit: Aug 2000

Wohnort: Delft

Verein: SOLARIS

Beiträge: 7776

Status: Offline

Beitrag 7631741 [Alter Beitrag04. Juli 2014 um 10:57]

[Melden] Profil von Neil anzeigen    Neil eine private Nachricht schicken   Neil besitzt keine Homepage    Mehr Beiträge von Neil finden

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

Lschreyer

Registriert seit: Nov 2006

Wohnort: Zeven

Verein: AGM, L3

Beiträge: 2035

Status: Offline

Beitrag 7631768 [Alter Beitrag08. Juli 2014 um 11:21]

[Melden] Profil von Lschreyer anzeigen    Lschreyer eine private Nachricht schicken   Lschreyer besitzt keine Homepage    Mehr Beiträge von Lschreyer finden

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


Administrator

Neil

Registriert seit: Aug 2000

Wohnort: Delft

Verein: SOLARIS

Beiträge: 7776

Status: Offline

Beitrag 7631769 [Alter Beitrag08. Juli 2014 um 11:35]

[Melden] Profil von Neil anzeigen    Neil eine private Nachricht schicken   Neil besitzt keine Homepage    Mehr Beiträge von Neil finden

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 [Alter Beitrag08. Juli 2014 um 12:24]

[Melden] Profil von thomasm anzeigen    thomasm eine private Nachricht schicken   thomasm besitzt keine Homepage    Mehr Beiträge von thomasm finden

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
Seiten (2): « 1 [2]
[Zurück zum Anfang]
Du kannst keine neue Antwort schreiben