- LiFePO4 Speicher Test         
Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 36

Thema: Quadrocopter

  1. #21
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.04.2005
    Ort
    Aarau
    Alter
    41
    Beiträge
    982
    Anzeige

    Praxistest und DIY Projekte
    Hallo Chris

    Die Platine ist mit Gummipuffer mechanisch entkoppelt. Die Motoren und Propeller habe ich gewuchtet.
    Welche Daten wären sinnvoll? Während dem Flug mit dem Problem des "Nachziehens"? muss mal versuchen die Daten Graphisch aufzubereiten.

    Meinst du die Begrenzung der Winkel-Vorgabe über die Fernsteuerung? Diese habe ich auf 45° begrenzt.

    90° war ein schlechtes Beispiel. Ich versuche es nochmals anders:
    Wenn ich den Copter 45° um die Rollachse neige und danach 45° um die Nickachse und ihn dann auf direktem Weg Horizontal auf den Tisch lege haben die Gyros nicht 0° sondern irgendwas um 15° auf beiden Achsen und dies muss dann der ACC kompensieren...

    Gruss Bluesmash

  2. #22
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578
    Hi,

    gut wäre zb, wenn du den Kopter so bewegst, wie dus geschildert hast und dabei die Gyro und Acc Winkel aufzeichnest, sodass man den Fehler in den Daten sehen kann.
    Ja, das meinte ich. Ich würd evtl noch um 5° runter gehen, bei 45° wirds schon gefährlich.

    Gruß
    Chris

  3. #23
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.04.2005
    Ort
    Aarau
    Alter
    41
    Beiträge
    982
    Hallo Chris

    Ich werde mal versuchen, die Daten aufzuzeichnen.

    Ich habe mich noch über die Drehmatrix schlau gemacht.
    Um die Gyros richtig zu verrechnen, müsste man die Drehmatrix ja auf alle Achsen anwenden und nicht nur auf die "Gier-Achse".
    Wie hier auf der 1. Seite beschrieben:
    http://www.itm.uni-stuttgart.de/cour...aetter/M08.pdf

    Die Formeln sind aber für mich relativ kompliziert und bräuchten auch einiges an Rechenpower...
    Hast du bei deinen Coptern die Komplette Drehmatrix im 3D-Raum implementiert?

    Ich denke, dass meine Abweichungen daher kommen, weil ich in der Drehmatrix nur die "Gier-Achse" berücksichtige.

    Ich habe jetzt eine Bewegung gefunden bei der man es am deutlichsten sieht (du kannst es ja mal mit deinem Copter versuchen):
    Den Copter auf ca. 50° in der Roll-Achse stellen (am besten auf dem Boden oder Tisch). Danach den Copter relativ schnell Horizontal zum Erd-Koordinatensystem ca 90° drehen (nicht Gier). So das Roll immer 50° hat und Nick 0°. Nach der Drehung steht der Nick Winkel aber nicht mehr auf 0° sondern auf ca. 10°-20°

    Gruss Bluesmash

  4. #24
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578
    Hi,

    ja das ist richtig, eigentlich sollte man alle Achsen drauf anwenden, ABER die von dir beschriebene Bewegung wird in der Realität nicht auftretten!
    Auch ist es bei mir so, dass die angezeigte Drehung richtige Ergebnisse ausgibt.
    Ich vermute mal, bei dir liegt da irgendwo ein Fehler vor. Evtl willst du ja deinen gesamten Code hier reinstellen, dann könnte ich mal drüberschauen, wenn du willst.

    Gruß
    Chris

  5. #25
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.04.2005
    Ort
    Aarau
    Alter
    41
    Beiträge
    982
    Hallo Chris

    Ich habe mal versucht die Bewegung aus dem Video aufzuzeichnen villeicht kannst du in der Aufzeichnung etwas erkennen. Man sieht schön, dass der Winkel-Y am Ende der Bewegung nicht auf 0 ist...

    Kennst du SerialChart? Kann man da irgendwo die Zeit/Pixel einstellen? Bei schnellen Bewegungen ist alles so zusammengedrückt, dass man nichts erkennen kann. Ich würde das gerne Horizontal auseinanderziehen.

    Klicke auf die Grafik für eine größere Ansicht

