NXT Community
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.


Le forum de la communauté WikiNXT.
 
AccueilPortailRechercherDernières imagesS'enregistrerConnexion
Le Deal du moment :
Pokémon EV06 : où acheter le Bundle Lot ...
Voir le deal

 

 [Résolu] Mon programme: un NXT frappeur de balle

Aller en bas 
3 participants
AuteurMessage
gtkshroom
Admin
Admin
gtkshroom


Nombre de messages : 238
Age : 32
Localisation : France/Moselle(57)
Date d'inscription : 03/11/2007

[Résolu] Mon programme: un NXT frappeur de balle Empty
MessageSujet: [Résolu] Mon programme: un NXT frappeur de balle   [Résolu] Mon programme: un NXT frappeur de balle Icon_minitimeJeu 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. Langue

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
Revenir en haut Aller en bas
http://louis.scheidt.free.fr/wiki/
eldege
Expérimenté
Expérimenté
avatar


Nombre de messages : 76
Age : 41
Localisation : Paris
Date d'inscription : 13/04/2008

[Résolu] Mon programme: un NXT frappeur de balle Empty
MessageSujet: Re: [Résolu] Mon programme: un NXT frappeur de balle   [Résolu] Mon programme: un NXT frappeur de balle Icon_minitimeJeu 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);
Revenir en haut Aller en bas
http://clandragoon.free.fr
manawy
Grand Maître
Grand Maître
manawy


Nombre de messages : 243
Age : 36
Localisation : Morbihan(56)
Date d'inscription : 02/01/2008

[Résolu] Mon programme: un NXT frappeur de balle Empty
MessageSujet: Re: [Résolu] Mon programme: un NXT frappeur de balle   [Résolu] Mon programme: un NXT frappeur de balle Icon_minitimeJeu 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 ! Smile
Revenir en haut Aller en bas
gtkshroom
Admin
Admin
gtkshroom


Nombre de messages : 238
Age : 32
Localisation : France/Moselle(57)
Date d'inscription : 03/11/2007

[Résolu] Mon programme: un NXT frappeur de balle Empty
MessageSujet: Re: [Résolu] Mon programme: un NXT frappeur de balle   [Résolu] Mon programme: un NXT frappeur de balle Icon_minitimeVen 18 Avr - 11:42

Merci mes sauveurs! Lego Laugh

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. =S

Un grand grand merci pour vos explications!
Revenir en haut Aller en bas
http://louis.scheidt.free.fr/wiki/
eldege
Expérimenté
Expérimenté
avatar


Nombre de messages : 76
Age : 41
Localisation : Paris
Date d'inscription : 13/04/2008

[Résolu] Mon programme: un NXT frappeur de balle Empty
MessageSujet: Re: [Résolu] Mon programme: un NXT frappeur de balle   [Résolu] Mon programme: un NXT frappeur de balle Icon_minitimeVen 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

Wink
Revenir en haut Aller en bas
http://clandragoon.free.fr
gtkshroom
Admin
Admin
gtkshroom


Nombre de messages : 238
Age : 32
Localisation : France/Moselle(57)
Date d'inscription : 03/11/2007

[Résolu] Mon programme: un NXT frappeur de balle Empty
MessageSujet: Re: [Résolu] Mon programme: un NXT frappeur de balle   [Résolu] Mon programme: un NXT frappeur de balle Icon_minitimeVen 18 Avr - 12:09

Merki, sur les 253 pages de ce guides, j'ai sûrement dû louper cette précision. Smile
Revenir en haut Aller en bas
http://louis.scheidt.free.fr/wiki/
manawy
Grand Maître
Grand Maître
manawy


Nombre de messages : 243
Age : 36
Localisation : Morbihan(56)
Date d'inscription : 02/01/2008

[Résolu] Mon programme: un NXT frappeur de balle Empty
MessageSujet: Re: [Résolu] Mon programme: un NXT frappeur de balle   [Résolu] Mon programme: un NXT frappeur de balle Icon_minitimeVen 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 Smile
Revenir en haut Aller en bas
gtkshroom
Admin
Admin
gtkshroom


Nombre de messages : 238
Age : 32
Localisation : France/Moselle(57)
Date d'inscription : 03/11/2007

[Résolu] Mon programme: un NXT frappeur de balle Empty
MessageSujet: Re: [Résolu] Mon programme: un NXT frappeur de balle   [Résolu] Mon programme: un NXT frappeur de balle Icon_minitimeVen 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. Langue
Revenir en haut Aller en bas
http://louis.scheidt.free.fr/wiki/
gtkshroom
Admin
Admin
gtkshroom


Nombre de messages : 238
Age : 32
Localisation : France/Moselle(57)
Date d'inscription : 03/11/2007

[Résolu] Mon programme: un NXT frappeur de balle Empty
MessageSujet: Re: [Résolu] Mon programme: un NXT frappeur de balle   [Résolu] Mon programme: un NXT frappeur de balle Icon_minitimeVen 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. Very Smile
Revenir en haut Aller en bas
http://louis.scheidt.free.fr/wiki/
Contenu sponsorisé





[Résolu] Mon programme: un NXT frappeur de balle Empty
MessageSujet: Re: [Résolu] Mon programme: un NXT frappeur de balle   [Résolu] Mon programme: un NXT frappeur de balle Icon_minitime

Revenir en haut Aller en bas
 
[Résolu] Mon programme: un NXT frappeur de balle
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» hitball.nxc [programme basique]

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
NXT Community :: Robotique :: Lego® MindStorms® NXT-
Sauter vers:  
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser