Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
wiki:projets:robot-semi-hommeinmoov [2014/09/22 18:04] EMMANUEL Laurent |
wiki:projets:robot-semi-hommeinmoov [2020/10/05 14:39] (Version actuelle) |
||
---|---|---|---|
Ligne 18: | Ligne 18: | ||
22/09/2014 Pour terminer l' | 22/09/2014 Pour terminer l' | ||
+ | |||
+ | ===== Pierre feuille ciseaux contre la main ===== | ||
+ | |||
+ | < | ||
+ | var Leap = require(' | ||
+ | |||
+ | 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 = [" | ||
+ | |||
+ | 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 " | ||
+ | if (nbFingers==5) return " | ||
+ | if (nbFingers==2 && hand.indexFinger.extended && hand.middleFinger.extended) return " | ||
+ | return " | ||
+ | }; | ||
+ | |||
+ | var getWiningGesture = function(gesture) { | ||
+ | if (gesture==" | ||
+ | if (gesture==" | ||
+ | if (gesture==" | ||
+ | }; | ||
+ | |||
+ | var getSubtleWiningGesture = function(gesture) { | ||
+ | var i = Math.floor(Math.random()*3); | ||
+ | if (i<=1) return gesture; | ||
+ | if (gesture==" | ||
+ | if (gesture==" | ||
+ | if (gesture==" | ||
+ | }; | ||
+ | |||
+ | var getRandomGesture = function() { | ||
+ | var i = Math.floor(Math.random()*3); | ||
+ | if (i==1) return " | ||
+ | if (i==2) return " | ||
+ | if (i==0) return " | ||
+ | }; | ||
+ | |||
+ | var whoWin = function(p1, | ||
+ | if (p1==p2) return 0; | ||
+ | if (p1==" | ||
+ | if (p1==" | ||
+ | if (p1==" | ||
+ | }; | ||
+ | |||
+ | controller.on(" | ||
+ | if (frame.hands[0]) { | ||
+ | var hand = frame.hands[0]; | ||
+ | |||
+ | if (underThreshold && hand.palmPosition[1]> | ||
+ | underThreshold = false; | ||
+ | } else if (!underThreshold && hand.palmPosition[1]< | ||
+ | underThreshold = true; | ||
+ | step++; | ||
+ | console.log(steps[step-1]); | ||
+ | } | ||
+ | |||
+ | if (step==4) { | ||
+ | var userGesture = detectGesture(hand); | ||
+ | if (userGesture != " | ||
+ | var aiGesture; | ||
+ | if (mode==0) | ||
+ | aiGesture = getRandomGesture(); | ||
+ | else if (mode==1) | ||
+ | aiGesture = getSubtleWiningGesture(userGesture); | ||
+ | else | ||
+ | aiGesture = getWiningGesture(userGesture); | ||
+ | console.log(" | ||
+ | console.log(" | ||
+ | var result = whoWin(userGesture, | ||
+ | if (result==1) { | ||
+ | console.log(userGesture+" | ||
+ | } else if (result==2) { | ||
+ | console.log(userGesture+" | ||
+ | } else { | ||
+ | console.log(userGesture+" | ||
+ | } | ||
+ | |||
+ | } else { | ||
+ | console.log(" | ||
+ | } | ||
+ | step = 0; | ||
+ | } | ||
+ | } | ||
+ | }); | ||
+ | |||
+ | controller.connect(); | ||
+ | </ | ||
+ | |||
+ | |||
+ | code pour actionner les deux servos moteurs corona des yeux : | ||
+ | |||
+ | < | ||
+ | #include < | ||
+ | |||
+ | Servo myservo; | ||
+ | |||
+ | int Min = 60; // position max optimales des servos d' | ||
+ | int Max = 88; | ||
+ | |||
+ | |||
+ | int pos = 30; // variable to store the servo position | ||
+ | int vitesse=5; | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | pinMode(6, | ||
+ | myservo.attach(6); | ||
+ | | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | myservo.write(90); | ||
+ | |||
+ | |||
+ | for(pos = Min; pos < Max; pos += 1) // goes from 0 degrees to 180 degrees | ||
+ | { // in steps of 1 degree | ||
+ | myservo.write(pos); | ||
+ | delay(vitesse); | ||
+ | } | ||
+ | |||
+ | | ||
+ | { | ||
+ | myservo.write(pos+20); | ||
+ | | ||
+ | delay(vitesse); | ||
+ | } | ||
+ | |||
+ | |||
+ | | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | 27/06/2015 :J'ai un peu galéré à trouver comment démonter le servo hitec hs805bb afin de sortir le potentiomètre. J'ai trouvé cette vidéo sur internet qui explique étape par étape : https:// | ||
+ | |||
+ | D' | ||
+ | |||
+ | |||
+ | 29/06/2015 : réglage des doigts de la main \\ | ||
+ | |||
+ | < | ||
+ | |||
+ | #include < | ||
+ | |||
+ | Servo pouce; | ||
+ | Servo index; | ||
+ | Servo majeur; | ||
+ | Servo annulaire; | ||
+ | Servo auriculaire; | ||
+ | |||
+ | int pos = 30; // variable to store the servo position | ||
+ | int vitesse=15; | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | pouce.attach(3); | ||
+ | index.attach(5); | ||
+ | majeur.attach(6); | ||
+ | annulaire.attach(9); | ||
+ | auriculaire.attach(10); | ||
+ | } | ||
+ | //pouce 70,130 | ||
+ | //doigt 15,110 | ||
+ | //majeur 28,100 | ||
+ | //annulaire 20, 130 | ||
+ | // | ||
+ | void loop() | ||
+ | { | ||
+ | // | ||
+ | | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | void fermer(int Min,int Max) { | ||
+ | | ||
+ | for(pos = Min; pos < Max; pos += 1) // goes from 0 degrees to 180 degrees | ||
+ | { // in steps of 1 degree | ||
+ | pouce.write(pos); | ||
+ | index.write(pos); | ||
+ | majeur.write(pos); | ||
+ | annulaire.write(pos); | ||
+ | auriculaire.write(pos); | ||
+ | delay(vitesse); | ||
+ | } | ||
+ | for(pos = Max; pos> | ||
+ | { | ||
+ | pouce.write(pos+20); | ||
+ | index.write(pos); | ||
+ | majeur.write(pos); | ||
+ | annulaire.write(pos); | ||
+ | auriculaire.write(pos); | ||
+ | delay(vitesse); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | 03/07/2015 : \\ | ||
+ | code pour le servo qui fait hocher la tête. \\ | ||
+ | < | ||
+ | #include < | ||
+ | |||
+ | Servo myservo; | ||
+ | |||
+ | int Min = 20; | ||
+ | int Max = 180; | ||
+ | |||
+ | |||
+ | int pos = 0; // variable to store the servo position | ||
+ | int vitesse=15; | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | pinMode(6, | ||
+ | myservo.attach(6); | ||
+ | | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | // | ||
+ | |||
+ | |||
+ | |||
+ | for(pos = Min; pos < Max; pos += 1) // goes from 0 degrees to 180 degrees | ||
+ | { // in steps of 1 degree | ||
+ | myservo.write(pos); | ||
+ | delay(vitesse); | ||
+ | } | ||
+ | |||
+ | | ||
+ | { | ||
+ | myservo.write(pos); | ||
+ | | ||
+ | delay(vitesse); | ||
+ | } | ||
+ | |||
+ | delay(1500); | ||
+ | | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Tout les moteurs des bras sont asservis, voici le code qui permet de controler le robot avec leur extreneum : | ||
+ | < | ||
+ | #include < | ||
+ | |||
+ | //partie gauche | ||
+ | Servo g_aisselle; | ||
+ | Servo g_homoplate; | ||
+ | Servo g_rotbras; | ||
+ | Servo g_contraction; | ||
+ | |||
+ | // | ||
+ | Servo d_aisselle; | ||
+ | Servo d_homoplate; | ||
+ | Servo d_rotbras; | ||
+ | Servo d_contraction; | ||
+ | |||
+ | int mini = 0; // variable to store the servo position | ||
+ | int maxi = 180 ; | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | g_aisselle.attach(2); | ||
+ | g_homoplate.attach(3); | ||
+ | g_rotbras.attach(4); | ||
+ | g_contraction.attach(5); | ||
+ | | ||
+ | d_aisselle.attach(9); | ||
+ | d_homoplate.attach(10); | ||
+ | d_rotbras.attach(11); | ||
+ | d_contraction.attach(12); | ||
+ | |||
+ | // attaches the servo on pin 9 to the servo object | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | /* | ||
+ | for(mini = 0; mini < 180; mini += 1) // goes from 0 degrees to 180 degrees | ||
+ | { // in steps of 1 degree | ||
+ | myservo.write(mini); | ||
+ | delay(15); | ||
+ | } | ||
+ | for(maxi = 180; maxi>=1; maxi-=1) | ||
+ | { | ||
+ | myservo.write(maxi); | ||
+ | delay(15); | ||
+ | } | ||
+ | |||
+ | */ | ||
+ | // position initale | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | g_contraction.write(0); | ||
+ | | ||
+ | d_aisselle.write(50); | ||
+ | d_homoplate.write(30); | ||
+ | d_rotbras.write(100); | ||
+ | d_contraction.write(165); | ||
+ | |||
+ | //coucou | ||
+ | /* | ||
+ | d_aisselle.write(50); | ||
+ | d_homoplate.write(110); | ||
+ | |||
+ | d_contraction.write(160); | ||
+ | d_rotbras.write(150); | ||
+ | delay (3000); | ||
+ | d_rotbras.write(100); | ||
+ | delay (3000); | ||
+ | |||
+ | */ | ||
+ | |||
+ | // WTF | ||
+ | |||
+ | /* | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | d_aisselle.write(50); | ||
+ | d_homoplate.write(100); | ||
+ | d_rotbras.write(180); | ||
+ | d_contraction.write(165); | ||
+ | */ | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | </ | ||