Aller au contenu


Photo
- - - - -

algo pour lidar 32 points de mesures


  • Veuillez vous connecter pour répondre
37 réponses à ce sujet

#1 Newbies

Newbies

    Membre passionné

  • Membres
  • PipPipPip
  • 487 messages
  • Gender:Male
  • Location:Paris
  • Interests:Programmation et robotique

Posté 01 mai 2016 - 11:03

Salut les gars,

 

Je bosse actuellement sur un projet (pour mon école) qui consiste à créer un algorithme (en C) permettant de faire naviguer un robot doté d'un lidar à l'avant dans un circuit le plus vite possible sans toucher de murs.

 

Quelques infos à propos du robot:

 

Le lidar à un angle d'ouverture de 60 dégrée vers l'avant du robot (voir photo) et il retourne 32 mesures de distance (environ une tout les 2 degrées donc).

Je peux contrôler la puissance du moteur (de 0 à 100%), ainsi que l'angle des roues avant pour contrôler le robot.

Je peux aussi connaitre la vitesse absolut du robot (en Km/h).

La fréquence de rafraîchissement du lidar est assez longue (3 mesures par secondes je dirais) donc ça complique pas mal la tache sachant que le robot peut aller (très) vite.

Les essais sont pour l'instant fait sur un logiciel de simulation robotique (V-REP pour les connaisseurs).

 

Voici une image de la simulation (les lignes bleu partant du robot représentent les extrémités du capteur):

 

Fichier joint  track.png   717,57 Ko   50 téléchargement(s)

 

J'ai déjà fais un algo très simple qui consiste à juste tourner les roues dans un le sens opposé quand on se rapproche d'un mur. Ca marche à peut près, mais quand il y à des virages trop serrés il se plante et il ne va du coup pas tout droit même en ligne droite.

 

Je suis sur qu'avec autant de données venant du lidar, on peut faire un algo bien plus intelligent pour par exemple appréhender les virages et choisir exactement la bonne vitesse/orientation pour le prendre etc...

 

Le truc c'est que je ne vois pas du tout comment faire ça et je ne trouve rien sur le net :/ 

 

Voilà voilà, donc si quelqu'un à une idée de comment faire ou un lien vers des éventuels informations, je suis preneurs ;)



#2 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 021 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é 01 mai 2016 - 11:40

Tu fais comment ton algo en C avec V-Rep?  Genre tu passe par matlab et tu fais pas tes scripts avec lua ?  

En tout cas avec les données que tu as et les sorties sur lesquels tu peux agir, pour moi ça sent à plein nez le cas d'école pour usage de la logique floue  =) au " fuzzy logic "  ( Invocation de Black Templar ? :P

Bon après il n'y a jamais "une seule façon de faire " ;) ,  on peut invoquer R1D1 et parler de la mise en place d'un petit réseau de neurone =) On peut même parler d'algorithme génétique et d'apprentissage ici avec une voiture  https://www.youtube....h?v=5lJuEW-5vr8  ( de nouveau invocation de Black Templar avec ses poissons =)  )

 

En tout cas si tu passes par matlab tu as accès au toolbox pour faire ta logique floue ou bien ton réseau de neurone ... 

 

Par contre puisque c'est un projet scolaire , tu es pas censé être un peu guidé sur le choix de la méthode ? D'ailleurs tu es dans quelle école et en quelle année maintenant ? 
 


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 !

 

Les réalisations de Mike118  

 

 

 


#3 Newbies

Newbies

    Membre passionné

  • Membres
  • PipPipPip
  • 487 messages
  • Gender:Male
  • Location:Paris
  • Interests:Programmation et robotique

Posté 01 mai 2016 - 12:05

La communication se fais en texte via un socket en C. J'envois mes commandes sur la sortie standards (on bosse sur un environnement UNIX) et j'ai un retour en texte aussi sur l'entrée standards (que je dois parser pour récup les informations de contrôle).

 

De ce que je me rappelle de la logique floue c'est un système de prise de décision basés sur des probabilités. Ca donnerais un truc comme ca dans mon cas SI capteur_droit SUPERIEUR A capteur_gauche ET QUE capteur_avant INFERIEUR A un_seuil ALORS on se trouve surement dans un virage vers la droite. C'est ca ?

 

J'ai regardé aussi le réseau de neurone, ça à l'aire cool, mais de ce que j'ai compris, pour que ca marche, il faut naviguer plusieurs fois dans le circuit pour l'analyser et on aura le droit qu'à un essais le jour de la présentation (sur un circuit inconnu qui plus est) :/

 

Je ne passe pas par matlab, tout se fais via le socket :/

 

Je suis en première années à Epitech, et cette école est justement connu pour ne pas guider les étudiants pour les pousser à chercher par eux même ;)



#4 Black Templar

Black Templar

    Membre

  • Membres
  • PipPipPipPipPip
  • 1 430 messages
  • Gender:Male
  • Location:Lille

Posté 01 mai 2016 - 12:48

En tout cas avec les données que tu as et les sorties sur lesquels tu peux agir, pour moi ça sent à plein nez le cas d'école pour usage de la logique floue  =) au " fuzzy logic "  ( Invocation de Black Templar ? :P

Bon après il n'y a jamais "une seule façon de faire " ;) ,  on peut invoquer R1D1 et parler de la mise en place d'un petit réseau de neurone =) On peut même parler d'algorithme génétique et d'apprentissage  https://www.youtube....h?v=5lJuEW-5vr8  ( de nouveau invocation de Black Templar avec ses poissons =) )

Aaaa, tu sais comment me parler ! Algo G, réseau de neurones, logique floue, il ne manquait plus que le mot clef "Filtre de Kalman" et ça aurait été parfait :P

 

De ce que je me rappelle de la logique floue c'est un système de prise de décision basés sur des probabilités. Ca donnerais un truc comme ca dans mon cas SI capteur_droit SUPERIEUR A capteur_gauche ET QUE capteur_avant INFERIEUR A un_seuil ALORS on se trouve surement dans un virage vers la droite. C'est ca ?

Pas exactement non, la logique floue, ce n'est pas basé sur les proba mais sur l'appartenance à des ensembles.

Contrairement à la logique classique où tu ne peux appartenir qu'à un seul ensemble à la fois (soit tu es grand, soit tu es petit), en logique floue, tu peux appartenir en même temps à plusieurs ensembles avec un certain degré d'appartenance (tu peux être à la fois grand à 67% et petit à 33% (tu appartiens à 67% à l'ensemble grand et à 33% à l'ensemble petit).

C'est sur la base de cette logique floue que tu peux construire un système flou pour résoudre des problèmes pour lesquels tu peux avoir une expertise humaine forte, mais pas de formalisation mathématiques précise !

Tu exprimes tout une série de règles à adopter en langage naturel (SI obstacle_droite loin ET obstacle_gauche proche ALORS vitesse_droite petite ET vitesse_gauche grande)

Le système floue va automatiquement fusionner toutes tes règles et te sortir un résultat pour la vitesse de tes roues.

Ce qui fait que tout ce que tu as à faire, c'est d'exprimer tes règles (que tu peux rajouter au fur et à mesure que ton expertise sur le problème augmente).

 

Je te laisse lire la série d'articles que j'ai écrit à ce sujet : http://www.ferdinandpiette.com/blog/les-dossiers/dossier-la-logique-floue/

Et en particulier cet exemple de planificateur de trajectoire : http://www.ferdinandpiette.com/blog/2011/08/exemple-de-systeme-flou-un-planificateur-de-trajectoire/

 

J'ai regardé aussi le réseau de neurone, ça à l'aire cool, mais de ce que j'ai compris, pour que ca marche, il faut naviguer plusieurs fois dans le circuit pour l'analyser et on aura le droit qu'à un essais le jour de la présentation (sur un circuit inconnu qui plus est) :/

Tu peux faire un réseau de neurone générique qui va déterminer la vitesse de tes roues en fonction des données des capteurs.

Tu apprends ton réseau de neurones (soit par un algo génétique, soit par une autre methode d'apprentissage plus classique) sur différents circuits, et une fois ton réseau entrainé, il est sensé pouvoir se déplacer sur n'importe quel circuit !

Dans la vidéo que Mike à posté, mes poissons apprennent à se déplacer vers un plancton. Une fois entrainé, un poisson peut trouver son chemin vers le plancton quelque-soit sa position.

 

 

Je suis en première années à Epitech, et cette école est justement connu pour ne pas guider les étudiants pour les pousser à chercher par eux même ;)

C'est génial comme façon de faire, mais ça implique que l'étudiant soit assez mature pour creuser un sujet par soi-même !

Sur ce genre de projet, je me serai surement amusé à trouver la meilleure solution en utilisant le moins d'information possible (par exemple, juste 3 données sur les 32 disponibles : la mesure à -30°, celle à 0 et celle à 30°). Je suis sur que tu n'as pas besoin de plus pour avoir le robot le plus rapide et ça aurait montré aux profs que ce n'est pas parce que l'on a plein de données qu'il est pertinent de toutes les exploiter : peu de données bien choisies et bien traités peuvent apporter un bien meilleur résultat que plein de données en vrac que l'on ne sait pas exploiter ;)


Mon site internet : http://ferdinandpiette.com/


#5 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 021 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é 01 mai 2016 - 01:04

 

 

Je suis en première années à Epitech, 

 

C'est fou comme le temps passe ! =) 
 

 

 

 

J'ai regardé aussi le réseau de neurone, ça à l'aire cool, mais de ce que j'ai compris, pour que ca marche, il faut naviguer plusieurs fois dans le circuit pour l'analyser et on aura le droit qu'à un essais le jour de la présentation (sur un circuit inconnu qui plus est) :/

 

 

Comme l'a dit Black Templare Rien ne t'empêche d'entraîner ton algo avant la présentation si tu choisis de passer par l'apprentissage ;)

 

Mais je pense que sans passer par un réseau de neurone ni faire d'apprentissage tu peux avoir un robot très rapide avec juste de la logique flou.

En gros fais toi tes règles humaine intelligible :
Si virage faible à droite alors aller à fond et tourner un peu à droite 
Si virage important à droite alors ralentir et tourner à fond à droite 

Si ligne droite ...
... 

à toi ensuite de définir quels sont les données capteurs minimum qui permettent de définir Virage faible , virage important, ligne droite etc...

Mais si tu as suffisamment de temps tu peux t'essayer à plusieurs méthodes ...
 


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 !

 

Les réalisations de Mike118  

 

 

 


#6 Black Templar

Black Templar

    Membre

  • Membres
  • PipPipPipPipPip
  • 1 430 messages
  • Gender:Male
  • Location:Lille

Posté 01 mai 2016 - 01:10

Mais je pense que sans passer par un réseau de neurone ni faire d'apprentissage tu peux avoir un robot très rapide avec juste de la logique flou.

 

Oui !!!!

De toute façon, logique floue ou réseau de neurone, c'est plus ou moins pareil ! Tu peux construire un réseau de neurone à partir des règles d'inférences et des opérateurs de ton système floue et inversement.

La seule différence, c'est que dans un système floue, tu as des critères fixe et des règles d'inférences souvent choisies selon une expertise humaine.

Alors qu'un réseau de neurone (s'il a un apprentissage) sélectionne ses propres critères et règles, bien que du coup, tout ça ne soit pas très intelligible pour un humain.

 

On pourrait même imaginer un système floue qui (une fois les critères choisi par un humain) apprend lui-même les règles à appliquer !! :D


Mon site internet : http://ferdinandpiette.com/


#7 Newbies

Newbies

    Membre passionné

  • Membres
  • PipPipPip
  • 487 messages
  • Gender:Male
  • Location:Paris
  • Interests:Programmation et robotique

Posté 01 mai 2016 - 03:49

Black Templar, j'ai lu tes articles sur le sujet et ça a effectivement l'aire de correspondre à ce dont j'ai besoin, je vais donc partir la dessus  ;)

 

Dans un premier temps, je vais essayer de centrer le robot sur la piste en utilisant la logique floue (je le faisais jusqu'à maintenant en utilisant une simple règle de proportionnalité).

 

Je vais donc utilisé les capteurs droite et gauche (comme dans l'exemple du robot de ton article) pour contrôler l'orientation des roues avant.

 

J'aurais donc pour chaque capteur deux variables linguistique distance_petite et distance_grande et pour l'orientation des roues une variables linguistique "orientation" (Cette valeur me donnera la valeur de l'orientation, il me suffira de déterminer si elle doit être positive ou négative en fonction du sens)

 

Les variables linguistiques aurait ces fonctions d'appartenance :

 

Fichier joint  Présentation sans titre (3).png   21,48 Ko   0 téléchargement(s)

 

Et les règles serait les suivantes:

 

SI distance_gauche = grande ET distance_droite = petite ALORS orientation = grande

SI distance_gauche = petite ET distance_droite = grande ALORS orientation = grande

SI distance_gauche = petite ET distance_droite = petite ALORS orientation = moyenne

 

Cela te semble correct ? Si non qu'est ce qui ne va pas ?

 

Autres questions: Quel est l’intérêt de mettre plus de variables linguistiques pour un problème sachant que le résultat sera toujours un pourcentage ? Comment est ce qu'on "code", les fonctions d'appartenance des variables linguistiques ?

 

Merci pour tout en tout cas les gars ;)

 



#8 Black Templar

Black Templar

    Membre

  • Membres
  • PipPipPipPipPip
  • 1 430 messages
  • Gender:Male
  • Location:Lille

Posté 01 mai 2016 - 04:21

J'aurais donc pour chaque capteur deux variables linguistique distance_petite et distance_grande et pour l'orientation des roues une variables linguistique "orientation" (Cette valeur me donnera la valeur de l'orientation, il me suffira de déterminer si elle doit être positive ou négative en fonction du sens)

Que signifie la variable linguistique "orientation" ? Pourquoi ne pas avoir directement la vitesse des roues (gauche et droite) ?

 

 

Autres questions: Quel est l’intérêt de mettre plus de variables linguistiques pour un problème sachant que le résultat sera toujours un pourcentage ? Comment est ce qu'on "code", les fonctions d'appartenance des variables linguistiques ?

Le fait de mettre plus de variables linguistiques en entrée te permettra d'avoir plus de règles et donc d'affiner le calcul des sorties (même si c'est toujours une vitesse entre 0 et 1, la manière de calculer cette vitesse sera différente et (on peut l'espérer), plus adaptée). Le tout, c'est de savoir si les variables d'entrées ont une réelle influence sur la sortie ou non.

C'est un peu comme l'age du capitaine : c'est une info que tu as mais qui ne te sert pas à résoudre le problème. Si tu la prend en compte, tu complique le système sans rien changer au résultat ;)


Mon site internet : http://ferdinandpiette.com/


#9 Newbies

Newbies

    Membre passionné

  • Membres
  • PipPipPip
  • 487 messages
  • Gender:Male
  • Location:Paris
  • Interests:Programmation et robotique

Posté 01 mai 2016 - 04:57

Que signifie la variable linguistique "orientation" ? Pourquoi ne pas avoir directement la vitesse des roues (gauche et droite) ?

 

Le fait de mettre plus de variables linguistiques en entrée te permettra d'avoir plus de règles et donc d'affiner le calcul des sorties (même si c'est toujours une vitesse entre 0 et 1, la manière de calculer cette vitesse sera différente et (on peut l'espérer), plus adaptée). Le tout, c'est de savoir si les variables d'entrées ont une réelle influence sur la sortie ou non.

C'est un peu comme l'age du capitaine : c'est une info que tu as mais qui ne te sert pas à résoudre le problème. Si tu la prend en compte, tu complique le système sans rien changer au résultat ;)

 

Mon robot est une base de voiture télécommandée, pour tourner je dois donc orienter les roues avant (comme quand on tourne le volant dans une vraie voiture) et non pas changer la vitesses des roues (d'ailleurs je n'ai qu'un seul moteur pour les deux roues arrières). Le contrôle de cet orientation se fait par l'envoi d'une valeur comprise entre -1 et 1, -1 étant roue tourné a fond vers la gauche 1 étant roues tourné ) fond vers la droite et 0 étant roues droites :)

 

Je commence à comprendre mieux l’intérêt des variables linguistique, dans mon cas il faudrait donc que j'ai 3 variables linguistique pour la distance: petit pour la détection des bordures, moyen pour la détection des virages et grand pour la détection des grandes lignes droites à l'avant du robot ;)



#10 Black Templar

Black Templar

    Membre

  • Membres
  • PipPipPipPipPip
  • 1 430 messages
  • Gender:Male
  • Location:Lille

Posté 01 mai 2016 - 05:03

Ok, je comprend mieux.

 

Du coup, la fonction d'appartenance à l'orientation aura 3 variables linguistiques : gauche, centré, droite.

Et si tu veux modéliser ça part du tout ou rien comme je l'ai fait dans mon exemple, gauche sera un dirac en -1, milieu, un dirac en 0 et droit, un dirac en 1 (et non en 0, 0.5 et 1).


Mon site internet : http://ferdinandpiette.com/


#11 R1D1

R1D1

    Modérateur et Membre passionné

  • Modérateur
  • PipPipPipPipPip
  • 1 148 messages
  • Gender:Male
  • Location:Autriche

Posté 01 mai 2016 - 06:18

Ah, la logique floue ... L'art de faire du symbolique mais pas trop. :)

Si je comprends bien ton problème, tu cherches une manière de connecter ton capteur à tes moteurs pour commander ta voiture. Vu que ton objectif est une réponse rapide aux obstacles, tu dois avoir une approche réactive (donc pas de SLAM, de planif dans une carte).
L'approche la plus simple, c'est le véhicule de Braitenberg. Tu connectes tes mesures directement aux commandes avec un coefficient positif ou négatif qui indique comment la mesure influe sur la commande. C'est assez simple avec une commande différentielle, un peu moins trivial avec ton type de commande.
L'extension naturelle de la logique de Braitenberg, c'est effectivement le réseau de neurones (Braitenberg étant une version simplifiée). L'intérêt du réseau, c'est que tu as une règle d'apprentissage qui adapte les valeurs aux expériences qu'a vécu le réseau (donc les différents circuits dans lequels tu auras entraîné la voiture).

De mon point de vue, la logique floue n'est pas adaptée : tu n'as pas besoin de raisonner sur des symboles (ce que tu appelles variables lnguistiques), tu as besoin de déterminer des commandes (angle de ta direction, vitesse de ta propulsion) qui sont continues.
R1D1 - Calculo Sed Ergo Sum -- en ce moment, M.A.R.C.E.L.
Avatar tiré du site bottlebot

#12 Newbies

Newbies

    Membre passionné

  • Membres
  • PipPipPip
  • 487 messages
  • Gender:Male
  • Location:Paris
  • Interests:Programmation et robotique

Posté 01 mai 2016 - 07:54

Ok, je comprend mieux.

 

Du coup, la fonction d'appartenance à l'orientation aura 3 variables linguistiques : gauche, centré, droite.

Et si tu veux modéliser ça part du tout ou rien comme je l'ai fait dans mon exemple, gauche sera un dirac en -1, milieu, un dirac en 0 et droit, un dirac en 1 (et non en 0, 0.5 et 1).

 

Je vais essayer d’implémenter ça ce soir ;)

 

 

