Roboterarm mit (noch nicht) linearer Wegführung
Verfasst: 05 Jun 2019, 22:15
Hallo,
eine Frage an die Roboterprofis unter Euch, mir fehlt leider der fachliche Hintergrund, um mit vertretbarem Aufwand selbst weiter zu kommen:
Ich arbeite gerade an einem teach-in ft-Roboterarm dieser Bauart, allerdings mit Schrittmotoren an den drei Bewegungsachsen, gesteuert per C++/Arduino. Das Projekt ist eigentlich bis auf diverses Finetuning fertig und hinsichtlich meiner Ziele funktional. Was ich aber noch nicht hinbekommen habe, sind lineare Bewegungen des Arms von Punkt a nach Punkt b im kartesischen Koordinatensystem, also z.B. eine streng senkrechte Bewegung von a nach b.
Ein erster Video, am Anfang erfolgt das Homing, dann wird ein gespeicherter Pfad geladen und abgespielt:
https://youtu.be/DN5k5yBPx5c
Was klappt und was ich mir algorithmisch noch selbst gut herleiten konnte (Cosinus-Satz etc.), ist die kartesischen Koordinaten der Punkte a und b in die erforderlichen Winkelstellungen der beteiligten Achsen zu übersetzen und damit die Position b zielsicher anzufahren. Was ich auch noch hinbekomme ist, die Achsen so aufeinander abzustimmen, dass alle gleichzeitig am Ziel ankommen. Die AccelStepper library sorgt dabei für butterweiche Beschleunigungen.
Aber: der Weg ist halt nicht linear sondern je nach Strecke gekrümmt, v.a. bei den längeren Strecken kommt es unterwegs zu erheblichen Ausschlägen. Beim teach-in ist das äußerst lästig, weil man erst beim Abspielen merkt, dass ein Hindernis, das linear gar nicht im Weg wäre, angerumpelt wird. Natürlich kann man die Sicherheitsabstände vergrößern oder manuell Zwischenhalte einfügen, das ist aber wenig elegant.
Naiv würde ich eine Lösung durch Interpolation weiterverfolgen, also die Strecke in mehrere Intervalle einteilen, um v.a. grobe Ausschläge zu unterdrücken. Das impliziert vermutlich, dass ich die Beschleunigungen selbst implementieren muss, schließlich will ich zusätzlich eine fließende Bewegung über die gesamte Strecke.
Ich nehme an es gibt passende Lehrbuchkapitel oder Paper zu dem Problem (davidrpf hat hier auf Entsprechendes für Delta-Roboter verwiesen), mit meinem Vorwissen und Zeitbudget stoße ich dabei allerdings vermutlich an meine Grenzen, daher freue ich mich insbesondere über konkrete Tipps oder Hinweise auf fertige oder adapierbare Beispiele für diese Problematik.
Um das Problem zu vereinfachen wäre ich übrigens schon mit einer 2-Achsen Lösung hochzufrieden, die also nur die Armgelenke berücksichtigt und die Rotation der Basis außer Acht lässt.
lg
Jan
eine Frage an die Roboterprofis unter Euch, mir fehlt leider der fachliche Hintergrund, um mit vertretbarem Aufwand selbst weiter zu kommen:
Ich arbeite gerade an einem teach-in ft-Roboterarm dieser Bauart, allerdings mit Schrittmotoren an den drei Bewegungsachsen, gesteuert per C++/Arduino. Das Projekt ist eigentlich bis auf diverses Finetuning fertig und hinsichtlich meiner Ziele funktional. Was ich aber noch nicht hinbekommen habe, sind lineare Bewegungen des Arms von Punkt a nach Punkt b im kartesischen Koordinatensystem, also z.B. eine streng senkrechte Bewegung von a nach b.
Ein erster Video, am Anfang erfolgt das Homing, dann wird ein gespeicherter Pfad geladen und abgespielt:
https://youtu.be/DN5k5yBPx5c
Was klappt und was ich mir algorithmisch noch selbst gut herleiten konnte (Cosinus-Satz etc.), ist die kartesischen Koordinaten der Punkte a und b in die erforderlichen Winkelstellungen der beteiligten Achsen zu übersetzen und damit die Position b zielsicher anzufahren. Was ich auch noch hinbekomme ist, die Achsen so aufeinander abzustimmen, dass alle gleichzeitig am Ziel ankommen. Die AccelStepper library sorgt dabei für butterweiche Beschleunigungen.
Aber: der Weg ist halt nicht linear sondern je nach Strecke gekrümmt, v.a. bei den längeren Strecken kommt es unterwegs zu erheblichen Ausschlägen. Beim teach-in ist das äußerst lästig, weil man erst beim Abspielen merkt, dass ein Hindernis, das linear gar nicht im Weg wäre, angerumpelt wird. Natürlich kann man die Sicherheitsabstände vergrößern oder manuell Zwischenhalte einfügen, das ist aber wenig elegant.
Naiv würde ich eine Lösung durch Interpolation weiterverfolgen, also die Strecke in mehrere Intervalle einteilen, um v.a. grobe Ausschläge zu unterdrücken. Das impliziert vermutlich, dass ich die Beschleunigungen selbst implementieren muss, schließlich will ich zusätzlich eine fließende Bewegung über die gesamte Strecke.
Ich nehme an es gibt passende Lehrbuchkapitel oder Paper zu dem Problem (davidrpf hat hier auf Entsprechendes für Delta-Roboter verwiesen), mit meinem Vorwissen und Zeitbudget stoße ich dabei allerdings vermutlich an meine Grenzen, daher freue ich mich insbesondere über konkrete Tipps oder Hinweise auf fertige oder adapierbare Beispiele für diese Problematik.
Um das Problem zu vereinfachen wäre ich übrigens schon mit einer 2-Achsen Lösung hochzufrieden, die also nur die Armgelenke berücksichtigt und die Rotation der Basis außer Acht lässt.
lg
Jan