Aller au contenu


Photo
- - - - -

Mon Gamin, un Terminator T-800


14 réponses à ce sujet

#1 XB2000

XB2000

    Nouveau membre

  • Membres
  • 25 messages

Posté 02 mai 2020 - 02:54

Bonjour,

Je me suis présenté ici ; https://www.robot-ma...ntation-xb2000/

 

En tant que super fan de Terminator et Terminator : Le Jugement Dernier, je voudrais pour 2029 ; une année importante pour la saga, puisque c'est celle d'où viennent les protagonistes du futur ; rendre hommage aux deux premiers films de la franchise. L'hommage ultime, un vrai Terminator série 800 modèle 101, "imprimé en 3D" en titane et capable d'agir comme dans les films (mais pas de tuer). Mais avant cela, il y aura un prototype, fait de matériaux composites et dont l'intelligence artificielle proviendra de données open source.

rich-m-terminator-endoskele-1-73e9b4cf-6jnr.jpg

 

Ce prototype sera construit en trois étapes:
-La tête
-Torse avec les bras
-Jambes
 
Le but sera de le rendre «intelligent» à chaque étape
 
La tête :
-Assistant vocal
-Résoudre des problèmes simples
-Reconnaître ses contacts
-Reconnaître les objets
-Vision stéréoscopique et estimation des distances
 
Le torse avec les bras:
-Saluer
-Langage des signes
-Manipuler des objets
 
Jambes :
-Apprendre à marcher
 
Ce sont les objectifs de base.
Pour approfondir l'intelligence artificielle, je m'inspirerais de la théorie des intelligences multiples et de la théorie triarchique de l'intelligence, en utilisant le maximum de données open-source.
 

Qu'est-ce que j'en ferais ? Tout et n'importe quoi, surtout n'importe quoi. Je rêve un jour de le faire participer à un concours de cosplay :

- Vous êtes déguisez en quoi ?

 - En humain...

 
Si je poste dans cette section, c'est que pour l'instant j'en suis qu'à la tête.
 
Je me suis basé sur un kit vinyle.
001.jpg
 
Et pour l'I.A, je vais essayer de commencer avec Kalliope sur un Raspberry Pi 4.
Je débute en Python et C.
Pour le moment, j'utilise principalement du matériel préexistant pour évaluer si je suis capable d'avoir de bons résultats et donc de m'investir davantage.
Je vais aussi essayé de faire une version virtuelle sur Webots.
Pour l'instants ce tout premier "brouillon" utilise des servo-moteurs. La prochaine version sera à vérin pneumatiques.
 
Il a sa petite chaîne Youtube : https://www.youtube....RhQ8ZSiRfGd2gQg
 
(mettez les sous-titres pour la première vidéo)
Les servo-moteurs sont contrôlés par un Arduino Uno. Je pense que plutôt que tout contrôler avec un Raspberry, il va demander une certaine position des membre à un Arduino qui va contrôler directement les actionneurs pour obtenir la position voulue par le Raspberry. 
 
Prochaine étape le faire chanter...


#2 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 935 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 02 mai 2020 - 03:06

Bravo ça a l'air de bien avancer ! 

Par contre petite question, tu privilégies l'aspect esthétique ? Ou bien l'aspect fonctionnel ? 

Notamment pour les points techniques comme : " Vision stéréoscopique et estimation des distances " 
car sur le principe tu peux
=> soit chercher absolument à garder l'esthétique et voir pour trouver deux camera qui iront dans les yeux et développer tout autour de ce ton choix de camera et de la position que tu vas avoir, 
=> soit sélectionner du matériel déjà existant mais qui risque de casser un peut l'esthétique type terminator 
Comme les camera D435 et T265 ... Ce qui simplifierais beaucoup le développement technique. 

 

En tout cas quel que soit ton choix bon courage pour la suite et bonne continuation!
 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 

 

Les réalisations de Mike118  

 

 

 


#3 XB2000

XB2000

    Nouveau membre

  • Membres
  • 25 messages

Posté 02 mai 2020 - 03:42

Les deux ^^
Enfin ta première proposition, mais avec un vrai aspect fonctionnel quand même.
Quand je dis "estimation des distances", c'est via la vision stéréoscopique que j'essaierais d'avoir ça, d'où le terme "estimation" plutôt que "mesure".
 
Mais cette version aura, du moins dans un premier temps une caméra à la place de l’œil gauche, comme il n'interagi pas encore avec son environnement, pas encore besoin de vision stéréoscopique. A ce niveau là je ne peux pas faire grand chose avec les yeux présents dans le kit. Il faudra que j'investisse dans une imprimante 3D, en fait je voudrais que ces yeux soit des objectifs de caméra.


#4 TheThugMOB_

TheThugMOB_

    Nouveau membre

  • Membres
  • 2 messages

Posté 02 mai 2020 - 07:47

Waouh j'suis impressionné par ton projet, quand j'ai commencé à lire je me suis dit "haha aucune chance c'est bien trop poussé" puis j'ai vu que tu avais déjà commencé et ça à l'air tellement chouette! Good luck j'espère que tu y arriveras.;)



#5 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 935 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 02 mai 2020 - 08:50

Comme je dis souvent : 

Il faut croire en soit et ne jamais laisser qui que ce soit se convaincre que quelque chose est impossible. Car il n'y a que vous qui puissiez choisir d'échouer, car échouer c'est abandonner avant de réussir. 

Certes un projet peut prendre du temps, parfois des années, mais la persévérance ça paye =). 
 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 

 

Les réalisations de Mike118  

 

 

 


#6 Forthman

Forthman

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 158 messages
  • Gender:Not Telling
  • Location:Montauban (82)

Posté 02 mai 2020 - 12:43

Il y a des choses qui devraient t'intéresser sur cette chaîne  : https://www.youtube....S5Fpxv0XniGv2FQ

(en plus son auteur n'est pas loin ;) )



#7 XB2000

XB2000

    Nouveau membre

  • Membres
  • 25 messages

Posté 02 mai 2020 - 03:02

Merci, je connaissais déjà cette chaîne, elle est très intéressante, c'est bon à savoir par contre que l'auteur n'est pas loin ^^

 

quand j'ai commencé à lire je me suis dit "haha aucune chance c'est bien trop poussé" puis j'ai vu que tu avais déjà commencé et ça à l'air tellement chouette! 

 

Merci, c'est pour ça que j'ai bien diviser sa construction, car c'est très poussé dit comme ça, mais si on arrive à décomposer en étapes plus simples, ça devient possible.

 

Comme je dis souvent : 

Il faut croire en soit et ne jamais laisser qui que ce soit se convaincre que quelque chose est impossible. Car il n'y a que vous qui puissiez choisir d'échouer, car échouer c'est abandonner avant de réussir. 

Certes un projet peut prendre du temps, parfois des années, mais la persévérance ça paye =). 
 

 

J'ai pour ma part une variante avec ce projet. Car il s'agit de fabriquer un robot fantastique, un vrai Terminator qui serait capable de se faire passer pour un humain (en comptant aussi sur l'effet de surprise, un masque en latex et des lunettes de soleil).

Mais même si j'échoue à faire ce robot fantastique, il y a quand même de grande chance que je fasse au moins un robot très chouette. Je serais déjà content si j'arrive à faire la moitié de ce que j'ai dit.

J'espère faire le prototype en 4 ans pour coller à une phrase du héro dans le premier film de 1984 : "Non, [les Terminators] n'existent pas encore, pas avant 40 ans.", donc 2024 pour avoir un prototype aux fonctions basiques.

 

Pour ceux que ça intéressent, un Australien a fabriqué en fonderie alu une grosse marionnette d'endosquelette de Terminator : https://youtu.be/Am3ZuMiCe7A

 

Et un anglais en fait un autre robot en alu : https://youtu.be/67sREK3QOqE



#8 Forthman

Forthman

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 158 messages
  • Gender:Not Telling
  • Location:Montauban (82)

Posté 02 mai 2020 - 04:43

De mon point de vue, le plus gros problème va être au niveau des actionneurs et de la batterie, qui à l'heure actuelle, ne rentreront pas dans la structure

(à moins de faire quelque chose d’extrêmement léger, et encore...) mais comme il te reste encore 9 ans pour le faire, qui sait, on aura peut-être inventé de nouvelles choses ;)



#9 XB2000

XB2000

    Nouveau membre

  • Membres
  • 25 messages

Posté 02 mai 2020 - 07:11

On verra bien, pour encore un bon moment il sera statique.

 

Petits test :

 

Plus de détails plus tard.



#10 XB2000

XB2000

    Nouveau membre

  • Membres
  • 25 messages

Posté 07 mai 2020 - 06:51

schéma1.png

 

L'audio c'est des prises Jack branché sur la platine de prototypage et dont un des canaux est relié à l'Arduino (je sors le montage de ce forum : https://forum.arduin...?topic=476900.0)

 

Donc les Joystick et la DEL sont sur l'alimentation de l'Arduino, les servo-moteurs sont alimentés par quatre piles 1,5 V.

 

Code Arduino pour faire bouger la machoire et le cou avec les joysticks (donc vidéo "Test servos" du premier message) :

#include<Servo.h>
/* Créer un objet Servo pour contrôler le servomoteur */
Servo MVD; /* machoire vertical droit */
Servo MVG; /* vertical gauche */
Servo MHD; /* machoire horizontal droit */
Servo MHG; /* horizontal gauche */
Servo C1; /* cou 1 */
Servo C2;/* cou 2*/

int Mx_axis;
int My_axis;
int Cx_axis;
int Cy_axis;

int MVD_val;
int MVG_val;
int MHD_val;
int MHG_val;
int C1_val;
int C2_val;

// Définition de la constante
const int broche2 = 2; // Définition de la broche numéro 2.

void setup()

{

pinMode(A0,INPUT);
pinMode(A1,INPUT);
pinMode(A2,INPUT);
pinMode(A3,INPUT);

pinMode(broche2, OUTPUT); // Intialisation de la broche numéro 2 (numérique).

  // Attache le servomoteur à la broche
  MVD.attach(6); /* machoire vertical droit */
  MVG.attach(5); /* vertical gauche */
  MHD.attach(9); /* machoire horizontal droit */
  MHG.attach(3); /* horizontal gauche */
  C1.attach(10); /* cou */
  C2.attach(11); /* cou */


}

void loop()

{

digitalWrite(broche2, HIGH);   // Etat logique haut 1 (5 volts)     
  
Mx_axis=analogRead(A0);
My_axis=analogRead(A1);
Cx_axis=analogRead(A2);
Cy_axis=analogRead(A3);

MVD_val=map(Mx_axis,512,1023,0,180);
MVG_val=map(Mx_axis,512,1023,180,0);
MHD_val=map(My_axis,0,1023,105,70);
MHG_val=map(My_axis,0,1023,120,80);
C1_val=map(Cx_axis,0,1023,0,180);
C2_val=map(Cx_axis,0,1023,0,180);


MVD.write(MVD_val);
MVG.write(MVG_val);
MHD.write(MHD_val);
MHG.write(MHG_val);
C1.write(C1_val);
C2.write(C2_val);

}

Code Arduino machoire asservie à la prise Jack (les deux vidéos de mon message précédent), j'ai repris et modifié un code pour le robot InMoov : https://quai-lab.com...obot-humanoide/

// --------------------------------------
// Seb last change 28/08/2016
// 
// Synchronize InMoov mouth with Audio voice
// IN : Audio signal from PC/tablet...
// OUT :  Servo PWM 
// -------------------------------------
#include <Servo.h> 

Servo MHD; /* machoire horizontal droit */
Servo MHG; /* horizontal gauche */
Servo C1;
Servo C2;

int My_axis;
int Cx_axis;
int Cy_axis;

int MHD_val;
int MHG_val;
int C1_val;
int C2_val;

// Définition de la constante
const int broche2 = 2; // Définition de la broche numéro 2.


/* Sampling parameters */
uint32_t _interval; /* Interval between two consecutive ADC reading cycles in us */
const uint16_t _frequency=8000;
uint32_t _lastTime;
const uint16_t _samples=64;
uint8_t _vData[_samples];
uint8_t _bufferIndex =0;

// --- for servo mouth ---
Servo mouthServo;
int mouthPos;
Servo mouthServo1;
int mouthPos1;

#define AUDIO_PIN  5 // Pin for audio signal analog pin A0 ... AX
#define MOUTH_PIN 6 // Pin for Servo Motor
#define MOUTH_PIN1 5 // Pin for Servo Motor

// --- My InMoov Airwin parameter : need to be change for your InMoov else can break something...
#define MOUTH_MIN 0 // Servo pos mouth close min
#define MOUTH_MAX 180 // Servo pos mouth max open
#define MOUTH_MIN1 180 // Servo pos mouth close min
#define MOUTH_MAX1 0 // Servo pos mouth max open


