N'hésitez pas à liker le projet sur hackaday.io et youtube ! Merci.
A bientôt !
--- FIN EDITION ---
Je me lance dans la réalisation d'un mini robot quadrupède, et je rencontre quelques difficultés avec l'utilisation de micro servo du commerce (ex. : sg90, mg90, mg92).
A mon sens, voici la situation actuelle avec les servos dont je dispose actuellement (mg90/92) :
Avantages :
- Très compact (évidemment)
- Très léger
- Couple assez élevé
- Plutôt robuste du point de vue mécanique
Problèmes :
- Position du neutre et course angulaire différentes d'un modèle à l'autre,
- Asservissement 'modélisme' pas adapté à la robotique (vibrations)
- Alimentation limitée à 6V ou 6.6V (+ parasites renvoyés dans l'alimentation)
- Pas de protection en température
- Pas de retour de position
- Pas de retour d'effort
Il existe certainement des micro servos haut de gamme HV, permettant de régler tout ou partie de ces problèmes. Ma crainte est que le coût de tels servos soit trop élevé, sachant qu'il en faut 8 à 12 pour un simple quadrupède. En outre, investir dans de tels servos n'est pas l'approche que je souhaite suivre pour le moment. Et, je ne suis pas sûr de trouver facilement la bonne référence. Je ne suis pas sur non plus que cette solution règle les principaux problèmes que je rencontre.
L'idée que je souhaite développer à travers ce nouveau sujet, est de modifier un servo existant (pas cher), en conservant la partie mécanique et en remplaçant la partie électronique, pour atteindre un niveau de performance et de fonctionnalités permettant de concevoir un robot quadrupède dans de bonnes conditions. Je publie ce sujet ici pour partager mon expérience dans ce projet, et pour profiter de vos conseils ! Voyons ensemble où cela nous conduit...
L'un des articles les plus pertinents que j'ai trouvé est le suivant :
La première étape concrète consiste à retirer la carte électronique du servo d'origine (ex. : un MG90s) pour accéder aux bornes du moteur et du potentiomètre.
La carte de contrôle d'origine est minuscule. l'espoir de la remplacer pas une carte de contrôle maison dans le même encombrement (PCB d'environ 1cm2) s'envole.
En revanche, il reste possible de souder des fils pour déporter la carte de contrôle à l'extérieur du servo. C'est facile et répétable.
Si la mécanique du servo finissait pas casser, le remplacement serait assez aisé et peu coûteux. A ce stade, c'est plutôt encourageant.
Démontage :
Opération terminée :
3 fils pour le potentiomètre et 2 fils (gris) pour le moteur.
Je me demande néanmoins dans quelle mesure le courant passant par les fils moteurs peut perturber le signal analogique remontant par les fils raccordés au potentiomètre.
Note pour plus tard : vérifier la qualité du signal analogique lorsque le servo est en fonctionnement.
L'idée est de placer la carte de contrôle maison à proximité du servo (ou pas). Dans ce cas, l'idéal, à mon sens, serait quelle puisse se coller contre le boitier du servo (fond ou sur un coté). Une taille de 12 x 22 mm, avec des composants cms sur une seule face serait peut être une solution avantageuse.
Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir
Posté 19 septembre 2020 - 05:08
Je t'encourage vivement dans tes expérimentations =) C'est en essayant des trucs comme ça qu'on apprend
Mais si jamais ta finalité c'est le robot quadrupède et pas l'apprentissage en bidouillant les moteurs / que le choix des servo est un problème à résoudre ,
A ) Tes servomoteurs de modélisme, tu peux " calibrer leur plage" dans ton code, de sorte à compenser le problème de " Position du neutre et course angulaire différentes d'un modèle à l'autre "
Ce sont des servomoteurs "Intelligents " au même forme factor que les servomoteurs 9g de modélisme et ils ont en intégré toutes les fonctionnalités dont tu as parlé et plus encore
Je te laisse jeter un oeil au lien.
Ils sont parfait pour l'application d'un quadrupède comme tu le souhaites.
Ils sont un peu plus chère qu'un servomoteur classique mais ils valent vraiment le coup! ( Et possibilité de négocier une petite réduction supplémentaire en jouant avec le club des testeurs robot maker )
Pour la réalisation du PCB, je ne serais pas aussi catégorique. Je pense que cela vaudrait la peine de s'y intéresser de plus près.
Backyard Robotics propose déjà d'excellentes réalisations destinées à des moteurs Brushless, cela pourrait peut-être t'inspirer.
Perso, j'utilise des SG90, MG90S et MG92B. Ces derniers sont excellents, ils ont un gros couple. Le servo proposé par Myke à l'air très intéressant également.
J'attends avec impatience la suite que tu comptes donner à ton projet.
Merci pour toutes ces informations et pour ces encouragements !
Je connais un peu FeeTech, car je dispose de SCS15 pour un plus gros robot, et j'avais pris contact avec leur support (une solution avait été trouvée rapidement).
Je vais regarder de plus prés le modèle SCS0(0)09 que tu m'indiques, en parallèle de mes expérimentations. En effet, ils offrent les fonctionnalités que je cherche et il sont rapides.
En revanche, ils sont vendus comme des servos 6V et non HV.
Le support Feetech a répondu à ma demande d'information très rapidement. Voici un extrait de sa réponse :
This is **** from ShenZhen feetech servo factory.
We are specialized in servos, manufacturing various kinds of servos.
SCS0009 and SCS3223 can working for 7.4V maximum,it is ok for you?
We had talked with our engineer.
They said suggest 6V, 7.4V Maximum.
La limite de tension est un peu basse pour brancher ces servos directement sur un Lipo 2S sans risque de nuire à leur fiabilité. Qu'en pensez vous ? Ça mérite peut être de faire un test.
Mon petit robot pèse moins de 300gr, les servos sont montés en série, avec un bras de levier sur chaque servo de l'ordre de 6cm (longueur du fémur, longueur du tibia).
Le couple des MG92b est suffisant à 6V. Mais le courant total est assez fort et mon BEC tient moyennement bien la charge.
Je cherche donc à brancher tous les servos directement sur la batterie de propulsion du robot. Éliminer le(s) DC/DC, et les remplacer par de simples capas de filtrage là où c'est utile.
Un servo 'normal' nécessite un régulateur linéaire ou un DC/DC pour ramener la tension d'alimentation dans la plage 5-6V ordinaire.
Des servos HV se raccordent directement sur une batterie LiPo 2S (7.2V nominal , 8.4V MAX). C'est l'idéal.
Les servos 6V-7.4V (Feetech) devraient pouvoir se raccorder directement sur une batterie LiFE (6.6V nominal)
J'ai prévu de tester les mg92b avec un batterie LiFe.
Merci pour la référence du BEC. Effectivement, il est puissant. Il s'agit de ton robot 4BQ1 ? Visiblement, il se porte très bien !
J'ai testé mon robot avec un BEC plus petit (5V 3A théoriques) car l'encombrement est assez réduit, et ça ne fonctionne pas bien évidemment. https://fr.aliexpres...0341771373.html
J'avoue que le montage des servos en parallèle est vraiment avantageux. D'ailleurs, je réfléchis à un montage 'parallèle' pour mon petit quadrupède. Tu connais certainement pupper. Je cherche à reproduire ses pattes en taille micro servo. https://stanfordstud...tics.org/pupper
Banc de test :
Le MG90S bidouillé (voir post précédent), un DRV8838, une carte NUCLEO (STM32) et un testeur de servo (PWM).
Premier essai à vide :
Dans un premier temps, voyons ce que donne un simple PID pour asservir la position en fonction du signal PWM envoyé par le testeur de servo.
Avec une charge de 200g, le courant monte à 1A sous 6V.. Le moteur du servo chauffe un peu. Le DRV8838 chauffe aussi (pas de dissipateur). Je ferai des essais en charge lorsque j'aurais mis au point les outils pour analyser le comportement du servo.
La boucle du PID tourne à 200Hz. Le servo ne fait pratiquement aucun bruit en charge et il ne vibre pas. Les coefficients PID mériteraient d'etre mieux réglés.
J'utilise une liaison série pour afficher quelques traces de ce qui se passe dans le STM32. Je vais utiliser ces traces pour faire un petit outil de visualisation des principales variables (consigne, position..).
Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir
Posté 19 septembre 2020 - 06:18
Bonjour Mike, Oracid,
Merci pour toutes ces informations et pour ces encouragements !
Je connais un peu FeeTech, car je dispose de SCS15 pour un plus gros robot, et j'avais pris contact avec leur support (une solution avait été trouvée rapidement).
Je vais regarder de plus prés le modèle SCS0(0)09 que tu m'indiques, en parallèle de mes expérimentations. En effet, ils offrent les fonctionnalités que je cherche et il sont rapides.
En revanche, ils sont vendus comme des servos 6V et non HV.
Est-ce que tu as un retour d'expérience sur le fonctionnement et la fiabilité de ces servos lorsqu'ils sont alimentés en 8.4V (Lipo 2s) ?
Je vais aussi poser la question à leur support et je collerai la réponse ici.
On trouve peu de réalisations sur Internet à base de ces servos. Tu sais pourquoi ?
A suivre...
Patrick.
J'ai réalisé une fois des tests avec, et je les avais alimenté directement avec une batterie 2S ... Et je n'ai pas eu de problème particulier... Je suis néanmoins incapable de confirmer que ma batterie était chargée à 100% au moment des essais ...
Pour ce qui est de trouver de peu de réalisation sur Internet, Feetech, bien que feetech propose de bons produits, ce n'est pas encore une marque très connue des anglais et des européens ... Et c'est un peu le problème de la poule et de l'oeuf, pour avoir de l'adoption il faut de l'adoption.
Si tu veux tester le scs0009 tu peux en prendre un sur la boutique, faire un test complet et une fois le test posté sur robot maker, recevoir un remboursement sous forme de bon d'achat.
En aucun cas je ne t'invite à " abandonner ton projet de servo " car ce genre de projet sont toujours très formateur ! =)
Mais si tu creuse sur le forum il y a déjà eu des projets de créations de servomoteurs qui malheureusement n'ont pas aboutis et pour une raison simple : c'était plus cher que ce qui existe déjà sur le marché .
Feetech mérite peut être d'être mieux connu en effet. En France, peu de commerçants revendent leur produits (notamment leurs micro servos).
Leur support technique est vraiment réactif, c'est déjà un bon point.
Leur commerciale m'a fait une offre pour que je puisse faire des essais avec les deux modèles en quelques exemplaires, SC0009 et SC2332. Je vous tiendrai au courant.
Dernier échange avec la société :
>>Do you plan to manufacture a HV (8.4V) micro servo like the SCS0009 or SCS2332 in the next months ?
I will talking with our enginner on monday.
Wait & see !
Bien sur, je continue mon projet, et merci pour vos encouragements.
Sur des projets personnels comme ça, il y a beaucoup d'aléas.
Je suis d'accord avec Mike, faire l'électronique d'un servo, c'est surement très formateur, mais c'est un projet en soi.
Avoir comme projets simultanés de faire un quadrupède et un servo, à mon avis, c'est compliqué.
Mais pourquoi pas ! Ce que tu fais est super et sans aucun doute, tu as la compétence nécessaire. C'est précisément ce qui me manque pour faire ce genre de chose.
Oui je connais bien Pupper. Je suis les réalisation de Nathan avec beaucoup d'intérêt. Ses servos, ce sont des JX CLS6336 qui pèsent 70g pièces.
J'ai essayé avec des JX HV7146MG qui pèsent également 70g. Je n'ai pas abouti, trop lourd, mais je ne désespère pas.
Ma logique, c'est de commencer léger et petit et d'augmenter d'abord la taille, puis éventuellement le poids.
Bravo pour tes essais.
Le problème quand on a la compétence, c'est que l'on peut facilement se noyer dans la complexité technique.
Alors que quelqu'un comme moi qui ne connait rien, et bien il est obligé de tester, ce qui est également très formateur.
Mon gros problème actuellement, c'est de trouver les bons chaussons, en fonction du sol. Et bien ça, c'est très compliqué.
Ma logique, c'est de commencer léger et petit et d'augmenter d'abord la taille, puis éventuellement le poids.
Oui, c'est une excellente approche ! C'est vraiment un conseil à donner à tous ceux qui veulent débuter dans ce type de robots (multi-patte). J'avoue qu'il m'a fallu de nombreuses tentatives (et pratiquement autant d'échecs) pour me ranger à cette logique. Construire léger, ce n'est vraiment pas évident, ça demande beaucoup de réflexion et d'essais !
Bien, j'avance sur la modification du micro servo, et notamment sur son interface de communication et son logiciel.
C'est le début du projet, alors soyons ambitieux ! Le cahier des charges que je me fixe actuellement est le suivant :
- contrôler la position du servo, sa vitesse et son couple (limiteur)
- récupérer sa position, sa vitesse, sa charge (courant instantané) et sa température (celle du moteur).
- configurer l'asservissement : les coefficients PID, les éventuelles coefficients de filtrage.
- mettre à jour le firmware.
Le débit de l'interface doit être suffisant pour envoyer une consigne de position puis récupérer la position courante et la charge toutes les 20 ms minimum (50Hz).
Idéalement, je vise 100 à 333Hz, car les micro servo sont très rapides. Sur un servo standard, ça n'aurait pas de sens à cause de l'inertie.
Donc, en plus de l'entrée digitale PWM ordinaire (ça peut toujours servir, on la garde), j'ajoute une interface série (UART), comme les servos intelligents du commerce.
A terme, les servos ainsi modifiés pourront être tous raccordées à un seul port série d'un microcontrôleur (Arduino, ARM ou autre). Le débit de la liaison sera partagé par tous les servos.
C'est le protocole de communication Dynamixel (2.0) qui a retenu mon attention (c'est le seul que je connais, le choix était vite fait). Il est open-source et le protocole existe sous forme de bibliothèques logicielles compatibles de multiples plateformes et dans de multiples langages. La documentation et les exemples sont très nombreux. Des outils graphiques existent et ils sont libres.
Note : j'ai hésité avec le protocole de Feetech, mais je n'ai pas trouvé de documentation. Il existe une librairie Arduino en C++.
Essai avec une interface compatible de type bus intelligent :
Dans cette vidéo, j'ai implémenté une toute petite partie des fonctionnalités offertes par ce protocole de communication. Je peux modifier la consigne de position et relire la position réelle à partir de l'ordinateur sans toucher au testeur de servo que j'ai utilisé dans les vidéos précédentes. Sur l'ordinateur, j'utilise un scrip Python maison pour l'IHM. Je n'ai pas utilisé d'outils graphiques compatibles Dynamixel car mon implémentation du protocole n'est pas terminée et il n'est donc pas tout à fait compatible avec les outils existants.
Dans la première partie de la vidéo, le couple du servo est désactivé. On voit qu'il est possible de lire la position réelle du servo. C'est très utile en robotique. Cela permet par exemple de calibrer la mécanique du robot en tournant/déplaçant à la main les pattes.
Ensuite, j'active le couple et je peut changer la position et analyser le retour de position sur le graphique. A la fin, je fais pression sur le servos et on peut constater le retour de position. L'alimentation étant limitée à 100mA, on voit meme que le servo décroche sous l'effort.
La suite ?
Je souhaiterais implémenter le retour de charge et de température. Je n'ai pas les composants électroniques permettant de le faire actuellement.
Je dois changer le driver moteur. Je pense opter pour un DRV8876 qui intègre un capteur de courant qui peut se raccorder directement sur une entrée ADC du microcontrôleur.
Pour la mesure de la température, je ne sais pas quoi utiliser encore. Le capteur doit pouvoir se fixer au moteur et l'idéal serait qu'il puisse se raccorder directement à une entrée analogique ou un bus série du microcontrôleur.
Je vais continuer à peaufiner l'implémentation logicielle du protocole, mais c'est la conception de la première carte électronique qui va commencer. Elle devra intégrer le STM32, le driver moteur, et toute la connectique (moteur, potentiomètre, prise servo, sonde debug/programmation). Je ne vais pas chercher à faire une carte fortement intégrée du premier coup. D'ailleurs, j'ai peu d'espoir de parvenir à concevoir une carte qui puisse rentrer dans le boitier d'un micro servo. La première carte devra être instrumentée pour pouvoir analyser les éventuels problèmes électroniques et logiciels (point de tests). Une orientation possible est de réaliser une petite carte électronique située à l'extérieur du boitier, sous la forme d'un petit boitier électronique (20 x 20 x 5 mm) placé en coupure sur le cordon du servo. Avec ce format, du genre ESC ou BEC de modélisme, il devrait être possible de loger une grosse capa de filtrage au cas où sur l'alimentation du servo.
Je suis preneur de vos avis ou idées. En général, c'est en discutant qu'on trouve les meilleures solutions...
Première tentative de schématique, placement et routage :
Je pars sur un STM32G431 en boitier 32 broches, un driver moteur (DRV8876) avec un pad thermique, un petit régulateur (LDO 3v3) et un driver de ligne pour protéger le bus de communication (liaison série half-duplex). Il me manque encore le capteur de température. Certainement un modèle sur bus I2C à venir.
J'obtiens un module de 26 x 34 mm en 4 couches, composants sur une seule face (5€ chez JLCPCB pour Qte 10 avec un délai de fabrication de 5 jours).
A priori, tous les composants peuvent être posés et soudés manuellement.
A droite :
- prise servo PWM ordinaire
- prise servo BUS série
- 2 trous traversants pour ajouter une capa de filtrage optionnelle.
En haut :
- connecteur JTAG
- connecteur laison série compatible de cordon FTDI
A gauche :
- entrée potentiomètre (3 borches),
- sorties moteur (2 broches).
La face bottom est libre. On peut fixer une petite pièce métallique pour faire dissipateur au cas où.
On est loin d'un PCB de 20 x 11 mm permettant pratiquement de rentrer dans le fond d'un micro servo.
Je vais essayer d'optimiser un peu pour réduire la taille.
Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir
Posté 21 septembre 2020 - 12:55
Pour le capteur tension et courant comme ça j'aurais opté pour un ina219 qui peut être implémenté sur une taille très réduite ...
Pour la température un truc comme le Lm75A, ou le MAX30205 en les plaquant contre le moteur ...
Après une autre méthode serait d'ouvrir un servo et de voir quels sont les composants présent dedans ...
Une autre approche intéressante serait de regarder le travaille de certaines équipes participant à la coupe de France de robotique / Eurobot, je pense notament à CVRA https://cvra.ch/robo...ware/can/motor/mais il y a d'autres équipes qui ont fait un travail tout aussi intéressant et dont le travail est aussi en ligne mais dont je ne me rappel plus le nom...
Après visiblement tu as les ressources pour tout faire from scratch sans forcément regarder ce qui se fait ailleurs! =)
En tout cas sympas ce premier jet!
La densité de composants est pas trop mal
J'y pense comme ça : tu as une contrainte de 20mm * 11mm, mais il manque une dimension ... Combien en hauteur ? Souvent les pcbs sont mis en diagonale dans les servo histoire de grapiller un peu de place...
Mais encore mieux , si tu peux intégrer deux pcb l'un au dessus de l'autre ... tu double presque ta surface dispo...
Moi je suis sur qu'on peut superposer au moins trois pcb dans l'espace libre sous le potentiomètre =)
D'ailleurs, au passage, une autre " triche dispo serait " d'allonger très légèrement ton boîtier de servo si besoin. Certains servomoteurs "9G " ont adopté cette technique pour ne plus avoir de fils soudé sur le moteur, le moteur est directement soudé sur un PCB.
Merci Mike, pour ces idées de capteurs. Je pense que je vais rapidement pouvoir compléter mon design.
Très intéressante, la réalisation de l’équipe CVRA. Ils sont arrivés à une meilleure densité sur leur carte moteur avec des composants similaires (31 x 16 mm). Ok, je vais donc revoir ma copie et m'inspirer de leur design ! Si jamais tu retrouves ton autre lien, je suis preneur.
Je note pour plus tard toutes tes idées sur l'intégration d'un ou plusieurs petits PCB. "Tricher" sur la longueur du servo me semble une bonne solution. Merci.
Comme il existe des composants dotés d'une interface I2C, qui font à la fois capteur de température et convertisseur analogique/digital, je pourrai peut être faire une première petite carte avec ce type de composant, installée juste dessous le potentiomètre et collée au moteur. Je récupère ainsi la température du moteur et la position du palonnier, via un simple bus I2C. Sur la seconde carte, je pourrai mettre le STM32 et le driver moteur. Plus tard, si je parviens à remplacer le potard du servo par un encodeur quadrature magnétique (aimant fixé sur l'arbre de sortie du servo à la place du potard), il me suffira de changer cette petite carte...
Pour un second RUN de carte électronique, j'envisage de faire appel à un fournisseur de type PCB Assembly. Cela permet d'équiper une carte avec des composants en boitier DFN/QFN sans avoir à souder soi-même. J'ai fait une simulation de placement routage et ça doit rentrer dans 20 x 10mm. Si je fais en deux cartes, c'est encore mieux.
Si cela correspond à ce que tu recherches, je peux essayer d'implémenter l'algorithme et faire un premier essai avec le matériel dont je dispose actuellement. Je ferai une vidéo de mes résultats.