Position Teaching Feature für Serworm Michael

  • Lesedauer:6 min Lesezeit

Das Position Teaching Feature für Serworm Michael ermöglicht es uns, dem kleinen Robo sehr einfach schnell einige Positionen beizubringen. Dafür werden die Positionen einfach angefahren, indem der Robo Arm mit der Hand bewegt wird. Ist die gewünschte Position erreicht wird sie gespeichert und kann später wieder angefahren werden. Dieses kleine Video zeigt, wie das ganze aussieht:

Das Position Teaching Feature von Serworm Michael in Aktion

Benutzung des Position Teaching Features

Die folgende Beschreibung der Nutzung des Features bezieht sich auf diese Version des Codes. Wenn ihr eine neuere Version nutzt, dann kann sich schon etwas geändert haben, der verlinkte commit sollte aber immer funktionieren.

Um zu starten rufen wir aus dem main-file heraus die teaching cli aus der robo cli Klasse auf. Dafür müssen wir einen Robo und einen FileHandler mitgeben. Der Robo widerum benötigt noch Servos und eine InverseKinematics, die wir auch importieren. Aufs Wesentliche beschränkt sieht das dann so aus:

from inversekinematics import InverseKinematics
from robo import Robo
from dynamixel import Dynamixel
from filehandler import FileHandler
from robocli import RoboCLI

import serial

# set your serial device here:
serialPort = '/dev/ttyACM0'

ser = serial.Serial(serialPort, 115200, timeout=1)
ser.flush()

servos = [Dynamixel(0, ser), Dynamixel(1, ser), Dynamixel(2, ser), Dynamixel(3, ser), Dynamixel(4, ser)]
kinematics = InverseKinematics()
robo = Robo(servos, kinematics)
fileHandler = FileHandler()

cli = RoboCLI(robo, fileHandler)

Das verlinkte main-file ist so wie es ist funktionsfähig, hier ist es etwas gekürzt. Auf dem cli Objekt starten wir dann das teaching-CLI mit cli.startTeachingCli(). Damit wird ein Command Line Interface (cli) gestartet, mit dem wir etwas flexibler Abläufe abspeichern können.

Achtung: Wenn diese Methode gestartet wird, dann wird das Moment an den Servos abgeschaltet. Dadurch können wir sie bewegen und den Arm in eine beliebige Position bringen. Das führt aber auch dazu, dass der Arm die Position nicht von alleine halten kann, wenn das Moment auf die Servos zu groß wird. Bei kleinen Winkeln passiert das noch nicht, bei größeren aber kann der Arm dann in sich zusammen fallen.

Funktionen des Command Line Interfaces

Folgende Menu-Punkte zeigt uns das cli an:

[1] set Position
[2] save to file
[3] read from file (append)
[4] run actions
[5] clear angles
[6] change velocity
[7] add pause
[q] end

Jetzt bringen wir den Arm in Position und drücken die 1 (und Enter) und schon ist erste Position gespeichert! So einfach ist es. Danach können wir den Arm in die nächste Position verfahren und wieder 1 drücken. Dadurch wird auch diese Position gespeichert. Drücken wir die 4 werden wir noch nach einer Geschwindigkeit gefragt. Nach Eingabe dieser fährt der Arm die gespeicherten Positionen nacheinander an.

Mit den Menu-Punkten 2 und 3 können wie die aufgezeichneten Positionen in einer Datei abspeichern und daraus wieder auslesen. Beim Auslesen werden die Aktionen der Datei an die aktuell gespeicherten Aktionen angehängt. Dadurch können wir mehrere Dateien aneinander hängen. Drücken wir die 5 werden die aufgezeichneten Aktionen wieder gelöscht.

Neben den Positionen können wir auch noch Geschwindigkeiten mit aufzeichnen. Die Geschwindigkeit gilt für das Anfahren der folgenden Positionen, bis wieder ein Geschwindigkeitswechsel gespeichert ist. Wir sollten sie also setzen, bevor wir die Position mit 1 speichern. Zur Not kann man natürlich hinterher auch alles noch manuell im gespeicherten File anpassen. In dieser Version geht der Geschwindigkeitsbereich von 0-32766, wobei Werte über 445 nicht mehr zu schnelleren Geschwindigkeiten führen (liegt an der dynamixel API, issue ist vorhanden).

Mit dem Punkt 7 können wir noch Pausen einbauen. Die Zeit wird in Sekunden angegeben und startet, sobald der Arm eine Position erreicht hat. Damit können wir den Arm für eine definierte Zeit in einer Position halten.

Das war es auch schon. Dieses sehr simpel erscheinende Feature hat mir einiges an Arbeit abgenommen und die Inverse Kinematik in großen Teilen verdrängt. Für viele Aufgaben hat es sich als wesentlich angenehmer herausgestellt, den Arm einfach per Hand in Position zu bringen.

Anwendung als Roboter-Uhr

Eine kleine erste Anwendung gibt es auch schon. Ich habe eine defekte Uhr wieder zum Leben erweckt! Dafür hab ich das position teaching feature verwendet, um Serworm Michael beizubringen, wie er die Uhr bedient. Das ging dank des Features sehr gut. Das Ergebnis könnt ihr hier bewundern:

Hier gehts zurück zur Übersicht

Dieser Beitrag hat einen Kommentar

Schreibe einen Kommentar