Aller au contenu


Photo
- - - - -

Ash, Self balancing robot

Raspberry PI 2B Arduino UNO PID OpenBeam USB equilibre balancing

140 réponses à ce sujet

#101 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 969 messages
  • Gender:Male
  • Location:Anglet

Posté 22 juin 2016 - 09:26

plutôt bien aboutit ce robot ! =)


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  

 

 

 


#102 Path

Path

    Made By Humans

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

Posté 22 juin 2016 - 09:44

Ha ça oui c'est mon modèle !! :) j'ai pas fini de cogiter la chose. Mais si quelqu'un a déjà cogité sur le même theme ... Je suis preneur de quelques mots.

#103 Jan

Jan

    Webmaster

  • Membres
  • PipPipPipPipPip
  • 4 747 messages
  • Gender:Male
  • Location:Rhône Alpes

Posté 22 juin 2016 - 10:56

Va au plus simple... fais lui un commentaire sur sa vidéo en expliquant que tu es sur la problématique en décrivant ton cas et montrant tes vidéos si nécessaire... en lisant les commentaires de sa vidéo tu peux voir qu'il est super réactif. Puis à 3500 vues ça reste encore abordable je pense, c'est pas Norman :D



#104 Path

Path

    Made By Humans

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

Posté 23 juin 2016 - 08:13

C'est vrai, merci, je ne pense pas à regarder les commentaires des video youtube. Quelqu'un a d'ailleurs posé ma question. Du coup, je crois que je n'ai pas pris le problème sous le bon angle. Je suis resté sur un angle comme donnée en entrée. Comme c'est ce que je cherche, je tournais en rond. De plus, je me suis certainement mal posé le problème.

 

Le schéma bloc qu'il donne dans sa vidéo. C'est une autre approche qui me paraît une solution ;) Même si je dois encore compiler cela mentalement. (J'ai trop peu de temps à y consacrer en ce moment.)

 

balancingSystem700.png

 

Ceci dit, il a 4 arduinos et un raspberry dans son robot.

 

  • Un pour le code du balancier. Il est connecté au raspberry via une liaison série. Il communique avec les autres arduinos en I2C. C'est le maître.
  • Un pour les 3 senseurs US et le tilt de la caméra via un servo.
  • Deux pour les steppers.
  • Le raspberry sert pour les fonction de plus haut niveau : contrôle à distance, évitement des obstacles ...

 

 

Source : http://axelsdiy.brinkeby.se/?page_id=1141

Au passage, il explique ces autres robots, c'est très intéressant. Je kiff toujours !!



#105 Oracid

Oracid

    Pilier du forum

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

Posté 24 juin 2016 - 05:52

J'ai posté une vidéo qui pourrait t'inspirer, mais je ne pourrais pas t'aider beaucoup plus sur le sujet, étant donné mes compétences ...
http://www.robot-maker.com/forum/topic/10472-les-meilleurs-videos-lego/page-2

#106 Oracid

Oracid

    Pilier du forum

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

Posté 25 juin 2016 - 10:40

Permets moi de te proposer un lien vers un cours sur le PID qui est considéré comme un must dans le monde LEGO. http://www.techlug.fr/Forum/topic2770.html
Ce cours est un peu ancien et date de 2010, des photos sont absentes, mais j'ai pensé que cela pourrait t'intéressé.

Peut-être qu'un tel cours existe ici, je ne l'ai pas trouvé.
Je ne doute pas que les compétences nécessaires soient disponibles sur notre forum pour en faire un, mais les bonnes volontés font déjà beaucoup.
J'aurai bien voulu m'impliquer dans ce domaine, mais malheureusement mes compétences ne me le permettent pas, et de très loin...

#107 Path

Path

    Made By Humans

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

Posté 25 juin 2016 - 12:11

Merci Oracid. C'est pas tellement sur l'asservissement en lui-même que je cherche. Mais plutôt quel asservissement dans mon système. Et je crois avoir trouvé justement.

 

Sinon, que les experts me corrigent. Avec mon niveau, voilà ce que cela donne :

 

Un pid ça sert à faire un asservissement. C'est à dire piloter un sous-système avec la sortie d'un autre (qui peut être lui-même). Par exemple, dans mon cas, convertir un angle d'inclinaison en vitesse pour mon moteur. Il faut donc convertir des degrés en pourcentage (valeur PWM ou MLI). C'est là que le calcul du PID intervient. Petit exemple en python qu'il faut imaginer dans une boucle :

pTerm = KP * angle

iTerm += KI * angle

dTerm = KD * (angle - lastAngle)

lastAngle = angle

pwm = pTerm + iTerm + dTerm

 

Mentalement, tu peux te dire que la constante P (proportionnelle) est celle qui permet d'adapter la valeur de façon linéaire. Par exemple, une inclinaison de 20° doit me donner 100% de vitesse => donc KP vaut 5.

La constante D (dérivée) va influer sur la vitesse de l'adaptation.

La constante I (intégrale) va influer sur l'accélération de l'adaptation.

 

NB. Ces 3 constantes sont très chiantes à régler.

 

Il y a bien un tuto sur le forum très bien documenté. Qu'il faut absolument lire. http://www.robot-maker.com/forum/tutorials/article/12-asservissement-et-regulation/



#108 Oracid

Oracid

    Pilier du forum

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

Posté 25 juin 2016 - 01:04

Il y a bien un tuto sur le forum très bien documenté. Qu'il faut absolument lire. http://www.robot-maker.com/forum/tutorials/article/12-asservissement-et-regulation/

Merci, c'est super, il faut que je prenne le temps de lire ça.

#109 Oracid

Oracid

    Pilier du forum

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

Posté 25 juin 2016 - 01:08

Merci, c'est super, il faut que je prenne le temps de lire ça.

Ah! Oui ! J'ai regardé les images, elles sont pas mal, mais je préfère encore l'article de mon lien.
Mais merci encore.

#110 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 969 messages
  • Gender:Male
  • Location:Anglet

Posté 26 juin 2016 - 09:09

Petite question qui moi m'embête beaucoup : à chaque fois que tu te connecte sur l'UART de ta arduino, tu reset la carte arduino ou pas toi ? Si tu as trouvé une astuce pour ne plus la réset je suis preneur !!


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  

 

 

 


#111 Path

Path

    Made By Humans

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

Posté 26 juin 2016 - 09:53

Je ne fais rien de spécial quand je me connecte. Pour rappel (au cas où) c'est via usb depuis le raspberry. L'arduino est alimenté par l'usb du raspberry donc toujours up en même temps que le raspberry.

Je m'y connecte dans 2 cas : upload d'une nouvelle version du logiciel arduino et ouverture du port en lecture/écrite pour le fonctionnement du robot. Je ne fais de reset ni manuel ni programmé.

 

Coté raspberry, j'utilise la lib serialport de nodejs et coté arduino, c'est la classe Serial de base.

 

Mais je n'ai peut-être pas compris ta question. Ou bien quelque chose m'échappe. Tu peux m'en dire un peu plus ?



#112 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 969 messages
  • Gender:Male
  • Location:Anglet

Posté 26 juin 2016 - 10:00

En fait à chaque fois que tu ouvres le port com en lecture et ecriture tu reset la arduino...  Du moins moi c'est ce qui se passe et moi ça ça me pose problème. 


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  

 

 

 


#113 Path

Path

    Made By Humans

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

Posté 26 juin 2016 - 10:04

Et bien je ne m'en étais pas rendu compte. En tout cas, cela ne me dérange pas. Si cela répond à ta question (malheureusement).

Mais tu pique ma curiosité. Tu ouvres le port en dehors du setup ? Pour un besoin particulier ?

 

Edit : 

void setup(){
  servoH.attach(PIN_SERVOH);
  servoH.write(90);
  servoV.attach(PIN_SERVOV);
  servoV.write(70);

  motorA.attach(PIN_DIRA, PIN_PWMA);
  motorB.attach(PIN_DIRB, PIN_PWMB);

  capteurUS.attach(PIN_TRIG, PIN_ECHO);
  attachInterrupt(0, interruptOnRaisingA, RISING);
   attachInterrupt(1, interruptOnRaisingB, RISING);

  timer.setInterval(5000, sendCounter);

  Serial.begin(115200);
}

Voilà le code de mon setup. Le serial est à la fin. Si il fait un reset, ça ne devrait pas fonctionner non ?



#114 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 969 messages
  • Gender:Male
  • Location:Anglet

Posté 26 juin 2016 - 10:17

en fait c'est même pas côté arduino... 

Pour faire un test simple afin de voir ce qu'il se passe, tu peux faire un blink led spécifique dans ton set up qui n'apparaît qu'une fois dans ton programme. 
Et tu regarde quand est ce que la led clignote sur ton robot pour savoir quand la carte reset. 

Typiquement, si tu branche la arduino sur ton PC à chaque fois que tu ouvre le moniteur série tu verras que la arduino reboot. Et il se passe la même chose quand ta Pi ouvre le port de communication. 


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  

 

 

 


#115 Path

Path

    Made By Humans

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

Posté 27 juin 2016 - 08:51

http://forum.arduino.cc/index.php?topic=91359.0
j'ai encore appris un truc ;)

Je n'utilise plus du tout l'ide arduino depuis mes premiers tests.

#116 Path

Path

    Made By Humans

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

Posté 12 juillet 2016 - 11:09

j'ai trouvé un super projet.

 

 

Source : https://www.youtube....h?v=poWP-RpPa3g

 

Controller.jpg

 

Ci-dessous la description super interessante de la video.

 

//------------------------------------------------------------------//
You can find the Atmel studio folder of the robot's code and schemantic here:
https://www.dropbox....h/fjjwcn1w03...
//-----------------------------------------------------------------//

//-----------------------------------------------------------------//
Usefull informations:

PID controller:
http://www.cds.caltech.edu/~murray/co...
Complementary filter:
https://b94be1412945...f7f056f5f8b8...
//-----------------------------------------------------------------//

Components:

Microcontroller: ATmega32
Gyroscope: mpu-6050 (in the video I used a LISY300)
Accelerometer mpu-6050 (in the video I used a BMA180)
Encoder: Ball mouse
Motor Controller: Pololu TB6612FNG
Motors: Old DC motors madi in Japan :) SM - E048
- 12500 RPM without load.
- Current: 0.1 A Without load 1.5 A When the wheels are changing the direction of rotation, or when going uphill.

Battery: Electric drill 9.6V NiMH
Wheels: Toy tractor
Geer ratio: 1:8
Bluetooth-SerialPort converter: hc - 05

Complementary filter (For the angular velocity I used only the Gyro)
With the use of euler angles balancing end turning in inclined surface is more easier

Remote Controller:

ATmega328P
PS2 Analoge Stick
Bluetooth-SerialPort converter: hc - 05

//-----------------------------------------------------------------//
The requested velocity when the robot is standing still is:
ReqVelocity = RobotPosition(mm) * positionKP
poitionKP = 0.008

The requested angle is calculated by a PI controller. The setpoint for this controller is ReqVelocity. The measured velocity is filtered by a Low pass filter. the output of the controller is the ReqAngle
velocityKP = 2
velocityKI = 1.64
PIDoutput is constrained between = -20,20 this is the maximum angle that the robot would try to reach when accelerating.
The maximum value whereby the ‘I’ can change is 6.6. So when calculating the integrator value then error can constrained between +-maxIchange/velocityKI

The requested PWM for the motors is calculated by a PD controller. The setpoint for this controller is ReqAngle. To eliminate the derivative spikes D is calculated from the measured angle change, not from the error.
angleKP = 40
angleKD = -4.5 (this is minus because it isn’t calculated from the error)
PIDoutput is constrained between -255, 255
The output of this controller is also filtered with a Low pass filter

To keep the robot’s orientation another PWM value is calculated and then added to one of the motors and subtracted from the other.
orientationKP = 5
orientationKD = 0.1

the whole program runs in a loop 100 times in a second.
If the value of the filters would changed, than the PID’s value would also need to be changed. 
The low pass filter’s code with fixed timing is:
filteredARRAY[0] = rawDATA*LPFgain + filteredARRAY[1]*(1-LPFgain);
filteredARRAY[1] = filteredARRAY[0]; 
velocity LPFgain = 0.35 //0.45
PWM LPFgain = 0.2 //0.45
reqeustedVelocity LPFgain = 0.05 (this is to smooth the setpoint changes)



#117 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 969 messages
  • Gender:Male
  • Location:Anglet

Posté 12 juillet 2016 - 11:46

Wahou belle trouvaille ! =) ça va bien t'aider pour bien finaliser ton robot ! 

 

 

Je n'utilise plus du tout l'ide arduino depuis mes premiers tests.

 

Que voulais tu dire par rapport à ça au fait ? Tu utilises netbean ? 


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  

 

 

 


#118 Path

Path

    Made By Humans

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

Posté 13 juillet 2016 - 12:23

Pour ash, je passe par le raspberry. Pour lire et ecrire sur le port usb, je passe par une lib nodejs (voir mes tutos sur le sujet)

Pour bob, pas le choix, je suis repassé par l'ide.

#119 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 969 messages
  • Gender:Male
  • Location:Anglet

Posté 13 juillet 2016 - 12:34

Pour ash, je passe par le raspberry. Pour lire et ecrire sur le port usb, je passe par une lib nodejs (voir mes tutos sur le sujet)

 

Faudrait que je regarde ça en détail =) 

 

Pour bob, pas le choix, je suis repassé par l'ide.

 

Si justement tu as le choix ^^ Tu peux utiliser netbean si c'est pour coder plus sérieusement ...


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  

 

 

 


#120 Oracid

Oracid

    Pilier du forum

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

Posté 13 juillet 2016 - 06:24

Impressionnant !
Cette réalisation est peut-être la référence dans le domaine du balancing robot.



Répondre à ce sujet



  



Aussi étiqueté avec au moins un de ces mots-clés : Raspberry PI 2B, Arduino UNO, PID, OpenBeam, USB, equilibre, balancing

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

0 members, 0 guests, 0 anonymous users