Ceci est une ancienne révision du document !
Nous sommes en train de construire le robot inmoov grâce à notre imprimante 3D markerbot replicator 2X. Le site internet http://www.inmoov.fr/ est très bien documenté aussi nous ne préciserons dans ce wiki uniquement les difficultés rencontrés lors de la construction. En plus de construire le robot, nous voulons ajouter plusieurs fonctionnalités pour qu'il puisse interagir avec son environnement : reconnaissance faciale et vocale, connexions avec d'autres robots ou ordinateurs…
Porteur du projet Emmanuel Thiéry (contact : emmanuel.thiery@pmclab.fr) et Benjamin Lomuto (contact : benjamin.lomuto@gmail.com)
Une fois la main et l'avant bras terminé, nous programmerons le membre pour qu'il soit imbattable au chifoumi
04/12/2013 Nous avons imprimé la plupart des pièces composant l'avant bras, nous sommes en attente des servos et du fil de pêche pour le finir.
08/01/2014 Nous avons reçu le fil de pêche et nous avons pu assembler la main :
22/09/2014 Pour terminer l'avant bras, nous avons suivis les instructions du site internet, exepter le fait que nous avons modifié la pièce “RobServoBedV5” afin de la fité avec les servos moteurs suivants : Corona DS-319HV, choisit pour leur rapidité 0.05 sec pour tourner de 60º
var Leap = require('leapjs'); var controller = new Leap.Controller(); // 0 = No cheat (full random) // 1 = Subtile cheat mode (2/3 draw, 1/3 win) // 2 = Full cheat mode (always win) var mode = 1; var step = 0; var underThreshold; var threshold = 150; var steps = ["1...", "2...", "3...", ""]; var countFingers = function(hand) { var nbFingers = 0; nbFingers += hand.thumb.extended; nbFingers += hand.indexFinger.extended; nbFingers += hand.middleFinger.extended; nbFingers += hand.ringFinger.extended; nbFingers += hand.pinky.extended; return nbFingers; } var detectGesture = function(hand) { var nbFingers = countFingers(hand); if (nbFingers==0) return "Pierre"; if (nbFingers==5) return "Feuille"; if (nbFingers==2 && hand.indexFinger.extended && hand.middleFinger.extended) return "Ciseaux"; return "Mouvement invalide"; }; var getWiningGesture = function(gesture) { if (gesture=="Pierre") return "Feuille"; if (gesture=="Feuille") return "Ciseaux"; if (gesture=="Ciseaux") return "Pierre"; }; var getSubtleWiningGesture = function(gesture) { var i = Math.floor(Math.random()*3); if (i<=1) return gesture; if (gesture=="Pierre") return "Feuille"; if (gesture=="Feuille") return "Ciseaux"; if (gesture=="Ciseaux") return "Pierre"; }; var getRandomGesture = function() { var i = Math.floor(Math.random()*3); if (i==1) return "Feuille"; if (i==2) return "Ciseaux"; if (i==0) return "Pierre"; }; var whoWin = function(p1, p2) { if (p1==p2) return 0; if (p1=="Pierre") return (p2=="Feuille")?2:1; if (p1=="Feuille") return (p2=="Ciseaux")?2:1; if (p1=="Ciseaux") return (p2=="Pierre")?2:1; }; controller.on("deviceFrame", function(frame) { if (frame.hands[0]) { var hand = frame.hands[0]; if (underThreshold && hand.palmPosition[1]>=threshold) { underThreshold = false; } else if (!underThreshold && hand.palmPosition[1]<threshold) { underThreshold = true; step++; console.log(steps[step-1]); } if (step==4) { var userGesture = detectGesture(hand); if (userGesture != "Mouvement invalide") { var aiGesture; if (mode==0) aiGesture = getRandomGesture(); else if (mode==1) aiGesture = getSubtleWiningGesture(userGesture); else aiGesture = getWiningGesture(userGesture); console.log("Le robot : "+aiGesture); console.log("Vous : "+userGesture); var result = whoWin(userGesture, aiGesture); if (result==1) { console.log(userGesture+" > "+aiGesture+", vous gagnez !"); } else if (result==2) { console.log(userGesture+" < "+aiGesture+", le robot gagne !"); } else { console.log(userGesture+" = "+aiGesture+", match nul !"); } } else { console.log("Mouvement non reconu"); } step = 0; } } }); controller.connect();
code pour actionner les deux servos moteurs corona des yeux :
#include <Servo.h> Servo myservo; // On créer un objet MyServo par lequel on envois les instruction au servo int Min = 60; // position max optimales des servos d'après mon montage int Max = 88; int pos = 30; // variable to store the servo position int vitesse=5; void setup() { pinMode(6,OUTPUT); myservo.attach(6); // On associe notre objet à la Pin connecté au fil de données du servo } void loop() { myservo.write(90); //donne l'ordre de mettre le Servo à sont angle minimum for(pos = Min; pos < Max; pos += 1) // goes from 0 degrees to 180 degrees { // in steps of 1 degree myservo.write(pos); // tell servo to go to position in variable 'pos' delay(vitesse); // waits 15ms for the servo to reach the position } for(pos = Max; pos>=Min; pos-=1) // goes from 180 degrees to 0 degrees { myservo.write(pos+20); // tell servo to go to position in variable 'pos' delay(vitesse); // waits 15ms for the servo to reach the position } }
27/06/2015 :J'ai un peu galéré à trouver comment démonter le servo hitec hs805bb. J'ai trouvé cette vidéo sur internet qui explique étape par étape : https://www.youtube.com/watch?v=4ia6zoRKujI