Aller au contenu


yougo

Inscrit(e) (le) 28 juil. 2016
Déconnecté Dernière activité janv. 08 2021 12:10
-----

#112437 WALK-E, Crowdfunding sur Ulule, Soutenez nous !!!

Posté par yougo - 08 janvier 2021 - 12:12

Les moteurs tournent à 2ms/deg et la simulation est à temps reel. Les mouvements paraissent réalisables mais je vais pouvoir vérifier tout ça pour de vrai et tout casser très bientôt !




#111457 WALK-E, Crowdfunding sur Ulule, Soutenez nous !!!

Posté par yougo - 19 octobre 2020 - 11:31

Updates:
Après pas mal des tests pour avoir une marche qui est relativement stable et qui ne risque pas trop de détruire le robot je commence à avoir des résultats corrects (perfectibles mais corrects), pour rappel tout le contrôle du robot est 100% réalisé par un réseau de neurones entrainé grace à des méthodes de reinforcement learning comme expliqué plus haut.

 

 

Pour l'instant j'ai donc deux modes le mode "standby" qui maintient le robot au même point, et le mode "waypoint" qui amène le robot à un point [x, y], sur terrain plat pour le moment.
Ça fait du bien de voir le "bout tu tunnel" (il est encore long) je commençais à plus trop y croire honnêtement...


J'ai refait tout le design du robot entre-temps car il était pourri ça fera l'objet d'un autre post pour les curieux le code tourne sur jetson nano. Dans tous les cas je pense garder les pieds ronds, c'est certes plus dur mais ça me permet d'étudier le deep learning au service de la marche dynamique à son paroxysme, je peux déjà tranferer ce que j'ai apris pour faire marcher n'importe quel quadru via le reinforcement learning.

Je vais donc tester en vrai maintenant (tout en continuant d'améliorer les résultats en Sim), je prévois des difficultés énormes pour passer de la simulation à la réalité il va donc encore falloir patienter quelques mois pour la prochaine update mais je m'acharne. :dash2:



#105743 WALK-E, Crowdfunding sur Ulule, Soutenez nous !!!

Posté par yougo - 15 octobre 2019 - 09:03

Bonjour bonjour;

 

Avant de commencer j'aimerais excuser cette absence et ce manque de communication tout en vous prévenant que cela risque de rester comme cela pendant un petit moment encore. Les raisons sont purement personnelles et je ne veux pas les détailler pour le moment. En plus de ça j'ai la chance d'être maintenant en école d'ingénieurs en robotique et j'aimerais ne pas ratter mon diplôme, comprenez que cela rajoute un poids en plus dans la balance et enlève du temps pour travailler sur le projet.

Voilà,ceci dit, le projet est loin d'etre au point mort,donc permetez moi de vous informer sur l'avancement global ! :)

Niveau hardware, il y a eu peu d'avancées, une V2 a été designée mais pas encore n'imprime ni testée hors des simulations... Oui, maintenant il y a des simulations, beaucoup de simulations.

 

En fait c'est bel et bien au niveau software que tout avance depuis 1 an et surtout ces derniers mois. Après avoir fini de construire un environement de simulation de walk-e pour faire interface avec ROS-Gazebo et OpenAI gym, j'ai enfin pu lancer les premiers entrainements de réseaux de neurones pour le robot.

OpenAI gym est un formidable outil utilisé pour faciliter la comparaison et l'utilisation de différents algorithmes de re-enforcement sur un même environement. Je m'en suis donc servi pour comparer plusieurs algorithmes, Q-learning, Deep-Q-learning, Deep Deterministic Policy gradient.

Tous ces algorithmes fonctionnent sur une base commune, si le robot fait une action que l'on juge "bonne" il est récompensé par son action, et un (ou plusieurs) réseaux de neurones (ou tables, pour le Q learning), apprennent les actions qui font gagner des récompenses au robot et optimisent ces actions pour qu'il en gagne un maximum.Votre façon de juger si votre robot fait des bonnes actions est donc cruciale et va déterminer tout ce qu'il va apprendre.

 

Ex de mauvais jugement: J'avais fait une fonction très basique comme : si le robot avance de x mètres, le récompenser de x*10

résultats, le robot faisait un grand saut en avant pour arriver le plus loin possible... :blink:

En bref, l'AI que vous êtes en train d'éduquer va essayer toutes les solutions pour gagner des points, et si elle est récompensée alors qu'elle ne le devrait pas, elle va essayer d'optimiser une solution qui ne serait pas la solution optimale et vous perdrez simplement votre temps. Pour pallier à ça vous pouvez:

Designer une fonction de jugement la plus parfaite possible.

Ajouter une part d'aléatoire, le plus utilise étant le processus d'Ornstein-Uhlenbeck.

Choisir son algorithme est tout aussi important :

le premier n'était pas du tout concluant et je le déconseille fortement si votre probleme est relativement complexe, les tables de Q learning ne permettent pas de stocker assez d'information pour apprendre à marcher par exemple. Cependant il est simple et formateur et est une porte d'entree pour apprendre le reinforcement learning.

 

Le DQN a permis au robot de faire ses premiers pas", c'est aussi là qu'il a appris à se jeter le plus loin possible la tete la première. Je ne me suis pas beaucoup attardé sur le DQN et je suis passé sur le DDPG pour plusieurs raisons :

le DDPG a un énorme avantage sur le DQN, il permet au robot de deviner la valeur de tous les angles à chaque moment, là ou le DQN ne peut qu'incrémenter/décrémenter un seul angle et attendre le moment t+1 pour réajuster un autre angle. De façon plus mathématique Le DQN permet de prendre des décisions discrètes alors que le DDPG permet de prendre des décisions continues.

 

Si vous êtes curieux tous ces algorithmes sont passionnants et je conseille de vous renseigner là-dessus. Commencez par les tables de Q learning puis le DQN puis le DDPG, car ils sont tous plus ou moins une amélioration du précédent.

 

Je suis donc en train d'expérimenter avec cet algorithme, le fameux DDPG, en fait j'ai fini de l'implémenter, je m'assure que les paramètres que le réseau de neurones ne peut pas modifier par lui-même (hyperparametres), comme le nombre de couches dans le réseau, le nombre de neurones et l'intensité du processus de randomisation des actions soient optimales pour que le robot puisse apprendre comme il faut. En fait je suis en train d'automatiser ce processus pour pouvoir suivre mes cours plutôt que de passer mes soirées à essayer de deviner un set de nombres en espérant tomber sur la parfaite combinaison :unsure: .

 

Pour résumer grossièrement, on en est au stade ou le robot passe des journées à essayer d'apprendre à marcher dans une simulation, pour l'instant le record est de 3 pas avant de s'effondrer au sol.

.

Ceux qui nous suivent sur twitter ont déjà pu voit les premiers entrainements du robot en simulation. J'aimerais faire une vidéo (travaillée cette fois) pour présenter tout ça quand le robot marchera d'une façon moins aléatoire dans les simulations (bientot esperons ).

 

Merci encore a tous ceux qui soutiennent le projet et encore désolé du manque d'info, je peux vous assurer que je donne tout ce que j'ai pour ce projet. :heart:




#100523 Walk-e sondage

Posté par yougo - 02 décembre 2018 - 01:06

Fichier joint  23.10.2018 Quest_RobotMaker (Responses).zip   14,94 Ko   162 téléchargement(s)

 

 

Capture1.PNG

 

Capture2.PNG

 

Capture3.PNG

 

Capture4.PNG

 

Capture5.PNG

 

Capture7.PNG

 

Capture8.PNG

 

Capture9.PNG

 

Capture10.PNG

 

Capture11.PNG

 

Capture12.PNG

 

Capture13.PNG

 

Capture14.PNG

 

Capture15.PNG

 

 

 

 




#99912 WALK-E, Crowdfunding sur Ulule, Soutenez nous !!!

Posté par yougo - 07 novembre 2018 - 08:08

Salut, Merci!

 

Le crowdfunding est terminé, maintenant on fait tout pour que ca marche !




#99675 WALK-E, Crowdfunding sur Ulule, Soutenez nous !!!

Posté par yougo - 31 octobre 2018 - 04:04

Salut, 

Pour tous ceux qui n'auraient pas vu mais qui suivent ce sujet, il y a un questionnaire pour aider le projet juste ici : 

 

Le lien du sondage : 

https://goo.gl/sD4kDB 

 

Le post est ici si vous voulez en savoir plus :

https://www.robot-ma...walk-e-sondage/

 

 

Pour l'instant il y a juste 4 réponses, c'est un peu tristounet... Donc si vous avez un peu de temps n’hésitez pas a faire un tour dessus. 

Merci d'avance !




#99613 Walk-e sondage

Posté par yougo - 28 octobre 2018 - 08:47

Salut les Makers!
 
Nous aimerions prendre vos avis sur certaines question au sujet de la robotique et du projet Walk-e (https://www.robot-ma...-soutenez-nous/)
 
Pour faire simple nous avons réalisé un  questionnaire qui va nous servir à aiguiller le projet Walk-e dans le sens où vous aimeriez qu'il aille, pour continuer d'évoluer ensemble, dans un sens c'est un peu une partie "d'étude de marché".
 
Vu que les "études de marché" au niveau de la robotique, ça ne court pas les rues, nous vous partagerons la majorité des réponses ici même. (A l'exception probable de la partie 7/8 qui ne concerne que le projet Walk-e alors que les autres questions sont plus larges et concernent la robotique en général.)
 
sur ce, si cela vous intéresse, voici le lien pour participer :
 
 
Merci à tous pour le temps que vous allez consacrer à ce questionnaire  :thank_you:



#94271 Code de Servomoteur Pour Unity

Posté par yougo - 10 avril 2018 - 05:03

Non, tu as un GameObject qui flotte en forme de losange, tu cliques dessus et là tu peux modifier manuellement l'angle de chaque moteur !

 

Forcement le but n'est pas de faire ca manuellement mais avec du code c'est pourquoi dans le code il y a : 

    public void setAngle(int pvanglerech)
    {
        this.anglerech = pvanglerech;
    }

//permet de changer l'angle visé 

qui va te permettre d'agir sur le code a partir d'une autre classe ;)

 

j'ai aussi mis le GO 'head' en kinematic, ce qui explique pourquoi le robot flotte dans le vide.




#94225 Code de Servomoteur Pour Unity

Posté par yougo - 09 avril 2018 - 05:01

Salut les Makers !

 

Si vous avez déjà essayé de faire votre simulation sur Unity, vous savez probablement qu'il est super-simple de faire des moteurs, mais quand on veut des servos moteurs, ben c'est foutu... On doit les faire tout seul !
 
Ce fut le cas de mon équipe pour simuler notre robot walk-E
walkE.jpg
 
 
Du coup on vous partage ici ce qu'on a fait pour créer des servos moteurs sous Unity. 
 
Donc ci-dessous le code en C# : 
 
//@walk-e Team
//vous pouvez utiliser et modifier ce code comme bon vous semble 
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;

public class ScriptMoteur : MonoBehaviour
{

    public HingeJoint hingeJoint3D;
    GameObject mainServo;
    private JointMotor motor;

    [Tooltip("Angle of the target servo in degrees")]
    [Range(-180f, 180f)]
    public float targetServoAngle;

    private float anglerech; //angle que le moteur cherche à atteindre 

    //boucle qui va s'exécuter au lancement de la simu juste une fois 
    void Start()
    {
        anglerech = targetServoAngle;

        this.motor = hingeJoint3D.motor;
        //unity a déjà prévu d'ajouter des moteurs surs la jointure 
        //donc hingeJoint3D.motor est un moteur que l'on va pouvoir controler
        this.motor.force = 50;
        //on peut changer la force du moteur

        this.motor.targetVelocity = 0;
        //on peut changer la vitesse de rotation 

        this.motor.freeSpin = false;
        //pour le laisser en roue libre
        
        this.hingeJoint3D.motor = motor;
        // hingeJoint3D.motor = motor pour que hingeJoint3D.motor prenne bien les modifs de motors 
        //j'oubliais ca au debut donc forcement ca marche pas trop 

        this.hingeJoint3D.useMotor = true;
        //on lui dit qu'elle doit utiliser le moteur 


        Debug.Log("ServoMoteurEnAction");


    }

    //ici c'est une boucle qui tourne tout le long de le sium à chaque rafraîchissement de l'ecran
    void Update()
    {

        //on calcule la distance entre this.hingeJoint3D.angle (angle actuel) et l'angle cible 
        float distance = Mathf.DeltaAngle(this.hingeJoint3D.angle, targetServoAngle);

        //en fonction de ca on déduit le sens de rotation
        if (distance < 0)
        {
           motorActiv(-1);
        }
        else
        {
           motorActiv(1);
        }


        this.hingeJoint3D.motor = motor;
        //on oublie pas à la fin de void Update() de bien utiliser hingeJoint3D.motor = motor; sinon les modifs appliqués a motor ne s'appliquent pas 
    }


    //un setter si jamais on veut changer l'angle cible dans une classe externe
    public void setAngle(int pvanglerech)
    {
        this.anglerech = pvanglerech;
    }


    //fonction 'principale'   
    private void motorActiv(int way)
    {
        this.motor.targetVelocity = 100 * way;
        this.motor.force = 100;
        UpdateRotationLimits(way);
        hingeJoint3D.useLimits = true;
    }

    //on change juste les limites pour stoper le moteur 
    void UpdateRotationLimits(int direction)
    {
        var limits = new JointLimits();
        if (direction == 1)
        {
            limits.max = targetServoAngle;
            limits.min = 0;
        }
        if (direction == -1)
        {
            limits.min = targetServoAngle;
            limits.max = 0;
        }
        hingeJoint3D.limits = limits;
    }

 //ce qui suit fut trouvé sur internet (Open Source bien sur)  -------------------------

    float AngleFromAngle1ToAngle2Degrees(float angle1, float angle2)
    {
        angle1 = WrapAngleDegrees(angle1);
        angle2 = WrapAngleDegrees(angle2);
        if (angle2 - angle1 < 180 && angle2 > angle1)
        {
            return angle2 - angle1;
        }
        else if (angle2 - angle1 > 180 && angle2 > angle1)
        {
            return -(360 - (angle2 - angle1));
        }
        else if (angle1 - angle2 < 180 && angle1 > angle2)
        {
            return -(angle1 - angle2);
        }
        else if (angle1 - angle2 > 180 && angle1 > angle2)
        {
            return 360 - (angle1 - angle2);
        }
        else if (angle1 - angle2 == 180)
        {
            return 180;
        }
        else if (angle2 - angle1 == 180)
        {
            return 180;
        }
        return 0;
    }
                           

    // Convenience function to keep the angles in range from -360 to 360
    static float WrapAngleDegrees(float angle)
    {
        angle = (float)Math.IEEERemainder(angle, 360);
        if (angle <= 0)
        {
            angle += 360;
        }
        else
        {
            if (angle > 360)
            {
                angle -= 360;
            }
        }
        return angle;
    }








}

 
(J'ai essayé de commenter un max mais bon je peux pas tout expliquer il vous faudra des bases en C# et Unity quand même) 
 
Et ici un projet en .zip Unity déjà tout fait contenant un petit bipède déjà tout fait spécialement pour vous qu'il ne vous reste qu'à faire courir partout :
 
Fichier joint  RobotMaker.zip   4,2 Mo   641 téléchargement(s)
 
Pour ouvrir: décompressez , ouvrez unity, cliquez sur 'open', sélectionnez le dossier.  
Une fois ouvert cliquez dans assets sur la seule scene disponible.
 
 
En espérant que vous appréciez et que ca va vous servir  ;)



#94177 Fabriquer son premier bipède (pièges et astuces)

Posté par yougo - 08 avril 2018 - 08:59

Je ne suis pas vraiment neutre a propos du premier point, mais je me permet !

 

-je pense que tant que vous restez sur de la marche STATIQUE, vous pouvez faire des trucs cool quelque soit la taille de votre robot sans trop vous prendre la tette. 

 

-Pour moi il y a un point à ne pas négliger (sauf si vous prenez des plans qui existent) c'est la simulation 3D !

Je veux dire par la qu'il vaut mieux prendre 1 mois pour faire votre simu que de construire le robot tette baissée et au final voir que ca ne marche pas pour x raison (équilibrage du poids par exemple).

Ca peut paraître fastidieux mais je conseille vraiment !  Ca va peut-être vous sauver quelques €, et en plus vous serrez déjà prêt pour la simu quand vous voudrez faire votre prochain projet.




#94156 WALK-E, Crowdfunding sur Ulule, Soutenez nous !!!

Posté par yougo - 07 avril 2018 - 08:04

Salut, 

 

Une petite vidéo pour illustrer ce que je dis dessus faite au téléphone et avec un son pas fou, je m'en excuse d'avance  :pardon:

 

Ca me permet de reprendre avec vous depuis le début, ici vous pourrez donc voir la toute première étape du robot qui était de se tenir debout sans les gyros.

Je vous laisse regarder, c'est la première fois que vous le voyez allumé il me semble :

 

 

voila c'est rien de sorcier, mais bon c'est cool quoi, on peut voir que les servos fonctionnent bien, que la taille du robot est assez cool aussi, qu'il est moche mais ca c'est sur le point de changer  :whistle2: (on va le faire marcher avant de changer les design quand meme) .

 

Il n'est pas stable à 100% , c'est normal, il n'est pas fait pour, il est fait pour de la marche DYNAMIQUE, donc comme vous, êtres humains ! et tout comme vous quand on lui coupe ses gyros (qu'on vous éclate votre oreille interne),il est plus dur pour lui d'ajuster sa posture (il ne le fait pas du tout en fait)

 

Bref voila pour aujourd'hui (j'ai un peu plus de temps en ce moment je vais essayer de nourrir ce topic un peu plus)  :heart:




#93981 WALK-E, Crowdfunding sur Ulule, Soutenez nous !!!

Posté par yougo - 31 mars 2018 - 05:21

Salut à tous,  

 

Il y a quelques mois je voulais faire de la simulation pour Walk-e, 

j'ai donc installé Anykode Marilou et tester un peu le logiciel, je n'ai pas vraiment apprécié, pas user friendly et la partie code est infecte à mes yeux.

J'ai donc décidé de chercher un peu, et puis je me suis tourné vers un logiciel gratuit, user friendly, avec une des plus grosses communautés :

UNITY ! 

 

Pour ceux qui ne connaissent pas, Unity est simplement une plateforme de game dev , qui comporte un moteur physique 3D vraiment simple à comprendre dont le code est en C# (ou JS comme vous voulez). Le plus c'est comme je l'ai dit : la communauté ! Impossible de ne pas trouver une explication à quoique ce soit en moins de 5 min sur internet. 

 

Voici par exemple quelques tests du début de nos simulations : 

 

/!\ ce ne sont pas des vidéos de grande qualité /!\

 

Le titre dit tout : 

 

 

La fin est plutôt drôle 

 

 

 

Et plus sérieusement les simulations servent vraiment énormément on a par example pu sortir les angles avec lesquels 

le robot est stable naturellement sur la simu, l'appliquer en vrai, et BOUM ca marche, sans aucun programme de stabilisation

avec gyro ou quoi le robot tient debout.




#93961 Servomoteur PUISSANT pour robot bipède

Posté par yougo - 30 mars 2018 - 07:36

Si jamais ce post intéresse encore des gens, j'ai pu discuter avec le vendeur et j'ai trouvé sa chaine YOUKU (YouTube de la Chine) si vous voulez voir les perfs des servos, il a pleinnn de produits je me suis dit que ca pouvait être cool, meme pour des rovers ou autre, enfin je vous laisse juger :

 

http://i.youku.com/i/UNTYxNTE2NzQ4/videos?spm=a2hzp.8244740.0.0

 

(bon courage pour naviguer sur le site par contre) 

 

Et aussi en passant pour ceux qui se disent, "ouaiiiis mais aliexpress/ebay c'est pas fiable ..." sachez que ce vendeur m'a remboursé car je n'avais pas reçu son colis qui était au final perdu en route, donc ce n’était meme pas de ca faute.

Je dis ca car je vois pas mal de gens qui n'aiment pas commander en Chine par peur de se faire avoir, je comprends, je suis sur que des problèmes arrivent, mais sachez en tout cas que ce shop est fiable ;)  (Ca fait un peu pompeux mais c'est juste pour vous donner un retour d’expérience vu qu'on est à +- 15 commandes chez ce vendeur )

 

Voila, et si vous êtes intéressés, bientôt je pourrais vous donner les codes C# pour faire des simulations 3D des servos ASME-03A sur unity3D 




#89907 WALK-E, Crowdfunding sur Ulule, Soutenez nous !!!

Posté par yougo - 12 novembre 2017 - 01:57

Salut les Makers,

 

Je vous joint ici la vidéo de Walk-e qui se tient debout, je tenais à vous le montrer en avance (avant qu'on tourne une vrai vidéo) car je suis plutôt content :

 

 https://twitter.com/Projet_WALK_E/status/929489323371716609

 

Ceci grace à une MPU6050 tout à fait basique qui permet de faire les corrections en direct sur le robot

 

Vous pouvez noter la barre en metal qui traverse Walk-e, c'est en fait pour y accrocher les cables (en vert)

qui eux memes sont reliés au portique (blanc).

Ils permettent de le rattraper au cas ou il tombe (ce qui est arrivé quand meme pas mal de fois je vais pas vous le cacher hein ) 

Mais en aucun cas on soulage le poids du robot avec les cables verts, ils sont totalement lâche.

 

Pour information le robot est donc capable de lever son poids , mais en plus de ca une charge utile, pour l'instant je n'ai pas déterminé

combien exactement, mais en y accrochant sur la tette 3 bouteilles de lait (oui bon on fait avec ce qu'on a) il bronche pas.

[les bouteilles font 1L donc je suppose que ca fait du 3Kg]

 

Voila c’était les news du week-end ;)




#86905 WALK-E, Crowdfunding sur Ulule, Soutenez nous !!!

Posté par yougo - 22 août 2017 - 06:06

On a fini a 100% le robot, maintenant on bosse le code ! 

 

Voici quelques photos pour le fun : 

 

(prises avec un portable déso)

 

DHSEZ2AW0AAY9BZ.jpg

 

ici l'intérieur : 

 

21057728_1548329521877689_934662765_o.jpg

 

donc qui contient : 

+raspb

+ arduino mega 

+arduino nano

+ voltmètre

+relais

+ écran Oled

+ gyro/accéléromètre

+ Modules abaisseurs de tension

+Batterie 

(juste ici )

 

DGfIKAEXgAIMa-_.jpg

 

 

l’extérieur est pas mal je trouve :

 

21034905_1548329565211018_1213445455_o.jpg

 

et comment on veut le tester  : (oui oui c'est bien une tyrolienne )  

 

 

21035025_1548329591877682_1636264800_o.jpg