Cylon.js : Node.js et robotique

Il est aujourd'hui possible d'acheter toute sortes de gadgets, y compris des drones. Si bien que désormais, c'est le soft qui semble ne plus suivre. Cylon.js essaie d'équilibrer la donne. Cylon.js est un framework JavaScript dédié à la robotique, aux interfaces hommes-machine au sens large et aux objets connectés (le "real world web").

Cylon.js se base sur Node.js et son event loop très performante afin de pouvoir gérer divers périphériques en même temps. Pour le dire vite, Cylon.js aspire à rendre la programmation des objets aussi simple que la programmation d'une application web.

Outre les API fournies, Cylon.js permet la Test Driven Robotique. L'équipe en charge de Cylon.js a également créé une interface en ligne de commande : Gort.io.

Un micro-controleur Arduino, un Tessel ou votre Raspberry Pi peuvent facilement être utilisés par Cylon.js (ou le concurrent du Raspberry : le BeagleBone Black, avec plus de CPU, de RAM ...).

Les éléments essentiels dans le dev cylon sont :

  • une connexion. Basée sur l'adapter design pattern, comme nous le faisons avec des ORM (design pattern mis en oeuvre afin d'utiliser le même code pour se connecter à diverses bases de données), cylon permet au développeur de taper le même code pour se connecter à différents périphériques.

  • un driver (double adpater pattern). Un adapter pour la connexion, un adapter pour le driver. Ainsi, le code pour controler une LED sera le même que ce soit pour sur un Arduino ou un Raspberry Pi.

Une application développée avec Cylon.js peut s'exécuter sur différentes architectures. En reprenant notre exemple d'une application qui allume une LED :

ordinateur -> port série -> micro-controleur -> LED

En utilisant un tessel, qui est un micro controleur qui exécute du JavaScript (pas d'OS) :

Compilation -> Firmware embarqué

(et oui, "compilation", car comme l'a montré Kyle Simpson dans "You don't know JS", JavaScript est bien compilé afin de faire de l'hoisting ou de la double récursivité (mais c'est un autre sujet)).

L'intérêt de Cylon.js est de pouvoir faire collaborer plusieurs périphériques, comme un Leap Motion (capable de dédecter le mouvement de vos doigts par infra-rouge) et un Sphero (balle blue tooth) par exemple. Le code étant du Node.js classique, enrichi d'évènements supplémentaires et d'autres fonctions et objets requis par la robotique, la courbe d'apprentissage pour un développeur Node sera presque plate. La preuve :

var Cylon = require("cylon");

// Initialize the robot
var robot = Cylon.robot({  
  // Change the port to the correct port for your Arduino.
  connection: { name: 'arduino', adaptor: 'firmata', port: '/dev/ttyACM0' },
  device: { name: 'led', driver: 'led', pin: 13 },

  work: function(my) {
    // we do our thing here
    every((1).second(), function() { my.led.toggle(); });
  }
});

// start working
robot.start();  

Vos connaissances en JavaScript et en Node.js seront immédiatement mobilisables : on importe un package via npm et un classique require(), on configure un nouvel objet en lui passant un objet JavaScript, etc ... . Il s'agira simplement de vous habituer à un nouveau framework. Cela prend certes du temps et de l'énergie, mais moins que d'apprendre de nouveaux langages et outil ou de s'adapter à un nouvel environnement. Ce sera du Node.js augmenté.

Cylon.js aspire à devenir le liant qui facilitera des collaborations telles que : AR.Drone (quadricopter) + OpenCV (reconnaissance faciale) + PS3 controller + Neurosky (une sorte d'électroencéphalogramme )

ou encore : Pebble (smartwatch) + AR.Drone + OpenCV + Sphero + Digispark (featuring Gobot)

(nota: le digispark est un Arduino plus petit, plus puissant et moins cher.)

Le cercle vertueux que connait JavaScript englobe désormais la robotique.

cylonjs
hybridgroup