Plateforme stabilisée avec un IMU 6 DoF

Bonjour,

Je vous présente un petit sketch basé sur la centrale inertielle que j'avais présenté auparavant.
Le code de cette centrale inertielle consistait à voir les paramètres X,Y,Z ainsi que d'autres paramètres provenant de la centrale.
Vous pouvez voir le code ici: Centrale inertielle 10 DoF - Réalisations et Projets Finis - Arduino Forum

J'ai donc fait une petite vidéo que vous pouvez voir, qui illustre le fonctionnement de la plateforme:

Pour la partie code, elle se décompose en deux parties.

Le code principal, responsable du fonctionnement de la plateforme:

#include <FreeSixIMU.h>
#include <FIMU_ADXL345.h>
#include <FIMU_ITG3200.h>
#include <Wire.h>
#include <Servo.h>

float angles[3]; 

Servo servo_x;  
Servo servo_y; 
Servo servo_z;

int pos_x = 0;  
int pos_y = 0;  
int pos_z = 0;

FreeSixIMU sixDOF = FreeSixIMU();

void setup() 
{ 
  Serial.begin(9600);
  
  Wire.begin();
  
  servo_z.attach(10); 
  servo_z.write(90);
  
  servo_x.attach(11); 
  servo_y.attach(12);
  
  sixDOF.init(); 
  
  delay(5);
}

void loop() 
{   
  sixDOF.getYawPitchRoll(angles);
  
  pos_x = (1570-angles[1]*9.55);
  servo_x.writeMicroseconds(pos_x);
 
  pos_y = (1400+angles[2]*9.55);
  servo_y.writeMicroseconds(pos_y); 
 
  //pos_z = (1500+angles[0]*9.55);
  //servo_z.writeMicroseconds(pos_z); 
  
  //printData();
}

Et le second, lié à l'affichage des paramètre des servos, afin de pouvoir les étalonner que j'ai nommé "printData"

void printData()
{
  Serial.print("X:");
  Serial.print(angles[1]);
  Serial.print("   ");
  
  Serial.print("Pos_X:");
  Serial.print(pos_x);
  Serial.print(" ||  ");
  
  Serial.print("Y:");
  Serial.print(angles[2]);
  Serial.print("   ");
  
  Serial.print("Pos_Y:");
  Serial.print(pos_y);
  Serial.print(" ||  ");
  
  Serial.print("Z:");
  Serial.print(angles[0]);
  Serial.print("   ");
  
  Serial.print("Pos_Z:");
  Serial.print(pos_z);
  Serial.print("   ");
  
  Serial.println("   ");
  delay(5);
}

Je vous conseil donc de désactiver la partie "printData" durant le fonctionnement de la plateforme, c'est beaucoup plus fluide.

Amitiés,

cherault:
Bonjour,

Je vous présente un petit sketch basé sur la centrale inertielle que j'avais présenté auparavant.
Le code de cette centrale inertielle consistait à voir les paramètres X,Y,Z ainsi que d'autres paramètres provenant de la centrale.
Vous pouvez voir le code ici: Centrale inertielle 10 DoF - Réalisations et Projets Finis - Arduino Forum

J'ai donc fait une petite vidéo que vous pouvez voir, qui illustre le fonctionnement de la plateforme:

Stabilized Platform through IMU 6 DoF and the Quaternions Algorithm - YouTube

bonsoir
jolie réalisation
tu tiens la stabilisation jusqu'à quel facteur de g ?

Bonjour Artouste,

Merci pour le compliment, ca fait plaisir !

Concernant le fonctionnement à la valeur maximale d’accélération, je ne peux pas te répondre puisque je n'ai pas de quoi mesurer avec précision.
De plus, le système fonctionne par valeur angulaire et non pas par la mesure de l'accélération directe, donc difficile de te répondre.

Amitiés,

Et avec un verre d'eau ça donne quoi ? XD

Bonjour Jean-François,

Maintenant que j'ai un peu bidouillé l'algo, la stabilité est meilleure et non seulement ca marche avec un verre d'eau, mais encore plus fort, dans une flute de champagne !
Plus de problème de vibration due aux bruits de l'accel. Le filtrage est optimale.
Je vais remettre une vidéo avec la flute de champagne et le nouvel algo dès que possible.

Amitiés,

En fait ce qui m'intéresse c'est de voir la surface de l'eau, c'est ce qui permet de démontrer si la stabilité est "uniforme" et "linéaire".

Uniforme, oui, linéaire...j'en doute !

La stabilité est une sorte d'équilibre, et l'équilibre peut-être passif ou dynamique :wink:
Dans notre cas, l'équilibre est dynamique et ne suis pas une réponse linéaire puisque les mouvements sont dits stochastiques (Pseudo aléatoires).

Amitiés,

Ce que je voulais exprimer est la "platitude" de la surface de l'eau... si elle reste stable en formant une petite onde régulière ou si de temps en temps elle produit une vague.... ou reste t-elle parfaitement plate (sans les bulles XD ).

AAAhhhhhhh...les bubulles...que du bonheur ! :smiley:

En fait, ca bouge à la surface libre...même pas mal, mais le verre lui ne bouge pas (trop).

Je vais également changer les servos pour des plus puissants, car l'ensemble pèse assez lourd.
Donc, une fois les modifications dans l'Arduino et le changement des servos fait, je ferai une petite vidéo pour que tu puisses voir par toi même la surface libre bouger alors qu'en dessous, je le bouge dans tous les sens.

Amitiés,

Salut Jean-François,

Si la robotique t'intéresse, jette un oeil à mes vidéos (Pas forcément ce qu'il y a de mieux, je l'admets volontiers)...ca peut t'inspirer pour tes futurs projets.

https://www.youtube.com/my_videos?o=U

Amitiés,

Tu n'as pas mis le bon lien pour consulter ta chaine :grin:

Avec ce lien je tombe sur la mienne XD

Waooooo...tu as raison, je suis fatigué ! :blush:

Ok, j'essaye de rectifier le tir: Christophe Herault - YouTube

Dis moi si cela fonctionne stp.

Amitiés,

Cette fois ça fonctionne :wink: