Aller au contenu


Little french kev

Inscrit(e) (le) 04 sept. 2019
Déconnecté Dernière activité nov. 04 2021 08:45
-----

Sujets que j'ai initiés

voiture télécommandée autonome

07 juillet 2020 - 09:51

Avant d'etre confiné, avec quelques-uns de mes collegues de travail on profitait d'une zone vide du bureau pour joué avec des voitures téléguidées (desfois on travaillait aussi :D ) . En général on posait quelques obstacles ou bouts de scotch au sol pour créer un circuit . Les voitures étaient équipé pneus en plastique dur pour pouvoir drifter les virages .

Le but de ce projet est donc de créer une voiture télécommandée autonome . L'idée est de pouvoir enregistrer la position des obstacles mis au sol et faire en sorte que la voiture face le tour du circuit d'elle meme (Le plus vite possible) .  Je pense utilisé une IMU pour pouvoir calculer la position, direction et vitesse de la voiture par rapport au circuit .

Comme je n'avais pas envie de mutiler la voiture que j'ai déjà, j'ai décidé d'en concevoir une que je peux imprimer . J'ai privilégié la simplicité car je vais surment utilisé de l'apprentissage par renforcement sur Unity pour apprendre à une IA à conduire, il me faut donc quelque chose qui soit le plus "facile" possible a simuler .
Je suis donc parti sur une propulsion sans différenciel, sans suspension et avec aucune géométrie (carrossage, pincement, Ackermann....) . La géométrie de la crémaillaire (meme si il y en a pas ici) est faite de manière à ce que l'angle des roues avants soit égal à l'angle du servo de direction  .
Au niveau des proportions (empattement, voie, diamètre des roues...), j'ai prix les dimensions d'une Nissan silvia S15 et est tout mis à l'échelle 1/10 .

 

Pour ce qui est des differents composants, j'ai décidé d'utiliser ce qui trainait dans mes tiroirs . La seul chose que j'ai acheté est une courroie pour la transmission . Je ne sais pas trop si le moteur sera assez puissant pour ce que je veux faire .

Fichier joint  3d_model.jpg   41,43 Ko   88 téléchargement(s)

Les premières pièces ont été assemblées et montées . Jusque la, tout va bien !

Fichier joint  steering_gif.gif   3,5 Mo   77 téléchargement(s)


Un jeu qui apprend à se jouer lui-même

18 avril 2020 - 03:43

Je vais commencer par poster la vidéo final du projet avant de commencer a blablater . Elle est en anglais mais sur la deuxième moitié de la vidéo on voit le processus d'apprentissage de l'IA ce qui ne nécéssite pas forcement de comprendre quoi que ce soit à la voie off :

 

Depuis un petit moment je me balade entre plusieur hobbys vagement en relation les uns avec les autres, l'apprentissage machine, le devellopement de jeux et la mécatronique .

 

J'ai donc eu l'idée de créer un jeu qui apprendrai à se jouer lui-même a l'aide d'une manette de Xbox . je me suis dis que ca pourrait etre un projet sympa qui combinerait trois choses que j'aime .

 

Avant d'aller plus loin . Oui, je sais que dans ce projet j'utilise un methode completement inappropriée pour le problème que j'éssaye de résoudre ! Un bon vieux controller PID aurai fait largement l'affaire et aurai surment meme été meilleur . J'ai decidé d'utiliser un réseau de neurones parce que je voulais voir comment il allait s'adapter à tout les défauts liés à un controlleur physique (jeux entre les pièces, inertie des pièces, calibration imparfaite...)

 

Fichier joint  network.jpg   73,78 Ko   94 téléchargement(s)

 

LE PLAN INITIAL :
 

Je voulais que ce projet soit assez rapide sans avoir à faire face a de grosses inconnues, j'ai donc décidé de réutiliser des compétences que j'avais déjà développées au cour de projets précédents . Je pensais que j'aurai fini en deux jours...lol

 

Pour le jeux et l'apprentissage machine, ca serait donc fait sur Unity avec le 'ML-agents toolkit' aussi développé par Unity . J'étais déjà familier avec ces deux éléments meme si j'ai été assez surpris de voir à quel point ils avaient évolué depuis la dernière fois que je les avais utilisé .

 

Fichier joint  UNITY.png   14,37 Ko   90 téléchargement(s)

 

Le choix du jeu s'est fait très tot, il fallait quelque chose qui puisse se controller avec un minimum de button pour garder la partie physique du projet assez simple .

 

Le 'ML-agents toolkit'  contient quelques examples dont un qui pouvait facilement etre utilisé comme un jeu ne nécéssitant qu'un seul joystick, l'exercice du 'ball balancing' .

 

Fichier joint  UNITY BALANCING BALLS.jpg   22,98 Ko   82 téléchargement(s)

 

LE ROBOT.
 

J'ai commencé par créer un simple bras qui bouge le joystick droit de la manette . J'avais quelques servos MG-90 et un arduino nano qui trainaient dans un tiroir, c'est donc ce que j'ai utilisé .

 

La seule chose à laquelle j'ai du faire attention était de bien aligner le point de pivot du joystick avec l'axe des servos histoire de rendre la tache plus simple au niveau de la programmation du arduino .

 

Fichier joint  parts.jpg   113,42 Ko   98 téléchargement(s)

Fichier joint  assembled.jpg   98,92 Ko   118 téléchargement(s)

 

L'étape suivante était d'écrire un programme pour le arduino qui permetterait de controller le joystick .
Une scène basique fut aussi créée pour permettre la calibration des mouvements .

 

Fichier joint  calibration.jpg   112,08 Ko   123 téléchargement(s)

 

Maintenant, il était temps de faire en sorte que le réseau de neurones puisse prendre le controle de la manette . La scene unity fut modifiée pour permettre au joystick droit d'etre controllé par celui de gauche .
Le joystick gauche est utilisé pour simuler les données de sorti du réseau de neurones, ceci permet de vérifier que la communication entre le PC et le arduino fonctionne correctement .

 

Fichier joint  left stick.png   1,07 Mo   121 téléchargement(s)

 

LE JEU .

Comme mentionné plus tot, j'ai donc recréé le jeu d'équilibrage de balle tout en y ajoutant un peu de difficulté . La première étant que la balle doit etre positionnée le plus près d'une cible se trouvant sur la platform . Le seconde étant que la balles est lancée d'une position et à une vitesse aléatoire en début de partie .

J'ai aussi éssayé de créer quelques magnifiques textures (je dis bien éssayer!)

 

Fichier joint  game.png   569,94 Ko   125 téléchargement(s)

 

L'APPRENTISSAGE .

Il était donc temps de commencer l'apprentissage .
Je vais pas rentrer en détail dans l'apprentissage par renforcement parce que c'est un sujet vaste et compliqué mais ici je vais expliquer très brièvement  ce qu'il va se passer durant cette étape .

1 - On va prendre notre IA, appelé agent . Il va observer l'état du jeu . Ici il va collecté la vitesse et position de la ball, la position de la cible et l'inclinaison de la platform .

2 - A partir de cette observation il va accomplir une action . Bouger le joystick .

 

3 - Suivant le résultat de cette action il va recevoir une punition (score negatif) si la balle est tombée, ou une récompense (score positif) si la balle est toujours sur la platform, plus la balle est proche de la cible plus la récompense est grande .

 

Fichier joint  cycle.png   244,42 Ko   120 téléchargement(s)

 

Le cycle va se répéter jusqu'à ce que l'IA apprend a prendre les décisions lui perméttant de gagner un score maximum .

 

Arrivé à ce point du projet je pensais que je n'aurai qu'à lancer l'entrainement et que par miracle j'obtienerai un robot en parfait état de marche quelques heures plus tard...J'avais tort .

 

Après la première session d'entrainement, l'IA avait en effet appris à jouer mais elle était très nerveuse .

 

J'ai donc relancé une nouvelle session, cette fois ci avec une récompense suplémentaire pour la souplesse .

Le résultat était un peu meilleur mais loin d'etre extraordinaire .

 

Un des gros facteur limitant en incluant la manette durant l'entrainement est que je ne pouvais entrainer qu'un seul agent à la fois et à vitesse réel .

 

J'ai donc opté pour une nouvelle stratégie, diviser l'apprentissage en deux . La première partie se fairait en excluant la manette, ceci me permettrai d'entrainer plusieurs agents a la fois et en accéléré . En deuxième partie je réintroduirai la manette à l'entrainement pour laisser le temps à l'IA 'd'apprendre' la manette .
Cette technique me permettrai de tester differents systemes de punitions/récompenses et aussi de tester différents paramètres liés au réseau de neurones lui meme comme le nombre de couches, nombre de neurones...etc . Ceci me permettrait d'économiser plusieurs heures .

 

Fichier joint  stack.png   588,97 Ko   128 téléchargement(s)

 

La partie de l'entrainement completement virtuelle s'est très bien passé et m'a permit de trouver de bon paramètres . Maheureusement au moment de réintroduire la manette, il était clair que quelque chose ne fonctionnait pas correctement, la balle était constament jetée hors de la platform, la bonne nouvelle était que cela était fait de manière très souple sans aucune nervosité .
Je pense que l'érreur vient de mon code et pas de l'IA elle-meme mais je n'ai pas été capable de la trouver malgré le fait que je suis quasiment sure que c'est quelque chose d'extrement simple . A ce moment la, je savais que j'avais de bon parametres donc je pris la decision de recommencer l'entrainement avec la manette depuis le debut .

 

Après une dizaine d'heures d'entrainement, j'avais enfin un résultat avec lequel j'était satisfait!!!
 


mes projets inclassables

09 décembre 2019 - 12:45

Projet 'machine puissance 4' : https://www.robot-ma...ables/?p=107183

 

J'ai pas mal de petits projets difficiles à classer en cour, je me suis dis que ca pourrait etre bien de créer un sujet ou les regrouper .

Voici ma dernière réalisation (Je ne suis pas sur que ca soit vraiment considéré comme un robot mais j'imagine qu'on s'en rapproche un peu ) . Une machine a trier les Skittles, c'est un sujet qu'on retrouve assez souvent et j'ai décidé de le revisiter à ma sauce .
Je me suis juste fixé comme contrainte de faire un machine assez compacte .

 


Tourelle Nerf bluetooth

06 septembre 2019 - 12:55

Bonjour tout le monde !

Voici mon projet de turret Nerf bluetooth . Je l'ai commencé il y a deja quelques temps et je n'ai pas trop documenté mes avancées jusqu'à maintenant .
Je ne pensse pas que le concept sois trop difficile a saisir .
On a un chargeur de 8 fléchettes dont les mouvements sont controllés par 2 servos montés sur un trépied .
A la base du chargeur on trouve 2 rouleaux entrainés par des moteurs type 130 . Quand la tourelle recoit l'ordre de tirer un servo pousse une des fléchettes dans les rouleaux ce qui la propulse .

Le tout est controllé à distance en bluetooth . J'ai créé une appli Android à l'aide du MIT app inventor et aussi un petit logiciel en python pour pouvoir controller la tourelle depuis un PC .

Apres avoir imprimé un premier prototype, j'ai du rectifier quelques petits problemes :
 
Voila la 3D final :
Fichier joint  turret_CAD.jpg   59,55 Ko   99 téléchargement(s)
 
Le prototype :
turret.jpg
 
Dans cette video je montre la modé 3D et explique un peu le fonctionnement .

 
Le prototype en action, encore quelques améliorations a faire au niveau du cablage mais l'appli fonctionne correctement :yahoo: :

 
 
 

Salut tout le monde!

04 septembre 2019 - 01:12

Bonjour tout le monde !

Je m'appelle kevin, 32 ans aussi surnommé little french kev .

 

Mon point fort est la conception 3d (c'est mon metier) .
Mes points faibles sont plus tout ce qui touche a l'informatique et la programmation mais je m'améliore doucement .  :)

J'utilise principalement python et le C/C++ pour l'arduino .

Apres une discution avec quelques collegues de travail à qui j'ai montré quelques unes de mes réalisations, ils m'ont suggéré de partager avec plus de monde, car ils penssaient que certaines personnes pourrai etre intéresser .
 

Je me suis donc décidé à créer un site et à partager mes projets sur les forums spécialisés (mon site : https://www.littlefr...ev.com/?lang=fr) .

 

voici quelques examples:

 

tourelle nerf Bluetooth (projet en cours) .

Fichier joint  turret.jpg   120,75 Ko   193 téléchargement(s)

 

camera traqueuse de visages (tutos et fichiers disponbles gratuitement sur mon site et chaine youtube!!!)   

--->    https://www.littlefr...ra-mini?lang=fr    <---

 

Fichier joint  blob_0SUq8Cpsci.jpg   39,14 Ko   125 téléchargement(s)