Table des matières:

Robot chaotique autodidacte : 3 étapes
Robot chaotique autodidacte : 3 étapes

Vidéo: Robot chaotique autodidacte : 3 étapes

Vidéo: Robot chaotique autodidacte : 3 étapes
Vidéo: A Taste of Tal'Dorei | Critical Role | Campaign 3, Episode 25 2024, Novembre
Anonim
Robot chaotique autodidacte
Robot chaotique autodidacte

Êtes-vous intéressé par l'apprentissage automatique, l'IA et les robots ? Vous n'avez pas besoin de travailler dans une université chic. Ceci est une description de mon robot chaotique. C'est un robot très simple pour montrer comment utiliser le code d'auto-apprentissage et comment l'implémenter dans une plate-forme Arduino, dans ce cas un Arduino due. C'est une plateforme très bon marché !

Le code fait évoluer le robot pour que le robot apprenne à ramper. Il reçoit un retour de la souris qui est traînée derrière. Le code est "génétique". Cela signifie qu'un certain nombre d'individus sont testés et que les meilleurs sont conservés et auront des bébés. Cela signifie que le code évolue de manière évolutive.

Étape 1: Matériel AKA le Robot

Matériel AKA le Robot
Matériel AKA le Robot
Matériel AKA le Robot
Matériel AKA le Robot
Matériel AKA le Robot
Matériel AKA le Robot

Vous avez besoin:

- 1 Arduino dû

- 8 microservo

- 1 souris PS/2

- 1 levier de niveau

- une variante d'un bouclier de capteur ou similaire, je me suis fatigué du bouclier de capteur et j'ai soudé le mien.

-fils

-alimentation externe 5V pour les servos

- quelques morceaux de ferraille, de la colle et du fil d'acier. Et du ruban adhésif !

Alors mettez le Due sur le sol. Mettez les servos dans un anneau autour d'elle. Assemblez-les avec de la ferraille, de la colle et du fil. C'est la partie chaos ! Comme il est chaotique dans sa conception, il est imprévisible de déterminer comment se déplacer pour le faire ramper. C'est pourquoi le code d'auto-apprentissage est la voie à suivre !

Astuces: utilisez des pièces métalliques assez lourdes, cela facilite les déplacements du robot.

Connectez les servos au due, dans mon cas ils sont connectés à D39, 41, 43, 45, 47, 49, 51, 53.

Connectez les servos à l'alimentation externe 5V. Pour cela, construisez une sorte de bouclier, ou utilisez un bouclier de capteur ou similaire. N'alimentez PAS les servos à partir de la broche due 5V, cela ne suffit pas, Due brûlera. J'ai utilisé une petite carte prototype pour distribuer le 5 V à tous les servos. Cette carte contient également le décaleur de niveau pour l'horloge de la souris PS/2 et les lignes de données. La carte alimente également la souris en 5V. N'oubliez pas de connecter la terre de l'alimentation externe à la terre Arduino ! le schéma montre comment tout connecter.

Connectez le PS/2 à l'alimentation (5V) et à la terre. Connectez l'horloge et la ligne de données du PS/2 à la Due via un décaleur de niveau. (en raison de 3,3 V, PS/2 de 5 V). Connectez l'horloge sur D12 et les données sur D13.

Pour plus de détails sur le protocole PS/2, il s'agit d'un très bon instructable:

www.instructables.com/id/Optical-Mouse-Od…

La librairie PS/2 de jazzycamel que j'ai utilisée:

Étape 2: le code

Le code
Le code

Au début, permettez-moi de dire: je ne suis PAS un programmeur. Certaines parties sont très étendues, un programmeur expérimenté pourrait bien sûr les raccourcir et ainsi de suite.

Le code est autodidacte et c'est le cœur du projet. C'est la partie amusante de celui-ci! Cela signifie que le robot évolue et va de mieux en mieux, dans ce cas il s'améliore en rampant. Ce qui est étonnant à ce sujet, c'est que le robot évoluera selon ce que vous lui donnerez en retour. Dans ce cas, il fait glisser une souris PS/2 et plus la souris est traînée longtemps, plus elle obtient de points.

Cela signifie également que vous pouvez utiliser ce code pour entraîner votre robot à faire autre chose, à condition qu'il soit mesuré et renvoyé au robot !

Comme vous pouvez le voir sur les images, la souris est traînée sur un cordon fin. Au début, il a été traîné dans le câble de la souris. Cependant, le câble est assez rigide, le robot a donc appris à secouer la souris au lieu de la faire glisser. Le tremblement a produit des points forts…

Le code utilise 50 individus. Le cœur de ceci est un tableau de 50x50 octets.

Un individ est un tableau d'octets. Lorsque l'individu est utilisé pour exécuter le robot, cet individu est envoyé à une fonction dans le code appelée "tolken".

Au début d'une course, il y a 8 variables m1, m2, m3, m4, m5, m6, m7 et m8 (une pour chaque servo). Dans ce robot, ils ont tous des valeurs de départ constantes. Dans "tolken", les mś sont transformés en une boucle case/swich en fonction des valeurs de l'individu. par exemple une valeur de "1" exécute ce qui suit: m1 = m1 + m2.

Si un individu est: 1, 2, 3, 0, 0, 0, 0….. alors le mś sera transformé de la manière suivante:

m1 = m1 + m2;

m1 = m1 + m3;

m1 = m1 + m4;

Tolken est une liste de 256 opérations mathématiques différentes, donc chaque valeur possible du tableau individs représente un changement mathématique des m valeurs.

Le processus tolken est effectué 4 fois, avec une lecture entre chaque tour, générant quatre codes moteurs différents pour chaque "m". Les codes moteurs sont les valeurs qui sont ensuite envoyées aux servos.

A chaque étape de l'évolution, 4 individus s'affrontent en rampant. Les deux meilleurs individus seront les parents de deux bébés, les bébés remplaceront les deux pires individus. Lorsque les bébés sont créés, une épissure du « code génétique » d'un parent est échangée contre une tranche de l'autre parent, ce qui crée deux nouveaux individus.

Si aucun individu ne fonctionne du tout, la mutation des individus aura lieu pour en générer de nouveaux.

Vous pouvez trouver le code sur GitHub:

Étape 3: Comment l'entraîner ?

C'est la partie délicate. Afin de vous entraîner correctement, vous devez le "réinitialiser" après chaque course. Cela signifie que vous devez le mettre dans la même position à chaque fois.

J'ai mis quelques points de contrôle à l'intérieur du code pour m'assurer que le robot est dans sa position de départ.

Alignez donc le robot et laissez-le fonctionner.

Il teste 4 individus puis il choisit les 2 meilleurs pour être parents. Après avoir remplacé le pire par les bébés, il imprime des données sur les performances des individus. Il imprime également le tableau 50x50. Il est sage de copier cela dans une feuille Excel ou similaire. (ou écrivez du code de besoin dans le traitement) Si le Due se réinitialise (cela se produit pour diverses raisons), vous ne perdrez alors pas votre travail d'entraînement. Vous pouvez copier/coller le tableau dans le code et continuer à vous entraîner là où vous êtes parti.

Mon robot a appris à ramper après quelques heures. Téléchargez la vidéo pour la voir ramper. Il n'est pas allé dans la direction que je pensais !

Essayez également différents étages! Mon robot s'est mieux comporté sur un tapis en nylon.

Améliorations possibles:

1. Il serait préférable d'avoir un nano séparé pour lire la souris PS/2 et envoyer la distance traitée déplacée en série vers le nano. La lecture de ma souris PS/2 est un peu bancale. C'est la raison pour laquelle la souris lit/efface des parties du code.

2. une sorte de banc d'essai qui ramènerait le robot à sa position de départ accélérerait l'entraînement.

3. Je pense qu'il est sage de l'entraîner un peu plus lentement que moi. Un entraînement plus lent assure qu'il est entraîné "dans la bonne direction". La performance moyenne de plusieurs essais pourrait être une voie possible.

Conseillé: