Quadrokopter µC programmieren

OP #3442168
Lesenswert?
• ▲
▼
Hallo,
ich habe eine nun die Hardware soweit stehen, dass ich beim 
Programmieren bin. Habe bereits einige Zeilen geschrieben jedoch 
erfolglos. Der erste versuch ist es nur Zwei Motoren anzusprechen die 
sich auspendeln. Das gelingt bedingt bis sich ein starkes schaukeln 
ergibt. Lösung ist eigentlich auch ganz simpel nicht zu stark 
beschleunigen etc. aber die Umsetzung ist das Problem.
ich habe einen Winkelwert von -5000 bis +5000. Mal eine Seite gekippt 
dann die andere und die Motoren brauchen einen wert zwischen 70min. und 
120 max.
1
 
2
  escA.write(ValA);
3
  escB.write(ValB);
4
  int delaywhile = 6;
5
// ValA=val;
6
 //ValB=val;
7

8
  if(Xk1<0&&Xk1>-500){
9
     ValA=val;
10
    ValB=val;
11
 }
12
  if(Xk1>0&&Xk1<500){
13
    ValA=val;
14
    ValB=val;
15
   
16
 } 
17
 if(ValA-val>6||ValB-val>6){
18
   if(ValA-val>6){
19
    ValA=ValA;
20
   }
21
   else{
22
    ValB=ValB;
23
   }
24
 }
25
 else{
26
 
27
   if(Xk1<-500&&Xk1>-2000){
28
     if(Xk1<-500&&ValA-val<4){
29
    ValA=ValA+0.1;
30
    ValB=ValB+0.2;}
31
     else{
32
       ValA=val;
33
   ValB=ValB+0.2;}
34
    //delay(delaywhile); 
35
 }
36
  if(Xk1>500&&Xk1<2000){
37
    if(Xk1>500&&ValB-val<4){
38
    ValB=ValB+0.1;
39
    ValA=ValA+0.2;}
40
     else{
41
        ValB=val;
42
   ValA=ValA+0.2;}
43
 } 
44
 
45
   if(Xk1<-2000&&Xk1>-5000){
46
     if(Xk1<-1700&&ValA-val<4){
47
   ValA=ValA+0.1;
48
    ValB=ValB+0.4;}
49
     else{
50
       ValA=val;
51
   ValB=ValB+0.4;}
52
    //delay(delaywhile); 
53
 }
54
  if(Xk1>2000&&Xk1<5000){ 
55
    if(Xk1>170&&ValB-val<4){
56
         ValB=ValB+0.1;
57
    ValA=ValA+0.4;}
58
    else{
59
       ValB=val;
60
   ValA=ValA+0.4;}
61
 }
62
 
63
 }
nach links gekippt positive werte rechts halt negative in der Mitte 
+-300

ValA für den linken Motor  (linke Seite)
ValB Rechter Motor (rechte Seite)
val= Standard Geschwindigkeit in diesem fall 73

Er versucht die Beschleunigung zu begrenzen, indem er mit dem anderen 
Motor Bremst. vielleicht habe ich auch den völlig falschen Ansatz.

-Danke für die Hilfe :)
#3442456
Lesenswert?
• ▲
▼
Der klassische Ansatz wäre ein PID-Regler mit entsprechend angepassten 
Werten für P, I und D (letzterer evtl. 0).

Wikipedia und google wissen Näheres...

PS: die Meßwerte, die man ausregeln will, sollten auch geeignet 
geglättet werden.
Alleine das ist ein größeres Thema, bei Bedarf gibt es auch hier im 
Forum schon einiges dazu.
#3442738
Lesenswert?
• ▲
▼
Nabend,

Prinzipel: Suchfunktion benutzen. ;)

Findest z.B. Beitrag "Quadrocopter - Selber bauen"

Das Thema ist leider nicht so einfach... Schließe mich meinem 
Vorschreiber an. Schau dir erstmal die PID-Regelung an. Sei Vorsichtig 
mit dem D anteil.

Wenn du aber was lernen willst ist das kein so schlechtes Vorgehen.
Mach es erstmal mit Zwei Motoren. Und teste ein bisl rum.

Und wenn es wirklich in die Luft gehen soll, 'muss' man versichert sein. 
Wie beim Auto fahren...Und Testflüge bitte nur weit wech von bewohnten 
Gebiet fliegen.

Und pass auf deine Finger auf. Carbon kann weh tun. Spreche da aus 
Erfahrung :)

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.