-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Ausgangswerte Beschleunigungssensor Sparkfun ADXL322

  1. #1
    Erfahrener Benutzer Roboter-Spezialist Avatar von jevermeister
    Registriert seit
    20.01.2011
    Ort
    Kiel
    Beiträge
    393

    Frage Ausgangswerte Beschleunigungssensor Sparkfun ADXL322

    Anzeige

    Hi,
    ich hab grad mal ne Frage an alle die sich mit diesem Sensor auskennen:

    Ich fliege einen Tricopter der diesen Sensor für die Lageregelung im Hover nutzt.
    Nun bin ich dabei einen Gier und roll Ausgleich für meine Kamera zu basteln, weil ich das mal alleine entwickeln möchte.
    Im Basic Quellcode des Arduino werden die Ausgangswerte des Sensor in Variablen übernommen die bis +/- 25400 gehen und es wird damit weitergerechnet. Wenn ich mir die Berechnungen für z.B. die Regelabweichung anschaue wird dieser Wert z.B. einfach mit der Auslenkung der Sticks verglichen. Also welchen Winkel will ich haben und welchen habe ich.
    Das spricht ja für eine Lineare Ausgangskurve, sprich 25400/2 sind 45°.
    Im Datenblatt allerdings verstehe ich das so, dass der Ausgangswert in g angegeben ist und man mit dem Arcsin den Winkel errechnen muss. Das wären bei halbem Ausgangswert dann 30°.
    Mein Problem mit dem Verständnis ist: Halte ich den Sensor 45° dann habe ich ja 1g auf die beiden Komponenten zerlegt also kann ich über den Satz des Pythagoras diese Werte errechnen und das spräche für den Arcsin um an die Winkel zu kommen oder?

    Wenn jetzt die Sache mit Arcsin errechnet werden muss, dann ist die Übernahme der Werte in der Tricoptersteuerung ja auch nicht richtig oder?

    Ich kann mir aber nicht vorstellen, dass das übersehen worden ist.

    Kann mich da mal jemand aufklären bevor ich jetzt vollmundig behaupte ich hab einen Fehler gefunden und die Pferde scheu mache? Und hinterher lachen all...

    Gruß
    Nils

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von Bammel
    Registriert seit
    11.12.2004
    Ort
    Bremen
    Alter
    30
    Beiträge
    1.400
    alleine die werte vom acc werden dir nicht reichen!

    dann selbst ebi einer seitwärtsbewegung (windstoss) hast du eine seitliche beschleunigung.
    du musst die acc und gyrowerte vermischen oder verrechnen. wie genau das funzt kann ich dir nicht sagen.

    kannst du dir net einfach die werte raussuchen bei denn das offset mit verrechnet wird!?

    achja die willst bestimmt die roll und nick bewegungen kompensieren und nicht die gier

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.03.2011
    Beiträge
    1.397
    Zitat Zitat von jevermeister Beitrag anzeigen
    Hi,
    ich hab grad mal ne Frage an alle die sich mit diesem Sensor auskennen:

    Ich fliege einen Tricopter der diesen Sensor für die Lageregelung im Hover nutzt.
    Nun bin ich dabei einen Gier und roll Ausgleich für meine Kamera zu basteln, weil ich das mal alleine entwickeln möchte.
    Im Basic Quellcode des Arduino werden die Ausgangswerte des Sensor in Variablen übernommen die bis +/- 25400 gehen und es wird damit weitergerechnet. Wenn ich mir die Berechnungen für z.B. die Regelabweichung anschaue wird dieser Wert z.B. einfach mit der Auslenkung der Sticks verglichen. Also welchen Winkel will ich haben und welchen habe ich.
    Das spricht ja für eine Lineare Ausgangskurve, sprich 25400/2 sind 45°.
    Im Datenblatt allerdings verstehe ich das so, dass der Ausgangswert in g angegeben ist und man mit dem Arcsin den Winkel errechnen muss. Das wären bei halbem Ausgangswert dann 30°.
    Mein Problem mit dem Verständnis ist: Halte ich den Sensor 45° dann habe ich ja 1g auf die beiden Komponenten zerlegt also kann ich über den Satz des Pythagoras diese Werte errechnen und das spräche für den Arcsin um an die Winkel zu kommen oder?

    Wenn jetzt die Sache mit Arcsin errechnet werden muss, dann ist die Übernahme der Werte in der Tricoptersteuerung ja auch nicht richtig oder?

    Ich kann mir aber nicht vorstellen, dass das übersehen worden ist.

    Kann mich da mal jemand aufklären bevor ich jetzt vollmundig behaupte ich hab einen Fehler gefunden und die Pferde scheu mache? Und hinterher lachen all...

    Gruß
    Nils
    Hallo,

    ich denke, wenn du den Winkel haben willst, liegst du mit dem Arcsin richtig.

    Funktioniert die Tricoptersteuerung? Wenn ja, dann benötigt die Steuerung den Winkel in Grad nicht. Ich würde auch immer versuchen, vor allem wenn's schnell gehen soll, ohne Umrechnung von Sensorwerten auszukommen.

    Beobachte dich mal selbst, wenn du mit einem Auto eine Kurve fährst. Du lenkst ein, siehst wie das Auto fährt, und korrigierst ohne die Räder zu sehen oder den Winkel zu brechnen, korrigierst weiter, bis es stimmt. "stimmt" heißt, der Winkel zwischen Auto und Straße ist 0. Ich denke, daß die Tricoptersteuerung so funktioniert.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  4. #4
    Erfahrener Benutzer Roboter-Spezialist Avatar von jevermeister
    Registriert seit
    20.01.2011
    Ort
    Kiel
    Beiträge
    393
    Hi Klebwax,
    deine Aussage macht Sinn,
    der Tricopter fliegt ja und damit belasse ich es dabei.
    Ich habe mittlerweile bestätigen können, dass der Sensor nicht den Winkel liefert, du hattest also Recht
    für pan /tilt (Danke Bammel) muss ich also den arcsin berechnen, das klappt auch schon ganz gut.

    Einziges Problem das ich habe sind die Normierungen.
    Ich will ja wissen welcher Wert am Eingang des arduino für wieviel Grad steht. Dazu muss ich wissen, was 90° wären um die Werte dadurch zu teilen, allerdings steht ich grad total auf dem Schlauch.
    Wenn ich in der Tricoptersteuerung den wert einlese liegt er von -21000 bis zu 21000 und in meinem eigenen Programm geht er von 460 bis 66, wobei 500 die Nullage ist.
    Ich bin relativ frisch in dieser sensorik, kann das deshalb nicht einschätzenw arum das so unterschiedlich ist...

    Ich beutze in beiden Programmen:
    Code:
    Config Adc = Single , Prescaler = Auto , Reference = Avcc   'avcc reference @ arduino =5V
    Gruß
    Nils

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von Bammel
    Registriert seit
    11.12.2004
    Ort
    Bremen
    Alter
    30
    Beiträge
    1.400
    Benutzt du nun einen weiteren µC? oder steuerst du die zwei Servos aus der triguide heraus?

    also um einen exakten wert zu bekommen musst du schon den acc mit dem gyro zusammen betrachten. es mag evtl für den anfang gehen nur den acc zu verwenden aber im flug bei seitenwinden und somit anderen beschleunigungen wird dir die kamera wegschwenken. aber ich weiß garnet ob sich das überhaupt bemerkbar macht.

    normalerweiße musst du dir doch echt nur der wert des hover-modes vorknöpfen. nja wnen ich zuhause bin werd ich mal einen blick in den source waagen vllt finde ich ja was interessantes.

    so hat mir doch keine ruhe gelassen
    schau dir mal den folgen part an:
    Code:
    '-Mix components-
    If Motors_on = 1 Then                                       'only when motors are running
        '-MOTOR 1- (front left)
        Ms_l_i = Sempf(throttlechannel) + Vorwahl               'throttle stick (3-228) + Vorwahl(20)
        If Ms_l_i > 247 Then                                    'throttle clipping
          Ms_l_i = 247
        End If
        Ms_l_i = Ms_l_i + P_set_roll_int                        'add the gyro measurements (note the differences in "+" and "-")
        Ms_l_i = Ms_l_i + P_set_nick_int
        Ms_l_i = Ms_l_i + I_set_roll_int
        Ms_l_i = Ms_l_i + I_set_nick_int
        Ms_l_i = Ms_l_i + D_set_roll_int
        Ms_l_i = Ms_l_i + D_set_nick_int
        If State = 2 Then                                       'add DD term in hover mode
          Ms_l_i = Ms_l_i + Dd_set_roll_int
          Ms_l_i = Ms_l_i + Dd_set_nick_int
        End If
        '-MOTOR 2- (front right)
        Ms_r_i = Sempf(throttlechannel) + Vorwahl
        If Ms_r_i > 247 Then
          Ms_r_i = 247
        End If
        Ms_r_i = Ms_r_i - P_set_roll_int
        Ms_r_i = Ms_r_i + P_set_nick_int
        Ms_r_i = Ms_r_i - I_set_roll_int
        Ms_r_i = Ms_r_i + I_set_nick_int
        Ms_r_i = Ms_r_i - D_set_roll_int
        Ms_r_i = Ms_r_i + D_set_nick_int
        If State = 2 Then
          Ms_r_i = Ms_r_i - Dd_set_roll_int
          Ms_r_i = Ms_r_i + Dd_set_nick_int
        End If
        '-MOTOR 3-  (back)
        If Ms_h_i > 247 Then
          Ms_h_i = 247
        End If
        Ms_h_i = Sempf(throttlechannel) + Vorwahl
        Ms_h_i = Ms_h_i - P_set_nick_int
        Ms_h_i = Ms_h_i - I_set_nick_int
        Ms_h_i = Ms_h_i - D_set_nick_int
        If State = 2 Then
          Ms_h_i = Ms_h_i - Dd_set_nick_int
        End If
        'when yawing very fast, throttle for the motor at the back is increased
        Tailgas = Yaw_gyro_scale_int + Yaw_gyro_i_scale_int     'if these values are big, the motor at the back was tilted
        Tailgas = Abs(tailgas) / 100
        Ms_h_i = Ms_h_i + Tailgas
    Else                                                        'motors off
      Ms_l_i = 0
      Ms_r_i = 0
      Ms_h_i = 0
    End If
    Evtl. könnte es so gehen: Servo(Tilt) = Servo(Tilt) + P_set_nick_int
    oder so ähnlich

    die servoansteuerung für das heckservo findest du direkt unter dem vom mir geposteten part. das ist denke ich ein gutes beispiel wie das dann funktionieren könnte.

    PS.: wenn du das ganze in die triguide integrierst könnte man das ganze ja so amchen das man die pan/tilt funktion entweder über die trigui oder über stickbewegungen beim start aktivieren kann.
    Geändert von Bammel (03.05.2011 um 08:08 Uhr)

  6. #6
    Erfahrener Benutzer Roboter-Spezialist Avatar von jevermeister
    Registriert seit
    20.01.2011
    Ort
    Kiel
    Beiträge
    393
    Hi Bammel,
    ich beutze schon beide zusammen, so wie für den Hovermode berechnet, allerdings ist der wert ja falsch, davon berechnene ich also nochmald en Arcsin. Nur nützt das nichts, wenn ich nicht den Eingangswert für 90° kenne.
    Soll ich den Sensor mal auf 45° halten und auslesen was ich dann bekomme oder wie macht man das normalerweise?

    Also gestern ging es schon ganz gut, halt nur noch etwas ugnenau...
    ich benutze, sofern noch welche frei sind, zwei Ausgänge vom arduino, werde den Servos aber eine Eigene Stromversorgung geben.

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von Bammel
    Registriert seit
    11.12.2004
    Ort
    Bremen
    Alter
    30
    Beiträge
    1.400
    du brauchst keinen winkel errechnen wie klebwax schon erwähnt. ich mache selbst auhc imemr den fehler und denke so. aber der winkel ist einfach nur eine andere einheit. den weg kann man sich sparen.

    Also du musst nur den mittelwert für den servo finden. so das dieser grade steht. evtl ein offset einplanen. ist das selbe prinzip wie mit den x und y offset beim hovermode.

    die werte in den P_set_nick_int usw. sind nur errorwerte. diese solltets du nicht direkt aufs servo geben.
    Der miniatur Quadrocopter: www.nanoquad.de

  8. #8
    Erfahrener Benutzer Roboter-Spezialist Avatar von jevermeister
    Registriert seit
    20.01.2011
    Ort
    Kiel
    Beiträge
    393
    Hallo Bammel,
    das sehe ich etwas anderes, bei der Lageregelung mögt ihr da beide Recht haben, aber in diesem Fall soll der servo ja eine Gegenbewegung ausführen.
    Die Lageregelung des Tricopters sorgt ja dafür, dass der Tri wieder elvelt, das geht über Regelung.
    In meinem Fall muss ich wissen, welchen Winkel der Tricopter hat, um diesen mit dem neuen servo gezielt auszugleichen, dafür muss ich den Winkel des TRI wissen um den Korrekturwinkel des Servo zu berechnen.
    Steht der Tri 30% muss der Servo -30% stehen um das zu korrigieren.

    Wie bereits oben erwähnt ist das alles schon am funktionieren, ich teste das zu zeit mit dem heckservo und es läuft auch schon, jetzt muss nur noch der zweite und dritte servo angeschlossen werden.

    Nils

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von Bammel
    Registriert seit
    11.12.2004
    Ort
    Bremen
    Alter
    30
    Beiträge
    1.400
    Ja wenn das funktioniert kann der thread ja quasie geschlossen werden!

    dann musst du ja alles in winkeln umrechnen!
    aber wenn du tri in eine richtung neigst z.b. 30° oder 23789 stellen einer x-beliebigen einheit. dann musst du doch dem servo exakt den selben werd mit vertauschtem vorzeichen geben. zumit ist die kamera dann wieder genau waagerecht über den boden. denn das vorzeichen nicht vertauscht wäre würde sie der winkel einfach verdoppeln.

    wie gesagt die umrechnerei in winkel ist unnötig! macht es aber zum verständniss wesentlich leichter, dies ist aber grade hier ein problem da mehr rechnerei (die nicht benötigt wird) das ganze programm ausbremmst und somit die regelung langsamer läuft. ob sich das nun im realen flug auswirkt weiß ich natürlich nicht.
    Der miniatur Quadrocopter: www.nanoquad.de

  10. #10
    Erfahrener Benutzer Roboter-Spezialist Avatar von jevermeister
    Registriert seit
    20.01.2011
    Ort
    Kiel
    Beiträge
    393
    1.
    Die Skalierung des Eingangs ist zum einen eine ganz andere wie der Ausgang zum Servo.
    2.
    Am Eingang kommt lediglich eine Komponente der Gravitation an und kein Winkel und da der Servo einen Winkel benötigt, komme ich um einen Arcsin nicht herum.
    Zur Lageregelung eines Tricopters ist das zwar nicht nötig, aber für den servo schon, da ich dort ja nicht 0 erreichen will.

    Das eigentlich Themas ist auch erledigt, lediglich die Skalierung ist noch das Problem.

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Sparkfun Sammelbestellung, allerlei schönes Zeugs!
    Von Willa im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 6
    Letzter Beitrag: 01.06.2009, 09:00
  2. Beschleunigungssensor
    Von Emotionslos1 im Forum Elektronik
    Antworten: 0
    Letzter Beitrag: 23.05.2007, 18:56
  3. Sparkfun - Sammelbestellung
    Von flyingcat im Forum Elektronik
    Antworten: 13
    Letzter Beitrag: 01.03.2007, 14:58
  4. Beschleunigungssensor
    Von bastman im Forum Sensoren / Sensorik
    Antworten: 3
    Letzter Beitrag: 01.11.2006, 09:53

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •