| [Résolu] Mon programme: un NXT frappeur de balle | |
|
|
Auteur | Message |
---|
gtkshroom Admin
Nombre de messages : 238 Age : 32 Localisation : France/Moselle(57) Date d'inscription : 03/11/2007
| Sujet: [Résolu] Mon programme: un NXT frappeur de balle Jeu 17 Avr - 21:41 | |
| Mon programme plante, il est encore en développement. Je n'en suis qu'au début du NXC, je suis en train d'apprendre et les tests sont presques concluants. ^^ test.nxc - Code:
-
// -*- coding: utf-8 -*- // Test: Hit Ball // In the latest versions of nbc, this line is implicit #include "NXCDefs.h"
#define NEAR 26 //cm
task main() { OnFwd(OUT_BC, 75); Wait(2000); SetSensorLowspeed(IN_4); while(true) { while(SensorUS(IN_4)>NEAR); OnFwd(OUT_A, 100); Wait(2000); OnRev(OUT_A, 100); Wait(2000); } OnRev(OUT_BC, 75); Wait(4000); }
Voilà, je souhaiterais que: - le robot avance tout droit (je pose la balle en cours de trajet); - la balle sur son chemin soit capter ultrasoniquement; - le robot s'arrête; - frappe la balle avec seulement 2 rotations du 3ème servo-moteur à 50% de la puissance(le moteur A) pour ne pas cogner les 2 branches, qui frappent la balle, contre le châssis. - reparte sur son chemin en marche arrière ou demi-tour. Avis au spécialiste du NXC, votre aide est requise pour m'aider à compléter et corriger ce script. Pour l'instant, je vais stopper l'ordi, je suis crevé. ++ les NXT Addicts. J'ai 2 photos de mon modèle je les poste demain.
Dernière édition par microsco-puce le Sam 19 Avr - 21:44, édité 1 fois | |
|
| |
eldege Expérimenté
Nombre de messages : 76 Age : 41 Localisation : Paris Date d'inscription : 13/04/2008
| Sujet: Re: [Résolu] Mon programme: un NXT frappeur de balle Jeu 17 Avr - 22:31 | |
| Si je ne me trompe pas : OnFwd => Met en marche le moteur OnRev => Met en marche inverse le moteur Deux possibilités : - Soit il additionne la vitesse actuel avec la nouvelle donc dans ton cas, elle s'arrête - Soit le moteur tourne à l'inverse, ce qui n'est pas ce que tu veux. J'aurais utilisé : Off(OUT_BC) Je pense que ton robot fait : - Avance - Voit la balle - Marche du moteur A - Marche inverse du moteur A et il boucle sur le moteur A Donc je dirais qu'il avance, et quand il voit la balle, il active le moteur A. Pourquoi ? Tu as une boucle while(true) Donc qu'il n'a pas de condition pour sortir Le seul moyen est d'avoir dans le code, la fonction break; En faite, j'aurais mis : - Code:
-
OnFwd(OUT_BC, 75); Wait(2000); SetSensorLowspeed(IN_4); while(SensorUS(IN_4)>NEAR); Off(OUT_BC); OnFwd(OUT_A, 100); Wait(2000); Off(OUT_A); OnRev(OUT_A, 100); Wait(2000); Off(OUT_A); OnRev(OUT_BC, 75); Wait(4000); Off(OUT_BC);
| |
|
| |
manawy Grand Maître
Nombre de messages : 243 Age : 36 Localisation : Morbihan(56) Date d'inscription : 02/01/2008
| Sujet: Re: [Résolu] Mon programme: un NXT frappeur de balle Jeu 17 Avr - 23:29 | |
| Eldege a tout à fait raison voici ce que je proposerai : - Code:
-
// Test: Hit Ball #define NEAR 26 //cm
task main() { SetSensorLowspeed(IN_4); // initialisation du capteur OnFwd(OUT_BC, 75); // mise en marche
while(SensorUS(IN_4)>NEAR); Off(OUT_BC); RotateMotor(OUT_A,50,200); RotateMotor(OUT_A,-50,200); OnRev(OUT_BC, 75); Wait(4000); Off(OUT_BC); } La ligne "#-*- coding: utf-8 -*-" ne sert à rien ! La brique NXT ne gère que l'ASCII donc il ne faut pas utiliser cette ligne est éviter d'utiliser tout accent (de toute façon ça fait planter le compilateur ) Ensuite, préfère initialiser le capteur ultrason dès le début, il met un petit temps à s'initialiser; Puis supprime la boucle while ou comme l'as dit eldege impose une condition et un break pour pouvoir en sortir un jour ! Et préfère aussi RotateMotor pour bouger le moteur A, il me semble que cette fonction convient mieux Il faut en effet stopper les moteurs sinon ton robot continuera à avancer ! | |
|
| |
gtkshroom Admin
Nombre de messages : 238 Age : 32 Localisation : France/Moselle(57) Date d'inscription : 03/11/2007
| Sujet: Re: [Résolu] Mon programme: un NXT frappeur de balle Ven 18 Avr - 11:42 | |
| Merci mes sauveurs! J'ai lu vos remarques et j'ai bien compris mes erreurs. Faut dire que j'ai mis quelques heures à déjà bien construire mon modèle, établir un programme simple fut compliqué dans un état de fatigue après-lego(j'exagère un peu). Je vais rectifier et tester tout ça. Pour la fonction RotateMotor, la 2ème valeur est l'angle? J'ai calculé, il faut un quart de tour du servomoteur A pour bien ouvrir les branches sans les cogner contre le châssis, le tout à 100% de la puissance de ce moteur pour bien frapper la balle. Donc c'est quelle valeur pour un quart de tour? Et pour le while, je me doutais que c'était une boucle interminable et qu'il se plantait à chaque test. Ma logique était un peu à coté de la plaque, hier soir. | |
|
| |
eldege Expérimenté
Nombre de messages : 76 Age : 41 Localisation : Paris Date d'inscription : 13/04/2008
| Sujet: Re: [Résolu] Mon programme: un NXT frappeur de balle Ven 18 Avr - 11:58 | |
| En regardant dans Guide NXC - Code:
-
RotateMotor(outputs, pwr, angle) Function Run the specified outputs forward for the specified number of degrees. Outputs can be a constant or a variable containing the desired output ports. Predefined output port constants are defined in Table 20. RotateMotor(OUT_A, 75, 45); // forward 45 degrees RotateMotor(OUT_A, -75, 45); // reverse 45 degrees Personnelemnt, j'ai regardé ce guide pour te répondre car je ne connaissais pas les fonctions NXT | |
|
| |
gtkshroom Admin
Nombre de messages : 238 Age : 32 Localisation : France/Moselle(57) Date d'inscription : 03/11/2007
| Sujet: Re: [Résolu] Mon programme: un NXT frappeur de balle Ven 18 Avr - 12:09 | |
| Merki, sur les 253 pages de ce guides, j'ai sûrement dû louper cette précision. | |
|
| |
manawy Grand Maître
Nombre de messages : 243 Age : 36 Localisation : Morbihan(56) Date d'inscription : 02/01/2008
| Sujet: Re: [Résolu] Mon programme: un NXT frappeur de balle Ven 18 Avr - 12:17 | |
| sachant que si on ne sait plus où mettre le moins, on peut le mettre au deux ^^ la fonction vérifie et change, mais il est plus logique de le mettre sur la vitesse | |
|
| |
gtkshroom Admin
Nombre de messages : 238 Age : 32 Localisation : France/Moselle(57) Date d'inscription : 03/11/2007
| Sujet: Re: [Résolu] Mon programme: un NXT frappeur de balle Ven 18 Avr - 12:38 | |
| Les tests avec le capteur à ultrasons sont pas vraiments au top, plus de 4 fois sur 5 le robot ne voit pas la balle et continue bêtement. Je vais donc le remplacer par le capteur photosensible, je pense que la précision sera meilleure avec la lumière et les couleurs. Le défaut du capteur à ultrasons est d'être plus large que le diamètre de la balle. La boîte du paquet de carte était plus facile à frapper que la balle rouge de set NXT. | |
|
| |
gtkshroom Admin
Nombre de messages : 238 Age : 32 Localisation : France/Moselle(57) Date d'inscription : 03/11/2007
| Sujet: Re: [Résolu] Mon programme: un NXT frappeur de balle Ven 18 Avr - 15:01 | |
| Voilà, ce programme marche à merveille. J'ai changé le capteur et je vais améliorer les branches pour augmenter la surface de contact de le balle(elle s'échappe parfois quand le robot l'attrape). Un nouveau topic va être fait pour présenter le tout. | |
|
| |
Contenu sponsorisé
| Sujet: Re: [Résolu] Mon programme: un NXT frappeur de balle | |
| |
|
| |
| [Résolu] Mon programme: un NXT frappeur de balle | |
|