Aller au contenu


Tsou'

Inscrit(e) (le) 14 nov. 2013
Déconnecté Dernière activité déc. 15 2015 01:03
-----

Sujets que j'ai initiés

Nouveau robot 2WD, avec PID

02 juin 2015 - 11:21

Bonjour/soir,

 

Je reviens faire un tour de ce coté-ci pour un nouveau projet, j'ai mené à terme l'ancien projet (http://www.robot-maker.com/forum/topic/9212-robot-2wd/?view=findpost&p=59985) de manière un peu laborieuse, je n'avais à l'époque pas encore mon imprimante 3D alors la fixation des moteurs, HC-SR04 et de la batterie a donné quelque chose d'assez bancal, le robot est trop lourd en son centre ce qui oriente les roues vers l'intérieur du robot et crée une contrainte au niveau de l'axe moteur, ça roule, mais pas très droit.

 

Vous pouvez voir ici deux photos de l'ancienne réalisation :

http://www.noelshack.com/2015-22-1432514568-p5220200.jpg

http://www.noelshack.com/2015-22-1432514570-p5220202.jpg

 

Je souhaite donc repartir de zéro, avec les nouvelles compétences acquises, et l'imprimante 3D qui pour la partie fixation/mécanique des différentes pièces me sera très utile!

 

Pour ce robot-ci je compte partir sur de l'arduino, la raspberry pi m'ayant quelque peu déçue.

Je me suis un peu inspirée du robot SUPRA de transistance et de ce site-ci pour le PID (http://www.ferdinandpiette.com/blog/2012/04/asservissement-en-vitesse-dun-moteur-avec-arduino/). Je souhaite faire un robot qui soit mieux concu que l'ancien, qui roule droit cette foit-ci, dont le programme serait lui aussi mieux conçu à la base.

J'ai fait une petite liste des diverses choses qui me seront nécessaire, seules celles n'étant pas dans les dépenses supplémentaires sont à prendre en compte. :)

 

1432517104-robot-new.jpg

 

J'ai déjà pu faire une petite ébauche de mon programme, incluant un PID

#include <SimpleTimer.h>
#include <math.h>

const int rightMotorA = 1;
const int rightMotorB = 2;

const int leftMotorA = 3;
const int leftMotorB = 4;

const int rightMotorPWM = 5;
const int leftMotorPWM = 6;

SimpleTimer timer;
unsigned int ticks = 0;

int speedMotor = 2; // à modifier

int freqPID = 50; // fréquence d'exécution du PID

float errorCorrection = 0;
float sumError = 0;
float previousError = 0;

float kp = 0;
float ki = 0;
float kd = 0;

void setup()
{
  Serial.begin(115200);
  
  pinMode(rightMotorA, OUTPUT);
  pinMode(rightMotorB, OUTPUT);
  pinMode(leftMotorA, OUTPUT);
  pinMode(leftMotorB, OUTPUT);
  
  digitalWrite(rightMotorA, LOW);
  digitalWrite(rightMotorB, LOW);
  digitalWrite(leftMotorA, LOW);
  digitalWrite(leftMotorB, LOW);
  
  analogWrite(rightMotorPWM, 0);
  analogWrite(leftMotorPWM, 0);
  
  timer.setInterval(1000/freqPID, PID); // on relance la fonction PID toutes les X ms (ici 1000/50 = 20ms)
  
  delay(2000);

  attachInterrupt(0, count, CHANGE); // à chaque changement d'état on lance count(), qui incrémente le nbre de ticks
}

void loop()
{
  /*Serial.println("Vitesse moteur?");
  int speedMotor = Serial.read();
  timer.setInterval(1000/freqPID, PID(speedMotor)); // on relance la fonction PID toutes les X ms (ici 1000/50 = 20ms)
  Serial.println("Point de destination en X?");
  int posX = Serial.read();
  Serial.println("Point de destination en Y?");
  int posY = Serial.read();
  double directionXY = direction(posX, posY);*/

  timer.run();
  delay(2000);
}

void PID() // fonction s'exécutant toutes les 20ms et remettant ticks à 0, voir time.setInterval
// rajouter argument int speedMotor, pour choisir la vitesse du moteur au démarrage du robot
{
  int freqEncoder = freqPID * ticks; // nombre de ticks par 20 ms ramené au nbre de ticks par seconde
  float speedEncoder = freqEncoder/32/75; /* nbre de ticks par seconde divisé par le nbre de ticks par tour d'axe 
  moteur = nbre de tour d'axe moteur par seconde, divisé par le nombre de tour d'axe moteur par tour de roue = nbre de tours de roue*/
  float error = speedMotor - speedEncoder; // l'erreur est la différence entre la vitesse voulue et la vitesse réelle
  sumError += error;
  float deltaError = error - previousError;
  previousError = error;
  
  errorCorrection = kp * error; // kp est un coeff. de proportionnalité nous permettant d'approcher l'erreur la plus juste
  // errorCorrection = kp * error + ki * sumError;
  // errorCorrection = kp * error + ki * sumError + kd * deltaError;
  
  if (errorCorrection < 0) errorCorrection = 0; // normalisation
  else if (errorCorrection > 255) errorCorrection = 255; // normalisation
  analogWrite(rightMotorPWM, 0 + errorCorrection);
  analogWrite(leftMotorPWM, 0 + errorCorrection);

  ticks = 0; // on remet le nombre de ticks à zéro
}

void count()
{
  ticks++;
}

double direction(int posX, int posY)
{  
  return ((atan2(posX, posY)/0.017453293)-90); /*on considère le robot orienté en direction 0Y 
  et notre plan XY comme centré au milieu de celui-ci, d'axe X à sa droite et d'axe Y à l'avant*/
}

J'aurais tout de même quelques questions,

 

les moteurs que j'ai choisi sont ceux-ci http://www.gotronic.fr/art-motoreducteur-75-1-encodeur-rs003-21384.htm

et mes roues http://www.gotronic.fr/art-roue-qfix-50x21mm-percage-4mm-11836.htm

j'ai comme diverses informations :

Résolution de l'encodeur 16 impulsions/tour (soit 75*16 = 1200 impulsions/tour)
Vitesse à vide : 133tours/min
Tours d'arbre par minute : 9975 (= 133*75)

 

et j'ai pu calculer ceci :

Un tour de roue : rayon = 25mm (=0.025m), périmètre = 2pi*0.025 = 0.15708m = 15.708cm
Distance parcourue : 133*0.15708 = 20.8916m = 2089.16cm
Soit une vitesse de 0.348m/s ou 1.2535km/h

 

Est-ce que mes calculs sont bons? Si oui, la vitesse ne risque pas d'être trop basse? (le robot circulera en intérieur sur un sol plat, voir du carrelage)

Mes encodeurs vont être assez proches (1~2 centimètres), ils sont à effet Hall, je ne risque pas d'avoir des interférences entre les deux?

Niveau capteurs je ne sais pas encore trop ce qu'il est préférable de prendre, pour le moment j'ai des HC-SR04, mais je vois peu de réalisation un peu évoluée qui utilise ce genre de capteurs, ce sont généralement plutôt des Sharp, ou des ultrasons personnalisés, qu'est-ce qu'il vaut mieux?

Je vais faire mon robot en plusieurs étages, ils seront circulaires, mais je ne sais pas encore trop comment il est préférable de les organiser ces étages, roues + contrôle moteurs sur l'étage du bas, batterie Lipo + capteurs + arduino sur le deuxième étage?

Et dernièrement, dans mon programme je ne sais pas comment utiliser les Serial.read/write et passer un argument (int speedMotor) dans ma fonction PID, quand je les mets dans mes fonctions void loop et void setup le compilateur hurle, malheureusement je ne vois pas où je pourrais les mettre autrement? Dans la fonction PID?

 

Edit : après réflexion, il va me faire faire deux PIDs, un pour chaque moteur, je n'y avais pas fait attention

je vais devoir aussi réfléchir à comment gérer la marche arrière du robot, ce PID-ci ne gérerait que la marche avant

Le code a été modifié, il y avait une erreur au niveau du previousError, il allait boucler sur 0 tel que le programme était écrit

 

Merci beaucoup, surtout si vous m'avez lue jusqu'ici ^_^

Bonne journée/soirée!


L293D : Défaut de fabrication ?

19 mars 2014 - 12:14

Bonjour,

J'aimerais avoir quelques avis concernant le problème que je rencontre, je suis en plein test du L293D et je suis entrain de coder toute la partie programmation de mon futur petit engin.
J'ai donc utilisé une breadboard, sur laquelle j'ai fait mes divers branchements, qui fonctionnent pour tout sauf ... une pin out, il s'agit de la 3Y. (http://www.ti.com/lit/ds/symlink/l293d.pdf)
Chose assez embêtante, quand j'utilise mon voltmètre pour voir ce qui sort des différentes pin, toutes les pin out me sortent du 2 ~ 2.2V sauf celle-là. Mes différentes led s'allument aussi correctement, sauf bien sûr, celle connectée à la pin 3Y. Il s'agit de la partie "Motor right turns right" de mon code, et de la led verte de droite, située sur la ligne 'g' de ma breadboard.

Ici deux photos de mon montage (Ce n'est pas très voyant, mais les deux pins enable sont connectées entre-elles. Je les mets HIGH quand je veux faire tourner les moteurs, et en LOW quand je veux les couper.)
Fichier joint  P3190001.JPG   1,02 Mo   143 téléchargement(s)

Fichier joint  P3190004.JPG   1,12 Mo   132 téléchargement(s)

Et voici mon code,

import RPi.GPIO as GPIO, time

GPIO.setmode(GPIO.BCM)
enable = 14 # Two pins enable are inter-connected

motorLeftA = 24 # 1A, take a look at the data-sheet
motorLeftB = 23 # 2A

motorRightA = 21 # 3A
motorRightB = 22 # 4A

# Enabling the pins, and avoiding it to be HIGH
GPIO.setup(enable, GPIO.OUT)
GPIO.output(enable, GPIO.LOW)
GPIO.setup(motorLeftA, GPIO.OUT)
GPIO.output(motorLeftA, GPIO.LOW)
GPIO.setup(motorLeftB, GPIO.OUT)
GPIO.output(motorLeftB, GPIO.LOW)
GPIO.setup(motorRightA, GPIO.OUT)
GPIO.output(motorRightA, GPIO.LOW)
GPIO.setup(motorRightB, GPIO.OUT)
GPIO.output(motorRightB, GPIO.LOW)


#----------------------
# Motor left turns left
#----------------------
#GPIO.output(motorLeftA, GPIO.HIGH)
#GPIO.output(motorLeftB, GPIO.LOW)

#-----------------------
# Motor left turns right
#-----------------------
GPIO.output(motorLeftA, GPIO.LOW)
GPIO.output(motorLeftB, GPIO.HIGH)

#-----------------------
# Motor right turns left
#-----------------------
#GPIO.output(motorRightA, GPIO.HIGH)
#GPIO.output(motorRightB, GPIO.LOW)

#------------------------
# Motor right turns right
#------------------------
GPIO.output(motorRightA, GPIO.LOW)
GPIO.output(motorRightB, GPIO.HIGH)

# Enable to HIGH
GPIO.output(enable, GPIO.HIGH)

time.sleep(3)

GPIO.cleanup()

Robot 2WD

20 février 2014 - 02:19

Re-Bonjour à tous,

Je rouvre un nouveau sujet étant donné que je suspends mon ancien projet.
Je vais donc partir sur une base roulante deux roues motrices, composé d'un chassis en plexiglass.

Le but de ce robot-ci sera de pouvoir tester plusieurs choses, tout d'abord d'arriver à le rendre autonome (capteur ultrasons, microswitch, ...), de pouvoir m'exercer à OpenCV (j'ai déjà la caméra), me lancer dans les réseaux de neurones, et j'ai rajouté un module accelero-gyro pour pouvoir mettre en pratique des maths.
J'ai notamment rajouter des carte de prototypages, pour commencer doucement à m'exercer à souder et faire de petits montages.

Une bonne partie des éléments sont déjà choisis, si j'oublie quelque chose ou que ça ne convient pas, n'hésitez pas à faire signe. ^^
Fichier joint  Robot1.pdf   83,55 Ko   318 téléchargement(s)

J'ai tout de même quelques questions,

Est-ce que ce type de plaque de prototypage est suffitante?
http://www.kibuck.com/carte-de-prototypage-economique-7-9cm.html
Auriez-vous des composants électroniques à conseiller pour débuter?

Est-ce qu'un switch unipolaire peut être utilisé comme interrupteur pour la Rpi (voir pour toute la base roulante) ?
http://www.kibuck.com/switch-a-bascule-unipolaire.html

Est-ce qu'il suffit d'une résistance de tirage pour un switch? (ou de deux résistances, comme les capteurs à ultrasons)
http://www.kibuck.com/micro-switch-miniature.html

Quand on fait le calcul d'un pont diviseur de tension, via des résistances de 330 et 470 ohm, on n'obtient pas 3,3V. Est-ce négligeable?
[ V = V_ini * R2 / (R2 + R1) => = 5 * (470 / (470 + 330)) = 2.9375 ]

Quel régulateur de tension choisir ? Je ne sais pas si les deux sont corrects, ou s'il y en a un à privilégier... ^^'
http://www.kibuck.com/module-dc-dc-1-30v-2-5a-step-down.html
http://www.kibuck.com/module-d-alimentation-5v.html

Quel système de contrôle moteur choisir ?
http://www.kibuck.com/controleur-moteur-l298.html
http://www.kibuck.com/l293-double-pont-en-h-0-6a.html
Je ne sais pas si le L293D pourrait convenir à mon cas, en les mettant par exemple en parallèle. (même si cette solution peu propre m'embête un peu)

Les moteurs sont les suivant : http://www.hobbyking.com/hobbyking/store/__26254__Geared_Motor_w_90_Deg_Shaft_2Pcs_Bag_.html
ayant peu d'information sur cette page, j'ai un peu cherché, et il semblerait qu'il s'agit de ces moteurs-ci http://www.tohobby.com/en/smart-car-tt-motor-wheel-kit-with-dc-geared-motor-and-wheel.html avec une réduction de 1:48

Et une dernière question, ma batterie LiPoly semble avec une sortie avoir des connecteurs bananes http://www.hobbyking.com/hobbyking/store/%5F%5F8578%5F%5FZIPPY%5FFlightmax%5F5000mAh%5F2S1P%5F20C.html
Est-ce que je peux tout simplement utiliser ce type d'embase http://www.hobbyking.com/hobbyking/store/%5F%5F31922%5F%5FFemale%5F4mm%5FBanana%5FElectrical%5FJack%5FPair.html, pour faire une connexion un peu plus propre qu'en coupant simplement dans les fils?

Normalement après ça ça devrait être bon :)/>/>
Le prix du robot étant d'à peu près 65euros, je ferai le calcul une fois sûre des composants à prendre.

Merci de votre lecture. :)/>/>

