Labyrinthe du solveur Robot, à l’aide de l’Intelligence artificielle avec Arduino (7 / 10 étapes)

Étape 7: Simplification (optimisation) le chemin d’accès

Revenons à notre exemple. À la recherche du premier groupe d’intersections, nous avons réalisé le le premier volet de gauche est en fait un « Dead End » et donc, si le Robot au lieu d’une "gauche-arrière-gauche" seulement passé directement à la première intersection, beaucoup de temps et d’énergie serait sauvé ! En d’autres termes, une séquence « LBL » en effet serait le même que le « S ». C’est exactement comment le chemin d’accès complet peut être optimisé. Si vous analise toutes les possibilités où une « U turn » est utilisé, l’ensemble des 3 intersections où ce "revirement" ("B") s’affiche ("Xavier") peuvent être réduite à une seule.

Ce qui précède n'est qu’un exemple, ci-dessous vous pouvez trouver la liste complète des possibilités (essayer) :

  • LBR = B
  • LB = R
  • RBL = B
  • SBL = R
  • SBS = B
  • LBL = S

Prenez le chemin d’accès complet ou notre exemple, nous pouvons réduire il :

chemin d’accès = [LLBSBLLBSLLLBL] == > LBL = S

chemin d’accès = [SLLBSBLLBSLL] == > LBS = R

chemin d’accès = [SLRBLLBSLL] == > RBL = B

chemin d’accès = [SLBLBSLL] == > LBL = S

chemin d’accès = [SSBSLL] == > SBS = B

chemin d’accès = [SBLL] == > SBL = R

chemin d’accès = [RL]

Incroyable ! En regardant l’exemple c’est très clair que si le robot prend droit au premier carrefour et après cela, un à gauche, elle atteindra la fin du labyrinthe dans le plus court chemin !

Le premier chemin de labyrinthe solveur code total est consolidé dans la fonction mazeSolve(). Cette fonction est en fait la fonction loop() utilisé avant, mais intégrant toutes les étapes d’optimisation de stockage et de chemin d’accès.

À la fin de la première voie, l’array chemin aura le chemin optimisé. Une nouvelle variable est introduite

unsigned int status = 0 ; résolution = 0 ; atteindre la fin du labyrinthe = 1

Ci-dessous la fonction de premier chemin d’accès :

Sub mazeSolve(void)
{

tandis que (! statut)

{

readLFSsensors() ;

interrupteur (mode)

{

affaire NO_LINE :

motorStop() ;

goAndTurn (gauche, 180) ;

recIntersection('B') ;

rupture ;

affaire CONT_LINE :

runExtraInch() ;

readLFSsensors() ;

Si (mode! = CONT_LINE) {goAndTurn (gauche, 90) ; recIntersection('L');}

d’autre mazeEnd() ;

rupture ;

affaire RIGHT_TURN :

runExtraInch() ;

readLFSsensors() ;

Si (mode == NO_LINE) {goAndTurn (droit, 90) ; recIntersection('R');}

d’autre recIntersection('S');

rupture ;

affaire LEFT_TURN :

goAndTurn (gauche, 90) ;

recIntersection('L');

rupture ;

affaire FOLLOWING_LINE :

followingLine() ;

rupture ;

}

}

}

Ici une nouvelle fonction a été introduite : recIntersection (direction)

Cette fonction servira pour magasin l’intersection et également d’appeler une autre fonction simplifyPath(), qui permettra de réduire le groupe des 3 intersections impliquant un "demi-tour" comme nous l’avons vu avant.

Sub recIntersection(char direction)
{

chemin d’accès [pathLength] = direction ; Stocker l’intersection dans la variable path.

pathLength ++ ;

simplifyPath() ; Simplifier le chemin savant.

}


Le crédit pour la simplifyPath () la fonction est de Patrick McCabe pour le chemin d’accès de Code de résolution de problèmes (pour plus de détails, visitez https://patrickmccabemakes.com! La stratégie de simplification de chemin d’accès est que chaque fois que nous rencontrons une séquence xBx, nous pouvons le simplifier en découpant la voie sans issue. Par exemple, LBL == > S comme nous l’avons vu dans l’exemple.

Sub simplifyPath()

{

Si (pathLength < 3 || chemin [pathLength-2]! = « B ») return ; seulement simplifier le chemin d’accès si le tournant de la seconde à la dernière a été un « B »

int totalAngle = 0 ;

int i ;

pour (i = 1; i < = 3; i ++)

{

Switch(path[pathLength-i])

{

case « R » :

totalAngle += 90 ;

rupture ;

case « L » :

totalAngle += 270 ;

rupture ;

case « B » :

totalAngle += 180 ;

rupture ;

}

}

totalAngle = % totalAngle 360 ; Obtenir l’angle comme un nombre compris entre 0 et 360 degrés.

Switch(totalAngle) / / remplacer la totalité de ces tours avec un seul.

{

case 0 :

chemin d’accès [pathLength - 3] = s ' ;

rupture ;

décision 90 :

chemin d’accès [pathLength - 3] = « R » ;

rupture ;

boitier 180 :

chemin d’accès [pathLength - 3] = « B » ;

rupture ;

cas 270 :

chemin d’accès [pathLength - 3] = « L » ;

rupture ;

}

pathLength-= 2 ; Le chemin est maintenant deux étapes plus courtes.

}

Articles Liés

Comment à l’aide de vieux moteurs moteurs avec Arduino et pilote A4988

Comment à l’aide de vieux moteurs moteurs avec Arduino et pilote A4988

J'ai été en utilisant moteurs pas à pas pendant un certain temps maintenant, et ils sont fantastiques pour toutes sortes de projets robotiques.Aujourd'hui, je vais partager les choses que j'ai appris jusqu'ici sur la réutilisation de vieux moteurs pa
Main robotisée contrôlée par geste avec Arduino + saut Motion

Main robotisée contrôlée par geste avec Arduino + saut Motion

Bonjour à tous,Comme promis, j'ai fait une instruction complète étape par étape pour mon projet final universitaire !Tout d'abord : Désolé pour mon mauvais anglais ! Si quelque chose n'est pas clair, s'il vous plaît laisser un commentaire.La main est
Comment faire pour mesure courant CA à l’aide de capteur à effet Hall avec Arduino ou autres microcontrôleurs commune

Comment faire pour mesure courant CA à l’aide de capteur à effet Hall avec Arduino ou autres microcontrôleurs commune

S'il vous plaît voir une nouvelle approche plus simple iciObjectif : Ce Instructable montre comment faire une boîte d'interface qui, lorsque raccordé à une rallonge, permet de microcontrôleurs communs comme l'Arduino à mesure AC courant comme un sign
Robot suiveur de ligne axée sur l’Arduino à l’aide du capteur de ligne Pololu QTR-8RC

Robot suiveur de ligne axée sur l’Arduino à l’aide du capteur de ligne Pololu QTR-8RC

mise à jour février 2012 : ce guide est présenté sur le blog de Adafruithttp://www.Adafruit.com/blog/2012/02/14/Arduino-Based-Line-Follower-robot/Il s'agit de Faz3a II, mon premier robot ligne-qui suit, qui je l'espère aussi à utiliser pour la résolu
Joystick contrôlée des bras du Robot à l’aide d’un Arduino

Joystick contrôlée des bras du Robot à l’aide d’un Arduino

Objectif et description du présent guideCette instructable est une main pour un projet d'école que nous avons fait. Le but de ce projet était de créer un contrôle de bras de robot à l'aide des Sticks. Nous avons dû utiliser un Arduino Uno pour le con
Distance robot contrôlé à l’aide de la télécommande Arduino et T.V.

Distance robot contrôlé à l’aide de la télécommande Arduino et T.V.

Cette voiture contrôlée à distance peut être déplacée autour à l'aide de pratiquement n'importe quel genre de distance tels que TV, AC etc..Il utilise le fait que la télécommande émet IR(infrared).Cette propriété est faite usage d'à l'aide d'un récep
Le sans fil, détection de l’Obstacle, bip Robot à l’aide des Arduinos !

Le sans fil, détection de l’Obstacle, bip Robot à l’aide des Arduinos !

Il s'agit d'un obstacle sans fil contrôlé, autonome détection robot !Un temps, j'avais fait ce Instructable et voulait faire quelques mises à jour majeures depuis.Voici les caractéristiques du robot:-1.HE de contrôle sans fil en utilisant des 433 mod
Maison bras robotisé à l’aide de pièces Standard en utilisant Arduino et un traitement GUI

Maison bras robotisé à l’aide de pièces Standard en utilisant Arduino et un traitement GUI

J'ai récemment pris sa retraite et une des choses que je me suis promis était que lorsque j'ai prenaient leur retraite j'allais terminer tous les projets que j'ai dû courir dans ma tête depuis que je suis un adolescent. C'est une cinquantaine d'année
Commander votre Robot à l’aide de téléphone portable

Commander votre Robot à l’aide de téléphone portable

CE tutoriel complet est également disponible sur mon site WebBonjour monde dans ce post je vais vous montrer comment faire pour contrôler le robot à l'aide de téléphone portable. Contrôler un robot à l'aide de téléphone portable n'est pas si compliqu
COMMANDE manuelle / autonome ROBOT (à l’aide de la TECHNIQUE de FUSION de capteur)

COMMANDE manuelle / autonome ROBOT (à l’aide de la TECHNIQUE de FUSION de capteur)

DTMF ou Dual Tone Multiple Frequency est chouette petite voie de contrôle des machines à votre téléphone portable. Cette instructable vous, lecteur doux montre comment faire un moins cher que la saleté DTMF contrôlée robot qui peut également fonction
Mur en suivant le Robot à l’aide de 555 Timer

Mur en suivant le Robot à l’aide de 555 Timer

EDIT :Ce robot est également au concours de Robot pour la catégorie des 12-18 ans.Avant-propos :Dans ce instructable je vais écrire les idées de base que j'ai utilisé pour faire un mur suite robot sans n'importe quel microcontrôleur. Le robot dans ce
Robot quadrupède à l’aide de 2 servos avec arduino fait maison

Robot quadrupède à l’aide de 2 servos avec arduino fait maison

hey tout le mondeSi vous avez obtenu un arduino mini et deux servos standard, vous pouvez faire un petit robo qui marche sur deux 4 pattes d'animal familier.mais dans le projet, j'ai n'a pas utilisé un arduino original. J'ai utilisé un microcontrôleu
Ligne de base suivant Robot avec Arduino

Ligne de base suivant Robot avec Arduino

07/09/2015Il a été quelques années puisque nous avons affiché initialement ce Robot suivant ligne de base avec tutorial Arduino, et il semble tellement de gens a jugé utile que nous devrions poster une mise à jour qui se déroule courant Arduino bibli
Comment faire un téléphone Mobile et l’ordinateur contrôlé 3D Robot imprimé avec Arduino - IoBot.

Comment faire un téléphone Mobile et l’ordinateur contrôlé 3D Robot imprimé avec Arduino - IoBot.

Si vous cherchez un moyen de contrôler un Arduino basé des périphériques, cette instruction vous montrera comment le faire en s'appuyant simple robot.Le IoBot peut être contrôlé par une application mobile et l'ordinateur via LAN ou câble USB. L'appli