// Auto-calibration de la plage RMS max (depend on the volume, audio signal etc...)
uint16_t rmsMax=0;
uint16_t rmsMin=500;

unsigned long startMillis;

void setup(void)
{
 
pinMode(A1,INPUT);
pinMode(A2,INPUT);
pinMode(A3,INPUT);
 
  
  
My_axis=analogRead(A1);
Cx_axis=analogRead(A2);
Cy_axis=analogRead(A3);

 
 
pinMode(broche2, OUTPUT); // Intialisation de la broche numéro 2 (numérique).

  // Attache le servomoteur à la broche
  MHD.attach(9); /* machoire horizontal droit */
  MHG.attach(3); /* horizontal gauche */
  C1.attach(10); /* cou */
  C2.attach(11); /* cou */
  
  
  // calcul la durée des intervals en us F = 1 / t => t = 1 / F en secondes => x 1000 000 pour les us
  _interval=1000000/_frequency;
  /* Initialize the ADC */
  InitADC(AUDIO_PIN);

  mouthServo.write(MOUTH_MIN); // Bouche fermée au démarrage
  mouthServo.attach(MOUTH_PIN); 
  delay(30);
  mouthServo1.write(MOUTH_MIN1); // Bouche fermée au démarrage
  mouthServo1.attach(MOUTH_PIN1); 
  delay(30);
    
  /* Console */
  Serial.begin(115200);
}

void loop(void)
{
  
  task_jaw();
  task_led();
  /*task_joystick();*/
}


void task_jaw () {
  startMillis=millis();

  
   AcquireData();
  
   uint16_t rms = ComputeRMS();
  
   uint16_t smooth = rms;

  // Detach if 2 second without mouth move +2 for small noise...
  if (smooth<(rmsMin+2) && (millis()-startMillis>2000)) {
    mouthServo.detach(); 
    // Serial.println("detach");
    mouthServo1.detach(); 
    // Serial.println("detach");
  } else {
     if (!mouthServo.attached()) mouthServo.attach(MOUTH_PIN); 
     mouthPos=map(smooth,rmsMin,rmsMax,MOUTH_MIN, MOUTH_MAX); 
     mouthServo.write(mouthPos); 
     if (!mouthServo1.attached()) mouthServo1.attach(MOUTH_PIN1); 
     mouthPos1=map(smooth,rmsMin,rmsMax,MOUTH_MIN1, MOUTH_MAX1); 
     mouthServo1.write(mouthPos1); 
     Serial.println(millis()-startMillis);
     startMillis=millis();
     // Serial.print("Servo=");Serial.println(mouthPos);
  }
       
   //Serial.println(smooth);
    //Serial.print("Rmsmin=");Serial.print(rmsMin);Serial.print("Rmsmax=");Serial.println(rmsMax);
}

void AcquireData() {
  _lastTime = micros();
  for(uint16_t i=0;i<_samples;i++) {
    while ((micros() - _lastTime) < _interval);
    _vData[i]=ADCRead();
    _lastTime+=_interval;
  }
}
  
/* Initilalize analog read in fast mode and low resolution */
uint8_t InitADC(uint8_t channel)
{
  /* Reset register contents */
  ADCSRA = 0;
  ADCSRB = 0; 
  ADMUX = 0;
  /* Set voltage reference */
  // comment to go to 3.3 Volt ref or 5Volt
  ADMUX |= (1 << REFS0) | (1 << REFS1); /* INTERNAL  1.1 V */
  
  /* left align ADC value to 8 bits from ADCH register */
  ADMUX |= (1 << ADLAR);
  /* Set channel */ 
  ADMUX |= channel;
  /* Set pre-scaler */
  ADCSRA |= (1 << ADPS1);
  /* Enable ADC */
  ADCSRA |= (1 << ADEN);
  /* Start first conversion */
  ADCSRA |= (1 << ADSC); 
  /* Wait for conversion */
  while (ADCSRA & (1 << ADSC));
}

uint16_t ComputeRMS() {
  // compute average
  uint32_t average=0;
  for(uint16_t i=0;i<_samples;i++) { 
    average+=_vData[i];
  }
  average/=_samples;
  //compute pseudo rms
  uint32_t rms=0;
  for(uint16_t i=0;i<_samples;i++) { 
    if (_vData[i]>=average) {
        rms+=(_vData[i]-average);
    } else {
        rms+=(average-_vData[i]);
    }
    rms= ((rms * 500) / _samples);

    // keep min / max for RMS value (needed to map on servo angle)
    rmsMax=max(rms,rmsMax);
    rmsMin=min(rms,rmsMin);
    
    return(rms);
  }  
}

