4-Achsen-Roboterarm mit PiXtend ansteuern

Roboterarm in Aktion

Um dem Roboterarm Leben einzuhauchen, teilen Sie ihm über eine Schrittkette mit, wann er eine bestimmte Position anfahren soll. Die in diesem Projekt verwirklichte Schrittkette arbeitet rein zeitgesteuert und wird entsprechend ohne Einflüsse von außen abgearbeitet, immer eine Position nach der anderen. Der vorhergehende Test gab ja schon mal Aufschluss darüber, welche Werte zu bestimmten Positionen des Roboterarms gehören.

Für das Programm kommt die häufig in Industriesteuerungen verwendete, Pascal-ähnliche Programmiersprache ST (Strukturierter Text) zum Einsatz. Das Steuerprogramm nutzt ein zweidimensionales Array, um den kompletten Ablauf zu speichern. Eine Dimension speichert die Nummer des aktuellen Schritts, die zweite die fünf Werte der einzelnen Servos sowie einen Wert für die Zeit, die der Roboter benötigt, um die Position zu erreichen.

Listing 1 zeigt die Variablen, die das Programm verwendet. xInit initialisiert den Controller im PiXtend und darf nicht gelöscht werden. Die Variable lock verhindert, dass die Schrittkette mehrfach startet; timer realisiert die Zeitverzögerung; step speichert den aktuellen Schritt, in dem sich die Schrittkette befindet.

Das Array zur Steuerung ist als Konstante definiert, weil sich die Werte während der Laufzeit nicht ändern. Möchten Sie Änderungen an einer der Konstanten vornehmen, müssen Sie darauf achten, das Programm mit der Option Mit Download einloggen in das PiXtend zu laden: Andernfalls aktualisiert die Software diese Konstanten nicht (Abbildung 6).

Abbildung 6: Ändern Sie Konstanten, müssen Sie sich über den PunktMit Download einloggen anmelden, weil die Software die Modifikationen sonst nicht übernimmt.

Listing 1

 

VAR
  xInit :BOOL;  // init flag
  lock  :BOOL :=FALSE;
  step  :UINT :=1;
  timer :TON;
END_VAR
VAR constant
  Steps : ARRAY [1..19, 1..6] OF UINT := [
  // M4,   M3,    M5,    M2,    M1
  12000, 8000,  6500,  8000,  8000, 2,
  12000, 3000,  6500,  8000,  1000, 2,
  12000, 3000, 10000,  8000,  1000, 2,
   6000, 3000, 10000, 13000,  1000, 2,
   6000, 7000, 10000, 13000,  1000, 2,
   6000, 7000, 10000, 13000, 12000, 2,
   6000, 3000, 10000, 13000, 12000, 1,
   6000, 3000,  9000, 13000, 12000, 1,
   6000, 3000,  8000, 13000, 12000, 1,
   6000, 3000,  7000, 13000, 12000, 1,
   6000, 3000,  6000, 13000, 12000, 1,
   6000, 3000,  5000, 13000, 12000, 1,
   6000, 3000,  4000, 13000, 12000, 1,
   6000, 3000,  3000, 13000, 12000, 1,
   6000, 7000,  3000, 13000, 12000, 1,
   6000, 7000,  3000, 13000,  1000, 1,
  12000, 3000,  3000, 13000,  1000, 1,
  12000, 3000,  6500, 13000,  1000, 1,
  12000, 8000,  6500,  8000,  8000, 2];
END_VAR

Das eigentliche Programm (Listing 2) beginnt erst hinter dem Kommentar // put your program code here... ab Zeile 7. Den Code davor benötigt das Programm, um die Kommunikation zwischen dem PiXtend und dem Raspberry Pi aufzubauen. Als Erstes fragen Sie den Start-Button-Eingang DI0 ab (Zeile 9). Hier verwendet der Code das Alias für das komplette Eingabe-Byte. Die Zahl nach dem Punkt gibt an, welches Bit Sie abfragen möchten. Wird der Button gedrückt und die Variable lock steht auf false (inaktive Schrittkette), dann schaltet die Variable lock auf TRUE, und die Schrittkette beginnt zu laufen.

Im nächsten If-Block ab Zeile 13 fragt der Code die Variable lock ab. Steht sie auf TRUE, wird der Block abgearbeitet. Zunächst aktiviert der Code dann die PWM-Ausgänge des PiXtend. Danach lädt die Sequenz die Werte für den aktuellen Schritt in die Steuerregister der PWM-Ausgänge. Der Roboter bewegt sich nun in diese Position.

Gleichzeitig mit dem Laden der Register wird timer mit der Wartezeit aus dem Array beladen und gestartet. Nach dem Ablauf von timer erhöht sich die Variable step um 1, und der timer wird deaktiviert. Anschließend beginnt alles von vorn, für den nächsten Schritt in der Kette. Nach dem Abarbeiten aller Schritte wechselt lock wieder auf FALSE, step erhält den Wert 1. Die Schrittkette steht dann für den nächsten Durchlauf bereit.

Der letzte If-Block ab Zeile 38 deaktiviert die PWM-Ausgänge nach dem Beenden der Schrittkette wieder. Das deaktiviert die Servos komplett, womit sie so gut wie keinen Strom mehr benötigen.

