Cours:TPS 2103 tp pixy : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
Ligne 5 : Ligne 5 :
 
Vous allez faire un '''tracking de balle de tennis''' avec une caméra pixy et un servomoteur.
 
Vous allez faire un '''tracking de balle de tennis''' avec une caméra pixy et un servomoteur.
  
 +
 +
=Mise en garde contre les loop/setup=
 +
 +
Si vous n'écrivez pas la fonction {{Rouge|main}} mais à la place les fonctions {{Rouge|loop/setup}}, le {{Rouge|"main Arduino" est exécuté}}.
 +
 +
Son code est à peu près :
 +
<source lang=cpp>
 +
int main(void)
 +
{
 +
init();
 +
setup();
 +
while(1)
 +
        {
 +
loop();
 +
}
 +
}
 +
</source>
 +
 +
Attention, la fonction {{Rouge|init()}} modifie la configuration des {{Rouge|Timers}} au démarrage du µcontrôleur.
 +
Il conviendra donc de {{Rouge|réinitialiser}} les bits des {{Rouge|registres des Timers}}
 +
 +
 +
************************************************************
 +
** lorsque c'est possible, il est plus judicieux d'écrire **
 +
** la fonction main dans votre programme                  **
 +
************************************************************
  
 
=pixymon=
 
=pixymon=

Version du 24 mars 2024 à 19:12

Fiche résumé

Retour à la liste des Tds/Tps

Éléments de correction


Vous allez faire un tracking de balle de tennis avec une caméra pixy et un servomoteur.


Mise en garde contre les loop/setup

Si vous n'écrivez pas la fonction main mais à la place les fonctions loop/setup, le "main Arduino" est exécuté.

Son code est à peu près :

int main(void)
{
	init();
	setup();
 	while(1)
        {
		loop();
	}
}
Attention, la fonction init() modifie la configuration des Timers au démarrage du µcontrôleur.
Il conviendra donc de réinitialiser les bits des registres des Timers


************************************************************
** lorsque c'est possible, il est plus judicieux d'écrire **
** la fonction main dans votre programme                  **
************************************************************

pixymon

Le logiciel pixymon permet de configurer la caméra pixy, connectée en usb :

https://docs.pixycam.com/wiki/doku.php?id=wiki:v2:teach_pixy_an_object_2

Todo.jpg lancer le logiciel pour reconnaître les balles de tennis :

  • dans le menu File, remettre les paramètres par défaut
  • dans le menu Action, définir la couleur de la signature 1

Librairie arduino

sur la page suivante: https://pixycam.com/downloads-pixy2/

Todo.jpg Télécharger et installer la librairie arduino pour la pixy

Todo.jpg Utiliser le programme d'exemple de la librairie pixy ccc_hello_world pour vérifier le bon fonctionnement


Affichage de la position de la balle

Nous allons utiliser le shield LCD (cf TP précédent) pour afficher des informations sur l'objet détecté par la caméra pixy.

En utilisant la documentation sur la page suivante :

https://docs.pixycam.com/wiki/doku.php?id=wiki:v2:hooking_up_pixy_to_a_microcontroller_-28like_an_arduino-29#arduino-api

Question.jpg Afficher sur le l'écran LCD les coordonnées du centre de la balle de tennis


Rotation de la caméra

La caméra est montée sur un servomoteur que vous allez piloter pour centrer la balle sur l'image de la caméra.

Servomoteur

Nous avons vu dans un TP la configuration du timer pour utiliser un servomoteur. A défaut, vous pouvez utiliser la librairie servo.

Todo.jpg connecter le servomoteur sur le connecteur CON_MLI en utilisant la page suivante : Cours:ShieldNanoinfo

Position de la balle

Todo.jpg Faire en sorte que l'abscisse de la balle (variable positionBalle) soit comprise entre [-158 158], 0 au centre de l'image

Rque : pixy.ccc.blocks[i].m_x est une valeur entre 0 et 316

Déplacement dans la direction de la balle

Il reste à tout assembler.

Question.jpg Ecrire un programme qui change la position du servomoteur suivant le signe de posBalle :

  • si posBalle est positif, augmenter la position du servomoteur
  • si posBalle est négatif, diminuer la position du servomoteur
  • ou le contraire !

Rque :

  • Attention à ne pas dépasser les positions maxi/mini du servo

Correcteur proportionnel

Question.jpg Ecrire un programme qui change la position du servomoteur de façon plus efficace de la façon suivante :

PositionServo = PositionServo + k . positionBalle

Rque :

  • Attention à ne pas dépasser les positions maxi/mini du servo