Aller au contenu


Ludovic Dille

Inscrit(e) (le) 09 août 2015
Déconnecté Dernière activité févr. 27 2024 10:10
*****

#110798 Aide compréhension shémas luos

Posté par Ludovic Dille - 08 août 2020 - 01:33

Hello,

Petit conseil, exporte des schématique sous fond blanc car la c'est illisible (J'ai l'impression de reconnaitre eagle et c'est très simple de le faire)

Pour ce qui est de flasher ton STM avec l'ordinateur je te conseille de regarder du côté du protocole SWD: tu auras besoin de branché quelques pins vers un header externe et le plus simple c'est d'utiliser un ST-Link (V2 ou V3) pour pouvoir flasher. Tu dois aussi avoir le control sur ton port Nrst et au moins mettre BOOT0 à la masse. Il faut aussi connecter tes VDD ensemble à ta tension d'alimentation et tes VSS à la masse avec des capacité de découplage.

Un autre élément important qu'il manque à ton schéma c'est un oscillateur.

Si tu n'as jamais travaillé avec un stm32 je te conseillerai au moins de suivre un tuto complet sur comment faire des circuits avec. Une alternative est de tourner vers un Nucleo et de faire un pcb "bridge" que tu vas link sur ton nucleo pour y ajouter les éléments qui manque à l'interface. Le nucleo te permet de ne pas devoir penser à comment router ton stm et il a l'interface jtag pour flasher ton stm intégré.

Sinon en remarque général tu peux utiliser des labels sur tes fils pour pas avoir un schéma spaghetti.

Je suis pas un pro du stm mais ça demande pas de boulot de partir de 0 mais bonne chance si tu continues sur cette voie la :)

Ludo




#110620 Calcul couple,force d'une base mobile

Posté par Ludovic Dille - 24 juillet 2020 - 01:04

Pas spécialement à la toute fin mais plus quand tu auras une idée plus concrète de ce que tu veux avoir sur ton robot. Par exemple tu pourras souhaiter avec une batterie pour tes actionneurs et une plus petite pour tout ce qui est électronique de contrôle




#110586 Calcul couple,force d'une base mobile

Posté par Ludovic Dille - 21 juillet 2020 - 07:20

Donc si j'ai bien compris : Le frottement statique que j'ai calculé Fr = 88.3N, me donne comme information que pour faire bouger l'objet d'une masse donné je dois appliquer une force F > 88.3.

 

Et ma formule Fext = m.a avec Fext = (15*9.81).1 = 147.15 N , me donne comme information que pour que mon objet de masse donné roule a une vitesse donné je dois appliquer une force >= 147.15 N. ( et comme c'est de la dynamique on ne prend pas en compte le frottement statique évidemment et le frottement dynamique qui est nul).

 

Pourrait tu ou aurait tu un lien expliquant pourquoi la vitesse d'une roue au point de contact est nul s'il te plait ?

 

C'est noté pour le coefficient de sécurité merci pour ce tips.

 

Merci  beaucoup Ludo pour ton aide et tes conseils, je vais me renseigner sur comment choisir des moteurs !

Hmm alors tout d'abord pourquoi la vitesse au point de contact est nulle:

Si on définit la vitesse du robot par v et que pour atteindre cette vitesse il est muni de roue de rayon r dont la vitesse est w (rad/s).

La vitesse du point de contact va être (calculée simplement avec des vecteurs):
v_c = v - w * r
Si tu veux te trouver dans le cas sans glissement (qui est une bonne hypothèse pour travailler) tu veux que v = w*r (donc que la vitesse de ton robot soit linéaire avec la vitesse de rotation de ta roue) mais plus particulièrement tu veux que v_c = 0. Le point de contact "roule" sur le sol, il n'est pas frotté contre :)

Donc pour revenir à cette histoire de frottement. Dans un cas "normal" tu n'as pas besoin de calculer ton frottement (si ce n'est pour vérifier que tu pourras transmettre la force que tu as besoin au sol mais la ce n'est plus du dimensionnement du couple moteur).

Donc tu as bien
F = m * a = 15 N
C = F * r = 15 * 0.048 = 0.72 N.m
C'est le couple total que tu dois appliquer mais ici, tu as 4 roues et donc 4 moteurs
Croue = 0.18 N.m
Donc tu obtients le couple au niveau de ta roue mais pour ajouter un facteur de sécurité (même si ton poids semble en être déjà un). on va dire un Croue de 0.3 Nm

 

Si tu as bien remarqué j'ai uniquement utilisé le terme roue et pas moteur. En effet, tu ne vas pouvoir brancher une roue sur un moteur directement. Les moteurs auront une vitesse très élevée et un couple très faible donc tu vas insérer un rapport de réduction entre ton moteur et ta roue. Notons ce rapport g. Tu obtients alors
Cmoteur = g * Croue
Mais il faut faire attention lorsque tu as un rapport de réduction tu vas avoir des pertes (que ça soit via des courroies-poulies ou bien des roues dentées). Si on dénote nu l'effecacité de ton réducteur on arrive finalement à
Cmoteur = g * nu * Croue
(Sachant qu'il y a moyen de calculer/ estimer nu mais je ne sais pas à quel point tu veux rentrer dans les détails).

La on peut aussi vérifier qu'on peut transmettre ce couple:
F_max = m*g*U = 15 * 10 *0.6 = 90 N
On est bien au-dessus des 15N qu'on va devoir transmettre.

En espérant que c'est plus claire
Ludo
 




#110578 Calcul couple,force d'une base mobile

Posté par Ludovic Dille - 21 juillet 2020 - 02:35

Hello,

Tu as un petit soucis de ta démarche au niveau du frottement. Dans une approche simple du frottement tu as 2 coefficients important, celui du frottement statique et celui du frottement dynamique. On peut facilement borner le frottement statique par m * ks. Donc tant que tu exerces une force inférieure à m * ks, le contact, va exercer une force de même magnitude mais de sens contraire (donc ton objet ne bouge pas). Dés que ta force sera supérieur à cette borne tu vas tomber dans le frottement dynamique (mouvement relatif entre les 2 objects) et lui peut-être calculé par m * kd (avec kd < ks).

Cependant si tu regardes la vitesse du point de contact de ta roue avec le sol tu dois tomber sur une vitesse de 0 donc tu ne peux pas être en frottement dynamique donc pas de perte de ce côté la. Ce qu'il te reste c'est donc le frottement statique qui va te permettre d'avancer (si tu n'avais pas de frottement, ks = 0 et kd = 0, tu resterais sur place).

Donc ton calcul se résume bien à
F = m*a

- 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) ?
Oui chaque moteur va contribuer au déplacement de ta base mobile. Cependant lorsqu'on fait ce genre de dimensionnement il faut toujours prendre des facteurs de sécurité. Si tu calcules trop juste et qu'une de tes roues ne touche plus le sol, ton robot n'avance plus :)

Alors, oui les roues auront une influence sous forme de pertes (mais avec tes coefficients de sécurité tu peux les négliger) et de limitation. L'adhérence d'une roue mecanum est inférieure à celle d'une roue "classique"

Alors il n'y a pas vraiment d'autres données à prendre en compte pour un calcul de couple mais pour le choix du moteur, oui et pas mal :)

Ludo



 




#110458 voiture télécommandée autonome

Posté par Ludovic Dille - 08 juillet 2020 - 12:25

 

Ouai les roues sont toujours parrallèles(c'est pour ca que j'ai mentionné Ackermann), je sais que c'est pas idéal niveau performance vu que je vais avoir du glissement sur les roues avant pendant les virages . Je compte essayé d'entrainer l'IA en virtuel avant de lui mettre la vrai voiture entre les mains donc je suis parti sur le design que je pense etre le plus simple à simuler . Meme raisonnement pour les roues arrières, si les deux roues sont liées je n'aurai pas à me soucier au fait qu'elles ne tourne pas à la meme vitesse . 

 
Dans quasiment tout ce que je fais, le plan original ne se deroule pas comme prévu donc il y aura peut-etre des changement de conception au fur et à mesure .
Maintenant que tu le dis une future version avec un moteur dans chaque roue, ca pourrait etre plutot marrant!  :Koshechka_08: 
 

 

Le fait d'enregistrer et de relire les positions de servo et de moteur ne me parait pas etre une solution très robuste, si les roues patinent ou que la voiture est poussée par un autre véhicule la trajectoire préenregistré sera decalée . De plus pour pouvoir enchainer les tours il faut réussir à enregistrer un tour qui commence et se termine au meme endroit, ca me parait difficile .
C'est pour ca que l'odométrie me parait vitale . En théorie si la position des obstacles est connue, il est possible de calculer le tracé du circuit (avec des courbes de Bézier ou autre), si la voiture connait sa position et sa direction il devrait donc etre possible de faire en sorte qu'elle suive le circuit . C'est comme ca que j'ai imaginé le problème, ca serai pas la première fois que je me plante  :ignat_02: .
Enregistrer le tracé du circuit en fesant un tour conduit à la main me parait une bonne solution .

Etant donné que les obstacle sont souvent des tracés au sol ou des objets pas forcement très hauts, Je ne sais pas si un Lidar aidera beaucoup à la détection des obstacles mais il serait certainement bien plus fiable pour déterminer la position de la voiture dans l'espace que le gyrospope+accéléromètre que je compte utiliser .
Malheureusement je n'en ai pas sous la main pour le moment (j'éssaye de faire avec ce que j'ai chez moi pour le moment .)

 

L'odométrie c'est très bien mais il y a plusieurs trucs à savoir:
- L'erreur est additive donc l'estimation de ta position va se dégrader au fur et à mesure
- Le glissement est un de tes pires ennemis donc ici si tu veux drift (et même juste avec la topologie de ta voiture) ça va être compliqué d'être précis.


Si tu recherches vraiment à améliorer ton calcul de localisation tu as besoin de 2 types de capteurs:
- proprioceptif cad des données sur ta voiture (odometre, imu, gyroscope, ...)

- extéroceptif cad des données sur ton environnement (Lidar, caméra, ...).
Et appliquer des techniques d'estimation - correction (comme kalman).
Dans ton cas le lidar semble compliqué (vu que les objets on peu de hauteur. Mais un capteur basé sur la vision (soit sur l'avant de ta voiture, soit qui surveille tout le circuit pourrait fonctionner). Je comprend que tu ne souhaites pas faire de la reconnaissance de terrain mais je pense que tu si tu veux rajouter de l'autonomie à ta voiture il faut qu'elle puisse detecter son environnement un minimum: une idée lancée comme ça: des détecteurs de couleur pour détecter les bords du circuit.

Bonne continuation dans ton projet :)




#110374 Impossible d'imposer des vitesses sur moteur Dynamixel

Posté par Ludovic Dille - 28 juin 2020 - 08:46

Ah effectivement, j'ai du mal lire les registres mais en relisant le code il me semble que dans ta fonction vitesseRadVersDynamix, tu as oublié le return :)




#110348 Recup moteur ventilateur centrifuge à gaz de chaudiere

Posté par Ludovic Dille - 25 juin 2020 - 12:17

Hello !
À mon avis la borne HS est pour le Hall sensor et le PWM pour contrôller ton moteur :)
Donc je te dirais soit d'acheter leur contrôlleur: https://www.ebmpapst...ec_classic.html
Soit de réaliser un petit circuit pwm pour faire ça :)

Ludo
 




#110258 Abaisser une tension pour domotiser un aspirateur robot

Posté par Ludovic Dille - 17 juin 2020 - 11:44

En effet il semble bien mieux ! Il ne faudra pas oublier de souder les pads du "5V" pour le configurer :)

Ludo




#110212 Support articulé morotisé pour enceinte parabolique

Posté par Ludovic Dille - 13 juin 2020 - 07:51

Hello,

Comme ça je ne pense pas que tu vas trouver ça dans le commerce (surtout vu les dimensions) mais peut-être que je me trompe.
Je pense que la première question à répondre pour ce projet c'est de connaitre les angles maximum que tu souhaites atteindre avec ton bras (ex: est-ce qu'un angle de 90 degré entre le premier bras et le second doit être stable ou non). Ça va te permettre de dimensionner tes moteurs.

Une autre question importante est de penser à la sécurité. Si il y a une panne de courant, comment est-ce que le bras va être retenu ?

Si tout est bon jusque la, je te conseilles ces vidéos : (hésite pas à regarder les suviante de sa série). Tu pourras voir qu'il développe de 0 un bras (scara) qu'il veut pouvoir déplacer à la main et que le robot maintienne cette position. Donc pour moi si tu veux réaliser ce projet tu va aussi avoir besoin de connaissance en électronique et en automatique (contrôle de système). Ce n'est pas un soucis en soi mais faut être prêt à se lancer :)

Après c'est peut-être hors propos pour toi mais une solution purement mécanique comme une lampe de bureau ça ne pourrait pas fonctionner pour toi ?

Ludo




#110211 Impossible d'imposer des vitesses sur moteur Dynamixel

Posté par Ludovic Dille - 13 juin 2020 - 07:36

Hello,

J'ai l'impression que l'erreur pourrait venir du fait que tu importes la librairie pour un AX12 et que si tu regardes la doc du AX18 (https://emanual.robo...a/#moving-speed), le registre de moving speed a l'id 32 alors que le registre qui tu indiques dans ton code (trouvé ici https://github.com/v...Bioloid/ax12.h) semble indiquer le 38 :)

Et je pense que Servomoteur convient mieux que moteur qui est est un peu réducteur (sans mauvais jeu de mot)

Ludo




#110205 Commande servo moteurs en simultané

Posté par Ludovic Dille - 13 juin 2020 - 10:24

Top !
N'hésite pas à partager une vidéo de ton projet :)




#110138 Commande servo moteurs en simultané

Posté par Ludovic Dille - 07 juin 2020 - 05:00

Alors l'organisation de ton code ça dépend pas mal de toi et de ton projet.
Tu peux partir du fait que tu voudrais peut-être changer la valeur de begin et end et donc il faudrait que tu utilises ces variables pour calculer tes deltas
 

uint16_t d1 = abs(end_S1 - begin_S1);
uint16_t d2 = abs(end_S2 - begin_S2);
...

uint16_t max_pulse = max(max(d1,d2),max(d3,d4));

mais pour être plus rapide tu peux directement assigner à max_pluse la valeur que tu calcules à la main mais c'est beaucoup moins flexible.

Et après il y a d'autres façon de faire encore mais tout dépend de la taille du projet, de l'investissement que tu veux y mettre.

Normalement la boucle fort ne devrait pas changer.




#110126 Commande servo moteurs en simultané

Posté par Ludovic Dille - 07 juin 2020 - 09:32

Ludovico, j'ai essayé en pièce ce n'est pas passé. C'est au niveau de la fonction ferme lent que ça bloque.. à la fin

 

C'est la dans l'edit du forum

screenshot_20200607_103152.png




#110125 Commande servo moteurs en simultané

Posté par Ludovic Dille - 07 juin 2020 - 09:31

Et sinon pour t'aider à corriger ton code, le problème vient que tu mets tes boucles à la suite et donc tu vas agir sur un seul servo à la fois. Donc ici tu veux faire une boucle qui touche à tous tes servo.

Par exemple pour ferme_lent()
 

ferme_lent()
{
  // Nombre max d'etape
  uint16_t max_pulse = 160;

  // position de depart et de fin de chacun des servo
  uint16_t begin_S1 = ...
  uint16_t end_S1 = ...
  uint16_t begin_S2 = ...
  uint16_t end_S2 = ...
  
  for(uint16_t i = 0; i < max_pulse; i++){
    // condition for each servo
    if(begin_S1 + i < end_S1){
      pwm.setPWM(servo1,0,begin_S1 + i);
    }

    if(begin_S2 - i > end_S2){
      pwm.setPWM(servo2,0,begin_S2 - i);
    }

    delay(..)
  }
}

Ce qui devrait déjà t'aider à régler ton problème :)




#110078 Colombot - Robot pour la coupe de robotique

Posté par Ludovic Dille - 03 juin 2020 - 07:32

Nope ce n'est pas moi mais si pour un projet l'occasion se présente pourquoi pas :)