"We are back" « oc.at

Servobewegung mit Runge-Kutta glätten? Wie?

LTD 02.04.2011 - 23:41 2041 9
Posts

LTD

frecher fratz
Avatar
Registered: Feb 2001
Location: is where it is
Posts: 6334
Abend,

ich bastel gerade an einem Servo herum, dass ich über einen Ultraschall-Entfernungsmesser ansteuere:

Fällt die Distanz unter 60mm, fängt sich das Servo mit (60/verbleibende mm) an zu bewegen (wird also schneller sobald man ihm näher kommt.

Mein Problem ist jetzt, dass die Bewegung nicht kontinuierlich, sondern sehr ruckartig abläuft. Ich komme dem Servo näher - es bewegt sich, ich folge, es bleibt stehen und nimmt erneut Fahrt auf.

Ich habe gelesen (und in einem anderen Code gesehen) dass man die Bewegung durch Trapez- oder Runge-Kutta Integration flüssig hinbekommt. Nur leider scheitert es an der Anwendung für meine Bedürfnisse. Wie genau schreibe ich zb. ein Runge-Kutta-Verfahren zweiter Ordnung? Oder ein Trapez - oder was auch immer mir helfen könnte? Ich hoffe jemand kennt sich da aus ;/

Vielen Dank für eure Hilfe!

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Die Frage ist doch: was willst du erreichen

Weil sobald du die Geschwindigkeitskurve abflachst, reduziert sich natürlich auch die Reaktionsgeschwindigkeit des Servos.

LTD

frecher fratz
Avatar
Registered: Feb 2001
Location: is where it is
Posts: 6334
Ich möchte, dass das Servo sich flüssig bewegt und nicht vor sich hin zuckelt...

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
so viel hast du schon in deinem ersten Post geschrieben ;)

Die Frage ist was bewegst du mit dem Servo und welchen Parameter kannst du beeinflussen - also Position, oder Geschwindigkeit

Nebenbei ist sicher auch interessant auf welchem Prozessor du die Berechnungen/Steuerung machst, dabei ist wichtig hat er eine FPU oder nicht?

E: War ja wohl nicht so wichtig :p
Bearbeitet von watchout am 06.04.2011, 13:10

Viper780

Elder
Er ist tot, Jim!
Avatar
Registered: Mar 2001
Location: Wien
Posts: 50350
Interessantes Thema deshalb schreib ich auch noch dazu.

Hast du denn schon einen Integrator drinnen? Runge-Kutta braucht halt viele Daten und einiges an Rechenleistung und würde nur Sinn machen wenn du genauere Daten brauchst.

Ich glaub eher dass du ein Dämpfungsglied und einen etwas trägeren Regelmechanismus brauchst

böhmi

Administrator
Spießer
Avatar
Registered: May 2004
Location: Wels Land
Posts: 4650
Schon mal einfach mit einem Kondensator zwischen Regler und Motor probiert?

LTD

frecher fratz
Avatar
Registered: Feb 2001
Location: is where it is
Posts: 6334
Sorry für die späte Antwort.

Ich benutze den Arduino Uno und möchte mein Servo einfach über ° ansteuern. Das gleiche Problem hatte ich bei der Ansteuerung über eine Wiimote, wobei ich bei diesem Problem einen vorgefertigten Source-Code gefunden habe, der eben diesen Runge Kutta Algorithmus drinnen hatte.

böhmi

Administrator
Spießer
Avatar
Registered: May 2004
Location: Wels Land
Posts: 4650
Also ist die Positionsregelung im Servo integriert?

Viper780

Elder
Er ist tot, Jim!
Avatar
Registered: Mar 2001
Location: Wien
Posts: 50350
poste einfach mal die 2 code stücke - ich kann mir da nicht viel vorstellen wie du das steuerst

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Also so wie ich das versteh sind die Runge-Kutta Methoden nur ein Werkzeug um Differentialgleichungen numerisch (aka schnell) zu approximieren. Dazu brauchst du aber erstens erst mal die Gleichung, und zweitens macht das imho in deinem Fall keinen Sinn weil du die Gleichung per Hand auch vorher lösen kannst und das Ergebnis verwenden und damit den eh relativ schwachen ATMega der auf deinem Board (wenn es das ist: http://arduino.cc/en/Main/ArduinoBoardUno ) drauf sein dürfte nicht überforderst. Du hast ja doch eine Real-Time Anwendung.

Die Frage ist, "MUSST" du es berechnen? (aka, is es für Uni, Wissenschaftl. Projekt, ö.Ä. oder einfach für "Daham"?)
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz