NXT 2.0 et RobotC

Pour expliquer certains fonctionnements, principes et fondements.
Murielle
Level 1
Level 1
 
Messages: 8
Âge: 48 ans

Messagepar Murielle » Dim Avr 29, 2012 6:02 pm

Bonjour à tous,

J'aimerais recenser les utilisateurs de RobotC afin d'échanger sur son utilisation. Eventuellement créer ensemble (ou alors je le fais seule) un tutoriel car pour l'instant j'ai découvert celui-ci mais il ne me convient pas complètement.
Je précise que je suis enseignante et que cette année j'ai découvert ce logiciel et essayé de l'utiliser avec mes élèves.

Voici par exemple le programme que je viens de faire pour cette voiture (lien) avec roues un peu plus petites et engrenages de direction plus précis.

Code: Tout sélectionner
#pragma config(Sensor, S1,     touchG,         sensorTouch)
#pragma config(Sensor, S2,     touchD,         sensorTouch)
#pragma config(Sensor, S3,     couleur,        sensorCOLORFULL)
#pragma config(Sensor, S4,     sonar,          sensorSONAR)
#pragma config(Motor,  motorA,          moteur,        tmotorNormal, PIDControl, encoder)
#pragma config(Motor,  motorB,          rotationDr,    tmotorNormal, PIDControl, encoder)
//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//

void avancer(int distcm)                                   //*  23,5 degres par cm
{ nMotorEncoder[moteur]=0;   
  int codeurmoteur=0;
      while(abs(nMotorEncoder[moteur]) <= abs(distcm*23.5))        // tant que les roues n'ont pas tourné suffisamment
      {        if (abs(distcm)==distcm)                                     //distcm est l'angle passé en paramètre
            motor[moteur] = 75;                                                       //distance positive, on avance
            else
            motor[moteur] = -75;                                                      //distance négative, on recule
            codeurmoteur=nMotorEncoder[moteur];
            }           
      motor[moteur]=0;                            //sinon, la voiture continue à avancer mais j'ai conscience que ceci n'est pas précis.
}

void tourner(int angleR)                                   //sur mon modèle, l'angle du moteur B va de -120  120 (les roues tournent d'environ 20degrés)
{ int signe=0;         
    nMotorEncoderTarget[rotationDr]=angleR;    // définition de l'angle cible
        if (angleR>nMotorEncoder[rotationDr])     
          signe=1;                                                // tourne vers la droite
          else  signe=-1;                                       // tourne vers la gauche
        motor[rotationDr] = signe*75;                   //75 pourcent de la puissance (dans le bon sens)
        while(nMotorRunState[rotationDr]!=runStateIdle)
          {    }                                            //attendre sans rien faire
        motor[rotationDr] = 0;                             //arreter le moteur
      }

void tournerdroite()                                         // nous définissons ici un angle droit (suite à de multiples essais sur le modèle construit)
{for (int i=1; i<=2; i+=1)
 {
 tourner(220);
  avancer(12);
  tourner(-220*2);
  avancer(-12);
  tourner (220);
  }avancer(-5);
}

int angleHasard()                                          //   la fonction angleHasard délivre un angle  entre -160 et -70  ou 70 et 160 
{
   /*   déclaration des variables locales    */
   int signe = pow(-1,random(1));                      // signe +1 ou -1
   int angle = signe*(70+random(90));                // un angle inférieur à 70 degré n'est pas suffisant pour modifier la direction concrètement.
   return angle;            /*  retour a l'appelant en délivrant résultat  */
}

task main()
{int droit=SensorValue[touchD];
int gauche=SensorValue[touchG];
int dist=SensorValue[sonar];
int obstacle=0;
while (obstacle<10)                                  //la voiture s'arrêtera après 10 obstacles
  {
      while (dist>20 && (droit+gauche)==0)         //si on se trouve a moins de 20cm d'un obstacle ou si le parechoc arrière touche qqch
         {
            motor[moteur]=50;
            dist=SensorValue[sonar];
            droit=SensorValue[touchD];
                           gauche=SensorValue[touchG];
         }
      int angle=angleHasard();
      avancer(-30);                                            //On s'éloigne de l'obstacle
      tourner(angle);                                          //On tourne de l'angle aléatoire vers la fauche ou vers la droite
      avancer(20);                                              //On avance avec les roues tournées
         tourner (-2*angle);                             //On tourne les roues dans l'autre sens
         avancer (-20);                                   //On recule avec les roues tournées dans l'autre sens
         tourner(angle);                                  //On replace les roues dans l'axe de la voiture.
         obstacle +=1;                                     //On incrémente la variable obstacle pour pouvoir quitter la boucle While après 10 obstacles
         dist=SensorValue[sonar];                    //On reprend la valeur du sonar (faut-il encore tourner)
         droit=SensorValue[touchD];                //On reprend la valeur du "Touchsensor" arrière droit (1 s'il est enfoncé, 0 sinon)
                        gauche=SensorValue[touchG];
         }

}


