Articles les plus consultés

jeudi 18 octobre 2018

Cap a gauche ou à droite?

Nous avons enfin nos coordonnées et notre cap!
Il reste encore quelques petits calculs a faire:
Si notre mobile suit un capGPS à 30° et qu'il doit suivre un capDir à 230°, doit t'il tourner a droite ou a gauche pour se retrouver le plus rapidement possible dans l'axe de son nouveau cap?

C'est bien l'un des simple problème qui m'a pourtant donné le plus de fil a retordre!

J'ai fini par le résoudre en décidant de prendre CapDir comme référence et de calculer CapDir + 180 comme opposé + la correction nécessaire si CapDir + 180 dépasse les 360°... et en conditionnant que si "capGPS" empiète sur le secteur de 180° a droite de CapDir, le mobile doit virer a gauche...Et vice-versa...

Voici encore un dessin pour comprendre le principe et le bloc de programme Processing a mettre en œuvre pour les tests :

int capGPS = 81;
int capDir = 80;
int OpposeCapDir =0; // la valeur en degré de l'opposé de la diagonale de CapDir
int ComplementOpposeCapDir = 0; // si le calcul de la diagonale dépasse 360°
void setup() {
  size(200, 200);
  noLoop();
  println ( "capGPS = " +capGPS);
  println ("capDir ="+capDir);
}

void draw (){
  CarteDir();
}


void CarteDir(){
  if ( capGPS != capDir ){ // si égal, ne fait rien
  OpposeCapDir = capDir +180;
  //------------------------------------------------------
  if (OpposeCapDir <= 360){
    if ((capGPS > capDir) && (capGPS < OpposeCapDir)){
      println ("virage a gauche");
  } else {
      println ("virage a droite");
  }
  }
  
  if (OpposeCapDir > 360) {// débordement des 360°
  ComplementOpposeCapDir = OpposeCapDir - 360;
  if ((capGPS > capDir) || (capGPS < ComplementOpposeCapDir)){
    println ("virage a gauche");
  } else {
      println ("virage a droite");
    }
  }
  }
}
    
    



Note: Virage à droite = Allumage moteur gauche.
          Virage à gauche =  Allumage moteur droit.
Dans l'exemple ci-dessus, si "CapGPS" se trouve dans la partie en jaune, le mobile doit tourner sur la gauche pour se caler sur "CapDir". En effet, "CapGPS" est plus grand que "CapDir", mais plus petit que"OpposeCapDir" .
(Le mobile devrait tourner sur la droite si  "CapGPS"était plus grand que "OpposeCapDir", mais plus petit que "CapDir").
 Le calcul n'est pas compliqué...
 Dans l'exemple ci-dessus, les choses se compliquent, car CapDir + 180 donne 430°, ce qui n'existe pas:
"ComplementOpposeCapDir" représente donc la partie qui "repart de zéro" et vient finaliser le demi-cercle quand "CapDir + 180°" dépasse les 360°...
Il faut finalement comparer si "CapGPS"est dans le secteur de "CapDir" à 360 ou de 0 à "ComplementOpposeCapDir"...
Si "CapGPS" se trouve dans ces secteurs, notre mobile doit virer a gauche pour se rapprocher de la direction "CapDir".
C'est assez difficile a interpréter, mais facile a comprendre si l'on se fait (comme moi) une maquette de compas en papier et carton...

Ouf!




Aucun commentaire:

Enregistrer un commentaire