Programmieren von Robotern mit JavaScript


39

Was ist der beste Weg für jemanden, der den größten Teil seiner Zeit mit dem Programmieren in JavaScript verbringt, um in die Kleinrobotik einzusteigen, ohne zu sehr von meinem aktuellen Sprachfokus abweichen zu müssen?

Gibt es Projekt-Kits oder Tools, die die JavaScript-Sprache verwenden, um das Feld für Entwickler wie mich zugänglicher zu machen? Ich würde mich sogar für virtuelle Umgebungen interessieren, in denen der gesamte Code in einer Simulation ausgeführt wird.


3
Sie sollten diesen Beitrag lesen ... weblog.bocoup.com/javascript-arduino-programming-with-nodejs Es wird eine reine Js-Implementierung des für Arduino verwendeten Protokolls beschrieben. Ziemlich cooles Zeug.
Chris Gutierrez

Ich würde gerne einige Nodejs-Implementierungen auf dem Roboter sehen. Man könnte den Roboter einfach mit Hilfe von Websockets über das Web steuern.
Lord Loh.

Sie programmieren nicht in JavaScript - Sie schreiben Skripte (die in einem Browser zur Client-Manipulation des DOM verwendet werden). Sie können in JAVA programmieren - was völlig anders ist. node.jses ist auch kein Javascript. Es handelt sich um eine C-Bibliothek, die AJAX-Aufrufe als Miniserver interpretiert und für hochvolumige Anfragen verwendet wird (z. B. bei eBay). Sie müssen keine Seite für einen Artikel aktualisieren, der endet, da Javascript den Angebotspreis und die Uhrzeit mithilfe des Knotens synchronisiert .js extrem schnelle Antwort bei gleichzeitiger Reduzierung des Verkehrsaufwands) node.js ist gut für Arduino, weil es istC
Piotr Kula

Sie würden den Bot also cmit node.js programmieren und eine Schnittstelle dazu erstellen. Dabei wird inhärent JavaScript ajax für die Anforderung verwendet. Sie können jedoch auch Serveranforderungen oder anderen cleveren Code verwenden, der ohnehin nicht mit JavaScript zusammenhängt.
Piotr Kula

Ist der Arduino-Code derzeit der einzige effiziente Weg?
Huzo

Antworten:


22

Es gibt einige Projekte, die die Arduino-Plattform mit der JavaScript-Ausführungs-Engine von Node.j verbinden. Werfen Sie einen Blick auf Johnny-Five , eine Bibliothek über dem Fernsteuerungsprotokoll Arduino Firmata oder auf node-reflecta , einer Node.js-Schnittstelle für das Fernsteuerungsprotokoll Arduino Reflecta.

Ich habe persönlich einen Node.js-gesteuerten Roboter namens RocketBot gebaut , der Node-Reflecta mit Node-Joystick auf einem Beaglebone und einem Arduino kombiniert, damit ich bestätigen kann, dass dieser Ansatz gut funktioniert.


12

Hmm, interessante Frage! Ich persönlich würde vorschlagen, dass Sie einen Blick auf die Arduino-Plattform werfen. Es ist in C programmiert, daher wird die Syntax einem JavaScript-Schreiber bekannt vorkommen. Meiner bescheidenen Meinung nach ist es 70% des Kampfes, zu wissen, wie die Syntax (while-Schleifen, if / than-Blöcke usw.) aufgebaut ist. Sobald Sie damit vertraut sind, können Sie Plug-and-Play durchführen. Sie können ein Starter-Kit für rund 30 US-Dollar online bei den guten Leuten von SparkFun.com oder adafruit.com kaufen, es kann auf einem PC, Mac oder Linux-Computer programmiert werden und es ist mit genügend Beispielen vorinstalliert, um Ihnen den Einstieg zu erleichtern die Sprache schnell. Ich sage nicht, dass Sie nur etwas JavaScript-Code einfügen und auf dem Weg sein werden, aber ich war ein JavaScript-Programmierer, als ich mit Arduino anfing, und ich fand es ziemlich einfach, damit zu lernen und zu laufen. Viel Glück,

PS - Sie sollten auch mit dem Aufbau elektronischer Schaltkreise (Lichter, Motoren und dergleichen) vertraut / vertraut sein, aber jedes gute Arduino-Einführungskit, das sein Salz wert ist, wird Ihnen den Einstieg erleichtern, wenn Sie keine Erfahrung haben.


3
PS - Eine gute Frage für die junge, frisch gebackene Robotics.SE-Site, denke ich :)
Chris

1
Gute Antwort, @Chris. Ich habe von einigen anderen JavaScript-Entwicklern von der Arduino-Plattform gehört. Vielleicht ist das die beste Einstiegsdroge für einen Entwickler, der sich süchtig macht.
Sampson

1
Als junger JavaScript / Webentwickler finde ich Ihre Frage super interessant. Wie bereits erwähnt, gibt es Plattformen für node.js und andere verschiedene Versionen. Wenn Sie sich jedoch mit JavaScript auskennen, können Sie problemlos eine andere Sprache erlernen, die ich sehr empfehlen würde. Es erweitert nicht nur Ihre Fähigkeit, grundlegende Informatik zu verstehen, sondern erleichtert auch das Erlernen neuer Dinge.
OneChillDude

8

Das Robot Operating System (ROS) bietet die Möglichkeit, Javascript zur Steuerung Ihrer Roboter zu verwenden. Insbesondere möchten Sie sich Rosbridge ansehen . Sie müssen dann Rosserial verwenden, um eine Schnittstelle mit dem Mikrocontroller herzustellen , der Ihren Roboter steuert.

Während ich ein großer Fan von ROS bin, ist dies eine übermäßig komplizierte Art und Weise, das Gebiet der Robotik zu erkunden. Es wäre besser, wenn Sie ein Arduino in die Hand nehmen und ein wenig von C. lernen würden. Arduino leistet einen großartigen Beitrag zur Vereinfachung des Prozesses, und C ist aus syntaktischer Sicht keine große Abweichung von JS.


5

Im Allgemeinen gibt es viele Möglichkeiten, node.js mit einer Plattform wie dieser für das RPi zu verwenden . Es gibt viel mehr ähnliche, wenn Sie nur danach suchen .

Ein weiteres interessantes ist ArduGate , mit dem Webseiten über JS mit dem Arduino kommunizieren können (obwohl es wahrscheinlich nicht genau das ist, was Sie wollten, da es nicht kompiliert und auf das Arduino geladen werden kann).

Obwohl ich wirklich nicht sehe, was daran falsch ist, eine andere Sprache zu benutzen. Ich selbst schreibe hauptsächlich in JS, aber ich finde es perfekt, ein Arduino in C ++ zu programmieren (es erlaubt auch C und Java und, wenn Sie ein bisschen Arbeit investieren, noch einige weitere Sprachen ). Denken Sie daran, wir brauchen nichts Besonderes zum Programmieren eines Roboters - nur normale ifs, fors, whiles, switches und gelegentlichclass. Erlernen Sie die Syntax, und Sie können loslegen :) Das einzige, was Sie tun müssen, ist, dass C / C ++ / Java stark typisiert ist (wenn Sie jedoch RPi verwenden, ist Python schwach typisiert, aber in millionenfacher Hinsicht wählerisch) Am Anfang kann es ein wenig frustrierend sein, wenn Sie für alles Typen angeben müssen. Ein Vorteil der Verwendung der Muttersprachen besteht darin, dass APIs und Beispielcode im Internet viel einfacher zu finden sind. Zum Beispiel, abgesehen von ArduGate (das es eingebaut hat und wahrscheinlich nicht das ist, was Sie wollten), kann ich keine Möglichkeit finden, auf das EEPROM zuzugreifen - eine häufige Aufgabe. Wenn Sie sich also nicht an einfache Programme halten möchten, ist es nur besser, die Muttersprachen zu verwenden.


2

Ein Freund von mir hat eigentlich einen ziemlich starken Tank Roboter , die mit NodeJS über WiFi gesteuert wird . Der Roboter selbst ist nicht gerade "Kleinroboter" bei 150 Pfund, aber Sie könnten wahrscheinlich einiges aus dem Quellcode lernen. Es hat ein Netbook an Bord, das einen Webserver betreibt und mit einem Arduino spricht. Den Quellcode finden Sie auf seiner Github- Projektseite . Die Echtzeitsteuerung von einem Webbrowser auf einem anderen Computer aus reagiert überraschend schnell.


2

Microsoft Robotics verwendet ein Protokoll namens Decentralized Software Services Protocol (DSSP) und hat die Spezifikationen unter einer Lizenz veröffentlicht, mit der jeder Benutzer sie in einer beliebigen Sprache implementieren kann. Das DSSP-Protokoll ist vollständig kompatibel mit den aktuellen Webstandards und ich denke, es wäre eine großartige Idee, es in JavaScript und NodeJS zu implementieren. Auf diese Weise kann Ihre Knotenanwendung mit allen heute verfügbaren DSS-Robotikdiensten interagieren.


1

Das Programmieren der AR.Drone 2.0 mit Javascript macht sehr viel Spaß. Hier ist ein Beispiel, in dem eine Drohne mit der Node-Ar-Drone- Bibliothek startet, sich bewegt, dreht und landet :

var arDrone = require('ar-drone');
var client = arDrone.createClient();

client.takeoff();

client
  .after(5000, function() {
    this.clockwise(0.5);
  })
  .after(3000, function() {
    this.animate('flipLeft', 15);
  })
  .after(1000, function() {
    this.stop();
    this.land();
  });

Der Blog-Beitrag NodeBots - der Aufstieg von JS Robotics spricht über die Vorteile von Javascript für die Robotik, insbesondere die natürliche Art und Weise, wie reale Objekte und Aktionen als verkettbare, ereignisreiche Prozesse modelliert werden können. Der obige Beispielcode zum Animieren einer Drohne sieht der Verwendung von jQuery zum Animieren eines HTML-Elements sehr ähnlich:

$("#foo")
  .slideUp(300)
  .delay(800)
  .fadeIn(400);

Ich habe die Antwort so bearbeitet, dass sie spezifischer ist und mehr Kontext hinzufügt. Danke für die Rückmeldung.
John Wiseman

Danke John, das ist ein großartiger Schnitt, genau das, was eine zukunftssichere Antwort ausmacht.
Mark Booth

0

Es gibt auch ein Projekt namens Espruino , ein JavaScript-Interpreter für ARM-Mikrocontroller mit geringer Leistung. Es ist eine Neufassung des tiny-js- Projekts, eines kleinen C ++ - Interpreters für Javascript.


0

Es kann hilfreich sein, online nach JavaScript-basierten Robotikprojekten zu suchen, da die JavaScript-basierte Robotik-Community seit der Beantwortung dieser Frage rasant gewachsen ist. Zum Beispiel hat der Blogger hinter https://burningservos.com Prozesse des Baus eines vierbeinigen Roboters von Grund auf dokumentiert und mehrere Bibliotheken mit Javascript besprochen, die der Blogger evaluiert oder verwendet hat. Es gibt auch „Hardware“ in Glitch (oder sogar bei Adafruit und Hackster.io ) , wo die Menschen ihre Javascript-basierte Hardware - Hacking Projekte teilen , wo Sie Bibliotheken überprüfen können sie verwendet werden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.