Lyra-01

15 novembre 2013 - 01:04

Bonjour,

Depuis quelques temps je pense de plus en plus à créer mon premier robot. C'est pourquoi je me suis enfin décidée à y réfléchir plus mûrement.

Il s'agira un robot chenillé, pour le moment nommé "Lyra-01".
Son utilité? Pour ce premier robot, simplement me former en autodidacte à la robotique avant de commencer mes années d'Ingénieur civil. Et aussi parce que j'aime beaucoup les robots, et que ça touche à beaucoup de domaines différents.

Le temps que j'aurais à y consacrer? Autant que je le peux, mais je suis à l'université, donc ça dépendra grandement de mes quelques congés, et de mon temps libre.

Le coût de ce robot? J'espère ne pas dépasser un coût de 150-200euros (voir même pas plus de 100euros).

J'ai tout de même durant ces quelques semaines pu me renseigner un peu plus, et paufiner ce qui n'était au départ qu'une vague idée de ce que je voulais faire. L'idée est avant tout parti du fait que je voulais chipoter à un peu d'électronique et ait donc acheté une Raspberry pi qui, après avoir un peu chipoté aux leds, a fini par ne plus m'apporter assez de satisfaction.
Je n'ai aucune connaissance en mécanique (si ce n'est de la mécanique théorique...), aucune connaissance en électronique (ou à peine), j'ai un peu de connaissance en programmation C++.

Passons de suite aux bases.

Je m'inspire en partie de divers projets qui m'intéressent beaucoup, notamment celui de Levend. Je n'ai malheureusement pas la bourse, et pas encore les capacités, pour me lancer dans un tel projet, mais ce pourrait être l'optique que j'aimerais prendre lors de mes diverses améliorations/refontes du robot.
A terme j'aimerais m'approcher, dans la conception (pas le prix... :°) de robot tels que le celui du Swat, celui de la Nasa, mais aussi le Dr. Robot Jaguar.
Mais pour la moment, revenons en aux bases.


Partie chassis :

Celui-ci sera en aluminium, pour son aspect, sa résistance, sa (plus ou moins) légèreté.
Je souhaitais partir sur une base telle que celle proposée par Dagu, pour son Wild Thumper 6WD. https://secure.robot...8s8h30vduredf27
La question qui se pose est, est-il préférable de partir tout de suite sur un chassis 6WD, me permettant d'avoir un chassis très évolutif, mais plus "difficile" à réaliser dans un premier temps. Ou partir sur un 4WD, plus simple, plus petit, mais qui me redemandera une refonte complète du chassis si je veux passer à un modèle plus évolué.
J'aimerais avoir, comme le chassis Dagu, des plaques d'aluminium perforé profilé. Malheureusement tous les sites qui en vendent (en Belgique) n'en vendent qu'aux professionnels, et n'affichent donc pas les prix. Auriez-vous une idée de prix? (voir schéma suivant pour une idée des surfaces nécessaires)

