open360tracker - Der Community Antennentracker Made in Germany

Rangarid

Erfahrener Benutzer
Wir benutzen das SVN von Google Code aber ich wollte das nicht freischalten bevor wir eine funktionierende Basisversion haben. Werde heut abend mal deinen Code ansehen und wenn sich das positiv auf die genauigkeit auswirkt übernehmen. Damit hätten wir dann quasi die funktionierende Basisversion und ich wuerde das SVN dann freischalten.

Google kann auch git. Aber da sich keiner gemeldet hat als ich gefragt hab ob wer helfen will hab ich keine Rücksicht drauf genommen, dass andere den Code sehen wollen.
 

Rangarid

Erfahrener Benutzer
So, grad mal getestet. Die Ansteuerung an sich ist nun etwas genauer, man kommt also viel besser auf +-1° an den gewünschten Wert heran. Allerdings ist das ganze nun etwas langsamer. Kann man aber wieder schneller machen wenn man P hochschraubt.
Dafür ist das System etwas träger, wenn man den Tracker dreht. Es dauert also eine Weile, bis der Tracker hinterherdreht wenn man den Tracker an sich dreht. Ist aber nicht schlimm, da wir ja den Tracker nicht von Hand drehen.

Kurzum würde ich sagen wir haben unsere Basisversion damit.

Warum hast du PID auf +-100 begrenzt? PID kann -500...500 haben wenn man von einem Mittelwert 1500us ausgeht.

Edit:
Ach ja, Folgefehler aus den vorherigen:

Wenn du Error auf Größe 11 setzt musst du das hier auch ändern:
Dk=D * (Error[0]-Error[9]);
wird zu
Dk=D * (Error[0]-Error[10]);
 
Zuletzt bearbeitet:

Rangarid

Erfahrener Benutzer
@Xell

Habe gestern auch das Problem gehabt, dass er dauerhaft dreht. Das liegt an den PID Werten. Die muss man halt an seine Bedüfnisse anpassen.

Probier mal die Version von timoski mit folgender Änderung:
Code:
    Serial.print("H:");Serial.print(heading);Serial.print(" T: ");Serial.print(targetHeading);Serial.print(" Error: ");Serial.print(Error[0]);Serial.print(" PWM: ");Serial.print(PWMOutput);Serial.print(" ErrorD: ");Serial.print(Dk);
    Serial.print(" P: ");Serial.print(P);Serial.print(" I: ");Serial.print(I);Serial.print(" D: "); Serial.println(D);
wird zu
Code:
    Serial.print("H:");Serial.print(heading);Serial.print(" T: ");Serial.print(targetHeading);
    Serial.print(" P: ");Serial.print(P);Serial.print(" I: ");Serial.print(I);Serial.print(" D: "); Serial.println(D);
Die zusätzlichen Infos da drin sind zuviel für die Baudrate, deshalb muss die Serielle Kommunikation etwas verringert werden. Sind eh nur Debugginginformationen.
 

Rangarid

Erfahrener Benutzer
So, hab mal basierend auf den Änderungen von timoski ein Github Repo eröffnet:
https://github.com/SamuelBrucksch/open360tracker

Habe aber folgende Änderungen noch vorgenommen:
1. Serial Output: Da wurde zuviel ausgegeben und die Leitung war überlastet, wurde reduziert auf die Sachen zum Testen
2. Target Heading: es kam 900 statt 90° raus -> targetHeading/10 bei serieller Ausgabe
3. Dk=D * (Error[0]-Error[9]); Hier nimmt man den aktuellen und den ältesten Fehler. Aufgrund des Fehlers vorher ist Error[10] nun der älteste Fehler.
4. PID geht von -500...500 da Servowerte 1000...1500...2000
5. Tilt Servo: Es musste 1000...2000 als Wert übergeben werden, nun ist es 0...180°

Die Version wurde gestern von mir als funktionierende Basisversion eingestuft, da timoski und ich beide valide Werte bekamen. Als nächstes kommt nun der Schritt mit der Telemetrie. Alle anderen können solange mit der Firmware testen, ob der Tracker rund läuft.

Tilt Servo ging vermutlich nicht, da dort die Werte in us übergeben werden mussten (1000...2000). Nun ist es 0...180°.
 
Zuletzt bearbeitet:
@Rangarid
Die Servowerte hatte ich bei mir beschränkt weil es dann einfacher war den Regler einzustellen. Bei +/-500 wird bei mir das Servo extrem schnell und überschwingt. Bei SimpleBGC wird das so ähnlich gemacht indem man neben dem PID Regler auch das Drehmoment der Motoren einstellt.
Kann ich euch bei der Entwicklung der Telemetrieanbindung irgendwie helfen?
 

Rangarid

Erfahrener Benutzer
Telemetrie is schon fertig, muss quasi nur getestet werden. Also Frsky jedenfalls. Du könntest mit Mavlink oder HoTT anfangen wenn du willst.

100 finde ich jedenfalls extrem langsam, müssen wir mal Testen, ob das schnell genug ist. Sonst vllt hoch auf 200-250.

Ich pack heut abend mal den Telemetrie Kram mit rein. Haben uns da schon gedanken gemacht gehabt für verschiedene Protokolle wie das aufgebaut werden soll.
 

nils1982ks

Erfahrener Benutzer
Ich hoffe das ist keine Dumme Frage, aber warum soll man für den D Anteil den neusten und den ältesten Wert nutzen? Der D Anteil soll die Regelung beschleunigen indem die Ausgabe mit der aktuell notwendigen Änderung skaliert. Nehme ich einen besonders alten Wert, dann mache ich die Regelung unnötig langsam.
Grüße
Nils
 

Rangarid

Erfahrener Benutzer
Das schreibt derjenige dazu, der den Code entwickelt hat:
DTerm – While I have the D term in this equation it is not used for this motor control application (see DTerm = 0 in the code). The D term is multiplied by the change in the error signal (error – last error). Sometimes it is useful to store your error measurements in an array and use as your last error something a little further back in time. For fast changing systems, like a motor controller, the derivative portion of the PID has little impact unless you make it very large, or compare error signals with adequate time between their sampling. In this code the derivative error is the latest error signal minus the 10th previous error.
http://blog.solutions-cubed.com/pid-motor-control-with-an-arduino/

War ursprünglich auch mal auf 0. Konnte kaum ne Änderung feststellen, egal was ich da eingetragen hab.
 

nils1982ks

Erfahrener Benutzer
Achso, ich dachte das stammt von dir. Ich hoffe meine Multiwii kommt bald, auf dass ich mich auch mal selber versuchen kann. Ich würde tippen, dass es am besten ist, wenn man die Regelung für Pan und Tilt so schlank wie möglich macht. Hat man viel Kapazität für all die anderen Spielereien. Neben dem D Teil kann man den I Teil sicher auch viel einfach programmieren, die Konstruktion hier ist ja auch eine etwas andere.
Hat vielleicht noch jemand eine passende Multiwii liegen?

Grüße
Nils
 

Rangarid

Erfahrener Benutzer
Tilt ist superschlank, da gibt es nicht viel zu rechnen. Ohne den PID Controller hab ich nichts anständiges hinbekommen. Würde das also zunächst so lassen. Solang beim Telemetrie parsen nichts verloren geht würde ich da auch vorerst mal nichts mehr dran ändern.
 

nils1982ks

Erfahrener Benutzer
Hallo,

Ich habe mal den Bausatz zusammen gesetzt, super Qualität! Nur wie soll das Pan Servo verbaut werden? Habe das empfohlene Gws servo, oder ist das Zahnrad falsch montiert?
Grüße Nils
uploadfromtaptalk1411021527911.jpg
 

MarenB

Runter kommen sie immer!
Hi. Das dürfte falsch sein. Das erste ZR gehört unter die Servo-Scheibe. Für das zweite kann man die Scheibe dann soweit abdrehen, dass das zweite ZR genau drauf /drüber passt.
 
FPV1

Banggood

Oben Unten