Aller au contenu


Fsociety

Inscrit(e) (le) 17 sept. 2017
Déconnecté Dernière activité août 06 2020 02:59
-----

Sujets que j'ai initiés

Programme ROS Arduino

31 juillet 2020 - 10:25

Bonjour,

 

J'ai écrit un petit programme tout bete histoire de voir comment on pouvait utilliser ROS avec Arduino a l'aide de rosserial, et du coup j'aimerais bien avoir votre avis sur ce que j'ai fait et si c'est la bonne facon de faire s'il vous plait.

 

Ce que le programme fait  :

 

Programme écrit sur l'IDE Arduino :

 

- Je récupère la durée d'impulsion d'un capteur ultrason HC-SR04.

- Je publie cette donnée dans un topic nommé "sensorDistance"

 

Programme écrit sur mon IDE C++ (Clion):

 

- Je sub au topic "sensorDistance" afin de récuperer la durée d'impulsion publié par le MC Arduino.

- J'effectue un calcul pour connaitre la distance de l'obstacle.

- Je publie cette distance dans un topic "motorSpeed"

 

- En fonction de la distance je décide soit d'avancer soit de tourner a droite.

- Ayant un tableau PWM[2] (car il y'a deux moteurs), si le robot avance je met les valeur a PWM[0] = 150 ,PWM[1] = 150, sinon je met PWM[0] = 150 , PWM[1] = 0

- Je publie le tableau PWM dans un topic nommé "motorControl"

 

Programme écrit sur l'IDE Arduino :

 

- Je sub au topic " motorControl" afin de récuperer le tableau PWM.

 

- Et j'appelle la fonction "avancer" ou "tournerAdroite" en attribuant le bon PWM au moteurs.

 

 

 

Je vais juste mettre le code écrit sur l'IDE Arduino car c'est la ou je suis le moins expérimenté:

#include <ros.h>
#include <std_msgs/Empty.h>
#include <std_msgs/Float64.h>
#include <std_msgs/Float64MultiArray.h>

// Motor A

int enA = 3;
int in1 = 2;
int in2 = 4;


// Motor B
int enB = 5;
int in3 = 6;
int in4 = 7;


// defines pins numbers
const int trigPin = 11;
const int echoPin = 12;

ros::NodeHandle  myNode;
std_msgs::Float64 pulseDuration;



void forward(const std_msgs::Float64MultiArray& PWM){
  digitalWrite(in1,HIGH);
  digitalWrite(in2,LOW);
  digitalWrite(in3,HIGH);
  digitalWrite(in4,LOW);

  analogWrite(enA,PWM.data[0]);
  analogWrite(enB,PWM.data[1]);
}

void backWard(const std_msgs::Float64MultiArray& PWM){
  digitalWrite(in1,LOW);
  digitalWrite(in2,HIGH);
  digitalWrite(in3,LOW);
  digitalWrite(in4,HIGH);

  analogWrite(enA,PWM.data[0]);
  analogWrite(enB,PWM.data[1]);
}

void turnRight(const std_msgs::Float64MultiArray& PWM){
  digitalWrite(in1,HIGH);
  digitalWrite(in2,LOW);
  digitalWrite(in3,LOW);
  digitalWrite(in4,HIGH);

  analogWrite(enA,PWM.data[0]);
  analogWrite(enB,PWM.data[1]);
}

void motorCallBack(const std_msgs::Float64MultiArray& PWM){
  Serial.print("PWM1=");
  Serial.println(PWM.data[0]);
  Serial.print("PWM2=");
  Serial.println(PWM.data[1]);
  if(PWM.data[0] > 0 && PWM.data[1] > 0){
    forward(PWM);
  }else{
    turnRight(PWM);
  }
}

ros::Subscriber<std_msgs::Float64MultiArray> subscriber("motorControl",&motorCallBack);
ros::Publisher publisher("sensorDistance",&pulseDuration);

void setup()
{ 
  
  pinMode(enA,OUTPUT);
  pinMode(enB,OUTPUT);
  pinMode(in1,OUTPUT);
  pinMode(in2,OUTPUT);
  pinMode(in3,OUTPUT);
  pinMode(in4,OUTPUT);

  digitalWrite(in1,HIGH);
  digitalWrite(in2,LOW);
  digitalWrite(in3,HIGH);
  digitalWrite(in4,LOW);
  
  
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);

  
  myNode.initNode();
  myNode.subscribe(subscriber);
  myNode.advertise(publisher);
  
  Serial.begin(57600);
}

void loop()
{  
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  // Sets the trigPin on HIGH state for 10 micro seconds
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  // Reads the echoPin, returns the sound wave travel time in microseconds
  pulseDuration.data = pulseIn(echoPin, HIGH);

  publisher.publish(&pulseDuration);
  myNode.spinOnce();
  delay(1000);
}

 

Merci.


Conseils choix composants (Microcontroleur..etc)

24 juillet 2020 - 04:52

Bonjour,

 

Je vais être amené prochainement a choisir des composants électroniques pour le contrôle de mon robot, cependant je ne m'y connais pas beaucoup, voir pas du tout en électronique.

 

Tout d'abord voici une liste de composants que mon robot va potentiellement avoir :

 

- Moteurs DC

- Servomoteurs (ou moteurs pas a pas).

- Capteurs distance ( Je ne connais pas encore quel type j’utiliserais mais c'est pour la détection d'obstacles).

- Caméra ( Pour de la reconnaissance faciale/objets).

- Capteur sonore ( Reconnaissance vocale)

- Potentiellement un micro pour que mon robot puisse dire deux trois mots ^_^

 

 

La liste peut évoluer en fonction de l'avancé du projet et si je souhaite rajouter des fonctionnalités a mon robot, mais globalement on peut dire que c'est une liste qui se rapproche beaucoup de la liste final de composants qui constitueront mon robot.

 

Voici donc mes questions :

 

Partie Actionneurs :

 

- D'abord je sais que pour contrôler mes moteurs,servomoteurs.. j'ai besoin d'un "driver motor" pour générer assez (amplifier) de courant, donc mis a part le voltage et le courant quel autres critères dois je prendre en compte pour le choix d'un "driver" ?

 

- Peut on contrôler a la fois un servomoteur et moteur DC avec le même "motor driver" ?

 

Partie Microcontrôleur :

 

- Dans un but d'apprendre a utiliser  ROS dans un vrai projet robotique, je cherche a savoir dans un premier temps quels sont les critères pour choisir un microcontrôleur  pour contrôler tout mon robot et dans un second temps quel microcontrôleur marcherait avec du ROS.

 

- Sur quels critères dois je choisir mon microcontrôleur ?

 

- Y'a t'il un lien entre le choix d'un microcontrôleur et l’utilisation de ROS ?

 

- Y'a t'il des cas ou on utilise plusieurs microcontrôleurs pour un même robot ? si oui pourquoi ?

 

 

 

 

Histoire d’être sur que ma façon de voir les choses est bonne, serait t'il possible d'avoir votre avis sur ca :

 

Pour moi, le robot fonctionne ainsi : le microcontrôleur est le composant sur lequel on va téléverser notre code, puis en fonction des données qu'il va recevoir a partir des capteurs il enverra un signal au "motor driver" qui lui par la suite se chargera de faire tourner le bon moteur/servomoteurs.

 

 

Merci et bon weekend !

 

 

 


Calcul couple,force d'une base mobile

21 juillet 2020 - 09:59

Bonjour a tous  :D ,

 

Dans le cadre d'un projet personnelle et dans un but d'apprentissage j'ai décidé de réaliser un robot de A a Z en ayant une démarche la plus scientifique possible et donc pouvoir justifier tout mes futurs choix technologiques.

 

Je commence donc par la base mobile de mon future robot, l'objectif étant de trouver le couple nécessaire que doit générer mes moteurs pour faire avancer la base a une vitesse et un temps donné, dans le but de choisir les bons moteurs DC (4 moteurs).

 

Le robot doit donc être capable d'atteindre une vitesse max de 5m/s en 5 secondes.

 

Les données initiales :

- Poids appliqué au centre de la base mobile ( base de forme carré ) : M = 15 Kg

- Vitesse initiale : Vi = 0 m/s

- Vitesse max : Vmax = 5m/s

- Temps pour arriver a la vitesse max : dt = 5 secondes

- Rayon des roues ( Mecanum wheel ) : R = 48 mm

- Gravité : g = 9.81 m/s^2

- Coefficient de frottement : U = 0.6

- Frottement de l'air négligé.

 

 

A partir de ces données voici donc mon approche :

 

On sait que la somme des forces extérieurs est égale a la masse * l’accélération : Fext = m.a

 

L’accélération peut être calculer a partir de la formule suivante : a = Vf-Vi/dt = (5-0)/5 = 1m/s^2

 

On sait également que la force normale appliqué au niveau de la roue N = m*g = 147,15

 

A partir de ça on peut calculer la force de frottement (roue/sol) qui est dans le sens opposé du mouvement : Fr = N*U = 88.3 N

 

On revient donc a notre première équation :

 

- Fext = force F en direction du mouvement + la force de frottement dans le sens inverse.

 

F - Fr = m.a

 

F - 88.3 = 15 * 1

 

F = 88.3 + 15

 

F = 103.3 N ( Force nécessaire pour faire bouger la base mobile en remplissant les conditions fixées plus haut )

 

Maintenant on peut calculer le couple :

 

C = F*R = 103.3*0.048 = 4. 95 Nm ( couple que doit générer mon moteur pour faire tourner les roues et bouger mon robot en remplissant les conditions fixées plus haut )

 

 

Voici donc mes questions :

 

- Est ce que ma démarche est correcte ?

 

- Est ce que mes calculs et équations sont correctes et les résultats trouvés représentant t'ils les résultats que je recherche ?

 

- Dois je diviser le couple par 4 étant donné que j'ai 4 moteurs (En sachant que le poids est au milieu de la base mobile) ?

 

- Est ce que le type de roue a une influence sur les calculs et les forces exercées, car les roues de la base mobile sont des mecanum wheel ?

 

- Y'a t'il d'autres données a prendre en compte ?

 

 

J’espère que j'ai bien expliqué la problématiques et les objectifs :P

 

 

Merci !

 

 

 

 


Électroaimant

05 octobre 2017 - 03:43

Bonjour , 

 

 

Pour la réalisation de mon projet j'aurais besoin d'un électroaimant , c'est pourquoi je suis venu ici poser mes questions pour avoir des réponses de la part de personnes qui s'y connaissent mieux que moi ! 

 

Mon électroaimant serviras a soulever un objet de 1 kg et qu'il reste collé a électroaimant tant que celui ci est alimenté .

 

Donc , dans l'idéal j'aimerais trouver un électroaimant qui puisse soulever un objet sans pour autant qu'il y'est contact , autrement dis il faut qu'il sois capable d'attirer l'objet vers lui ! ( une distance entre les deux de 5cm ou un peu moins )

 

d'ou ma question : Existe t il des électroaimant avec un champs magnétiques qui puisse correspondre a ma demande ? 

 

                              


Mécanisme de Marche

24 septembre 2017 - 09:06

Salut les Robot-Maker ! 

 

 

Comme je l'ai dis dans ma présentation ce semestre j'ai un projet qui consiste a réaliser un robot Marcheur ( avec certaines fonctionnalités  ) .

 

A vrai dire , j'aimerais savoir si c'est possible de créer un mécanisme de marche Rapide ( en gros un robot qui marche vite ou très vite ) avec les systèmes et composants que je vais citer en dessous  ?

 

 

- Pour le système ; des engrenages , ou poulie courroie .

- composants : Moteur d’essuie-glace 12V alimenté par une batterie 12V de capacité 10 ah 

 

Si c'est le cas , y'aurait t'il un cours ou un logiciel de simulation ou  quelqu'un pourrait il m'expliquer  comment fait on pour calculer la trajectoire du mouvement de la patte et ainsi savoir si le robot marchera correctement ou non ?  

 

Pour ceux qui n'ont pas compris ma question :    ( c'est le mouvement que son robot fait a partir de la 00:38 seconde de la vidéo ) 

 

 

Je précise que j'aimerais que sa soit un robot Hexapode , autrement dit avec 6 pattes sur les cotés 

 

 

PS : Je suis débutant dans le domaine , Donc je m'excuse si  je vous pose des question un peu bête .