PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : bahnsteuerung für 4 achser



user529
01.11.2005, 14:00
ich möchte für meinen neuen 4achsen greifarm eine bahnsteuerung auf einem alten ibm rechner mittels c realisieren. das rastern einer linie habe ich im forum bereits gefunden:
http://wwwiti.cs.uni-magdeburg.de/~buchmann/privat/bresenham.htm
bringt mich aber nicht weiter da meine motoren um einen kreis im raum abzufahren sin und cos mäsig zueinander arbeiten müssen.

der letzte abschnitt ist immer paralell zum boden

gibt es möglichkeiten dies einfacher als mit einer tangentenkonstruktion und vielen zwischenpunkten zu realisieren?
mfg clemens

PicNick
01.11.2005, 14:07
Such mal unter "inverser Kinematik", da gibt es Doktorarbeiten zu.

user529
01.11.2005, 14:18
diesen ansatz kenn ich bereits ( der gute hat im moment eine punktsteuerung), ich wollte nur wissen ob es möglichkeiten gibt diesen kreis aus drei funktionen darzustellen und diese getrennt, simultan ausrechnen zu lassen ohne den umweg über das auflösen des kreises in geraden gehen zu müssen und massig andere hardware außer den pc und die motortreiber zu bemühen.
mfg clemens

PicNick
01.11.2005, 16:17
mhhh. Ich weiss nicht, ob ich das richtig verstanden habe: Du sollst die Spitze des Armes von A nach B bewegen und brauch daher die Bewegungs-Funktionen für die einzelnen Motoren ?
A u. B sind als x,y,z angegeben ?

user529
01.11.2005, 20:18
ja genau aber die funktionen für ABCD (achsen des bots) aus XYZ (koordinaten der punkte) und t (wie weit is er auf der linie) muss ich irgendwie umsetzen, und dabei hakte es.
die funktion steht, aber ich bringe keine signale zustande, die zeitlich untereinander abgestimmt sind (für ABCD) und dieser funktion folgen.

PicNick
02.11.2005, 07:32
Ich hab' mit sowas angefangen (Für Spinnenbeine, ähnliches Problem)
und es ist schon eine sinus Orgie, aber durchaus als Funktion darstellbar. Also ein paar Gleichungen mit (t) als Variable (keine Punkte).

ezfox
02.11.2005, 09:34
Hallo !

