Programmation d'un robot suiveur de ligne avec apprentissage par renforcement

15

J'envisage de programmer un robot suiveur de ligne en utilisant des algorithmes d'apprentissage par renforcement. La question que je réfléchis est de savoir comment puis-je obtenir l'algorithme pour apprendre à naviguer à travers un chemin arbitraire?

Après avoir suivi le livre Sutton & Barto pour l'apprentissage par renforcement, j'ai résolu un problème d'exercice impliquant une piste de course où l'agent de voiture a appris à ne pas sortir de la piste et à réguler sa vitesse. Cependant, ce problème d'exercice a permis à l'agent d'apprendre à naviguer sur la piste sur laquelle il s'est entraîné.

Est-ce dans le cadre de l'apprentissage par renforcement que d'obtenir un robot pour parcourir des chemins arbitraires? L'agent doit-il absolument avoir une carte du circuit ou du parcours de course? Quels paramètres pourrais-je éventuellement utiliser pour mon espace d'état?

Lord Loh.
la source
1
Je ne sais pas comment, mais je suis certain qu'il est possible de lui apprendre à se maintenir dans un chemin, quelle que soit sa forme. Le but de l'enseignement dans ce cas devrait être la décision locale que le robot prend en fonction de ses contributions immédiates (ou peut-être d'un peu d'histoire). De cette façon, peu importe la forme du chemin, car toutes les décisions sont locales.
Shahbaz
@Shahbaz - Que suggéreriez-vous que j'utilise pour l'espace d'état?
Lord Loh.
Je ne suis en fait pas sûr. Même si j'ai étudié l'IA à l'université, cela n'a jamais été mon domaine de travail / recherche. La réponse que vous avez acceptée semble raisonnable!
Shahbaz
Utilisez-vous une réponse pour tester Markdown? Vous pouvez simplement écrire ce que vous voulez et voir le rendu immédiat en dessous, puis ne pas le publier.
Shahbaz

Réponses:

8

L'une des mesures clés de tout algorithme d'apprentissage automatique est sa capacité à généraliser (c'est-à-dire à appliquer ce qu'il a appris à des scénarios jamais vus auparavant). Les apprenants de renforcement (RL) peuvent bien généraliser, mais cette capacité est en partie fonction de la formulation de l'espace d'état dans mon expérience. Cela signifie que si vous pouvez trouver la bonne configuration, l'apprenant RL n'aura pas besoin d'une carte du circuit de course.

Reste à savoir quels paramètres utiliser. Sans en savoir plus sur les capteurs disponibles sur votre robot, je ne peux que spéculer. Ma première inclinaison est d'essayer de coder l'orientation relative de la ligne et du robot (c'est-à-dire que le robot tend vers la droite, la gauche ou se déplace simplement parallèlement à la ligne). Cela entraînerait un joli petit espace d'état. Bien que n'étant pas strictement nécessaire, il permettrait une mise en œuvre simple et rapide. De plus, si le robot ne se déplace pas à une vitesse constante, cela peut aider à coder la vitesse du robot car le robot devra réagir plus rapidement lorsqu'il se déplace à des vitesses plus élevées.

DaemonMaker
la source
Sans la carte, l'espace d'état est exactement ce que le robot peut détecter à partir de sa position immédiate. Dans une certaine mesure, la carte n'est donc qu'un moyen de «regarder vers l'avenir». Le comportement appris dans le scénario sans carte sera essentiellement "faire la même chose qu'avant mais aller plus lentement parce que nous ne savons pas où les virages sont cette fois". (Vraisemblablement, vous pourrez dire où se trouvent les bords de la piste.)
Ian
Une politique nous dit quel contrôle appliquer en fonction d'un état. Si l'espace d'états est bien formulé pour l'agent RL, des scénarios différents peuvent avoir la même apparence dans l'espace d'états et produire le même comportement. C'est ce qu'on appelle la généralisation et est souhaitable lorsqu'elle est effectuée correctement. Le robot aura une vitesse maximale basée sur la vitesse de sa boucle de contrôle. Le comportement appris ne sera pas nécessairement de ralentir. Si la récompense est inversement liée à la durée de la course, alors l'agent serait enclin à maximiser sa vitesse par rapport à la vitesse de sa boucle de contrôle.
DaemonMaker
0

Je ne sais pas quel type de robot vous avez mais je fais de la ligne de sauvetage robocup depuis quelques années maintenant. Je me suis rendu compte que si vous voulez bien suivre une ligne, l'utilisation du PID est une bonne option. Permettez-moi de développer cela. Si vous imaginez deux capteurs de lumière de chaque côté de la ligne, vous voudriez qu'ils soient de valeur égale pour que la ligne soit au milieu. Vous pouvez ensuite utiliser la différence entre la valeur des deux capteurs pour modifier le pourcentage de rotation du robot. Avec cette technique, il est possible d'amener un robot à suivre une ligne à des vitesses extraordinaires. comme si vous envisagiez de faire apprendre au robot à améliorer ses capacités de suivi de ligne. Ce que j'ai trouvé, c'est commencer avec vos valeurs PID initiales supérieures à ce que vous voulez qu'elles soient et utiliser un capteur gyroscopique pour mesurer la fréquence d'oscillation du robot pendant qu'il suit la ligne. Vous pouvez à partir de là créer votre propre fonction pour déterminer de combien vous devez baisser vos valeurs afin d'obtenir un système stable, ce n'est pas exactement de l'intelligence artificielle plus comme un algorithme d'optimisation automatisé, mais bon im 18 et j'ai appris à coder à partir du l'Internet. J'espère que ça aide. Si vous avez des questions, écrivez-moi, ce n'est pas mon adresse e-mail principale, donc je ne la vérifierai pas régulièrement. [email protected]

Omar Quaye
la source