Archiv verlassen und diese Seite im Standarddesign anzeigen : Mathe Profis gesucht die keine Angst vor Vektorechnung haben
Hallo Mathematiker,
Ich baue einen Roboter mit 2 5-Achsen Armen die ich irgendwann auch mal programmieren möchte. Mein problem ist wie ich es hinbekommen kann das er nach ein Objekt im 3D-Raum greift und selbst den schnellsten Weg errechnet.
In der Schule hatten wir das Wunder der Vektorrechnung, und so dachte ich mir das man evtl eine Gleichung erstellen könnte, mit 5 Variabelen (für die 5 verschiedenen Winkel) und den entsrechenden Strecken, um dem Arm mathematisch zu simulieren. Dann müsste man ihn "nur" noch mit dieser Formel alle Möglichkeiten durchrechnen lassen wie er von mit dem Greifer von A nach B kommt...
Leider fällt mir kein ansatz dafür ein und ich habe auch noch kein blassen wie ich daraus einen minimumrechnung machen soll.
Das war meine idee vll könntet ihr mir weiter helfen oder habt bessere Vorschläge.
MfG Jan
Hm es wäre hilfreich wenn du dazuschreibenwürdest, wie der Arm genau aufgebaut ist. Dann kann ichs mir auch leichter vorstellen. Eine Skizze wäre da ziemlich hilfreich.
Ich hab mich zwar noch nicht genaur damit befasst, aber wenn du die Objektkoordinaten hast, dann könntest du eine Vektorkette (mit dem Ortsvektor des Objekts) bilden. Dann kannst du vermute ich mal, die Position des Greifers in Abhängigkeit der Winkel berechnen.
Genauer kann ich mich erst damit befassen, wenn du eine Skizze herzeigst.
Hallo,
vergiss die Vektorrechnung. Schau dir lineare Algebra, Translations- und Rotationsmatrix an. Es gibt genug Beispiele im Netz. Übrigens OpenGL und 3DX machen es imo nicht anders.
Gruß
Jens
Die Rotationsmatrix aus OpenGl ist mir wohl bekannt, aber du musst ja die Vektorkoordinate des Punkts mit dieser multiplizieren um auf die neue Koordinate zu kommen.
Ich glaub nicht dass man um Vektorenrechnung herumkommt. Wenigstens der Ansatz basiert auf diesen. Mit einer Linearkombination die den Ortsvektor des Punkts ergibt kann man ein lineares Gleichungssystem aufsstellen.
Das Problem ist nicht so trivial, da ja immerhin der kürzeste Weg herausgefunden werden soll. Aber ohne skizze gehts für mich einfach nicht. Ich müsst schon wissen, wo die Drehgelenke sind.
also mit Translations- und Rotationsmatrix hatte ich bisher noch nichts gemacht, da müsste ich mich erstmal reinarbeiten, aber das sollte kein hinderniss sein.
klar skizze hab ich vergessen sorry^^, dachte das man das problem erstmal algemein betrachten kann um ein ansatzpunkt zu finden, was wohl etwas kurzsichtig war.
anbei skizze
leider fehlt da der untere teil des arms noch, aber mas siecht ja anhand der löcher wo die achse ist
und den rest zu meinen projekt findet ihr hier:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=21423&highlight=
MfG Jan
Wenn ich des jetzt richtig sehe,
kannst du ihn ganz unten zur Seite neigen,
eins weiter oben, beim Motor, kannst du den ganzen Roboter um die "Hochachse drehen,
noch eins weiter oben abknicken
und ganz oben das letzte Stück drehen?
Zarathustra
06.01.2008, 23:27
Hallo Devil!
Deine Idee mit der Vektorrechnung ist schon recht solide. Rotationsmatrizen sind auch nur eine Form von Vektorrechnung und die machen nichts, was du nicht auch durch Addition von einzelnen Vektoren erreichen kannst.
Das System hat mit einem Arm 5 Freiheitsgrade. Das heißt, dass der Punkt, an dem die Hand des Roboterarms gerade ist, eine Funktion von 5 Variablen ist, die auch eine Zeitableitung hat (bzw. 5 partielle) (welche wichtig sind, wenn du den schnellsten Weg haben willst).
Anfangs würde ich das Problem auf "Finde überhaupt den Punkt" reduzieren. Dazu das Problem erstmal unterteilen in Winkeländerung und Positions- und Winkelveränderung. Bei erstem drehst du einfach an den zuständigen Motoren. Beim zweiten reduzierst du das Problem auf eine Winkeländerung indem du die Hand an ihre neue Position fährst, was ja das eigentliche Problem ist. Das könnte man anfangs machen, indem man erstmal überprüft ob man schon durch Veränderung einzelner Freiheitsgrade sein Ziel erreicht. Wenn nicht (was wahrscheinlich ist), dann schiebt man die Hand an einen Punkt, der auf einer Linie wäre mit dem Bewegungsbogen der Hand, wenn man einen anderen Freiheitsgrad verändert, um dann hinterher genau diesen so zu verändern...
Also es ist ganz praktisch das Problem in viele kleinere Probleme zu zerlegen. So kommt man u.U. auch auf die eine Wunderformel....
Hoffe, du ziehst einen Denkanstoß aus meinem Text,
Markus
Mein problem ist wie ich es hinbekommen kann das er nach ein Objekt im 3D-Raum greift und selbst den schnellsten Weg errechnet.
Auf dem kürzesten Weg nach einem Objekt greifen muss auch ohne Mathematik klappen - ich kann's ja schliesslich auch ;-)
Die Lösung weiss ich leider nicht, aber vielleicht kann man das Problem ja in kleiner Gruppen zerlegen.
Dein Roboterarm hat 5 Freiheitsgrade, aber der Raum hat ja nur 3 Dimensionen x,y und z.
Wenn du das anze Mathematisch angehen willst, brauchts du du einen Bezugspunk (0,0,0), die aktuelle Position deines Greifers (x1,y1,z1) und die des zu greifenden Objekts (x2,y2,z2)
Den Vektor (x,y,z) den dein Greifer zurücklegen muss auszurechnen ist dann kein grosser Zauber.
Dann kommt aber das eigentliche Problem, nämlich die Berechnung der einzelnen Bewegungen.
Ich vermute mal bei den 5 Freiheitsgraden hast du die Drehung des Greifers um die eigene Achse mitgezählt.
Die sollte für das Ansteuern der richtigen Position ja erst mal keine Rolle spielen. Demnach bleiben 4 Freiheitsgrade über.
Kannst du da aufdröseln welche der 4 restlichen Freiheitsgrade für welche Richtung x,y,z zuständig sind?
Vieleicht kannst du ja mal posten welche Gelenke von 1-4 für welche Richtung zuständig sind.
Dein Skizze ist zwar toll, aber ich verstehe sie nicht so richtig.
Ich habe mir gerade mal kurz den anderen Thread zu deinem Roboter angesehen.
Irgendwie sehe ich da noch ein viel grösseres Problem.
Der Roboter ist ja fahrbar, d.h. theoretisch kommen da nochmal 2 Freiheitsgrade dazu, weil er dem Objekt ja auch entgegenfahren könnte.
Ok, man muss die Dinge ja nicht komplzierter machen als sie eh schon sind und kann das erst mal weglassen.
Dann verstehe ich aber noch nicht so ganz, wie du an die Koordinaten des zu greifenden Objekts kommen willst.
Soll der Roboter über Kamera und irgendwelche Sensoren selber feststellen, wo sich das Objekt befindet?
Zarathustra
07.01.2008, 09:27
Hallo recycle!
Dein Roboterarm hat 5 Freiheitsgrade, aber der Raum hat ja nur 3 Dimensionen x,y und z.
Im Prinzip gibt es für ein Objekt im Raum sogar 6 Freiheitsgrade: den Ortsvektor der Hand und seinen Richtungsvektor, der auch aus 3 Komponenten besteht. Wenn deine 5 Freiheitsgrade linear unabhängig wären, also wenn es keine 2 Freiheitsgrade gibt, die die gleiche Raumgröße verändern, dann fehlt nur noch einer um alles machen zu können.
Kannst du da aufdröseln welche der 4 restlichen Freiheitsgrade für welche Richtung x,y,z zuständig sind?
Wahrscheinlich wird leider nie ein Freiheitsgrad für eine Größe allein verantwortlich sein. Ein Ansatz wäre hier, dass man alle partiellen Ableitungen von (x1,y1,z1) nach den einzelnen Freiheitsgraden untersucht; in Worten "Wie verändert sich die Position der Hand, wenn ich an Freiheitsgrad1 drehe". Heraus bekommt man dann 5 Vektoren, die Auskunft über den momentan möglichen Handlungsspielraum geben. Eine Linearkombination dieser Vektoren (heißt: a*V1+b*V2+....) kann man dann zu (x1,y1,z1) addieren und man muss auf (x2,y2,z2) kommen. Durch Lösung dieses Gleichungssystems hat man dann a, b, c, d und e raus, welche einem sagen wie viel man welche Freiheitsgrade ändern muss um ans Ziel zu kommen.
Wichtig ist, dass sich die partiellen Ableitungen nach jeder Bewegung ändern: man muss also sehr kleine Zeitschritte nehmen und die Rechnung jedesmal von neuem durchführen.
Gruß,
Markus
Des war auch mein ansatz. Aber bilde mal die partitiellen Ableitungen. Keine Ahnung was für ein Controller verwendet wird, aber nachdem ja Trigonometrische Funktionen vorkommen, wäre die einfach losfahr Methode vielleicht schneller.
hi,
der kürzeste weg ist immer ein gerade, sofern keine hindernisse im weg sind. dazu brauch ich kein hm. das muss aber nicht immer der schnellste weg sein. der schnellste weg ist der, bei dem sich die gelenke am wenigsten bewegen müsssen. ich denke man sollte den weitesten weg eines gelenkes minimieren, und nicht die summe aller wege, weil sich die gelenke ja gleichzeitig bewegen können.
allerdings raff ich des bild net wirklich. warum hast du mit 3 motoren 5 freiheitsgrade?
deswegen wirst du wahrscheinlich eh höchstens eine, lösung raus bekommen. wenn du pech hast keine, weil es 6 für das objekt gibt.
schau mal nach inverser kinematik um deine bewegungen zu berechnen.
mfg jeffrey
Deswegen war mein Lösungsansatz (ohne ihn genauer zu Verfolgen) die Position des Greifers in Abhängigkeit der Winkel anzugeben. Dann partitiell Ableiten und die kleinsten Winkel bestimmen.
Nur weis ich nicht wieviel Rechenarbeit das in Anspruch nimmt. Immerhin wird ein paar mal sin/cos und die Arcusfunktionen dran kommen.
Wegen den Freiheitsgraden hat er oben hingeschrieben, dass ein Motor zum neigen des Arms nicht dargestellt ist. Also die 5 Freiheitsgrade hab ich auch gefunden, aber die Position des Greifers in Abhängigkeit der Winkel anzugeben (und natürlich auch der Segmentlengen) ist mir mit der Skizze viel zu kompliziert. Leider hab ich auf meinen alten Post keine Antwort bekommen. Eine Erläuterung und eine veerinfachte Skizze zu den Bewegungsmöglichkeiten ist unumgänglich für mich.
position als funktion der winkel und dann ableiten? glaube kaum, das es so einfach geht.
zum einen wird das praktisch daran scheitern, das eine solche funktion sehr kompliziert und deren ableitungen noch wesentlicher komplizierter ist (weil alle 5 winkel mit eingehen)
so etwas kann man nur noch mit nem computeralgebrasystem lösen (wenn überhaupt)
zum anderen kann man zwar recht einfach die position als funktion der winkel formulieren.
aber in der regel gibt es mehrere winkeleinstellungen, die zur gleichen xyz-position führen.
stell dir mal vor, das ende des arms sei schon an der richtigen position angekommen. dann verbindet der arm sozusagen den roboter mit dem ziel. er kann aber dann immer noch bewegt werden, ohne die beiden punkte zu verlieren. d.h. die aufgabe die optimalen winkel zu finden ist nicht eindeutig. es gibt keine optimale winkelposition, sondern eine ganze schar möglicher winkelpositionen.
ich rate dir: such dir ne uni, die sich mit so etwas beschäftigt und frag dort mal gezielt bei den experten nach, wie man das möglichst einfach hinbekommt. ich befürchte aber, dieses möglichst einfach wird immer noch reichlich kompliziert sein.
oder verwende ne fertige software für industrieroboter. ich meine ich hätte neulich mal irgendwo im netz so etwas in der art für den (relativ) kleinen geldbeutel gesehen.
Ich stimm dir fast überall zu nur da nicht:
zum anderen kann man zwar recht einfach die position als funktion der winkel formulieren.
aber in der regel gibt es mehrere winkeleinstellungen, die zur gleichen xyz-position führen.
stell dir mal vor, das ende des arms sei schon an der richtigen position angekommen. dann verbindet der arm sozusagen den roboter mit dem ziel. er kann aber dann immer noch bewegt werden, ohne die beiden punkte zu verlieren. d.h. die aufgabe die optimalen winkel zu finden ist nicht eindeutig. es gibt keine optimale winkelposition, sondern eine ganze schar möglicher winkelpositionen.
Man würde nicht den optimalen Winkel berechnen sondern die Optimale Winkeländerung. Wenn der greifer schon an der richtigen Position ist, dann sollte die optimale Winkeländerung 0° benötigen-> Motoren verändern sich nicht.
lös es lieber anders. Wenns dir kein Matheprogramm ausrechnen kann, dann seh ich eh scharz. Wer will schon die ewig lange Funktion nach 5 unbekannten Ableiten.
Zarathustra
08.01.2008, 19:01
position als funktion der winkel und dann ableiten? glaube kaum, das es so einfach geht.
Das ist ja das schöne an der Mechanik: tut es! Und ein Algebrasystem brauchts auch nicht, weil man die Stammfunktionen oder sogar die Differentialgleichungen schon gelöst hinschreiben kann.
aber in der regel gibt es mehrere winkeleinstellungen, die zur gleichen xyz-position führen.
Schon, aber nicht zusätzlich zur gleichen Winkelstellung. Dafür wäre es sogar ein Freiheitsgrad zu wenig.
Eine Uni aufzusuchen wäre auf jeden Fall eine gute Lösung, besonders wenn man sich als dort Studierender ausgibt ;)
Gruß,
Markus
hi,
aber in der regel gibt es mehrere winkeleinstellungen, die zur gleichen xyz-position führen.
stell dir mal vor, das ende des arms sei schon an der richtigen position angekommen. dann verbindet der arm sozusagen den roboter mit dem ziel. er kann aber dann immer noch bewegt werden, ohne die beiden punkte zu verlieren. d.h. die aufgabe die optimalen winkel zu finden ist nicht eindeutig. es gibt keine optimale winkelposition, sondern eine ganze schar möglicher winkelpositionen.
gerade wenn es mehrere möglichkeiten gibt macht es sinn ein optimale position zu suchen, wenn es sowieso nur eine lösung gibt, dann ist diese automatisch schon optimal.
wenn es 5dofs gibt dann wird es wenn nur die position und nicht die ausrichtung interessiert meistens mehrere lösungen geben.
optimierung ist auf keinen fall trivial und wird auch etwas rechenleistung benötigen.
dazu wird aber auf jeden fall mal der mathematische zusammenhang zwischen winkel und position nötig. und ableitungen werden auch nötig werden.
optimierung geht z.b. mit dem Pontryagin Maximum Principle oder mit hamilton jacobi bellman
das ist alles sehr theoretisch hier gibts ein uni-skript für "optimierungsverfahren mit anwendung" http://www.iam.uni-stuttgart.de/Lehre/downloads/vorl_opti/SkriptOptimierung2004.pdf
da ist es eigentlich relativ einfach erklärt.
mfg jeffrey
ich vermute mal, das es eine geschicktere methode gibt, als die ableitungen zu berechnen. deshalb mein tip, sich an entsprechende experten zu wenden.
man muss ja auch berücksichtigen, dass die achsen in der regel nur einen eingeschränkten bereich (<360°, bzw. wegen kabel, etc. nicht beliebig lange rotieren können) umfassen und sich unter umständen gegenseitig in die quere kommen können (das ist ne frage der genauen geometrie, die ich mir hier jetzt gar nicht angeschaut habe) ganz davon zu schweigen, das man z.b. beim bewegen nicht den gegenstand des interesses mit irgend einem teil des roboterarmes streifen möchte (das könnte passieren, wenn man einfach nur eine geeignete winkelposition bestimmt und alle gelenke gleichzeitig unsynchronisiert in diese endposition fahren läßt)
ich glaube die kollisionsvermeidung wird sich sowieso als das größere problem herausstellen.
(das sind natürlich alles nur vermutungen eines nichtexperten :-) )
mare_crisium
16.01.2008, 10:47
Devil,
vllt. verfolgst Du ja den Thread noch. - Für Dein Problem gibt’s auch einfache Lösungen. Ich empfehle Dir aber, die Sache schrittweise anzugehen. Zuerst musst Du Deine Steuerung dazu bringen, das Ende Deines Armes zu einem bestimmten Punkt zu bewegen. Dazu musst Du drei Werte verändern: Die effektive Länge des Armes (durch Anwinkeln der beiden Teilarme), den Azimuthwinkel (der Drehwinkel um die senkrechte Achse) und den Elevationswinkel (der Drehwinkel, um den sich der Gesamtarm aus der Horizontalen hebt). Das ist alles. Alle anderen Freiheitsgrade des Armes sind für diese Teilaufgabe überflüssig und verwirren nur. Hat Dein Arm Drehwinkelgeber für die beiden Winkel und für den Knickwinkel? Welche Festlegungen hast Du für Dein Koordinatensystem gemacht?
mare_crisium
Hallöchen,
sorry das ich mich so lange nicht mehr gemeldet habe, war länger nicht mehr zu hause wegen ausbildung und hatte kein internet zur verfügung.
werde versuchen skizzen usw. heute noch online zu stellen und alles was sonst noch gewünscht ist.
So habe jetzt mal eine Skizze von den verschiedenen achsen gemacht mit armabschnitten.
Die blauen Punkte sollen die Drehachsen darstellen um die der Arm geknickt wird und die roten linien sollen die Drehachsen darstellen. habe noch ein paar pfeile zur besseren verständnis dran getzeichnet.
Mare_crisium:
Dein vorschlag hört sich für mich leien am besten an und ich würde gern mehr darüber erfahren wie du das meinst. vll kannst du es mir anhand der skizze genauer erklären.
Den vorschlag mit der vektorrechnung und der einzelnen winkelberechnung kam mir nur am einfachsten vor, weil man sich das am besten vorstellen kann. Weiß aber nicht wie ich zu der Gleichung komme mit den 5 variabelen die für die winkel stehen. ich werde bis nächstes wochenende ale minimalen und maximalen winkel raussuchen und posten und natürlich auch die einzelnen längen der armabschnitte.
mein ziel ist es erstmal das ich dem arm eine position ind koordinaten vorgebe und dann soll ers selbständig errechnen wie er dort hin gelangt ohne optimierung oder kolisionsverhinderung mit dem objekt. ich finde das ist für den anfang schon schwer genug.
es tut mir leid das ich mich nicht so aktive am geschen beteiligen kann, da ich wegen meiner ausbildung auserhalb und ohne internet wohne. ich bitte deshalb darum verspätete anworten nicht all zu übel zu nehmen.
MfG Jan
mare_crisium
20.01.2008, 00:58
@Devil,
ich habe ein bisschen 'rumgerechnet und hänge das Ergebnis hier an. Mit der Methode, die ich Dir vorschlage, kannst Du erstmal anfangen. Schwieriger machen kann man's dann nachher immer noch.
Sag' mal, was Du dazu meinst.
Ciao,
mare_crisium
Edit: Anhang gelöscht wg. Upload-Quota
Moin mare_crisium,
bin deine Rechung durchgegangen und muss sagen das sie im großen und ganzen doch ein guter einstig in die problematik ist. musst mir zwar erst ein paar Skizzen machen um sie zu verstehen, aber dann ging alles ganz einfach. Werde mir jetzt ein klein "Probe-Arm" aus drei servos bauen um diese mal in verbindung mit einen Mikrokontroler auszuprobieren.
Wenn das so Funktioniert wie ich mir das vorstelle werde ich versuch deine gleichungen zu erweiter so das ich annährend zu mein arm komme.
Ich befürchte nur das der Torso des robos wegen den fahrtwegen der arme noch ein problem werden könnte, sprichh der Arm fährt gegen ihn.
Nochmals danke für deine hilf werde damit weiter arbeiten.
Gruß Jan
mare_crisium
27.01.2008, 14:18
Buon giorno, Devil,
freut mich, dass Du mit der Rechnerei klargekommen bist. Der Weg, den Dir vorgenommen hast, nämlich auf dieser Grundlage erst einmal mit einem einfachen Modell anzufangen, ist goldrichtig. Neben der Mathematik wirst Du noch auf ganz andere Probleme stossen, z.B. Schwierigkeiten beim Auslesen der Winkelmesser usw. ... ich erlebe gerade Ähnliches mit der Winkelmessung an den Rädern meines Fahrroboters.
In der Zwischenzeit rechne ich noch ein bisschen weiter. Ich glaube ich habe eine ganz gute Methode gefunden, um auch Arme mit beliebig vielen Teilarmen zu beschreiben. Über das Vermeiden von Kollisionen habe ich mir noch keine weiteren Gedanken gemacht. Es fängt wahrscheinlich damit an, dass der Knickwinkel einen Maximalwert nicht überschreiten darf. Das lässt sich dann noch verfeinern, indem Du den Maximalwert vom Drehwinkel des Gesamtarms abhängig machst.
Sag' Bescheid, wenn Du mit der Mathematik weitermachen willst.
Ciao,
mare_crisium
ok werd ich machen.
Und vielen dank für deine hilfe. Mal sehen wie gut ich mit den einstieg zurecht komme^^.
mfg Jan
sailerhro
26.02.2008, 18:01
ich würde über den ganz normale schulmathematik daran gehen....
da die Gelenke in den Armen unbeweglich sind (sollen sie das sein??) ist es ein Problem im 2D, da ich sqrt(x^2+y^2) als neue Achse nehmen kann. der Drehwinkel im ersten Drehgelenk wird sehr einfach berechnet:
gegeben sind die Längen der Arme (a und b) und ein Punkt P=(x,y,z).
der Koordinatenursprung liegt im Punkt B, also im ersten Achsengelenk.
der Winkel des ersten Drehgelenks wird über die Beziehung
w=arctan(x/y) errechnet
Strecke c ist über c=sqrt(x^2+y^2+z^2) zu berechnen.
dadurch hat man jetzt nur noch ein 2-dimensionales Problem!
durch den Cosiussatz ergibt sich direkt (wie schon schön im PDF-file gezeigt):
c=arccos((c^2-a^2-b^2)/(2*a*b))
den letzten winkel e berechnet man über den Hilfswinkel b:
e=arcsin(c/b*sin(c))+arcsin(z/c)
und schon hat man die winkel c, e und w
Moin moin,
mare_crisium du hast doch gesagt das du auch eine "Formel" hast für arme mit belibig vielen achsen, könntest du mir diese auch zukommen lassen^^
MfG Jan
mare_crisium
12.03.2008, 21:27
Devil,
na ja, "die Formel" ist es nicht gerade. Ich habe das, was ich für den zweiteiligen Arm angefangen hatte, auf den allgemeinen Fall ausgedehnt. Herausgekommen ist ein Algorithmus, mit dem man die Positionen aller Punkte des Arms iterativ berechnen kann. - Den Rest musst du selber machen.
Das Problem ist übrigens dasselbe, das bei der Animation virtueller Lebewesen gelöst werden muss: Die Bewegungen der Gliedmassen folgt denselben Gesetzen wie Dein Roboterarm. Da findest Du wahrscheinlich reichlich Literatur und auch elegantere Lösungen.
Ciao,
mare_crisium
Edit: Attachment gelöscht wegen Upload-Quota. Bei Interesse pn schicken.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.