Aller au contenu


Photo

Le p'tit robot Bob de Path [Complet]

devoirs de vacances

  • Veuillez vous connecter pour répondre
29 réponses à ce sujet

#21 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 11 juillet 2016 - 05:06

Je joue pas avec la fréquence :)

J'ai une fonction qui prend l'angle de départ, l'angle d'arrivée et le temps que je veux pour y aller.

Cette fonction est faite pour être appelée en boucle via loop(). Elle calcule la position fonction du temps déjà écoulé. Avec la fonction map() d'ailleurs :) Ça donne ceci : (j'ai élagué). En espérant que ça répond à ta question.

/**
 * retourne true si course finie
 */
boolean animeCourse(byte servoIndex, byte angleDebut, byte angleFin, unsigned long duree) {

  // on conserve l'heure de démarrage de l'animation
  if(animationStartTimestamps[servoIndex] == 0) {
    animationStartTimestamps[servoIndex] = millis();
  }

  unsigned long timePosition = millis() - animationStartTimestamps[servoIndex];
  // On map la position angulaire sur la durée de la course.
  long angle = map(timePosition, 0, duree, angleDebut, angleFin);

  // On défini les bornes
  if(angleFin > angleDebut) {
    if(angle > angleFin) angle = angleFin;
  }
  else {
    if(angle < angleFin) angle = angleFin;
  }
  
  servos[servoIndex].write(angle);
  
  if(angle == angleFin) {
    // sert à synchroniser les couses des 4 servos
    animationFiniFlags[servoIndex] = true;
    return true;
  }
  return false;
}



#22 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 758 messages
  • Gender:Male
  • Interests:Glenn

Posté 11 juillet 2016 - 05:39

Merci, à chaque fois j'essaye de retranscrire ce que je lis en python lol :)

Pas toujours évident ^^

 

Mais je vais bien lire tout ça et essayer de trouver une correspondance, déjà qu'avec ce que tu m'a filé pour le map j'ai réussi à faire un truc, je posterai le code pour voir ce que vous en pensez les gars ^^

J'essaye juste de bien peaufiner le truc avant de m'attaquer à cette histoire de accélération et décélération.

 

Merci.


signature_01.png -->

 

Mon Tipeee
 


#23 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 11 juillet 2016 - 06:27

J'ai presque fini le code. Et je but sur un pb de C.  J'ai besoin d'un tableau à plusieurs dimensions. 

 

J'ai un premier niveau dont le connais la taille. Pour le 2e niveau, j'ai des tailles différentes entre elles.

 

 

C'est possible dans le C/C++ d'arduino ?

 

 

Du coup, quelqu'un sait ?



#24 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 732 messages
  • Gender:Male

Posté 11 juillet 2016 - 07:01

Il en parle ici, https://openclassroo...ation-dynamique
Je ne pourrai pas t'aider beaucoup plus, c'est loin...
----------------------------------------------
amis = malloc(nombreDAmis * sizeof(int));

Ce code permet de créer un tableau de type int qui a une taille correspondant exactement au nombre d'amis !

Voici ce que fait le programme dans l'ordre :

1.demander à l'utilisateur combien il a d'amis ;
2.créer un tableau de int ayant une taille égale à son nombre d'amis (via malloc) ;
3.demander l'âge de chacun de ses amis un à un, qu'on stocke dans le tableau ;
4.afficher l'âge des amis pour montrer qu'on a bien mémorisé tout cela ;
5.à la fin, puisqu'on n'a plus besoin du tableau contenant l'âge des amis, le libérer avec la fonction free.
----------------------------------

#25 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 11 juillet 2016 - 10:27

Merci Oracid, mais mon pb n'est pas sur l'allocation dynamique. Je connais la taille des tableaux au moment de la compilation. 

Je n'arrive pas à placer des tableaux de tailles différentes dans un premier tableau.

 

En clair, pour décrire les danses de Bob, j'ai des courses (parcours d'un secteur angulaire) pour chacun des 4 servos. Cela constitue un pas de danse. Et chaque danse est constitué de pas.

 

Cela me fait des tableaux de pas à 3 dimensions. Mais chaque danse à un nombre de pas différent des autres. J'aimerai mémoriser les danses dans un tableau. J'y arrive pas.

 

J'ai ça :

typedef struct {
  byte angleDebut;
  byte angleFin;
  unsigned long duree;
} Course;
typedef Course Servos[NOMBRE_SERVO];

typedef Servos PasDanse0[NOMBRE_PAS_DANSE_0];
PasDanse0 danse0;
typedef Servos PasDanse1[NOMBRE_PAS_DANSE_1];
PasDanse1 danse1;

Les danses se décrivent comme ça : 

  // pas / servo / course
  danse0[0][SERVO_PIED_GAUCHE] = {MID_PIED_GAUCHE, MAX_PIED_GAUCHE, 1000};
  ...

J'aimerai pouvoir déclarer un tableau danses pour y mémoriser danse0 et danse1.

 

Ça me parait con mais je trouve pas.



#26 Guigz65

Guigz65

    Membre occasionnel

  • Membres
  • Pip
  • 137 messages
  • Gender:Male
  • Location:33 - Nord Gironde

Posté 12 juillet 2016 - 08:18

Il me semble que Mobbob utilise ce que tu recherche, regarde son code à cette adresse : https://github.com/cevinius/MobBob



#27 Telson

Telson

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 975 messages
  • Gender:Male
  • Location:Punaauai - Tahiti

Posté 12 juillet 2016 - 10:32

Houlalaaaaaaaaaaaaa en plus un super exemple de com. bluetooth.....Maruru Roa

#28 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 12 juillet 2016 - 11:39

Wow merci Guigz, c'est vraiment bien ce que tu as fait !!

J'ai tenté de comprendre ce que tu as dans ton code. Dis-moi si je raconte des conneries :)

Tu décris tes animations avec

int shakeRightLegAnim[][5] = { ...

C'est ce qui correspond à mes pas de danse.

 

Après tu t'en sers dans ces fonctions 

void PlayAnimNumTimes(int animToPlay[][5], int finishAnim[][5], int numTimes, char *completeStr) { ...

Je comprends la signature animToPlay[][5] de tes animations ;)

J'ai vu aussi, la première ligne de méta-données avec le nombre de lignes ;)

 

Si c'est bien cela que tu voulais me montrer.

 

 



#29 Guigz65

Guigz65

    Membre occasionnel

  • Membres
  • Pip
  • 137 messages
  • Gender:Male
  • Location:33 - Nord Gironde

Posté 12 juillet 2016 - 11:45

Oula non non pas de méprise je ne suis pas l'auteur du code, c'est un dérivé du robot Bob qui utilise un téléphone pour piloter le robot (le téléphone devient partie intégrante du robot). L'auteur est Cevinius et son site web est  : http://www.cevinius.com/mobbob/.

 

J'ai réalisé ce petit robot et je compte m'en servir comme base pour un robot bipède lors d'une compétition de robot sur Toulouse en septembre.



#30 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 12 juillet 2016 - 02:26

Pas de pb, j'ai cru ^^

 

Là, c'est du code que j'ai pondu. Pour avoir des mouvements plus fluides et simultanés sur les servos.

 

 

Je pourrai améliorer le code en sortant les danses dans des classes dédiées. J'aurais aussi voulu éviter la petite fonction d'adaptation lié à ce problème de tableau qui doivent être équilibrés.

 

Reste à lui ajouter des danses. Là j'occupe 32% du stockage programmes et 30% de la mémoire dynamique.

 

Le code de la V1.1

 

Spoiler





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

0 members, 0 guests, 0 anonymous users