Ich arbeite grad an der selben Problematik - inverse Kinematik für meinen Hexabot.
Ich stehe aber noch ziemlich am Anfang.
PicNick - hast Du schon brauchbare Formeln entwickelt ?
Vielleicht könnte man den entsprechenden Teil im Wiki ( https://www.roboternetz.de/wiki/pmwiki.php?n=Main.Legs )
mit etwas ausführlicheren Informationen zu dem Thema füllen.
Es gibt doch bestimmt jede Menge allgemeingültiger Formeln für Beine/Arme mit 2 bzw. 3 DOF !

Gruß, da Fox

PicNick
02.11.2005, 09:55
Die Wiki-Sache mit den Spinnen-Haxen hab' eh ich angefangen. Weil mir aber dauernd was dazwischen kommt, komm ich nur sehr zäh weiter. Deswegen hab ich die Seiten vorerst mal recht unauffällig plaziert.

Eigentlich hab ich im Netz nicht gar soviel gefunden, wundert mich nicht, denn die xxx-Poden, die man so sieht, berücksichtigen eigentlich nix von dem, was man erwarten müßte.

Ich seh aber schon eine Unterschied zwischen xx-Poden-Haxen und Roboterarmen: Der Arm muß wirklich präzise seinen Soll-Weg berechnen, während man bei der Spinne ja auch äußere Einflüsse (Terrain, Boden-Grip) berücksichtigen muß. Und da werden unterschiedliche Bewegungs-strategien notwendig sein (auch sensorik).

Also IMHO: Für den Arm kann (wahrscheinlich muß) man so eine Berechnungs-prozedur durchziehen, für die Spinne bin ich noch am studieren, ob das ein sinnvoller Weg ist.

user529
02.11.2005, 09:59
darstellbar ist es, aber die schrittmotoren wollen alle 0,8-3ms ein signal von mir, jeder ein anderes. ich habe für jeden motor eine gleichung die das errechnet. wenn ich eine ausrechnen lasse, tun die anderen motoren nix und damit ist die bahnsteuerung hinüber.
ein datenfeld dass ich von anfang bis ende durchlaufe scheint mir am einfachsten zu realisieren und dass werde ich auch versuchen
thx für die hilfe clemens

PicNick
02.11.2005, 10:16
Die pseudo-gleichzeitige bewegung mehrere Schrittmotoren ist ganz lustig. Um da zu raten, müßt ich von deinen Programm- und Hardwarmöglichkeiten etwas mehr wissen.

user529
02.11.2005, 10:52
meinen motortreibern muss ich über die paralelle schnitstelle die richtung vorgeben und immer einen impuls schicken wenn sie einen schritt tun sollen.
referenzschalter sind (von u nach o) lichtschranke schalter schalter lichtschranke
der rechner ist ein ibm mit 66mhz, 64mb ram und win 98 proggen tu ich mit turbo c von borland

extern stehen zur verfügung sollten sie gebraucht werden:
ein rnbfra mit atm32
ein atm8
und ein atm16
mfg clemens

PicNick
02.11.2005, 11:32
Au weia. Das ist nicht trivial, so oder so, eine richtige Arbeit. Vom Programm-design bis zur Durchführung. Eigentlich kommt' da alles vor, was dem Roboter-bastler/programmierer Spaß macht. *seufz*
Ich weiss zwar, daß die Tiroler harte Burschen sind, aber mußt du das alles alleine machen ? Ist das für die Schule/Ausbildung ?

user529
02.11.2005, 12:00
ich weiß dass ich im momennt total blauäugig drauf zu laufe und keine ahnung habe wie ich von punkt auf bahnsteuerung komme, aber es muss doch irgendwo anleitungen zum thema multi tasking geben, denn es funkioniert bei anderen robotern auch.
machen muss ich das garnicht is ja ein hobby...
mfg clemens

PicNick
02.11.2005, 12:18
"Freiwillig" ist natürlich verschärft. :mrgreen: Also keine Gnade
In unserer Wiki hab ich ein Multithread demo halbwegs dokumentiert
https://www.roboternetz.de/wiki/pmwiki.php?n=Main.Softback1
Die Sourcen dazu gibt's auch
http://195.128.164.40/RT_MUSIC/electronic/download/down.htm
Versuch' dich mal da reinzulesen, Fragen gerne

ezfox
02.11.2005, 16:17
Wenn Dein Arm mit 2 Motoren eine Kreisbewegung abfahren soll, könntest Du einen Frequenzgenerator mit den Werten einer Sinuskurve füttern.
Also je höher der Wert umso höher die Frequenz der ausgegebenen (Rechteck-)Impulse.

Ein zweiter Generator wird für den anderen Motor ebenfalls mit den Werten einer Sinuskurve gesteuert,
aber diese ist 90° Phasenverschoben zu der ersten.

Die Drehrichtung bestimmt sich einfach aus den Vorzeichen der Werte aus den Sinuskurven,
deren Frequenz bestimmt die Geschwindigkeit und ein Multiplikator die Größe des Kreises.
Steuerst Du die beiden Schrittmotoren nun mit den Impulsen aus den Frequenzgeneratoren an, beschreibt der Arm eine Kreisbahn.

Nich hauen wenn ich nich verstanden haben sollte, was Du genau machen willst - ist nur so eine Idee 8-[

SprinterSB
02.11.2005, 17:01
Wenn

a = Länge der dicken gelben Achse
b = Länge der dünneren gelben Ache
alpha = winkel a -- Horizont
beta = winkel b -- Horizont

a+b ist dann bei dem schwarzen Z-Rad

Liegt der anzufahrende Punkt in Höhe h über dem Grundgelenk wo a anfängt, und r von der senkrechten Achse entfernt, dann ist doch

(1)
r = a*cos(alpha) + b*cos(beta)
h = a*sin(alpha) + b*sin(beta)

oder seh ich das falsch? Der Azimut phi, um den um die Senkrechte zu schwenken ist, ist davon unabhängig.

Aus (1) erhält man

h-r = a*(sin(alpha)+cos(alpha)) + b*(sin(beta) + cos(beta))
h+r = a*(sin(alpha)-cos(alpha)) + b*(sin(beta) - cos(beta))

Nach Anweden der Summenformel gibt das Ausdrücke in sin(alpha-pi/4), cos(alpha-pi/4), sin(beta-pi/4), cos(beta-pi/4)

und zusammen mit sin²+cos²=1 erhält man zwei Gleichungen in 2 Unbekannten sin²(alpha-pi/4) und sin²(beta-pi/4). Leider ist das nicht linear, da müsste man also mal genauer draufgucken. Meine mathematische Intuition sagt mir, daß das explizit zu lösen ist mit'n paar Tricks. Vielleicht geht auch was mit
r²+h² = a²+b²+2*a*b*(sin(alpha)*sin(beta) + cos(alpha)*cos(beta))
= a²+b²+2*a*b*cos(alpha-beta)
Damit ist schon mal
cos(alpha-beta) = (r²+h²-a²-b²)/(2ab)




Dann wäre noch ein die Möglichkeit der Approximation.
Du weisst, wo du bist.
Du weisst, wo du hinwillst.
Berechne den Step, der ich am nächsten zum Ziel bringt, dann noch einen etc.
Problem gibt's dann, wenn du dich festfährst aufgrund der Geometrie *grübel*

Machen wir mal 2 Teile draus
[1] einen Weg berechnen, der von A nach B führt ohne Festfahren
[2] diesen Weg in Schritten approximieren. Wenn man ein Teil geschafft hat, nimmt man sich das nächste Teilstückchen vor.


Sind nur so Ideen, vielleicht ist ja was dabei...

SprinterSB
03.11.2005, 09:08
Aus (1) ergibt sich zudem
(3)
r²-h² = a²(cos²(alpha)-sin²(alpha)) + b²(cos²(beta)-sin²(beta))
= a²*cos(2*alpha) + b²*cos(2*beta)
= a²*cos(2*beta+2*delta) + b²*cos(2*beta)
= (b²+a²*cos(2*delta))*cos(2*beta) - a²*sin(2*delta)*sin(2*beta)

Wobei delta=alpha-beta sich bis auf das Vorzeichen und mod 2*pi ergibt aus
(2)
cos(delta) = (r²+h²-a²-b²)/(2ab)

(3) ist eine quadratische Gleichung in cos(2*beta) bzw sin(2*beta). Damit haben wir die Transformation, die wir brauchen; bis auf etwas Gefummel mit den Vorzeichen.

Wenn ich's richtig verstanden hab, willst du eine Transformation von Raumkoordinaten in deinen Koordinatenraum und umgekehrt.

Was dir als Raumkoordinaten genehn ist, weiß ich jetzt nicht. Anbieten tun sich kartesische, Kugel- oder Zylinderkoordinaten.
Was der Stummel am Ende das Armes macht/kann ist mir auch nicht ganz klar. Ist wohl ein Greifer/Magnet, mit dem aus ner bestimmten Richtung an ein Objekt rangefahren werden muss.

Der Koordinatenraum der ersten drei Freiheitsgrade ist ein
K = S1 x Ia x Id
wobei S1 die 1-Spähre (also Kreis) und Ia, Ib Intervalle sind und x das kartesische Produkt, also
phi in S1
alpha in Ia
delta in Id

Die Raumkoordinaten transformierst du auf Zylinderkoordinaten und dann in deinen Koordinatenraum und erhälst nen Vektor (phi, alpha, delta)
Wenn dein Arm bei (phi0, alpha0, delta0) steht und er nach (phi1, alpha1, delta1) bewegt weden soll, dann bewegst du ihn einfach auf der kürzesten Verbingung im Koordinatenraum, wobei der Koordinatenraum mit der Standard-Metrik versehen sei. Dadurch bewegt sich der Arm von Punkt 0 nach 1. Die kürzeste Verbindung im Koordinatenraum (Strecke) wird aber *nicht* zu einer Strecke im R³.

Jenachdem wie dein Arm aufgebaut ist, hat der Koordinatenraum ne andere Topologie. Wenn phi nicht komplett schwenken kann muss man S1 irgendwo aufschneiden und bekommt
K = Iphi x Ia x Id
Und wenn der Arm auf die andere Seite überschwenken kann ohne sich zu drehen, dürfte es
K = S2 x Id
sein, wobei S2 = 2-Späre (Kugeloberfläche). In dem Fall ist phi nur noch eindeutig mod pi, nicht mehr mod 2pi.

ezfox
03.11.2005, 09:25
Vielen Dank für die vielen interessanten Formeln - aber könntest Du das bitten nochmal so ausdrücken oder mit ein paar Skizzen ausschmücken,
das auch ich das verstehe ?
Bin eigentlich nicht komplett merkbefreit - aber um das zu begreifen muss ich soviel Zeit in das Auseinandernehmen der Formeln investieren,
das ich die mir auch gleich selber ausdenken kann. ;)

Zudem konnte ich keinen direkten Zusammenhang zum beschriebenen Problem entdecken.
Was aber auch daran liegen kann, das ich die Formeln nicht verstehe:

diesen ansatz kenn ich bereits ( der gute hat im moment eine punktsteuerung), ich wollte nur wissen ob es möglichkeiten gibt diesen kreis aus drei funktionen darzustellen und diese getrennt, simultan ausrechnen zu lassen ohne den umweg über das auflösen des kreises in geraden gehen zu müssen und massig andere hardware außer den pc und die motortreiber zu bemühen.
...
meinen motortreibern muss ich über die paralelle schnitstelle die richtung vorgeben und immer einen impuls schicken wenn sie einen schritt tun sollen.
referenzschalter sind (von u nach o) lichtschranke schalter schalter lichtschranke
der rechner ist ein ibm mit 66mhz, 64mb ram und win 98 proggen tu ich mit turbo c von borland
mfg clemens

Vielen Dank im vorraus,
mit Gruß, da Fox 8-[

SprinterSB
03.11.2005, 09:56
Was verstehst du denn nicht?
Wahrscheinlich bin ich komplett am Thema vorbei...
Mit Skizzen hab ich's nicht so. Bin da echt nicht der Held. delta ist der Winkel zwischen b und der Verlängerung von a.