Roboter steuern mit Node.js und Johnny-Five

27.06.2016

Wie einfach es inzwischen ist einen Roboter zu programmieren, habe ich am Wochenende beim Workshop „Sumobots mit Javascript“ auf der Maker Faire Bodensee gelernt.

Dabei ging es zunächst darum, den Roboter aus Elektronikbauteilen, gelasertem Holz und 3D-Druck-Teilen zusammenzubauen. Nachdem ich zuletzt in der fünften Klasse einen Lötkolben in der Hand hatte, tat ich mir zunächst schwer damit, die Kabel an die Motoren des kleinen Roboters zu löten. Die nächsten Schritte waren dann schon einfacher. Mit Hilfe eines Breadboards und Steckverbindungen wurden die Motoren über eine Motorsteuerung mit der Batterie und dem Arduino Uno verbunden, der als Steuergerät für den Roboter diente.

Nach der Verkabelung ging es daran den Roboter zu programmieren. Hierzu griffen wir auf Node.js als Runtime zurück. Manch einer mag sich fragen: Javascript zum Programmieren von Robotern – geht das denn? Ja, sogar sehr gut! Dazu wird Node.js um das Johnny-Five Framework erweitert. Johnny-Five versteckt den Zugriff auf den Roboter hinter einer simplen API. Die Ausführung des Codes erfolgt dann auf einem Host (z.B. ein Laptop), der wiederum Steuerungsbefehle an den Client (z.B. ein Arduino Uno) sendet.

Hello World

Dieses Beispiel zeigt, wie einfach es ist, eine LED über Johnny-Five blinken zu lassen:

var five = require("johnny-five");
var board = new five.Board();

board.on("ready", function() {
   var led = new five.Led(13);
   led.blink(500);
});

Quelle: johnny-five.io

In nur wenigen Zeilen Code wird zunächst eine Objekt Repräsentation des angesteuerten Computers (in diesem Fall ein Arduino Uno, sehr viele andere Boards werden aber auch unterstützt) erzeugt und dort anschließend eine an PIN 13 angeschlossene LED zum Blinken gebracht.

Motoren steuern

Natürlich reicht das Blinken einer LED nicht aus, um einen Roboter zu steuern. Die Steuerung von Motoren ist allerdings auch nicht viel komplizierter, wie dieses Beispiel zeigt:

var five = require("johnny-five"),
board = new five.Board();

board.on("ready", function() {
    var motor;
    motor = new five.Motor({
      pins: {
          pwm: 3,
          dir: 12
      },
      invertPWM: true
    });

    motor.on("forward", function() {
        console.log("forward", Date.now());

        // demonstrate switching to reverse after 5 seconds
        board.wait(5000, function() {
            motor.reverse(255);
        });
    });

    motor.on("reverse", function() {
        console.log("reverse", Date.now());

        // demonstrate stopping after 5 seconds
        board.wait(5000, function() {
            motor.stop();
        });
    });

    // set the motor going forward full speed
    motor.forward(255);
});

Quelle: johnny-five.io (gegenüber dem Original gekürzt)

Zunächst muss für den Motor definiert werden, über welche PINs er angesteuert werden kann. Anschließend kann er über Funkionen wie forward, reverse oder stop gesteuert werden.

Ausblick und Fazit

Mit Hilfe weiterer Node.js Module wie z.B. Keypress lässt sich eine Steuerung des Roboters über die Tastatur realisieren. Dadurch lässt sich ein Roboter sehr schnell und einfach programmieren. Es zeigt sich, dass Javascript nicht nur für den Browser gemacht ist.

Zurück zur Übersicht

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*Pflichtfelder

*