Le chassis fera 300mm de long, pour 150mm de large (chenilles non-comprises) et 50mm de haut.
Fichier joint  Mon-chassis2.jpg   153,13 Ko   244 téléchargement(s)

Il me faudrait donc, 2 plaques d'Al perforé (ou non), profilé en U. 6 plaque d'Al perforé (ou non), profilé en L.
1 plaque d'Al perforé (préférable, pour y fixer des modules), profilé ou non, en U. 12 entretoises avec visserie.
De la visserie pour fixer les différentes plaques entre elles, et notamment permettre un espacement de 3mm entre chaque plaque. (à peu près 16vis, 32boulons)

Partie électronique :

Je possède déjà une carte Raspberry Pi, modèle B. Des fils mâle/femelle, mâle/mâle, quelques leds, une sonde de température, des résistances de toutes sortes.

Je devrai probablement acheter:

- Une batterie, il me semble que les LiPo sont assez appréciées, et permettent d'avoir une batterie correcte à moindre coût. Celle-ci conviendrait-elle? Batterie LiPo SFE 3,7V 2000mAh 12.95€ (https://secure.robot...ko1d5vuu0ena396)

- Un chargeur de batterie, 8.95€ (https://secure.robot...ko1d5vuu0ena396)

- Une caméra RPi, environ 25€, je n'ai pas trouvé de fournisseur très recommandé pour cet élément.

- Deux moteurs à courant continu (ou non?), j'ai vu dans un post que ceux-ci étaient conseillés : Moteurs à engrenages cylindriques, 12V, 200RPM. 21.18€ (https://secure.robot...qdkjctem88dckp6)
N'y aurait-il pas moins chers?
J'avais vu ceux-ci : Moteur à engrenages en métal de puissance élevée 150:1, 6V, 200RPM. 14.35€ (https://secure.robot...ko1d5vuu0ena396)

- Un capteur ultrasonique, le HC-Sr04 a l'air assez apprécié et n'est pas fort chers, 3.23€ (https://secure.robot...ko1d5vuu0ena396)

- Une carte de contrôle moteur, j'ai beaucoup vu la L293 D dans mes recherches, mais également la L 298. Je ne sais pas laquelle est préférable. Pour la L 298 il existe deux modèles, je ne sais pas si le modèle le plus basique pourrait convenir dans mon cas.
Le basique : 7.42€ (https://secure.robot...ko1d5vuu0ena396) et le plus évolué : 21.13€ (https://secure.robot...ko1d5vuu0ena396).

- Un module Wi-Fi, environ 20€ je n'ai pas trouvé de fournisseur pour cet élément.

- Sauf erreur, il manque un convertisseur de tension?


Partie mécanique :

La partie qui me pose le plus problème...

J'hésite entre deux types de chenilles.
- Le modèle avec des chaînes avec attache en équerre. Lesquelles seraient vissées à une chenille en plastique. Le tout serait actionné par des courroies (une ou deux de chaque coté du robot, et sur chaque axe).
Pour ce modèle, j'ai très peur du prix de revient (et si quelqu'un a une idée, je suis preneuse!), mais la finition serait nettement plus correcte qu'avec des chenilles pré-fabriquées, en plastique dur.

- Le modèle tout fait, avec des chenilles déjà assemblées, en plastique rigide/semi-rigide. Actionnées par des courroies crantées en plastique.
Le prix de revient est probablement moindre, mais la finition n'est, à mon goût, pas des meilleurs.

Pour ce deuxième modèle, j'ai une référence, les chenilles trk-01 de chez Lynxmotion. 22.67€, je ne sais pas si la longeur pourrait convenir...
(https://secure.robot...ko1d5vuu0ena396)
Avec, deux ou quatres (je ne sais pas...) moyeux universels 7.38€/paire (https://secure.robot...qdkjctem88dckp6)
Deux ou quatre pignons à 9dents (je ne sais pas combien il y a en a dans un package) 9.70€/pack (https://secure.robot...qdkjctem88dckp6)
Un pack de support pour moteur 7.75€ (https://secure.robot...qdkjctem88dckp6)
NB : Il faudra probablement corrigé la longeur des modules accueillant les moteurs sur le chassis à 40mm, car ceux-ci font 30mm et ces supports moteurs font 1.5", soit 38.1mm.

J'ai un autre problème, c'est que je ne trouve nul part d'explication sur l'entraînement des roues libres arrières. Comment tournent telles, comment dois-je les fixer? Avec des moyeux universels? Des roulements à billes? Je n'y connais rien et je ne comprends pas comment je vais pouvoir fixer deux roues à l'arrière qui seront alignées à celles à l'avant...


Voilà, c'est un projet assez conséquent, ou du moins j'essaie de le rendre le plus clair, limpide, et précis que possible, pour d'autres qui voudraient le reproduire, et tout simplement pour qu'on sache clairement de quoi on parle.

Merci de votre attention, ce fut long... :)/>/>