Aller à l’article

Configurer la compensation de gravité

Vérifié 2026-11-01

Résultat : utilisez un modèle correspondant à votre bras et comprenez ce qui se passe lorsque le contrôle prend fin. Vous avez besoin d’un étalonnage vérifié et d’un fichier de contrôleur .

Vérifiez la correspondance du modèle

L’hôte calcule l’effort à partir des positions mesurées et l’envoie aux servos. Le micrologiciel ne contient aucune géométrie de bras. Un effort positif suit l’augmentation du nombre d’encodeurs ; le modèle doit tenir compte de la direction physique de l’articulation.

Deux modèles décrivent des bras verticaux avec des pinces vides :

Fichier dans host/arm-control/models/ Bras
arm-upright-empty.json SO-102
so101-upright-empty.json SO-101

Les deux définissent des termes couplés pour M2 – M4 et un effort nul explicite pour M1, M5 et M6. La configuration de bras à six moteurs fournie utilise les ID 1 – 6 avec un profil pour chaque moteur. Leur étalonnage lie des décalages d’encodeur spécifiques, une résolution unitaire et des drapeaux d’inversion ; le contrôle en amont compare ces valeurs avec les moteurs avant de démarrer le contrôle .

Un nom de bras ou une lecture de référence de 2048 est insuffisant. Ne copiez pas les décalages d’un autre bras dans vos moteurs et ne modifiez pas uniquement le encoderCalibration pour réussir le contrôle. Différents étalonnages, montages, géométries ou charges utiles nécessitent un modèle adapté ou installé et une validation matérielle.

Connectez un modèle validé

Pour tools/poses/controller.local.json , ajoutez ce champ à l’objet JSON existant ; la ligne n’est pas une configuration complète :

"gravityModel": "../../host/arm-control/models/arm-upright-empty.json"

Ce chemin sélectionne le modèle SO-102. Le fichier SO-101 est so101-upright-empty.json ; son statut nécessite explicitement une validation sur le bras et la trajectoire de mouvement prévus. Utilisez un chemin relatif pour votre propre modèle et conservez les virgules entre les champs JSON.

Le gravitySlewEffortPerS de chaque profil limite la rapidité avec laquelle l’effort de gravité change ; Le effortLimit limite la puissance totale du moteur. Sans gravityModel , les outils fonctionnent sans modèle et éliminent la gravité retenue lors de la réutilisation d’une session. Un réglage de rotation différent de zéro ne permet pas à lui seul une compensation.

Vérifiez avant de déménager

Exécutez un aperçu normal de votre enregistrement :

macOS / Linux
npm run replay -- tools/poses/controller.local.json POSES.json
Windows PowerShell
npm.cmd run replay -- tools/poses/controller.local.json POSES.json

Une inadéquation d’étalonnage, une entrée manquante ou un effort de calcul excessif nécessite une enquête. Les résultats supérieurs aux limites du modèle ou du moteur sont rejetés plutôt que tronqués en silence. N’augmentez pas une limite simplement pour supprimer l’erreur sans revoir la charge.

Avec --run, le contrôleur calcule, envoie et confirme la gravité avant la première cible de mouvement. Sur un mécanisme pris en charge, vérifiez la direction et le comportement à plusieurs poses et charges. Une pose réussie ne valide pas l’ensemble de l’espace de travail.

Pendant le contrôle et après la sortie

Les commentaires et la gravité partagent un seul lecteur, avec des mises à jour environ toutes les 50 ms. Les contrôles de fraîcheur de l’hôte et de délais ne font pas de l’hôte un système en temps réel.

L’achèvement normal laisse la compensation finale dans le servo. Il ne s’adapte plus aux changements de pose ou de charge utile. Les messages manquants n’effacent pas non plus la gravité : le micrologiciel aborde la dernière requête à la vitesse de balayage configurée et la conserve. Le couple-off l’efface. Voir terminant le premier mouvement .

Création d’un modèle

Chaque moteur contrôlé nécessite un modèle explicite, comprenant des entrées de compensation nulle. Chaque entrée utilisée par les termes couplés doit être contrôlée et mesurée. Les termes utilisent coefficient × sin(angle) ou coefficient × cos(angle) , où angle = offsetRad + sum(counts[id] × weights[id]) . Les angles sont des radians et les coefficients sont des unités d’effort PWM. Les termes constants n’ont pas de poids.

L’ajustement basé sur les journaux et la validation indépendante appartiennent à le processus de réglage . Les coefficients ajustés ne sont pas des couples physiques mesurés et ne constituent pas automatiquement un modèle validé.


Accueil de la documentation · Révision source : a995f77 . Extension 9.0 .