- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 10 von 35

Thema: Genetischer Algorithmus für QuadroCopter

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #13
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    32
    Beiträge
    1.578
    Ich wollte mir ja ein Testboard bauen, damit ich erstmal ohne Risiko, den Copter zu schrotten, das Programm ausprobieren kann Den auch, wenn man im Programm Code keinen Fehler erkennen kann, heißt das noch lange nicht, dass da auch kein Fehler ist...
    Hm über die Zeit muss ich mir nochmal Gedanken machen, am besten wird es wohl sein, ein paar Tests zu machen. Trotzdem denke ich, eine etwas kürzere Zeit sollte besser sein, den: Innerhalb von ein paar Sekunden muss der Pilot nicht zwingend nachregeln, was die ganze Methode doch um einiges genauert macht. Folgendes Szenario: Der Pilot steuert beim 1. Test etwas stärker, da sich der Copter zu stark bewegt. Somit beinflusst der Pilot die Fitness sehr negativ. Beim 2. Test muss der Pilot nicht / nur wenig steuern, die Fitness wird somit nicht vom Piloten beeinflusst. Dann kann es passieren, dass die Werte des 2. Tests besser abschneiden als die des 1., obwohl die ersten Werte eigentlich die besseren wären. Stimmt ihr mir zu, oder habe ich hier einen Denkfehler?

    Also Speichermäßig sollte auf dem Mega328P (der ist ja auf der shrediquette auch drauf, oder?) doch einiges vorhanden sein. Hab mich gerade mal an einer Lösung probiert, ist zwar noch nicht fertig, aber ich denke, ich habe bis auf ein paar Kleinigkeiten alles wichtige drin (7% Flash Used):
    Code:
    $regfile = "m328pdef.dat"
    $crystal = 16000000
    $framesize = 80
    $hwstack = 80
    $swstack = 80
    $baud = 19200
    
    
    
    Declare Sub Get_fitness()
    Declare Sub Get_new_individuen()
    
    
    
    
    Const Max_time = 50                                         'maximale Zeit zum Testen
    
    
    Dim I As Byte                                               'Zeitpunkt i
    Dim Gyro_yaw(max_time) As Integer                           'Gyro Wert zum Zeitpunkt i
    Dim Gyro_roll(max_time) As Integer                          'Gyro Wert zum Zeitpunkt i
    Dim Gyro_pitch(max_time) As Integer                         'Gyro Wert zum Zeitpunkt i
    Dim Gyro_yaw_sqr As Integer                                 'Gyro Differenz Wert von (i-1) bis i
    Dim Gyro_roll_sqr As Integer                                'Gyro Differenz Wert von (i-1) bis i
    Dim Gyro_pitch_sqr As Integer                               'Gyro Differenz Wert von (i-1) bis i
    Dim Rnd_p As Single                                         'Zufallszahl zu Erstellung neuer Individuen
    Dim Rnd_i As Single                                         'Zufallszahl zu Erstellung neuer Individuen
    Dim Rnd_d As Single                                         'Zufallszahl zu Erstellung neuer Individuen
    Dim Temperatur As Single                                    'simulated annealing
    Dim Temperatur_int As Integer
    Dim T_a As Single
    Dim Kp_startup As Single                                    'Startup P Wert
    Dim Ki_startup As Single                                    'Startup I Wert
    Dim Kd_startup As Single                                    'Startup D Wert
    Dim Kp_mom As Single                                        'momentaner P Wert
    Dim Ki_mom As Single                                        'momentaner I Wert
    Dim Kd_mom As Single                                        'momentaner D Wert
    Dim Kp_best As Single                                       'bester P Wert
    Dim Ki_best As Single                                       'bester I Wert
    Dim Kd_best As Single                                       'bester D Wert
    
    
    Dim Tmp As Byte
    Dim Tmp_int As Integer
    Dim Tmp_single As Single
    
    
    Dim Fitness As Single
    Dim Fitness_int As Integer
    Dim Best_fitness As Single
    Dim Best_fitness_int As Integer
    
    
    Dim Fp As Single                                            'Dynamikunterschied
    Dim Fi As Single                                            'Dynamikunterschied
    Dim Fd As Single                                            'Dynamikunterschied
    
    
    Dim _yawnow As Integer                                      'aktueller Gyro Wert
    Dim _rollnow As Integer                                     'aktueller Gyro Wert
    Dim _pitchnow As Integer                                    'aktueller Gyro Wert
    
    
    Temperatur = 1
    
    T_a = 0.95                                                  'Abweichung
    
    
    Kp_startup = 0.3
    Ki_startup = 0.0001
    Kd_startup = 0.000007
    
    
    Fp = 0.2                                                    'Dynamikunterschied
    Fi = 0.05                                                   'Dynamikunterschied
    Fd = 0.05                                                   'Dynamikunterschied
    
    
    Tmp_int = Rnd(20) - 10                                      '-10 < tmp_int < 10
    Rnd_p = Tmp_int * 0.1                                       '-1 < rnd_p < 1
    
    Tmp_int = Rnd(20) - 10                                      '-10 < tmp_int < 10
    Rnd_i = Tmp_int * 0.1                                       '-1 < rnd_i < 1
    
    Tmp_int = Rnd(20) - 10                                      '-10 < tmp_int < 10
    Rnd_d = Tmp_int * 0.1                                       '-1 < rnd_d < 1
    
    
    
    Do
    
    
       Call Get_new_individuen()
    
       'teste neue Individuen
       For I = 0 To 30
          Gyro_yaw(i) = _yawnow
          Gyro_roll(i) = _rollnow
          Gyro_pitch(i) = _pitchnow
          Waitms 1
       Next I
    
       Call Get_fitness()
    
       If Fitness < Best_fitness Then
          Best_fitness = Fitness
          Kp_best = Kp_mom
          Ki_best = Ki_mom
          Kd_best = Kd_mom
       End If
    
       Temperatur = Temperatur * T_a
    
       Tmp_int = Rnd(20) - 10                                   '-10 < tmp_int < 10
       Rnd_p = Tmp_int * 0.1                                    '-1 < rnd_p < 1
    
       Tmp_int = Rnd(20) - 10                                   '-10 < tmp_int < 10
       Rnd_i = Tmp_int * 0.1                                    '-1 < rnd_i < 1
    
       Tmp_int = Rnd(20) - 10                                   '-10 < tmp_int < 10
       Rnd_d = Tmp_int * 0.1                                    '-1 < rnd_d < 1
    
    
    Loop
    
    
    Sub Get_new_individuen()
    
       Kp_mom = Temperatur * Fp
       Kp_mom = Kp_mom * Rnd_p
       Kp_mom = Kp_mom + Kp_startup
    
       Ki_mom = Temperatur * Fi
       Ki_mom = Ki_mom * Rnd_i
       Ki_mom = Ki_mom + Ki_startup
    
       Kd_mom = Temperatur * Fd
       Kd_mom = Kd_mom * Rnd_d
       Kd_mom = Kd_mom + Kd_startup
    
    End Sub
    
    
    Sub Get_fitness()
    
       For I = 1 To 30
    
          Tmp = I - 1
    
          Tmp_int = Gyro_yaw(i) - Gyro_yaw(tmp)
          Tmp_int = Tmp_int ^ 2
          Gyro_yaw_sqr = Gyro_yaw_sqr + Tmp_int
    
          Tmp_int = Gyro_roll(i) - Gyro_roll(tmp)
          Tmp_int = Tmp_int ^ 2
          Gyro_roll_sqr = Gyro_roll_sqr + Tmp_int
    
          Tmp_int = Gyro_pitch(i) - Gyro_pitch(tmp)
          Tmp_int = Tmp_int ^ 2
          Gyro_pitch_sqr = Gyro_pitch_sqr + Tmp_int
    
       Next I
    
       Fitness_int = Gyro_yaw_sqr + Gyro_roll_sqr
       Fitness_int = Fitness_int + Gyro_pitch_sqr
       Fitness = Fitness_int
    
    End Sub
    
    End
    Es ist jetzt aber schon relativ spät, weshalb der Code noch seeeehr im Anfangsstadium ist. Werds mir morgen nochmal genauer ansehen.

    Gruß
    Chris
    Geändert von Che Guevara (19.10.2011 um 23:47 Uhr)

Ähnliche Themen

  1. Quadrocopter
    Von Thalhammer im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 16
    Letzter Beitrag: 10.02.2011, 12:06
  2. Ballspielender Quadrocopter
    Von Andree-HB im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 3
    Letzter Beitrag: 09.12.2010, 17:01
  3. -=4C=- Quadrocopter
    Von Salvador im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 42
    Letzter Beitrag: 15.05.2009, 19:43
  4. quadrocopter
    Von goara im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 257
    Letzter Beitrag: 27.12.2008, 21:07
  5. Gleichstrommotoren für Quadrocopter
    Von sebbi1989 im Forum Motoren
    Antworten: 0
    Letzter Beitrag: 25.01.2008, 12:53

Berechtigungen

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

Solar Speicher und Akkus Tests