Aller au contenu


Photo
- - - - -

Rover, RpLidar, Jetson nano, interrogations ???


25 réponses à ce sujet

#21 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 934 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 11 février 2023 - 09:44

Ta fonction "smartDelay" n'est pas assez " smart ... 

Elle est bloquante car tu utilises un while ... et pendant ce temps " bloquant" tu lis bien ton GPS mais pas ton lidar ... Du coup ton lidar te boude ;)
 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#22 Atmos

Atmos

    Membre occasionnel

  • Membres
  • Pip
  • 75 messages
  • Gender:Male

Posté 12 février 2023 - 05:05

Merci Mike,

Il me semblait bien que c'était ici le problème, mais je ne savais pas comment faire. (sans le smartDelay, le GPS ne fonctionne pas)

 

J'ai modifié mon code et cela fonctionne pas trop mal. Certainement à amélioré.... mais c'est bon


// ----------------------------------------------- Include
#include <Moteurs.h>
#include  <Gestion.h>

// ----------------------------------------------- Define
// #define DEBUG
#define AFFICHE
#define GPS
#define COMPAS
#define SDCARD

// ----------------------------------------------- Lidar
/*
  vert TX7, blanc RX7, bleu (3)
*/

#include <RPLidar.h>
  #define RPLIDAR_MOTOR 3
  RPLidar lidar;

  const int LIDAR_speed = 255;
  float minDistance     = 10000;
  float angleAtMinDist  = 0;
  float distOld         = 0;

  int val = 0;
 
  float Distance[] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
  float Angle[]    = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
  bool  Ok[]       = {0, 0, 0, 0, 0, 0};
  String A[]       = {"Distance FA : ", "Distance FD : ", "Distance DR : ", "Distance AR : ", "Distance GA : ", "Distance FG : "};

  #define FA 0
  #define FD 1
  #define DR 2
  #define AR 3
  #define GA 4
  #define FG 5

  #define FACE 360
  #define FACD  45
  #define DROI  90
  #define ARRI 180
  #define GAUC 270
  #define FACG 315
  #define CONS 4      // Constante

// ----------------------------------------------- Gps
#ifdef GPS
#include <TinyGPS++.h>
  TinyGPSPlus gps;
  static const uint32_t GPSBaud = 9600;
#endif

// ----------------------------------------------- Compas
#ifdef COMPAS
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_HMC5883_U.h>
  Adafruit_HMC5883_Unified mag = Adafruit_HMC5883_Unified(12345);
#endif

// ----------------------------------------------- SDCard
#ifdef SDCARD
#include <SD.h>
#include <SPI.h>
  File myFile;
  const int        chipSelect = BUILTIN_SDCARD;
  unsigned long currentTime  = 0;
  unsigned long previousTime = 0;
#endif

// ----------------------------------------------- Variables
struct SValeursRover
  {
    float distFA;
    float distFD;
    float distDR;
    float distAR;
    float distGA;
    float distFG;
    char  Date[12];
    char  Time[12];
    float distToWP;
    float distByOP;
    bool  Pivote;
    float Compas;
    float Degres;
    float Azimut;
    float Latitude;
    float Longitude;
    int   Satellites;
    int   Difference;
  };
  struct SValeursRover VR;

// ***********************************************************************
//                    SETUP
// ***********************************************************************
void setup()
{
#ifdef AFFICHE
  Serial.begin(115200);
#endif

//************************************************************************ RPLidar
//  Serial7.begin(115200);
  lidar.begin(Serial7);
  pinMode(RPLIDAR_MOTOR, OUTPUT);

//************************************************************************ Gps
#ifdef GPS
  Serial3.begin(GPSBaud);
#endif

//************************************************************************ Compas
#ifdef COMPAS
  if(!mag.begin())
  {
#ifdef DEBUG
    Serial.println("Initialization COMPAS Failed");
#endif
    while(1);
  }
#endif

//************************************************************************ SDCard
#ifdef SDCARD
  if (!SD.begin(chipSelect))
  {
#ifdef DEBUG
    Serial.println("Initialization SD Failed");
#endif
    return;
  }
#ifdef DEBUG
  Serial.println("Initialization SD Ok");
#endif
#endif
}

// ***********************************************************************
//                    LOOP
// ***********************************************************************
void loop()
{
  AssigneDistances();

  Autonome();

#ifdef AFFICHE
  Affiche();
#endif

#ifdef SDCARD
  currentTime = millis();
  if ((currentTime - previousTime) > 3000)
  {
    previousTime = currentTime;
     if (VR.distByOP > 0)           // Distance parcourue
    {
         AssigneGpsCom();
         MakeBuffer();
    }
  }
#endif
}