Ah, la logique floue ... L'art de faire du symbolique mais pas trop. :)

Si je comprends bien ton problème, tu cherches une manière de connecter ton capteur à tes moteurs pour commander ta voiture. Vu que ton objectif est une réponse rapide aux obstacles, tu dois avoir une approche réactive (donc pas de SLAM, de planif dans une carte).
L'approche la plus simple, c'est le véhicule de Braitenberg. Tu connectes tes mesures directement aux commandes avec un coefficient positif ou négatif qui indique comment la mesure influe sur la commande. C'est assez simple avec une commande différentielle, un peu moins trivial avec ton type de commande.
L'extension naturelle de la logique de Braitenberg, c'est effectivement le réseau de neurones (Braitenberg étant une version simplifiée). L'intérêt du réseau, c'est que tu as une règle d'apprentissage qui adapte les valeurs aux expériences qu'a vécu le réseau (donc les différents circuits dans lequels tu auras entraîné la voiture).

De mon point de vue, la logique floue n'est pas adaptée : tu n'as pas besoin de raisonner sur des symboles (ce que tu appelles variables lnguistiques), tu as besoin de déterminer des commandes (angle de ta direction, vitesse de ta propulsion) qui sont continues.

 

J'étais tombé par hasard dans mes recherches sur les "vehicules de Braitenberg", et apparemment l'utilisation de cette technique se limite à des cas précis qui n'était pas compatible avec ce qu'on nous demandais :/



#13 R1D1

R1D1

    Modérateur et Membre passionné

  • Modérateur
  • PipPipPipPipPip
  • 1 148 messages
  • Gender:Male
  • Location:Autriche

Posté 01 mai 2016 - 09:08

J'étais tombé par hasard dans mes recherches sur les "vehicules de Braitenberg", et apparemment l'utilisation de cette technique se limite à des cas précis qui n'était pas compatible avec ce qu'on nous demandais :/


Des cas précis ? Tu parles de quoi ? Des capteurs utilisés ? A priori, le principe peut s'appliquer à plein de cas différents, mais plus tu veux combiner de comportements différents, plus c'est compliqué d'avoir un comportement bien prévisible à la fin.
R1D1 - Calculo Sed Ergo Sum -- en ce moment, M.A.R.C.E.L.
Avatar tiré du site bottlebot

#14 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 021 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é 01 mai 2016 - 10:25

L'approche la plus simple, c'est le véhicule de Braitenberg. Tu connectes tes mesures directement aux commandes avec un coefficient positif ou négatif qui indique comment la mesure influe sur la commande. C'est assez simple avec une commande différentielle, un peu moins trivial avec ton type de commande.
 

 

Comme je le disais il y a plusieurs façon de faire mais je n'irais pas jusqu'à justifier une approche mieux qu'une autre... 

En effet il est tout à fait faisable de mettre les mesures directement  aux commandes avec une petite formule. 
Si tu as en tête la formule que tu veux appliquer en effet c'est "plus simple " cependant , à mon sens, newbies n'a pas en tête le genre de formule qu'il veut appliquer et il les cherche. 

