Der Vorsitzende der Forth-gebruikersgroep bastelte an einem Roboterarm
mit fünf Schrittmotoren (zwei in der Schulter,
einer im Ellenbogen und zwei im Handgelenk) und bat mich,
mir einen Algorithmus auszudenken,
mit dem sich das Ding geschmeidig bewegen lässt.
Aber ich verstehe überhaupt nichts von Hardware.
Du schickst so 'nem Motor eine Zahl.
Der geht dann mit einem Ruck in eine Stellung, die dieser Zahl entspricht.
Die momentane Stellung des Motors brauchst du also nicht zu kennen.
Und den untersten Programmteil mach ich selbst.
Mit solcherart Hardwarekenntnissen bewaffnet,
habe ich mir ein Programm überlegt,
das tatsächlich zu funktionieren scheint!
Nach Anpassung des Wortes
>MOTOR natürlich.
Bei mir zu Hause, ohne die Hardware,
habe ich mir das Ergebnis lediglich auf dem Bildschirm betrachtet
(mit
.HIER).
Da ich keine speziellen Kenntnisse über den Arm voraussetze,
gibt es auch keine Absicherung gegen den Versuch unmöglicher Stellungen.
Selbst die Anzahl der Motoren können Sie anders wählen.
Das Programm koordiniert Prozesse,
die in gegenseitig verschiedenen Tempi verlaufen:
Sie beginnen gleichzeitig,
laufen gleichmäßig und sind zur gleichen Zeit fertig.
Es sind also auch andere Anwendungen denkbar.
Beispielsweise ein Zeichentrickfilm über Achilles und die Schildkröte,
oder das Ziehen gerader Linien mit dem fünfdimensionalen Plotter,
den Sie schon immer mal bauen wollten.
Das Problem
Angenommen, ich bewege mich vom Zustand
<0 0 0 0 0> nach
<10 20 13 7 30>. Dann läuft der letzte Schrittmotor über den größten Winkel (
30). Dieser größte Winkel (
30) wird der Ausgangspunkt des Algorithmus: Ich verteile die Bewegung der einzelnen Motoren über 30 Etappen. Und jeder Motor macht pro Etappe entweder nur einen Schritt (
PLOP) oder nichts (
PILI).
Der letzte Motor macht in allen Etappen 1 Schritt (30-mal
PLOP).
Das ist einfach.
Nun die anderen Motoren.
-
Abstand 10: 10 Etappen 1 Schritt (PLOP) und
20 Etappen nichts (PILI).
Regelmäßig verteilt, wird das: PILI PLOP PILI (10-mal).
-
Abstand 20 bleibt auch einfach: PLOP PILI PLOP (10-mal).
-
Abstand 13 ist schwieriger: 13-mal PLOP und 17-mal PILI.
Wie verteilt man das möglichst schön über 30 Etappen?