Contrôle web SCS0009
Cette page est la description spécifique à la version à bus série SCS0009 du contrôle web. Pour l'interface générale, le démarrage, les poses prédéfinies et la téléopération caméra, voir Vue d'ensemble du contrôle web.
Mapping des servos
Source des données : DEFAULT_HAND_SERVOS de AmazingHandControl/hand_logic.py et docs/zh-hans/CONFIG_FORMAT.md.
| Doigt | ID main droite | ID main gauche |
|---|---|---|
| Annulaire | 5, 6 | 11, 12 |
| Majeur | 3, 4 | 13, 14 |
| Index | 1, 2 | 15, 16 |
| Pouce | 7, 8 | 17, 18 |
Deux servos entraînent le doigt ensemble en différentiel ⚠️
Les deux servos de chaque doigt sont montés côte à côte sur le même axe ; ce n'est pas « un servo pour la flexion, un pour l'écartement », les deux entraînent ensemble le même doigt :
- Les deux servos tournent dans le même sens → le doigt s'écarte latéralement (abduction/adduction)
- Les deux servos tournent en sens inverse → le doigt s'étend / se fléchit (flexion)
- Les deux servos avec des composantes de même sens et de sens inverse simultanées → flexion et écartement se superposent
écartement (même sens) flexion (sens inverse)
axe 1 ↻ axe 2 ↻ axe 1 ↻ axe 2 ↺L'interface affiche deux axes de commande, pas deux servos :
flexion = (servo1 + servo2) / 2
écartement = (servo1 − servo2) / 2À l'inverse, le programme convertit les axes de commande en angles cibles des deux servos :
servo1 = flexion + écartement
servo2 = flexion − écartementIci,
servo1/servo2sont des angles cibles logiciels (l'ID pair est déjà inversé selon le montage à l'envers), et non la direction physique de l'arbre de sortie du servo. Pour juger si deux servos tournent physiquement dans le même sens ou en sens inverse, il faut regarder l'arbre de sortie, et non comparer directement ces valeurs.Exemple : pour un écartement seul de
+20, les valeurs logicielles sontservo1 = +20,servo2 = −20; après inversion de l'ID pair, les deux servos tournent en réalité dans le même sens.
« Le doigt ne s'ouvre pas / ne se referme pas » signifie que la commande d'écartement est à 0, ou que les deux servos ne forment pas un différentiel — par exemple le V d'un ciseau repose sur l'écartement de l'index +17 et celui du majeur −30 (un positif, un négatif).
Plages (déduites de la statistique des 19 poses officielles + position médiane) :
| Axe | Plage | Description |
|---|---|---|
| Flexion | −50 ~ +90 | ouvert (négatif) ↔ serré (positif) |
| Écartement | −45 ~ +45 | serré (négatif) ↔ écarté (positif) |
Deux conventions d'ID (s'y tromper grille un servo ou inverse le mouvement) :
- Les ID impairs sont le premier servo de chaque doigt, les ID pairs le second. Vrai des deux côtés (à gauche 11/12, 13/14… alternent aussi pair/impair). Le second servo est monté à l'envers ; il faut inverser son signe lors de la conversion.
- La main gauche n'est pas en 9–16, mais en 11–18, numérotée « annulaire en premier ». La câbler à la suite en 1-8 est toujours faux.
Direction physique et position médiane : de droite à gauche, impair à droite, pair à gauche. Ordre des positions médianes de la main droite (brut 0–1023) 451,571,451,571,451,571,451,571 ; main gauche 571,451,571,451,571,451,571,451.

Formules de conversion
Identique à apply_pose() d'AmazingHandControl (vérifié pose par pose) :
1) lorsque mirror_pose vaut vrai, échangez d'abord les valeurs des deux servos de chaque doigt
2) servo_deg = (ID impair ? +1 : -1) × (valeur de pose − angle_offset_deg)| Main | angle_offset_deg | mirror_pose |
|---|---|---|
| Droite | 0 | oui ⚠️ |
| Gauche | -35.16 | oui |
-35.16° est l'écart physique d'un demi-cran du palonnier de servo de la main gauche par rapport à la droite, mesuré sur la configuration officielle.
À propos de
mirror_pose— cette machine diffère de l'officielleLa référence officielle n'a que la main gauche à
true. Les paires de servos du module de main droite de cette machine sont aussi montées à l'envers, donc la main droite est également àtrue.Mathématiquement, cet échange n'inverse que l'écartement, jamais la flexion :
base = (a+b)/2reste inchangé après échange,side = (a−b)/2change de signe. Donc quand « l'écartement d'une main est globalement inversé », c'est le premier commutateur à vérifier.
Le tableau de pose comporte toujours 8 valeurs, dans l'ordre [annulaire, majeur, index, pouce], 2 valeurs par doigt — identique octet pour octet au data/hand_config.yaml officiel, pour faciliter la comparaison.
Résultats de conversion mesurés
| Pose | Droite | Gauche |
|---|---|---|
open [-35]*8 | ID5 −35 / ID6 +35 | ID11 +0.16 / ID12 −0.16 |
close [75]*8 | ID5 +75 / ID6 −75 | ID11 +110.16 / ID12 −110.16 |
milieu [-17.578]*8 | ID5 −17.58 / ID6 +17.58 | ID11 +17.58 / ID12 −17.58 |
Attention : le
closede la main gauche demande ±110.16°, nettement plus que la droite. C'est pourquoi la limite deconfig.jsonest fixée à ±120° (pleine échelle SCS0009 environ ±150°). Une limite à ±90 rognerait le poing de la main gauche.
Questions fréquentes SCS0009
Sens du mouvement inversé → vérifiez que le câblage respecte « ID impair en premier » ; pour la main gauche, confirmez aussi angle_offset_deg = -35.16.
Poing gauche insuffisant / servos qui sifflent → la limite est peut-être encore à ±90 ; vérifiez que config.json est bien à ±120.
Doigt immobile / message « N moteurs attendus, M détectés » → lancez tools/scan_servos.py ; les ID de la main gauche sont les plus faciles à mal câbler.
Position médiane incorrecte → la valeur médiane -17.578125 est convertie depuis le brut officiel 451/571 ; pour calibrer selon votre propre assemblage, modifiez middle.positions dans config.json.