Name:	aufzeichnung.JPG
Hits:	15
Größe:	37,5 KB
ID:	30093

    Gruss Bluesmash

    - - - Aktualisiert - - -

    Hier mal die relevanten Teile aus dem Code...
    Ich hoffe du verstehst ihn ein wenig ist leider nicht so schön programmiert

    Code:
    Gosub MPU6050_init 
    
    'Hauptschleife
    Do
    
       'Alle 5ms Neue Sensordaten lesen, Filter, PID, Motoren beschreiben
       'Variable Berechnen wird in einem 5ms Timer Interrupt gesetzt
       If Berechnen = 1 Then
    
          Berechnen = 0
    
          Gosub Neue_Daten
    
    
          'PID Regler Gyro X-Achse
          Call PID_Cal(Soll_Gyr_X, Ist_Gyr_X, PID_out_G_X, Kp_G_X, Ki_G_X, Kd_G_X, eSum_G_X, eAlt_G_X)
          'PID Regler Acc X-Achse
          Call PID_Cal(Winkel_X_SW, Winkel_X_T, PID_out_X, Kp_X, Ki_X, Kd_X, eSum_X, eAlt_X)
    
          'PID Regler Gyro Y-Achse
          Call PID_Cal(Soll_Gyr_Y, Ist_Gyr_Y, PID_out_G_Y, Kp_G_Y, Ki_G_Y, Kd_G_Y, eSum_G_Y, eAlt_G_Y)
          'PID Regler Acc Y-Achse
          Call PID_Cal(Winkel_Y_SW, Winkel_Y_T, PID_out_Y, Kp_Y, Ki_Y, Kd_Y, eSum_Y, eAlt_Y)
    
          'PID Regler Gyro Z-Achse
          Call PID_Cal(Soll_Gyr_Z, Ist_Gyr_Z, PID_out_G_Z, Kp_G_Z, Ki_G_Z, Kd_G_Z, eSum_G_Z, eAlt_G_Z)
    
          'Serielle Daten senden (alle 5ms 1 Wert)
          'If send_data = 1 Then
             Gosub Daten_Senden
          'End if
       
          '....ESC's beschreiben
          '....Analogwerte Spannung/Strom verarbeiten
          '....Diverse Funktionen RC-Empfänger
    Loop
    
    Neue_Daten:
    
       Gosub MPU6050_read
    
       'Gyrowinkel berechnen
       'Offset abziehen
       Gyr_X = Gyr_X - Gyr_X_Offset
       Gyr_Y = Gyr_Y - Gyr_Y_Offset
       Gyr_Z = Gyr_Z - Gyr_Z_Offset
       'Winkel X-Achse
       Ist_Gyr_X = Gyr_X / 32.8
       Temp_s = Ist_Gyr_X * 0.005
       Winkl_Gyr_X = Temp_s
       'Winkel Y-Achse
       Ist_Gyr_Y = Gyr_Y / 32.8
       Temp_s = Ist_Gyr_Y * 0.005
       Winkl_Gyr_Y = Temp_s
       'Winkel Z-Achse
       Ist_Gyr_Z = Gyr_Z / 32.8
       Temp_s = Ist_Gyr_Z * 0.005
       Winkl_Gyr_Z = Temp_s
    
    
       'ACC Winkel berechnen X-Achse
       Temp2_s = ACC_Y
       Temp_s = ACC_X * ACC_X
       Temp3_s = ACC_Z * ACC_Z
       Temp_s = Temp_s + Temp3_s
       Temp3_s = sqr(Temp_s)
       Temp_s = atn2(Temp2_s , Temp3_s)
       Winkl_ACC_X = rad2deg(Temp_s)
       'ACC Winkel berechnen Y-Achse
       Temp2_s = ACC_X
       Temp_s = ACC_Y * ACC_Y
       Temp3_s = ACC_Z * ACC_Z
       Temp_s = Temp_s + Temp3_s
       Temp3_s = sqr(Temp_s)
       Temp_s = atn2(Temp2_s , Temp3_s)
       Temp_s = Temp_s * -1
       Winkl_ACC_Y = rad2deg(Temp_s)
    
       'Gesamtbeschleunigung berechnen
       Temp_s = ACC_X * ACC_X
       Temp3_s = ACC_Z * ACC_Z
       Temp_s = Temp_s + Temp3_s
       Temp3_s = ACC_Y * ACC_Y
       Temp_s = Temp_s + Temp3_s
       Temp2_s = sqr(Temp_s)
       ACC_Total = Temp2_s / 16383
       ACC_Dif1g = 1 - ACC_Total
       ACC_Dif1g = abs(ACC_Dif1g)
    
       'Komplementärfilter 0,98*Gyro + 0.02*ACC
       'Nur ausführen wenn gesammtbeschleunigung nahe 1g
       'X-Achse
       Temp_s = Winkel_X + Winkl_Gyr_X
       if ACC_Dif1g < 0.5 then
          Temp2_s = Temp_s * Kompl_Faktor
          Temp_s = 1 - Kompl_Faktor
          Temp3_s = Winkl_ACC_X * Temp_s
          Winkel_X = Temp2_s + Temp3_s
       Else
          Winkel_X = Temp_s
       End if
       'Y-Achse
       Temp_s = Winkel_Y + Winkl_Gyr_Y
       if ACC_Dif1g < 0.5 then
          Temp2_s = Temp_s * Kompl_Faktor
          Temp_s = 1 - Kompl_Faktor
          Temp3_s = Winkl_ACC_Y * Temp_s
          Winkel_Y = Temp2_s + Temp3_s
       Else
          Winkel_Y = Temp_s
       End if
    
       'Drehmatrix um Z-Achse
       Temp_s = deg2rad(Winkl_Gyr_Z)
       GyroZSin = Sin(Temp_s) 'Drehung um Yaw Achse von Deg zu Rad konvertieren
       GyroZCos = Cos(Temp_s)
       Temp_X = GyroZCos * Winkel_X
       Temp_Y = GyroZSin * Winkel_Y
       Temp2_s = Temp_Y + Temp_X
       Temp_X = GyroZSin * Winkel_X
       Temp_Y = GyroZCos * Winkel_Y
       Temp3_s = Temp_Y - Temp_X
       'Werte zurückschreiben
       Winkel_X = Temp2_s
       Winkel_Y = Temp3_s
    
       'Trimm Wert verrechnen
       Winkel_X_T = Winkel_X + Winkel_X_Trimm
       Winkel_Y_T = Winkel_Y + Winkel_Y_Trimm
    Return
    
    '----------   Beschleunigungssensor auslesen   ----------
    MPU6050_read:
    
       I2cstart
       I2cwbyte &HD0                       'Schreibadresse
       I2cwbyte &H3B                       'Register h43 auswählen
       I2cstop
    
       I2cstart
       I2cwbyte &HD1                       'Leseadresse
    
       I2crbyte Msb , Ack                  'ACC X (Register 3B + 3C)
       I2crbyte Lsb , Ack
       ACC_X = Makeint(Lsb,Msb)
       I2crbyte Msb , Ack                  'ACC Y (Register 3D + 3E)
       I2crbyte Lsb , Ack
       ACC_Y = Makeint(Lsb,Msb)
       I2crbyte Msb , Ack                  'ACC Z (Register 3F + 40)
       I2crbyte Lsb , Ack
       ACC_Z = Makeint(Lsb,Msb)
    
       I2crbyte Msb , Ack                  'Temperatur (Register 41 + 42)
       I2crbyte Lsb , Ack
    
       I2crbyte Msb , Ack                  'Gyro X (Register 43 + 44)
       I2crbyte Lsb , Ack
       Gyr_X = Makeint(Lsb,Msb)
       I2crbyte Msb , Ack                  'Gyro Y (Register 45 + 46)
       I2crbyte Lsb , Ack
       Gyr_Y = Makeint(Lsb,Msb)
       I2crbyte Msb , Ack                  'Gyro Z (Register 47 + 48)
       I2crbyte Lsb , Nack
       Gyr_Z = Makeint(Lsb,Msb)
    
    Return
    
    '----------   Beschleunigungssensor Initialisieren   ----------
    MPU6050_init:
    
       'Sensor aktivieren
       I2cstart
       I2cwbyte &HD0                       'Schreibadresse
       I2cwbyte &H6B                       'Register h6B Powermanagement
       I2cwbyte &H00                       'Wert 0 schreiben
       I2cstop
    
       waitms 200
       Toggle LED_R
       toggle LED_H
    
       'Filter konfigurieren
       '     ACC                  Gyro
       'Wert Bandbreite  Delay    Bandbreite  Delay
       '0    260Hz       0.0ms    256Hz       1.0ms
       '1    184Hz       2.0ms    188Hz       1.9ms
       '2     94Hz       3.0ms     98Hz       2.8ms
       '3     44Hz       4.9ms     42Hz       4.8ms
    
       I2cstart
       I2cwbyte &HD0                       'Schreibadresse
       I2cwbyte &H1A                       'Register h1A Filter
       I2cwbyte 6                         'Wert schreiben
       I2cstop
    
       waitms 200
       Toggle LED_R
       toggle LED_H
    
       'Gyro Bereich festlegen
       'Wert    Bereich
       '0       +/-  250°/s
       '8       +/-  500°/s
       '16      +/- 1000°/s
       '24      +/- 2000°/s
    
       I2cstart
       I2cwbyte &HD0                       'Schreibadresse
       I2cwbyte &H1B                       'Register h1B Gyro konfig
       I2cwbyte 16                         'Wert schreiben
       I2cstop
    
       waitms 200
       Toggle LED_R
       toggle LED_H
    
       'ACC Bereich festlegen
       'Wert    Bereich
       '0       +/-  2g
       '8       +/-  4g
       '16      +/-  8g
       '24      +/- 16g
    
       I2cstart
       I2cwbyte &HD0                       'Schreibadresse
       I2cwbyte &H1C                       'Register h1C ACC konfig
       I2cwbyte 0                          'Wert schreiben
       I2cstop
    
       waitms 200
       Toggle LED_R
       toggle LED_H
    
       Gyr_X_Offset_Sum = 0
       Gyr_Y_Offset_Sum = 0
       Gyr_Z_Offset_Sum = 0
    
       For i = 1 to 200
          gosub  MPU6050_READ
          Gyr_X_Offset_Sum = Gyr_X_Offset_Sum + Gyr_X
          Gyr_Y_Offset_Sum = Gyr_Y_Offset_Sum + Gyr_Y
          Gyr_Z_Offset_Sum = Gyr_Z_Offset_Sum + Gyr_Z
          waitms 1
       next
       Gyr_X_Offset = Gyr_X_Offset_Sum / i
       Gyr_Y_Offset = Gyr_Y_Offset_Sum / i
       Gyr_Z_Offset = Gyr_Z_Offset_Sum / i
    
       Toggle LED_R
       toggle LED_H
       waitms 200
       LED_R = 0
       toggle LED_H
    Return

  6. #26
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.04.2005
    Ort
    Aarau
    Alter
    41
    Beiträge
    982
    Hallo Chris

    Heute hatte ich endlich wieder mal Zeit einen kurzen Testflug zu machen.
    Den Komplementärfilter habe ich jetzt auf 0.001 ACC eingestellt, jetzt fliegt er schon um Welten besser! Danke für deinen Tipp!
    Das war das Problem mit dem "Nachziehen". Der ACC hat bei der Querbeschleunigung einfach zu viel korrigiert...

    Jetzt muss ich noch die ACC-Kalibrierung einbauen...

    Hier noch ein Video (leider in der Garage da es draussen zu viel Wind hatte):



    Gruss Bluesmash

  7. #27
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578
    Hi,

    na das sieht doch schon vielversprechend aus!
    Der Faktor wird wohl auch viel besser passen, die 0.02 die du anfangs hattest, wären wohl eher für ne Trägheitsnavigation geeignet, was ich aber definitiv anders machen würde, falls du diesen Schritt überhaupt machen willst.
    Was sind den deine Ziele mit dem Projekt?
    Gps, Kamera, Höhe halten?

    Gruß
    Chris

  8. #28
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.04.2005
    Ort
    Aarau
    Alter
    41
    Beiträge
    982
    Hallo Chris

    Auf dem Copter habe ich ein Raspberry Pi A+ dieses möchte ich zusammen mit der Kamera für Foto und Filmaufnahmen verwenden. Der Pi soll als AccessPoint laufen und darauf der RPi Cam Control Webserver. Dieser funtioniert bereits, es stürzt aber immer wieder ab und in den Videos habe ich ruckler drinn Für die Kamera möchte ich mir noch ein "SuperSimpleGimbal" nachbauen.

    Ich habe letztens noch ein neues 10-DOF Sensorboard gekauft. (MPU6050 + HMC5883L + MS5611)
    Damit möchte ich eine "Höhe-halten" Funktion programmieren, ob ich den Kompass auch integrieren werden weiss ich noch nicht.

    GPS wäre auch ein sehr intressantes Thema. Aber momentan ist es noch nicht auf meiner ToDo Liste...

    Auf jedenfall muss ich noch meinen Code optimieren, damit Mehr Zeit für anderes bleibt. Momentan ist alles mit Float programmiert, da muss ich noch einiges ändern...


    Gruss Bluesmash

  9. #29
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578
    Hi,

    soll darauf auch ne "inteligentere" Software laufen, also zb Gesichtserkennung zum Folgen oder solche Späße?
    Ja, du solltest, wenn du noch mehr reinpacken willst, unbedingt auf Festkommaarithmetik umstellen, da geht dann noch einiges mehr!
    Wenn du GPS haben willst, brauchst du dafür auch nen Kompass, sonst gehts nicht.

    Gruß
    Chris

  10. #30
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.04.2005
    Ort
    Aarau
    Alter
    41
    Beiträge
    982
    Mal schauen was noch alles kommt
    Am Anfang war eigentlich nur das Ziel einen Qadrocopter zu bauen und programmieren der einigermassen gut fliegt, da mich einfach einfach die Technik intressierte...
    Mal schauen welche spielereien ich noch einbauen werde.... aber momentan ist der Pi nur für die Kamera gedacht...

    Gruss Bluesmash

Seite 3 von 4 ErsteErste 1234 LetzteLetzte

Ähnliche Themen

  1. Quadrocopter (Dimensionierung)
    Von crabtack im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 54
    Letzter Beitrag: 24.03.2015, 17:44
  2. Quadrocopter Höhenbegrenzung
    Von Che Guevara im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 20.10.2011, 00:55
  3. Quadrocopter
    Von Thalhammer im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 16
    Letzter Beitrag: 10.02.2011, 13:06
  4. -=4C=- Quadrocopter
    Von Salvador im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 42
    Letzter Beitrag: 15.05.2009, 20:43
  5. quadrocopter
    Von goara im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 257
    Letzter Beitrag: 27.12.2008, 22:07

Stichworte

Berechtigungen

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

Solar Speicher und Akkus Tests