/* Simple analog to digital conversion */
uint8_t ADCRead(void)
{
  /* Start conversion */
  ADCSRA |= (1 << ADSC); 
  /* Wait for conversion */
  while (ADCSRA & (1 << ADSC));
  /* Returned ADC value */
  return(ADCH);
}

  
void task_led() {    
   
 digitalWrite(broche2, HIGH);   // Etat logique haut 1 (5 volts)     
}

void task_joystick() {

MHD_val=map(My_axis,0,1023,105,70);
MHG_val=map(My_axis,0,1023,120,80);
C1_val=map(Cx_axis,0,1023,0,180);
C2_val=map(Cx_axis,0,1023,0,180);


MHD.write(MHD_val);
MHG.write(MHG_val);
C1.write(C1_val);
C2.write(C2_val);
  
}

Avec ce code-ci les joysticks ne marchent pas, j'ai pas trouvé ce qui bloque...

 

Prochainement je vais modifier le montage. Je vais modifier la cinématique du cou (j'avais mis deux servos tirant des fils pour simuler des pistons, mais le résultat est pas bien terrible) et tester de lui faire bouger la machoire en JawDuino : http://buttonbanger.com/?page_id=137

Pour voir si c'est plus satisfaisant que mon système précédent avec la prise Jack directement connecté en entré d'Arduino.



#11 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 935 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 07 mai 2020 - 07:28

Donc si j'ai bien compris ton problème, dans le second code que tu as posté, si tu décommentes ta fonction " task_joystick " dans le loop, toi tu voudrais que ça fasse bouger les servo en fonction de tes joystick mais ça ne le fait pas. 

Et tous le reste du code marche comme il est censé marché selon toi. C'est bien ça ? 

Si oui commente le contenu de ta fonction temporairement, et met un serial print dedans pour déjà vérifier que tu rentres dans ta fonction =)

 

Si c'est bien le cas on va faire des essais au fur et à mesure pour résoudre ton problème =)


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 

 

Les réalisations de Mike118  

 

 

 


#12 XB2000

XB2000

    Nouveau membre

  • Membres
  • 25 messages

Posté 09 mai 2020 - 08:52

Pour le moment je vais faire les modifications dont j'ai parlé pour voir ce que ça donne.



#13 TheThugMOB_

TheThugMOB_

    Nouveau membre

  • Membres
  • 2 messages

Posté 14 mai 2020 - 10:55

je pense que tu vas devoir investir dans une arduino mega 2560 si tu continues parce que la tu arriveras vite au nombre limite de tes pins je pense ^^



#14 XB2000

XB2000

    Nouveau membre

  • Membres
  • 25 messages

Posté 15 mai 2020 - 10:34

Je pense que pour l'instant mon Uno suffira pour cette version de la tête. Je verrais pour la version suivante. Pour le prototype complet je pense même mettre plusieurs Arduino pour contrôler les membres et la marche du robot. ça changera peut-être, mais je pense organiser les choses de la manière suivante : Arduinos pour gérer directement les membres et les fonctions "simples" de l'androïde, le Raspberry pour diriger le tout et un Jetson Nano ou en tout cas un accélérateur IA pour les fonctions d'apprentissage.



#15 XB2000

XB2000

    Nouveau membre

  • Membres
  • 25 messages

Posté 15 juillet 2020 - 09:57

Je suis en train de reconcevoir son cou et la motorisation de la mâchoire pour simplifier et amélioré via des pièces imprimer en 3D. J'ai été méga occupé depuis le déconfinement, mais là pour les prochains mois je vais être très libre et je vais pouvoir y consacrer plus de temps.

En tout cas depuis mon dernier message j'ai des notions de FreeCad et Python...

J'ai aussi récupérer des mains/avant-bras que je vais motorisé, et concevoir le reste des bras et les épaules qui sont assez complexes. Mais ça c'est un autre sujet.

 

Faut que j'avance, celui d'AndysMachines a les yeux qui bougent : 

 

Niveau programmation je commencerais par lui faire faire du suivi de visage et de la reconnaissance faciale, qu'il puisse dire "Bonjour Machin" en te regardant dans les yeux ^^





Répondre à ce sujet



  


0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users