Programmation Ligne Shortest Path Robot Suiveur

Ce poste est la section de programmation de mon post précédent qui traitait de la logique derrière les routines suivantes. Pour comprendre la nature complète de ce poste, vous devriez lire le post précédent d'abord, puis continuer avec celui-ci.







Non, ce n'est pas tout le code! même si le titre se lit de Ligne Robot Programmation Shortest Path :-).

Si vous faites ce robot et suivant l'algorithme expliqué dans mon précédent post. vous trouverez ces fonctions à portée de main.

Arrangement de capteur:

Le Balckboy. dispose de 8 capteurs montés sur la plaque de base pour fournir avec la possibilité de suivre tout type de ligne avec seulement quelques modifications mineures dans la section de programmation sans avoir à toucher le matériel. Il existe deux autres capteurs pour coder les roues du robot, mais pour l'instant notre préoccupation est que le suiveur de ligne.

Dans le code que j'utilise des macros C pour répondre à ces capteurs sans aucune confusion. Voici ce que je l'ai défini,

Voici une image pour montrer l'emplacement physique de ces senors sur la plaque de base du robot. Pour comprendre les extraits de code à venir, vous aurez besoin comme référence pour voir quel capteur nous parlons.

Programmation Ligne Shortest Path Robot Suiveur

Programmation Ligne Shortest Path Robot Suiveur

Recherchez un coude ou noeud:

Dans la partie théorique, j'avais donné une définition claire d'un virage et tour (noeud), donc je ne vais pas ressasser ici. Cette fonction est utilisée pour déterminer si, une jonction a rencontré mon robot, est un nœud ou un virage normal. S'il est un nœud, il retourne 1 et si elle est un tour, il retourne 0. Il y a également un autre objectif de cette fonction sert. Il détecte également la fin du fabricant de piste désignée par le retour de 2 à la fonction appelante.







Mise à jour Direction tableau:

Si le robot a fait un virage à une seule étape normale à gauche ou à droite, puis 1 est passé. Si le robot effectue un virage en U (qui est un tour de l'étape 2) en un point particulier, alors il doit envoyer deux à cette fonction afin qu'il soit en mesure de mettre à jour la direction en conséquence. La logique est telle que, si elle est un tour en une seule étape normale, alors la valeur suivante de la dir_arr est un de plus que la valeur précédente. D'autre part si elle est un demi-tour, la valeur suivante du dir_arr est deux de plus que la valeur précédente. Dans les deux cas, la somme totale ne doit pas dépasser 4 donc la réponse est modulo 4-ed pour obtenir un tampon circulaire.

Identifier les pistes redondantes:

Retirez les valeurs identifiées:

La fonction remove () est utilisée pour éliminer les éléments égaux consécutifs dans le tableau trié. La fonction remove () appelle à nouveau la fonction de tri. Ce processus est récursive et doit être mis fin par la fonction sort () s'il n'y a plus de tri à faire. Ceci est contrôlé par le compteur de boucle ctr. Si le compteur est incrémenté jamais, puis dans la dernière passe il n'y avait rien à trier ce qui signifie que tous les passages sont terminées et le tableau a le chemin le plus court stockée.

Inverser la direction de formulaire destination de source:

Étant donné que notre objectif est de rendre le robot revenir au nœud source à partir du noeud de destination choisi le chemin le plus court, nous devons réorganiser le tableau de dir_arr telle que chacune des directions sont inversées. C'est du Nord devient du Sud et le Sud devient du Nord et vice-verse. De plus, le Arrya total doit être renversé; comme dans, n ème élément devient l'élément 1 er et ainsi de suite.

Enveloppait, ce sont les fonctions que j'ai développées jusqu'à présent. Au-delà de cela, il est juste la structuration du programme et de tester la logique une fois que le code entier est prêt. Il doit aussi être un test de matériel (le plus dur du lot) et bien sûr la section de documentation du robot en action.

A aimé ce poste? Souscrivons avec votre email et nous vous tiendrons au courant engagged!







Articles Liés