Ein Youtube-Video [12] zeigt den Roboterarm in Aktion. Dabei fallen die teilweise etwas ruckeligen Bewegungsabläufe auf. Das liegt daran, dass Servos stets versuchen, die neue Position mit maximaler Geschwindigkeit zu erreichen. Eine Möglichkeit, dieses Ruckeln zu vermindern, besteht darin, die Änderungen der Werte in den PWM-Registern gering zu halten. Das erkennt man ansatzweise in der Szene des Videos, in der der Arm eine Maus transportiert: Das erfolgt mit einigen kleinen Schritten, damit der Arm sie nicht wegschleudert.

Um die Servos generell behutsamer anzusteuern, müsste man das Programm so gestalten, dass es sich mit kleinen Schritten an die Zielpositionen annähert. Das gestaltet sich allerdings etwas aufwendiger und würde den Rahmen dieses Artikels sprengen, wäre aber sicher eine gute Programmierübung für einen verregneten Sonntagnachmittag.

Listing 2

 

// Initialization of PiXtend V2 -L-
IF NOT xInit THEN
  RPI_GPIO_OUT24 := TRUE;
  xInit          := TRUE;
END_IF
// put your program code here...
IF byDigitalInputs0.0 AND lock = FALSE THEN
  lock := TRUE;
END_IF
IF lock THEN
  // activate PWM Channels
  byPWM0Ctrl0.3 := TRUE;
  byPWM0Ctrl0.4 := TRUE;
  byPWM1Ctrl0.3 := TRUE;
  byPWM1Ctrl0.4 := TRUE;
  byPWM2Ctrl0.3 := TRUE;
  // Write Values to PWM Output
  wPWM0A :=steps[step,1];
  wPWM0B :=steps[step,2];
  wPWM1A :=steps[step,3];
  wPWM1B :=steps[step,4];
  wPWM2A :=steps[step,5];
  timer(PT:=DINT_TO_TIME(steps[step,6])*1000);
  timer.in := TRUE ;
  IF timer.Q THEN
    step := step +1;
    timer.IN:= FALSE;
    IF step=21 THEN
      lock:=FALSE;
      step:=1;
    END_IF
  END_IF
END_IF
IF NOT lock THEN
  byPWM0Ctrl0.3 := FALSE;
  byPWM0Ctrl0.4 := FALSE;
  byPWM1Ctrl0.3 := FALSE;
  byPWM1Ctrl0.4 := FALSE;
  byPWM2Ctrl0.3 := FALSE;
END_IF

Fazit

Dieses kleine Projekt zeigt an einem vergleichsweise einfachen Beispiel, wie Sie mit dem PiXtend einen kleinen Modellroboter ansteuern. Es lässt sich etwa dazu verwenden, um Auszubildenden die Grundlagen der Robotik näherzubringen. Das Verwenden der Programmiersprache ST hat den Vorteil, dass fast alle Industriesteuerungen den resultierenden Code verstehen.

Das PiXtend V2 -L- zielt ganz klar auf den professionellen Anwender in der Industrie ab, bleibt aber preislich so im Rahmen, dass es sich durchaus für ambitionierte Privatprojekte eignet. Alternativ übernehmen auch die kleineren Brüder des PiXtend V2 -L- den Job. Eine Auswahl weiterer Modelle finden Sie auf der Seite des Herstellers [13]

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 7 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Raspberry Pi Geek kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

Aktuelle Ausgabe

12/2019
RasPi-Alternativen

Diese Ausgabe als PDF kaufen

Preis € 9,99
(inkl. 19% MwSt.)

Stellenmarkt

Neuigkeiten

  • Grußbotschaften

    Mit Sonic Pi zaubern Sie komplexe Sounds, die Sie bei Bedarf sogar noch während des Abspielens modifizieren.

  • Das Runde und das Eckige

    Mit dem MCP4725 ergänzen Sie einen RasPi um einem D/A-Wandler, der bei Bedarf noch weitere Funktionen erfüllt.

  • Alles unter Kontrolle

    Schon ein einfaches Mikrocontrollerboard wie das CY8CKIT-049-42xx bietet erstaunlich viele Möglichkeiten beim Ansteuern von Hardware.

  • Viele Kerne

    Das Spresense Development Board von Sony lässt sich mit der Arduino IDE programmieren und bringt auch ein eigenes Entwickler-SDK mit.

  • Exotische Früchte

    Der aus China stammende Orange Pi positioniert sich mit einem guten Preis und interessanten Features gegen die RasPi-Truppe. Kann er sich auch behaupten?

  • Flexibler Surfer

    Mit dem neuen RasPi 4 setzen Sie einen öffentlichen Webkiosk schnell und kostengünstig auf.

  • Auskunftsfreudig

    Viele Devices, so auch der E.ON-Aura-Controller, verwenden eine Schnittstelle namens REST, um Zustandsdaten zu übermitteln. Mit ein wenig Bastelei lesen Sie diese auch über Ihr Smartphone aus.

  • Doppelt gemessen

    Mit wenig Aufwand und einem Pi Zero realisieren Sie einen mobilen Zweikanal-Spannungsprüfer.

  • Elegant zusammengeführt

    Tizonia streamt Musik von Online-Quellen und lokalen Sammlungen. Die schlanke Architektur macht den Player zur guten Wahl für den Einsatz auf dem RasPi.

  • Kommunikativ

    Nicht jeder traut sich zu, sein eigenes Smartphone zu bauen. Allerdings kann jeder Linux-Nutzer den Raspberry Pi im Handumdrehen zu einem VoIP-Telefon aufrüsten.