Aller au contenu


Photo
- - - - -

[PROJET GYROPODE] Robot équilibriste : Magellan !


160 réponses à ce sujet

#121 Esprit

Esprit

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 503 messages
  • Gender:Male
  • Location:Belgique

Posté 30 mars 2011 - 01:44

Merci Webshinra !



Pas d'idée pour le reste ?





[Edit : Les valeurs ont encore changé.

t : 23864; x : 12465; y : -9675; z : -3395



À croire qu'il faut chaque fois que j'attende un certain temps... Je comprends vraiment plus rien.





[Edit2 : Mon prof a trouvé... :)



Voici le code dans sa version actuelle :

// I2C library, gyroscope



#define GYRO_ADDR 0x68 // gyro address, binary = 110100x when AD0 is connected to Vcc (see schematics of your breakout board)

#define SMPLRT_DIV 0x15

#define DLPF_FS 0x16

#define INT_CFG 0x17

#define PWR_MGM 0x3E



#define TO_READ 8 // 2 bytes for each axis x, y, z



// offsets are chip specific.

int offx = 120;

int offy = 20;

int offz = 93;



//initializes the gyroscope

void initGyro()

{

/*****************************************

* ITG 3200

* power management set to:

* clock select = internal oscillator

* no reset, no sleep mode

* no standby mode

* sample rate to = 125Hz

* parameter to +/- 2000 degrees/sec

* low pass filter = 5Hz

* no interrupt

******************************************/



writeTo(GYRO_ADDR, PWR_MGM, 0x00);

writeTo(GYRO_ADDR, SMPLRT_DIV, 0x07); // EB, 50, 80, 7F, DE, 23, 20, FF

writeTo(GYRO_ADDR, DLPF_FS, 0x1E); // +/- 2000 dgrs/sec, 1KHz, 1E, 19

writeTo(GYRO_ADDR, INT_CFG, 0x00);



}





void getGyroscopeData()

{

/**************************************

Gyro ITG-3200 I2C

registers:

temp MSB = 1B, temp LSB = 1C

x axis MSB = 1D, x axis LSB = 1E

y axis MSB = 1F, y axis LSB = 20

z axis MSB = 21, z axis LSB = 22

*************************************/



int regAddress = 0x1B;

int temp, x, y, z;

byte buff[TO_READ];

char str[50]; // 50 should be enough to store all the data from the gyro



readFrom(GYRO_ADDR, regAddress, TO_READ, buff); //read the gyro data from the ITG3200



temp = (buff[0] << 8) | buff[1];

x = ((buff[2] << 8) | buff[3]) -88;// + offx;

y = ((buff[4] << 8) | buff[5]) -7;// + offy;

z = ((buff[6] << 8) | buff[7]) -5;// + offz;



//we send the x y z values as a string to the serial port

sprintf(str, "t : %d;\t x : %d;\t y : %d;\t z : %d", temp, x, y, z);

Serial.print(str);

Serial.print(10, BYTE);



}





void setup()

{

Serial.begin(9600);

Wire.begin();

initGyro();

}





void loop()

{

getGyroscopeData();

delay(1000);

}





//---------------- Functions

//Writes val to address register on device

void writeTo(int device, byte address, byte val) {

Wire.beginTransmission(device); //start transmission to device

Wire.send(address); // send register address

Wire.send(val); // send value to write

Wire.endTransmission(); //end transmission

}





//reads num bytes starting from address register on device in to buff array

void readFrom(int device, byte address, int num, byte buff[]) {

Wire.beginTransmission(device); //start transmission to device

Wire.send(address); //sends address to read from

Wire.endTransmission(); //end transmission



Wire.beginTransmission(device); //start transmission to device

Wire.requestFrom(device, num); // request 6 bytes from device



int i = 0;

while(Wire.available()) //device may send less than requested (abnormal)

{

buff[i] = Wire.receive(); // receive a byte

i++;

}

Wire.endTransmission(); //end transmission

}[/code]



Et vous savez où était le problème ?

À la deuxième ligne...



#define GYRO_ADDR 0x68 // gyro address (...)



Dans le code d'origine, c'était 0x69 donc il y avait juste un problème avec l'adresse du Gyro.

J'suis soulagé ! :p

#122 lordcuty

lordcuty

    Habitué

  • Membres
  • PipPip
  • 298 messages

Posté 30 mars 2011 - 07:48

donc tu as pus faire ta présentation?

#123 Esprit

Esprit

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 503 messages
  • Gender:Male
  • Location:Belgique

Posté 30 mars 2011 - 08:16

Ce n'était pas vraiment une présentation.
Je devais montrer à la prof les avancées du projet, ce que j'avais déjà fait, etc... Mais oui, ça s'est passé très bien. Elle avait l'air contente. ^^

#124 Hexa Emails

Hexa Emails

    Membre passionné

  • Membres
  • PipPipPip
  • 439 messages
  • Gender:Male

Posté 03 avril 2011 - 02:59

Salut!



Donc tu peux à présent relever accélérations et vitesses angulaires c'est bien ça? Ou je suis encore à côté de la plaque? ^^

Je pensais, j'ai une vielle base de voiture téléguidée qui traine, ainsi qu'un Wii Motion Plus (qui contient, selon Wikipédia, des capteurs gyroscopiques = vitesse angulaire?). J'ai aussi une contrefaçon de Wii Nunchuck (accéléromètre 3 axes de piètre qualité).



Est-ce que je dispose d'assez de capteurs pour faire un robot balancier sur 2 roues ou il faudrait investir?

Et où comptes-tu placer tes capteurs (aussi bien d’accélération linéaire que de vitesse angulaire)?

Parce que, à moins que je voie pas très bien le truc, les accélérations ne sont pas les mêmes partout sur ton robot?



Ah et je surveille toujours tes concurrents: voilà un gamin de 17 ans qui à réussi à me foutre une grosse claque. Il a suivi un tutoriel mais tout de même, je trouve que ça en jette.



Bonne continuation :)

#125 Esprit

Esprit

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 503 messages
  • Gender:Male
  • Location:Belgique

Posté 03 avril 2011 - 08:15

Il ne faut pas grand chose pour réaliser un robot gyropode "basique". La preuve ! Mon capteur est plutôt cher et presque trop puissant si le seul but est de faire tenir le robot en équilibre. (Je compte faire encore plein de chose d'autre avec une fois qu'il tiendra en équilibre... ;) )



Je pense que ton capteur de wii devrait suffire je pense. Tu as les références exactes et une datasheet ?

Après, ça sera à toi de jouer plus serré et de devoir bien faire tes asservissements pour qu'il se maintienne bien en équilibre mais je pense que c'est faisable.



Et merci pour les infos sur mes "concurrents" ! :D

#126 webshinra

webshinra

    Membre passionné

  • Membres
  • PipPipPip
  • 510 messages

Posté 03 avril 2011 - 10:29

par contre, tu risque de te battre un peu pour utilisé les deux capteurs wii en même temps puisqu'ils on la même adresse sur le port I2C, ( faut donc mettre un des fils en haute impédance pour qu'un seule reçoive le signal, c'est un peu chiant, mais tu peut le faire avec un 4066 facilement ). sinon, je pense que l’accéléromètre seul suffis pour faire tenir le robot droit.

#127 Esprit

Esprit

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 503 messages
  • Gender:Male
  • Location:Belgique

Posté 04 avril 2011 - 03:51

N'y a-t-il pas moyen de donner "à la main" une adresse différente pour les deux capteurs ?

#128 Jbot

Jbot

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 801 messages
  • Gender:Male
  • Location:Paris

Posté 04 avril 2011 - 04:02

C'est possible, il faut regarder dans la datasheet.
Les capteurs ultrason I2C ont leur adresse paramettrable en tout cas, donc c'est possible que ces capteurs puissent etre aussi parametrés.

#129 Hexa Emails

Hexa Emails

    Membre passionné

  • Membres
  • PipPipPip
  • 439 messages
  • Gender:Male

Posté 04 avril 2011 - 04:19

Pas de problème pour utiliser les 2 capteurs en même temps (En même temps c'est prévu pour hein, on peut jouer à la Wii avec les 2 en même temps). Il suffit de brancher le nunchuck dans le motion plus, et toutes les données sortent bien sagement du Motion Plus!

Je ne sais rien au niveau du Motion Plus, je sais que le nunchuck a un accéléromètre "linéaire" 3 axes 10 bits, mais aux dernières nouvelle il était vraiment pourri (après est-ce que c'était mon code ou l'accéléromètre lui-même...)

En tout cas ça me rassure un peu! parce que investir 50, voire 100€ dans un capteur...

Je vais tester le Motion Plus sur Arduino :)

Et au niveau de la position des capteurs? tout en haut du robot? le long de l'axe de rotation?

#130 Esprit

Esprit

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 503 messages
  • Gender:Male
  • Location:Belgique

Posté 04 avril 2011 - 04:57

Je n'ai pas vraiment de réponses pour la position des capteurs.
Je pensais pour ma part les mettre au milieu.

Mais sa position va changer les données...
Dans mon cas, avec mes capteurs, ça ne change pas pour le magnétomètre. (C'est les mêmes angles quelle que soit la hauteur où je mets le capteurs). Mais pour l'accéléromètre, ça va bouger. Et le gyro, je pense pas... Mais j'ai un doute, faudra que je teste.

Après tout dépend... Si ça bouge plus vite, est-ce que c'est vraiment intéressant ? Est-ce que ça ne va pas être plus dur de traiter les infos qu'ils renvoient ? Est-ce que ça ne va pas générer des parasites, etc... Je n'en sais encore trop rien.

#131 Hexa Emails

Hexa Emails

    Membre passionné

  • Membres
  • PipPipPip
  • 439 messages
  • Gender:Male

Posté 04 avril 2011 - 05:41

si tu mets ton accéléromètre trop bas, il renverras plus des informations sur la vitesse de ton robot que son tangage. Après comme tu dis ça dépend du type de donnée que tu veux... Je croyais que tu pourrais m'éclairer ^^'

Bon allez, vu que j'ai coupé mon cable de nunchuck (oui je sais c'est débile) je me lance avec juste un accéléromètre 3 axes!

