Etape 7: Logiciel : côté PC
Puisque le SBC est configuré comme le cerveau de ce projet, la plupart des interactions avec les Phidgets sera pris en charge de par lui. Toutefois, à moins que vous comptiez le robot à être autonome, une sorte de connexion à un PC externe doit être faite pour que vous puissiez contrôler il. En fin de compte, cela signifie que nous aurons tous deux un programme exécuté sur votre ordinateur qui accepte une entrée d’utilisateur et un programme sur la SBC qui contrôle les contrôleurs de moteurs etc.... Communication entre les deux programmes est traitée à l’aide du Dictionnaire Phidget.
Le PC gère prenant d’entrée de l’utilisateur et à traduire en un ensemble de vitesses moteurs désirées, affichant des informations et des contrôles et l’affichage de la webcam se nourrissent. Etant donné que la roue mecanum admettent doit être contrôlable sur 3 axes distincts (x, y et une rotation) la méthode la plus populaire de contrôler ce type de robot est un style de manette de jeu double avec un joystick commande x, de y motion et de l’autre manette de commande de rotation. Nous nous sommes retrouvés à l’aide d’une manette de jeu unique qui avait un axe supplémentaire intégré, mais en pratique tout ce qui te permet de commander la position en 3 canaux distincts fonctionnerait. Nous avons utilisé le manche à balai se connecte directement aux ports d’entrée analogiques sur un 1018, c’est gentil puisqu’il facilite le code pour l’entrée en tenant le manche à balai.
Prendre l’entrée
Cette fonction de données recueille chaque canal du levier de commande chaque fois il y a un changement dans l’un des canaux et puis l’envoie au large à une fonction qui convertit une magnitude, direction (x et y de vector) de la position de la manette de jeu et une rotation (l’axe final du joystick). Le calcul effectué sur chaque valeur de la sonde doit centrer autour de 0 plutôt que 500 (ou 2000 dans l’affaire RawValue). La voie 3 de notre manette a une portée plus limitée que les deux autres, c’est pourquoi on divise seulement par 1500, pas 2000.
Convertir d’entrée
La fonction qui permet de convertir ces données en quelque chose d’utilisable ressemble à ceci :
Calculer la vitesse des roues
Dès que nous aurons une orientation, position et rotation, il faut calculer la quantité d’énergie pour donner chaque moteur afin d’obtenir le mouvement désiré. Dans un véhicule normal, ce serait assez simple mais avec roue mecanum il y a un peu de travail impliqués.
La première chose qui peut sembler étrange ici est l’amplitude = grandeur * Math.Sqrt(2.0) ; ligne. Il s’agit d’un artefact de la façon dont la fonction de manettes de jeu. Pour mieux comprendre, avoir un regard sur le schéma suivant :
Manettes de jeu ayant une amplitude circulaire de mouvement, que vous avez un problème que vous n’aurez seulement atteindre un maximum de X ou Y valeur lorsque vous êtes sur l’axe X ou Y. Donc si vous êtes sur toute position autre que 0, 90, 180 ou 270 ° vous jamais sera capable de rouler à pleine vitesse. En réduisant l’ampleur de la racine carrée de 2, vous pouvez être sûr que vous arriverez à pleine vitesse sur toutes les rubriques, et étant donné que la vitesse des roues tous obtenir normalisée par la suite vous n’avez pas à vous soucier de dépasser la vitesse maximale que peuvent atteindre les moteurs.
Calcul de la direction et la vitesse pour faire tourner les roues à quelle basé sur la manette d’entrée il y a deux façons courantes de représenter un point sur un plan 2d : coordonnées cartésiennes et coordonnées polaires. Pour généraliser notre code à n’importe quel contrôleur, nous avons utilisé polaire, bien que l’algorithme peut peut-être être plus compréhensible si nous regardons à la place il dans le système de coordonnées cartésiennes plus traditionnel. Prenons encore le cas de joysticks jumeaux utilisé pour contrôler le robot :
En faisant la somme des vecteurs de force pour chacune des directions primaires, nous pouvons obtenir un vecteur qui en résulte qui sera de la bonne grandeur et direction. Notez que le diagramme montre seulement les directions pour les valeurs positives de X, Y et Z (MovementX, MovementY et RotationX). Pour les valeurs négatives que s’inverserait simplement les flèches, le calcul reste le même. La dernière chose à que faire est de normaliser les valeurs pour qu’ils soient tous entre une grandeur d’échelle 0 et 1, eux par la vitesse maximale du moteur afin qu’ils correspondent à un pourcentage proportionnel de la vitesse max et ajouter le modificateur de direction :
Les frontLeftDir, les frontRightDir etc.... modificateurs sont utilisés pour inverser les valeurs pour les moteurs qui font face à la direction opposée. N’oubliez pas que deux des moteurs sont confrontés à un sens et les deux autres sont confrontés à l’effet inverse. Cela signifie que nous devons inverser les valeurs, car sinon les moteurs apparaîtra pour travailler dans le sens inverse (pensez à visser un boulon dans d’en haut versus sous le boulon).
Code complet
Vous pouvez télécharger le projet de Visual Studio complète ici :
Ce projet inclut du code pour s’interfacer avec la webcam. Vous pouvez en apprendre davantage sur l’interfaçage avec les webcams dans l' Amorce de Webcam USB.