SkyNet est en marche !

Dans un précédent billet, j’avais fais plusieurs tests d’Avatar basés sur des Hologrammes de manière à fournir un visage à SARAH.

Depuis, j’ai reçu un nouveau projet KickStarter ! Un animatronic de chez Toonimal !

L’idée est très intéressante !

  • Le squelette est en Acrylic découpé au laser
  • Les moteurs sont connectés à un Ardruino UNO
  • La peau est tout bêtement du papercraft

Ensuite j’ai connecté l’Arduino à SARAH

  • Installer l’IDE Ardruino
  • Passer des heeeuuurresss à configurer le port série
  • Utiliser johnny-five pour piloter le tout dans un plugin SARAH

Voici un résultat à l’arrache sans la peau !!!

Le Code:

[crayon]
var five = false;
var board = false;
var servo = false;
var eyeV = false;
var eyeH = false;

exports.init = function(SARAH){

if (five) return;
console.log(‘Init Animatronic !’);

five = require("./lib/johnny-five");

board = new five.Board({ port : ‘\.COM6’ });
board.on("ready", function() {
console.log(‘Board is ready !’);

// Init mouth servo
servo = new five.Servo({ pin: 10, range: [95, 160] });
board.repl.inject({ servo: servo });

// Init eye vertical
eyeV = new five.Servo({ pin: 9, range: [20, 160], continuous: ‘continuous’ });
board.repl.inject({ servo: eyeV });

// Init eye horizontal
eyeH = new five.Servo({ pin: 8, range: [80, 120], continuous: ‘continuous’ });
board.repl.inject({ servo: eyeH });

eyes();
});
}

exports.speak = function(tts, async, SARAH){
var s = syllables(tts);
console.log(‘Speak: [‘+tts+’]’, s);
speak(s);

return tts;
}

exports.action = function(data, callback, config, SARAH){ }

// ——————————————
// ANIMATRONIC
// ——————————————

var speak = function(count){
console.log(‘speak’);
if (count <= 0) { servo.stop(); return; }

servo.to(160);
setTimeout(function(){ servo.to(100); }, 200);
setTimeout(function(){ speak(count-1); }, 400);
}

var eyes = function(){
setTimeout(function(){
var pause = Math.round(Math.random()*4);
if (pause == 4){
eyeV.stop();
eyeH.stop();
}
else {
var dV = Math.round(Math.random()*140+20);
var dH = Math.round(Math.random()*40 +80);
eyeV.to(dV,280);
eyeH.to(dH,280);
}
eyes();
},300);
}

var syllables = function(word) {
word = word.toLowerCase();
if(word.length <= 3) { return 1; }
word = word.replace(/(?:[^laeiouy]es|ed|[^laeiouy]e)$/,  »);
word = word.replace(/^y/,  »);
return word.match(/[aeiouy]{1,2}/g).length;
}
[/crayon]

8 réflexions sur “SkyNet est en marche !

  • 17 mai 2015 à 13 h 24 min
    Permalien

    Bonjour ,
    Nous sommes actuellement , entrain de travailler sur votre logiciel SARAH que l’on aimerai intégrer dans une tête InMoov.
    Comme vous l’avez effectué ici , comment avez procédé exactement?
    Quelle est la bibliothèque utilisée ?

    Répondre
    • 18 mai 2015 à 17 h 05 min
      Permalien

      Dans mon cas j’utilise la librairie NodeJS JohnnyFive qui permet de controller des moteurs de carte Arduino.

      Attention dans le monde réel les moteurs ne sont pas super précis et du coup les tempo sont pas raccord avec la voix

      Répondre
  • 20 mai 2015 à 14 h 37 min
    Permalien

    Merci de votre réponse , j’ai installer JohnnyFive ainsi que Node JS sur windows , pour le moment j’arrive a contrôler à peine une Led avec la carte arduino.
    Comment vous utiliser le code ci dessus ?

    Répondre
    • 20 mai 2015 à 19 h 57 min
      Permalien

      Je ne comprends pas la question, c’est le code d’un plugin SARAH a l’initialisation on initialise la carte et on créé des objets servo comme dans la doc de JohnyFive. Puis quand SARAH parle on décupe la phrase en sylabe et on ouvre la bouche un des servo autant de fois que necessaire

      Répondre
  • 21 mai 2015 à 10 h 47 min
    Permalien

    Bonjour,
    Si j’ai bien compris il faut installer:
    Node.js
    Visual Studio 2012 (par exemple)
    Johnny-Five via npm

    Charger dans l’ARDUINO un code FIRMATA.
    Après écrire un plungin pour SARAH qui utilisera Johnny-five et ajouter le programme qui commande les servos moteurs ?

    Est-ce bien celà ?

    Répondre
    • 21 mai 2015 à 10 h 59 min
      Permalien

      Je n’ai pas bien compris ce que vous cherchez à faire

      1. Pour piloter une carte Arduino avec NodeJS il faut installer JohnyFive. Pour installer JohnyFive sous windows il faut suivre la doc qui indique d’installer VisualStudio et faire 2-3 manip
      2. Ensuite il faut effectivement que le Arduino utilise Firmata pour recevoir des commandes JohnnyFive
      3. Ensuite pour n’importe script NodeJS qui utilise l’API JohnnyFive peut envoyer des ordre à la carte
      4. Enfin dans le cas de SARAH mon script est un plugin SARAH car c’est le framework que je développe.

      Mais si votre besoin est juste de pilote un arduino:
      – NodeJS n’est pas forcément nécessaire il suffit de coder en Arduino
      – Windows n’est pas nécessaire vous pouvez utiliser un Raspberry Pi
      – SARAH n’est pas nécessaire vous pouvez juste faire un script NodeJS

      Cet article part du postula que je code un plugin SARAH donc je fais des choix « spécifiques »

      Répondre
  • 23 mai 2015 à 1 h 55 min
    Permalien

    Merci, c’est clair.
    Est-ce possible d’avoir votre plugin car je n’ai pas réussi à en créer un utilisant Johnny-five et SARAH ?

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.