#132 Jbot

Jbot

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 801 messages
  • Gender:Male
  • Location:Paris

Posté 04 avril 2011 - 05:57

Pour l'accéléromètre en effet ca va pas mal changer suivant ou tu le mets (perso je le mettrais en haut pour avoir de "grandes" accélérations, ce qui permettra de moins voir les parasites).
Pour les gyro, ca ne changera logiquement rien puisque tu sera sur le même axe de rotation que tu sois en bas ou en haut, ta vitesse angulaire sera la même logiquement.

#133 Esprit

Esprit

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 503 messages
  • Gender:Male
  • Location:Belgique

Posté 04 avril 2011 - 06:50

Donc il n'y a que l'accéléromètre pour lequel la position va changer. C'est bien ce que je pensais.
Je pensais faire un étage "électronique" au milieu, c'est pour ça que j'hésitais un peu à le mettre plus haut...

Dans ma vision du projet, l'étage du haut "fermait" le robot.
Je pense essayer les différentes solutions et si vraiment il y a une grande différence, je le mettrai en haut.

Merci des infos ! ;)

#134 Esprit

Esprit

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 503 messages
  • Gender:Male
  • Location:Belgique

Posté 11 avril 2011 - 08:33

Je viens de recevoir un mail de HobbyKing pour dire que la dernière pièce qu'il manquait à ma commande est de nouveau de stock... J'imagine que ma commande va ENFIN pouvoir partir et arriver en Belgique dans ... 3 semaines...



Je commence à trouver ça fort long.



Et j'hésite toujours à m'acheter deux bons servos pour remplacer les moteurs à courant continu.

Ça me titille d'utiliser des AX12+... Avec le retour d'information intégré itout itout... :p



La question c'est de savoir s'ils sont interfaçables avec une arduino classique.

[Edit : Apparemment sans problèmes, voir ici ou ici.

C'est en espagnol mais c'est assez compréhensible je trouve... Pourtant j'en ai jamais fais. :D

#135 Jbot

Jbot

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 801 messages
  • Gender:Male
  • Location:Paris

Posté 11 avril 2011 - 08:50

En effet, c'est des bons servos mais qui coutent un peu la peau des fesses :(
Aprés ce que j'aime pas c'est leur tension d'alim a 10V, c'est un peu bancal :D

Tu nous diras si tu en prends ^^

Et tes capteurs alors, ca donne quoi ? ^^

#136 Esprit

Esprit

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 503 messages
  • Gender:Male
  • Location:Belgique

Posté 11 avril 2011 - 09:00

Quelle est le problème d'une tension d'alim à 12V ? Il faut faire une petite régulation préalable pour les alimenter ? Est-ce que c'est vraiment un problème ? Je trouve pas...

Maintenant, je n'ai pas les sous pour les acheter dans l'immédiat, ça me laisse le temps de réfléchir un peu, de chercher des infos, etc... ;)

#137 Jbot

Jbot

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 801 messages
  • Gender:Male
  • Location:Paris

Posté 11 avril 2011 - 09:09

Bah je ne sais pas mais les régulateur de tension a 10V j'en ai rarement vue, j'ai surement du mal chercher :p

#138 Esprit

Esprit

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 503 messages
  • Gender:Male
  • Location:Belgique

Posté 11 avril 2011 - 10:22

C'est pas 10V mais 12V. Il y a les 7812 ou bien des régulateurs variables genre LM317 qui peuvent convenir. ;)

#139 Jbot

Jbot

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 801 messages
  • Gender:Male
  • Location:Paris

Posté 11 avril 2011 - 10:31

Voltage Opérationnel: 7 à 10V (9.6V recommandé)

[edit : quoi que en effet le site dit une bande de voltage mais le manuel en dit une autre -_-]

#140 Esprit

Esprit

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 503 messages
  • Gender:Male
  • Location:Belgique

Posté 11 avril 2011 - 10:55

C'est vrai que c'est un peu confu...



Sur la fiche technique, il est mis : "Voltage : 9 ~ 12V (Recommended Voltage 11.1V)"



Sur le manuel, ils disent : "Voltage 7V~10V (Recommended voltage: 9.6V)"



Sur World of Robot, il est mis :

"• Couple: 15kg-cm à 12V

• Voltage Opérationnel: 7 à 10V (9.6V recommandé)"



Pour mesurer le couple à 12V, il faut bien pouvoir l'utiliser avec une tension de 12V... Je me trompe ?

Sinon, j'ai trouvé des explications sympa sur ClubElek.



Répondre à ce sujet



  


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

0 members, 0 guests, 0 anonymous users