// ***********************************************************************
//                    AUTONOME
// ***********************************************************************
// *********************************************************************** Autonome
void Autonome()
{
  if (VR.distFA < 300) Serial.println("Stop Avance");
  else  Serial.println("     - Avance");

  if (VR.distAR < 300) Serial.println("Stop Arriere");
  else  Serial.println("     - Avance");
}

// ***********************************************************************
//                    FONCTIONS LIDAR
// ***********************************************************************
// *********************************************************************** Lidar
void AssigneDistances()
{
  while (val != 5)
  {
    if (IS_OK(lidar.waitPoint()))
    {
      float distance = lidar.getCurrentPoint().distance;
      float angle    = lidar.getCurrentPoint().angle;
      bool  startBit = lidar.getCurrentPoint().startBit;
      byte  quality  = lidar.getCurrentPoint().quality;

    // if (distance > 0 && distance < minDistance)
    // if (distance > 0 && quality > 15)

      if (distance > 10)
      {
         val = GetLidar(distance, angle, quality);
      }
    }
    else
    {
      analogWrite(RPLIDAR_MOTOR, 0);

      rplidar_response_device_info_t info;

      if (IS_OK(lidar.getDeviceInfo(info, 100)))
      {
        lidar.startScan();
        analogWrite(RPLIDAR_MOTOR, LIDAR_speed);
        delay(1000);
      }
    }
  }
  if (val == 5)
  {
    val = 0;
    return;
  }
}

// *********************************************************************** Lidar
int GetLidar(float dis, float ang, byte qua)
{
    if (ang <= FACE && ang > (FACE - CONS))
    {
      if (!Ok[FA])
      {
        Distance[FA]  = dis;
        VR.distFA     = dis;
        Angle[FA]     = ang;
        Ok[FA]        = 1;
      }
    }
    if (ang <= FACG && ang > (FACG - CONS))
    {
      if (!Ok[FG])
      {
        Distance[FG]  = dis;
        VR.distFG     = dis;
        Angle[FG]     = ang;
        Ok[FG]        = 1;
      }
    }
    if (ang <= GAUC && ang > (GAUC - CONS))
    {
      if (!Ok[GA])
      {
        Distance[GA]  = dis;
        VR.distGA     = dis;
        Angle[GA]     = ang;
        Ok[GA]        = 1;
      }
    }
    if (ang <= ARRI && ang > (ARRI - CONS))
    {
      if (!Ok[AR])
      {
        Distance[AR] = dis;
        VR.distAR    = dis;
        Angle[AR]    = ang;
        Ok[AR]        = 1;
      }
    }
   if (ang <= DROI && ang > (DROI - CONS))
     {
      if (!Ok[DR])
      {
        Distance[DR] = dis;
        VR.distDR    = dis;
        Angle[DR]    = ang;
        Ok[DR]        = 1;
      }
    }
   if (ang <= FACD && ang > (FACD - CONS))
     {
      if (!Ok[FD])
      {
        Distance[FD] = dis;
        VR.distFD    = dis;
        Angle[FD]    = ang;
        Ok[FD]        = 1;
      }
    }


  if (Ok[FA] && Ok[FG] && Ok[GA] && Ok[AR] && Ok[DR] && Ok[FD])
  {
    Ok[FA] = 0;
    Ok[FG] = 0;
    Ok[GA] = 0;
    Ok[AR] = 0;
    Ok[DR] = 0;
    Ok[FD] = 0;
    return 5;
  }
  else return 0;
}




#23 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 934 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 12 février 2023 - 09:34

Il te manque la lecture du GPS dans ce nouveau code.


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#24 Atmos

Atmos

    Membre occasionnel

  • Membres
  • Pip
  • 75 messages
  • Gender:Male

Posté 13 février 2023 - 01:58

Je n'ai rien changé concernant le code pour le Gps et le Compas.

 

Pense tu que on pourrait améliorer la fonction smartDelay ? (C'est juste la fonction de l'exemple de la library TinyGps++)



#25 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 934 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 15 février 2023 - 12:25

Je n'ai rien changé concernant le code pour le Gps et le Compas.

 

En fait je viens de comprendre que tu as pas remis tout le code, juste le début du code en fait ... D'où ma remarque comme quoi il manque du code dans ton dernier message ... Mais en effet si tu as rien changé je peux revoir les fonctions dans ton message d'avant ... 

 

 

 

Pense tu que on pourrait améliorer la fonction smartDelay ? (C'est juste la fonction de l'exemple de la library TinyGps++)

Oui on peut améliorer la fonction smartDelay, pour cela il faut lire le lidar dedans ... Tu peux éventuellement appeler à l'intérieur ta fonction AssigneDistances() 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#26 Atmos

Atmos

    Membre occasionnel

  • Membres
  • Pip
  • 75 messages
  • Gender:Male

Posté 15 février 2023 - 12:47

Merci, je vais essayer.





Répondre à ce sujet



  


0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users