Programando Robots con JavaScript


39

Como alguien que pasa la mayor parte de su tiempo programando en JavaScript, ¿cuál es la mejor ruta para entrar en la robótica pequeña sin necesidad de desviarse demasiado de mi enfoque de lenguaje actual?

¿Existe algún kit o herramienta de proyecto que utilice el lenguaje JavaScript que pueda hacer que el campo sea más accesible para desarrolladores como yo? Incluso estaría interesado en entornos virtuales donde todo el código se ejecuta en una simulación.


3
Deberías revisar esta publicación ... weblog.bocoup.com/javascript-arduino-programming-with-nodejs Discute una implementación pura de Js del protocolo utilizado para Arduino. Cosas muy geniales.
Chris Gutiérrez

Me gustaría ver alguna implementación de nodejs ejecutándose en el robot. Uno podría simplemente controlar el robot a través de la web utilizando websockets.
Lord Loh

No programa en JavaScript: escribe scripts (que se utilizan en un navegador para la manipulación del DOM del cliente). Puede programar en JAVA, que es completamente diferente. node.jstampoco es javascript. Es una biblioteca C que interpreta las llamadas AJAX como un mini servidor y se utiliza para solicitudes de gran volumen, por ejemplo, en eBay. No necesita actualizar una página en un elemento que está finalizando porque JavaScript sincroniza el precio y el tiempo de la oferta mediante el nodo .js respuesta extremadamente rápida al tiempo que reduce la sobrecarga de tráfico) node.js es bueno para arduino porque lo esC
Piotr Kula

Por lo tanto, debe programar el bot ce interactuar con él utilizando node.js, que inherentemente usa JavaScript ajax para la solicitud, pero también puede usar solicitudes del servidor u otro código inteligente que no esté relacionado con JavaScript de todos modos.
Piotr Kula

¿Es el código Arduino la única forma eficiente actualmente?
Huzo

Respuestas:


22

Hay un par de proyectos que acoplan la plataforma Arduino al motor de ejecución de JavaScript Node.js. Eche un vistazo a Johnny-Five , que es una biblioteca en la parte superior del protocolo de control remoto Arduino Firmata o node-reflecta , que es una interfaz Node.js para el protocolo de control remoto Arduino Reflecta.

Personalmente construí un robot controlado por Node.js llamado RocketBot , que combina node-reflecta con node-joystick encima de un Beaglebone y un Arduino para que pueda dar fe de que este enfoque funciona bien.


12

Hmm, pregunta interesante! Yo personalmente sugeriría que eche un vistazo a la plataforma Arduino. Está programado en C, por lo que la sintaxis será ... familiar para un escritor de JavaScript. En mi humilde opinión, saber cómo se presenta la sintaxis (mientras que los bucles, si / que los bloques, etc.) es el 70% de la batalla, una vez que esté familiarizado con eso, puede enchufar y jugar. Puede obtener un kit de inicio por alrededor de $ 30 en línea de las personas buenas en SparkFun.com o adafruit.com, puede programarlo en una PC, Mac o Linux, y viene precargado con suficientes ejemplos para facilitarle el acceso. El lenguaje rápidamente. No digo que solo vayas a colocar un código JavaScript en él y estarás en camino, pero yo era un programador de JavaScript cuando comencé con Arduino, y me resultó bastante fácil aprenderlo y ejecutarlo. Buena suerte,

PD: también debe estar familiarizado / cómodo con la construcción de circuitos electrónicos (luces, motores y similares), pero cualquier buen kit de introducción de Arduino que valga la pena lo ayudará a comenzar si no tiene ninguna experiencia.


3
PD: Creo que es una buena pregunta para el sitio incipiente y recientemente creado de Robotics.SE :)
Chris

1
Gran respuesta, @Chris. He oído hablar de la plataforma Arduino de otros desarrolladores de JavaScript. Quizás esa sea la mejor droga de entrada para un desarrollador que busca engancharse.
Sampson el

1
Como joven desarrollador de JavaScript / web, encuentro su pregunta muy interesante. Como se indicó anteriormente, existen plataformas para node.js y otras versiones diferentes, sin embargo, si se siente realmente cómodo con JavaScript, podría aprender fácilmente cualquier otro idioma, lo que recomiendo encarecidamente. No solo amplía su capacidad para comprender las ciencias informáticas fundamentales, sino que también facilita el aprendizaje de cosas nuevas.
OneChillDude

8

Robot Operating System (ROS) ofrece la posibilidad de usar Javascript para controlar sus robots. Específicamente querrás mirar Rosbridge . Luego deberá usar rosserial para interactuar con el microcontrolador que controla su robot.

Si bien soy un gran admirador de ROS, esta es una forma demasiado complicada de comenzar a explorar el campo de la robótica en mi humilde opinión. Sería mejor que recojas un Arduino y aprendas un poco de C. Arduino hace un gran trabajo al simplificar el proceso y C no es una gran desviación de JS desde una perspectiva de sintaxis.


5

En general, hay muchas formas de usar node.js con una plataforma, como esta para RPi . Hay muchos más similares si solo los busca .

Otra interesante es ArduGate , que permite que las páginas web se comuniquen con el arduino a través de JS (aunque probablemente no sea exactamente lo que quería, ya que no se compila ni carga en el arduino)

Aunque realmente no veo qué hay de malo en usar un idioma diferente. Yo mismo escribo principalmente en JS, pero me encuentro perfectamente cómodo programando un Arduino en C ++ (también permite C y Java, y si pones un poco de trabajo, bastantes lenguajes más ). Recuerde, no necesitamos nada sofisticado para programar un robot, simplemente normalif s, fors, whiles, switches y ocasionalmenteclass. Aprenda la sintaxis, y ya está listo para empezar :) Lo único es que C / C ++ / Java están fuertemente tipados (aunque si está utilizando el RPi, python está tipeado débilmente pero exigente en un millón de formas más), entonces Es posible que sienta un poco de frustración al principio cuando tenga que especificar tipos para todo. Una ventaja de usar los idiomas nativos es que es mucho más fácil encontrar API y código de ejemplo en la red. Por ejemplo, aparte de ArduGate (que lo tiene incorporado y probablemente no es lo que quería), no puedo encontrar ninguna forma de acceder a la EEPROM, una tarea común. Entonces, a menos que desee apegarse a programas simples, es mejor usar los idiomas nativos.


2

Un amigo mío en realidad tiene un robot tanque bastante poderoso que se controla con NodeJS a través de wifi. El robot en sí mismo no es exactamente una "pequeña robótica" de 150 libras, pero probablemente podría aprender bastante del código fuente. Tiene una netbook a bordo con un servidor web y hablando con un Arduino. Puede encontrar el código fuente en su página del proyecto Github . El control en tiempo real desde un navegador web en otra computadora es sorprendentemente sensible.


2

Microsoft Robotics utiliza un protocolo llamado Protocolo de servicios de software descentralizado (DSSP) y publicaron las especificaciones bajo una licencia que permite a cualquiera implementarlo en cualquier idioma. El protocolo DSSP es totalmente compatible con los estándares web actuales y creo que sería una buena idea implementarlo en JavaScript y NodeJS. Eso puede hacer posible que su aplicación de nodo interactúe con cualquier servicio de robótica DSS disponible en la actualidad.


1

Programar el AR.Drone 2.0 con Javascript es muy divertido. Aquí hay un ejemplo que hace que un avión no tripulado despegue, se mueva, gire, luego aterrice, todo utilizando la biblioteca node-ar-drone :

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();
  });

La publicación de blog NodeBots: The Rise of JS Robotics habla sobre las ventajas que tiene javascript para la robótica, específicamente la forma natural en que los objetos y acciones del mundo real pueden modelarse como procesos encadenados e ideados. El código de ejemplo anterior para animar un dron se parece mucho al uso de jQuery para animar un elemento HTML:

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

He editado la respuesta para que sea más específica y agregue más contexto. Gracias por la respuesta.
John Wiseman

Gracias John, esa es una gran edición, justo el tipo de cosa que hace una respuesta a prueba de futuro.
Mark Booth

0

También hay un proyecto llamado Espruino , que es un intérprete de JavaScript para microcontroladores ARM de baja potencia. Es una reescritura del proyecto tiny-js , un pequeño intérprete de C ++ para Javascript.


0

Puede ser útil buscar proyectos de robótica basados ​​en javascript en línea ya que la comunidad de robótica basada en javascript ha crecido rápidamente desde que se hizo esta pregunta. Por ejemplo, el blogger detrás de https://burningservos.com documentó los procesos de construcción de un robot de cuatro patas desde cero y discutió sobre múltiples bibliotecas javascript que el blogger evaluó o usó. También hay una sección de "hardware" en glitch (o incluso en Adafruit y Hackster.io ) donde la gente comparte sus proyectos de piratería de hardware basados ​​en javascript donde puedes consultar las bibliotecas que usaron.