Afin de " simplifier " cette recherche de formules et d'utilisation de capteurs, quelque soit l'implémentation en code qui sera faîte ( même si il ne l'implémente pas en logique floue mais bien avec des formules type véhicule de Braitenberg  )  il est plus aisé de réfléchir de manière symbolique, et une fois que les comportements / les règles symboliques sont " validé(e)s " de trouver les formules / les valeurs qui vont bien. 

Typiquement Newbies ce que tu oublies c'est que tu as tout intérêt à gérer aussi la vitesse de ton robot ;) Donc oublis pas de rajouter une règle type : " si je suis très près d'un mur je vais à la vitesse mini qui me permet d'avancer "  ainsi celle ci combinée avec le fait de tourner à droite si le mur est à gauche fera que ton robot ralenti en cas de virage serré ...

PS : Si tu peux lancer des simulations, je te conseil vivement, de noter tes paramètre et d'enregistrer les simulations, en plus de te permettre de mieux comprendre comment et pourquoi tes premiers essais foire, tu pourras les comparer dans le temps retourner à une version plus efficace etc ... Et puis tu pourras même nous partager les évolutions de ta voiture =) Moi je suis très curieux de voir ça  ! =)

 


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 !

 

Les réalisations de Mike118  

 

 

 


#15 Black Templar

Black Templar

    Membre

  • Membres
  • PipPipPipPipPip
  • 1 430 messages
  • Gender:Male
  • Location:Lille

Posté 02 mai 2016 - 08:16

De mon point de vue, la logique floue n'est pas adaptée : tu n'as pas besoin de raisonner sur des symboles (ce que tu appelles variables lnguistiques), tu as besoin de déterminer des commandes (angle de ta direction, vitesse de ta propulsion) qui sont continues.

 

Je ne vois pas en quoi la logique flou est inadaptée.

Un système flou sert bien à déterminer des commandes en mode continue.

Le moyen d'y arriver, c'est de prendre en compte des règles d'inférences exprimées en langage naturelle car on ne veut pas s’embêter à modéliser le système.

 

Sinon, ça à l'air sympa le Braitenberg vehicle, je ne connaissais pas :)


Mon site internet : http://ferdinandpiette.com/


#16 Newbies

Newbies

    Membre passionné

  • Membres
  • PipPipPip
  • 487 messages
  • Gender:Male
  • Location:Paris
  • Interests:Programmation et robotique

Posté 02 mai 2016 - 11:06

Bon, j'ai implémenté un début de logique floue (avec les variables et les règles cité précédemment ), ça marche dans certain cas (quand la voiture est dans une ligne droite, elle va bien tout droit), et revanche ça déconne dans d'autres (quand la voiture arrive dans un virage, elle braque trop fort dans la direction du virage :/)

 

J'ai essayé de modifier un peut les fonctions d'appartenances et les calcules mais le problème subsiste (le cas du virage). En fait le problème est que je n'arrive pas à trouver de coïncidence entre la distance mesurée à l'entrée dans un virage et l'angle de ce virage :/

 

J'ai aussi un problème avec la position de mes capteurs, étant donné qu'ils vise tous vers l'avant, quand le robot fonce droit vers un mur, il est impossible de déterminer dans quel sens le faire tourner :/



#17 Newbies

Newbies

    Membre passionné

  • Membres
  • PipPipPip
  • 487 messages
  • Gender:Male
  • Location:Paris
  • Interests:Programmation et robotique

Posté 02 mai 2016 - 11:21

En fait je pense que le problème viens de la variable linguistique "centré"  de l'orientation. En effet, comme elle est définie à zéro, sont poid ne pèse pas dans l'équation finale ce qui fait que si on à par exemple 30% de droite 30% de centré et 0% de gauche, au lieu d'avoir au final 15% de droite on va avoir encore 30% de droite et c'est pour ca que ma voiture braque trop fort :/



#18 Newbies

Newbies

    Membre passionné

  • Membres
  • PipPipPip
  • 487 messages
  • Gender:Male
  • Location:Paris
  • Interests:Programmation et robotique

Posté 02 mai 2016 - 05:54

Bon, j'ai passé toute la journée à trifouiller les valeurs de mes fonction d'appartenance et j'ai réussi ce que ma voiture parcourt une bonne partie du parcourt. En revanche, les valeurs n'ont aucuns sens et je n'arrive pas à bien me représenter le truc dans ma tête pour savoir exactement ce que je dois faire :/ En fait, avec le circuit, il n'y à pas vraiment de cas de figure prédéfini ce qui rendre la définition de règles et de seuils pour ces règles assez difficile :/

 

J'ai rajouté des variables linguistique pour la distance à l'avant du robot, ainsi, je peux dire que plus la distance est courte, plus l'angle de braquage peu être important. Mais encore une fois ca ne marche pas tout le temps..

 

Mes règles pour l'instant sont:

 

SI distance_gauche = grande ET distance_droite = petite ET distance_avant = petite ALORS orientation = gauche

SI distance_gauche = petite ET distance_droite = grande ET distance_avant = petite ALORS orientation = droite

SI distance_gauche = petite ET distance_droite = petite ET distance_avant = grande ALORS orientation = centrée

 

Des idées ? ;)



#19 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 021 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 2016 - 06:06

Fait des règles qui gèrent la vitesse de ton robot ... Si tu es trop près d'un mur ralentit ... sinon va à fond ! 


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 !

 

Les réalisations de Mike118  

 

 

 


#20 Newbies

Newbies

    Membre passionné

  • Membres
  • PipPipPip
  • 487 messages
  • Gender:Male
  • Location:Paris
  • Interests:Programmation et robotique

Posté 02 mai 2016 - 08:04

Fait des règles qui gèrent la vitesse de ton robot ... Si tu es trop près d'un mur ralentit ... sinon va à fond ! 

J'ai essayé de faire des règles pour la vitesse, mais ça provoquais encore plus de problèmes (le robot se mettais à aller à fond en ligne droite et se retrouvais presque à l’arrêt au moindre virage) :/

 

Voila les règles que j'avais fais pour la vitesse:

 

SI orientation = gauche OU orientation = droite ALORS vitesse = petite

SI distance_avant = grande ET orientation = centré ALORS vitesse = grande






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

0 members, 0 guests, 0 anonymous users