Hallo Chris
Die Haube habe ich aus der Bastelecke, da gibt es solche Plexiglaskugeln die aus 2 Hälften bestehen.
Der Rest ist selbst gemacht. Der Grundrahmen besteht aus Karbon Rohren und Aluminium Teilen die mir ein Freund gedreht hat. Die Rohre sind mit 2K-Epoxid eingegklebt.
Übrigens, auf dem Quadrocopter habe ich noch ein Raspberry Pi A+ mit Kamera verbaut. Mit dem PI möchte ich einen Access-Point aufbauen und darauf soll ein Webserver für die Bedienung der Kamera laufen... Das ist meine nächste Baustelle
Alle 5ms wird der Sensor ausgelesen, die Winkel berechnet und die PID-Regler aufgerufen.
Der Komplementär Filter läuft mit 0.98*Gyro und 0.02*ACC.
Den Regler habe ich als Kaskade aufgebaut. Der innere Regelkreis (PID) Regelt nur auf die Gyro-werte und der äussere (PI) Regelt dann den Winkel. Im Video auf der Wippe ist es gut ersichtlich (In der ersten Hälfte läuft nur der Gyro-Regler und in der zweiten wird der äussere Regler hinzugeschaltet).
Auf dem Video ist es relativ schwierig zu erkennen, da man nicht sieht wann ich den Knüpel los lasse...
Am besten sieht man es im ersten Video ab 0:12 2mal nacheinander. Da gebe ich ihm nur einen kleinen "Schupf", in dem Moment wo er kurz zurückregelt lasse ich den Knüppel los und er fliegt schräg weiter.
Hier mal der relevante Teil des Codes vielleicht verstehts du etwas ich habe leider nur wenig dokumentiert...
Code:
'Sensordaten einlesen
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
'Beschleunigungen auf +/- 1g begrenzen
If ACC_X > 17000 Then ACC_X = 17000
If ACC_X < -17000 Then ACC_X = -17000
If ACC_Y > 17000 Then ACC_Y = 17000
If ACC_Y < -17000 Then ACC_Y = -17000
If ACC_Z > 17000 Then ACC_Z = 17000
If ACC_Z < -17000 Then ACC_Z = -17000
'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)
'Komplementärfilter 0,98*Gyro + 0.02*ACC
'X-Achse
Temp_s = Winkel_X + Winkl_Gyr_X
Temp2_s = Temp_s * Kompl_Faktor
Temp_s = 1 - Kompl_Faktor
Temp3_s = Winkl_ACC_X * Temp_s
Winkel_X = Temp2_s + Temp3_s
'Y-Achse
Temp_s = Winkel_Y + Winkl_Gyr_Y
Temp2_s = Temp_s * Kompl_Faktor
Temp_s = 1 - Kompl_Faktor
Temp3_s = Winkl_ACC_Y * Temp_s
Winkel_Y = Temp2_s + Temp3_s
'Trimm Wert verrechnen
Winkel_X_T = Winkel_X + Winkel_X_Trimm
Winkel_Y_T = Winkel_Y + Winkel_Y_Trimm
Lesezeichen