J'espère trouvé ici des personnes qui m'aideront à mieux comprendre les différentes fonctions proposées par RobotC. :petuncable:
Merci 8)

Avatar de l’utilisateur
Alban42800
Level 11
Level 11
 
Messages: 2473
Localisation: Loire (42)
Âge: 50 ans
expertgbbexpertnxtvainqueurconcours

Messagepar Alban42800 » Dim Avr 29, 2012 6:40 pm

Bienvenue sur le forum Murielle !

Ayant fait le coupe de France robotique en NXT et en RobotC (ici : http://www.techlug.fr/Forum/topic4467.html) je pourrai répondre à toutes tes questions.
Pour la création du tutoriel c'est pas trop mon truc et je n'ai pas le temps.
Roboléo en a fait un pour NXT-G V1 et V2 (ici : http://www.techlug.fr/Forum/topic1409.html) qui peuvent être une base de départ pour la conversion en RobotC.

Si tu veux de la précision dans les déplacements il va falloir :
1- Passer sur un robot à conduite différentielle (plus simple mécaniquement)
2- Se plonger progressivement dans le PiD (un suiveur de ligne serait bien pour commencer ce sujet)

J'avais fait des exercices basiques qui peuvent être approfondis au plus haut niveau : http://www.techlug.fr/Forum/search.php?keywords=exercice&terms=all&author=&sc=1&sf=titleonly&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Rechercher

Murielle
Level 1
Level 1
 
Messages: 8
Âge: 48 ans

Messagepar Murielle » Dim Avr 29, 2012 7:50 pm

Merci Alban pour ta réponse. Je suis contente d'avoir trouvé un interlocuteur aussi rapidement.
Je vais me pencher sur le tutoriel que tu me proposes, essayer de le transformer en tutoriel RobotC... quand j'aurai le temps :petuncable:

Aurais-tu un modèle de robot à conduite différentiel à me proposer?

A bientôt!

Lego_BM
Level 1
Level 1
 
Messages: 2

Messagepar Lego_BM » Jeu Mai 17, 2012 10:09 am

Bonjour,

j'utilse Nxt 2.0 et Robotc 3.08.
Pas encore expert dans la programmation, j'aime creer mes propres modèles en travaillant, par exemple, sur l'automatisation de leur deplacement.
je suis actuellement sur la creation d'un robot type Chaos Bot.

Le tutoriel est une bonne idee et correspond, je suis sûr, a un vrai besoin notament avec des dispositifs. non lego. Exemple : je cherche partout comment installer le multiplexeur NxtMmx V2 de Mindsensors sans succès. je ne sais pas comment parametrer Robotc.

Content de voir ce forum aussi reactif et si je peux donner un coup de main a la creation de ce tutotriel c'est avec plaisir.

A bientôt.

.

Thibaud
Level 6
Level 6
 
Messages: 333
Localisation: Paris
expertnxt

Messagepar Thibaud » Lun Mai 21, 2012 10:10 am

Pour ce qui est des capteurs/MUX d'autres constructeur il faut jeter un coup d'oeil sur les drivers créer par Xander.

http://botbench.com/blog/robotc-driver-suite/

Sinon l'idée d'un tuto me plais assez mais pareils pas trop de temps à y consacrer.
Venez voir mes créations ;) NXTGEN
-----
La team BrickBot

Avatar de l’utilisateur
FRED_80
Level 2
Level 2
 
Messages: 13
Localisation: France, Tourcoing

Messagepar FRED_80 » Mar Mai 29, 2012 2:41 pm

Bonjour à toutes et à tous.

Le SIte du NXT est aussi à la recherche d'auteurs de tutoriels sur la programmation des NXT.

Nous proposons un module "contribution" pour celles et ceux qui voudrais aider la communauté par la rédaction de tutoriels ou de news.

Un tutoriel sur la programmation en Robot C serait le bienvenue.

Si cela vous intéresse, passez donc nous voir sur le site.

A+


Retourner vers De la théorie à la pratique

Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 6 invités