Controllo web SCS0009
Questa pagina è la descrizione dedicata alla versione bus seriale SCS0009 del controllo web. Per l'interfaccia comune, le modalità di avvio, le pose predefinite e la teleoperazione con telecamera vedi Panoramica del controllo web.
Mappatura dei servo
Origine dei dati: DEFAULT_HAND_SERVOS in AmazingHandControl/hand_logic.py e docs/zh-hans/CONFIG_FORMAT.md.
| Dito | ID mano destra | ID mano sinistra |
|---|---|---|
| Anulare | 5, 6 | 11, 12 |
| Medio | 3, 4 | 13, 14 |
| Indice | 1, 2 | 15, 16 |
| Pollice | 7, 8 | 17, 18 |
Due servo azionano insieme un dito in modo differenziale ⚠️
I due servo di ogni dito sono montati affiancati con l'asse di rotazione sulla stessa linea; non è «un servo per la flessione e uno per la divaricazione», ma sono due servo che azionano insieme lo stesso dito:
- Entrambi i servo ruotano nello stesso verso → il dito si divarica lateralmente (divaricazione/adduzione)
- Entrambi i servo ruotano in versi opposti → il dito si distende / si piega (flessione/estensione)
- Con componenti sia nello stesso verso sia in versi opposti → flessione e divaricazione si sommano
Divaricazione (stesso verso) Flessione (versi opposti)
Asse 1 ↻ Asse 2 ↻ Asse 1 ↻ Asse 2 ↺L'interfaccia mostra due assi di controllo, non due servo:
flessione = (servo1 + servo2) / 2
divaricazione = (servo1 − servo2) / 2Al contrario, il programma converte gli assi di controllo negli angoli target dei due servo:
servo1 = flessione + divaricazione
servo2 = flessione − divaricazioneQui
servo1/servo2sono angoli target software (gli ID pari sono già negati per il montaggio invertito), non la direzione fisica dell'albero di uscita del servo. Per stabilire se i due servo ruotano nello stesso verso o in versi opposti sul meccanismo reale, bisogna guardare l'albero di uscita, non confrontare direttamente questi due valori.Esempio: dando solo divaricazione
+20, i valori software sonoservo1 = +20,servo2 = −20; dopo aver negato anche gli ID pari, i due servo ruotano realmente nello stesso verso.
«Il dito non si apre / non si chiude» significa che la quantità di controllo della divaricazione è 0, oppure che i due servo non formano un differenziale — ad esempio la V delle forbici si ottiene con la divaricazione dell'indice +17 e del medio −30 (uno positivo, uno negativo).
Intervallo (ricavato dalle 19 pose ufficiali + la posizione centrale):
| Asse | Intervallo | Descrizione |
|---|---|---|
| Flessione | −50 ~ +90 | aperto (negativo) ↔ chiuso (positivo) |
| Divaricazione | −45 ~ +45 | unite (negativo) ↔ separate (positivo) |
Due convenzioni sugli ID (sbagliarle brucia i servo o inverte il movimento):
- Gli ID dispari sono il primo servo di ogni dito, gli ID pari il secondo. Vale per entrambe le mani (anche a sinistra 11/12, 13/14… si alternano dispari e pari). Il secondo servo è montato al contrario, quindi va negato nella conversione.
- Gli ID della mano sinistra non sono 9–16, ma 11–18, numerati a partire dall'anulare. Cablarli come 1-8 in sequenza è sempre sbagliato.
Direzione fisica e posizione centrale: contando da destra verso sinistra, a destra gli ID dispari e a sinistra i pari. Ordine della posizione centrale della mano destra (raw 0–1023) 451,571,451,571,451,571,451,571; mano sinistra 571,451,571,451,571,451,571,451.

Formule di conversione
Identiche a apply_pose() di AmazingHandControl (verificate posa per posa):
1) quando mirror_pose è vero, scambia prima i valori dei due servo di ogni dito
2) servo_deg = (ID dispari ? +1 : -1) × (valore di posa − angle_offset_deg)| Mano | angle_offset_deg | mirror_pose |
|---|---|---|
| Destra | 0 | sì ⚠️ |
| Sinistra | -35.16 | sì |
-35.16° è la differenza fisica di mezzo slot dei bracci dei servo della mano sinistra rispetto alla destra, ricavata dalla configurazione ufficiale.
A proposito di
mirror_pose— questa build differisce da quella ufficialeNel riferimento ufficiale solo la mano sinistra è
true. Anche il modulo della mano destra di questa build ha le coppie di servo montate al contrario, quindi anche la destra è impostata atrue.Questo scambio in matematica inverte solo la divaricazione, non la flessione:
base = (a+b)/2resta invariato con lo scambio,side = (a−b)/2cambia segno. Quindi quando «la divaricazione di una mano risulta completamente invertita», il primo interruttore da controllare è questo.
L'array delle pose è sempre di 8 valori, nell'ordine [anulare, medio, indice, pollice], due per dito — identico byte per byte al file ufficiale data/hand_config.yaml, per facilitare il confronto.
Risultati di conversione misurati
| Posa | Destra | Sinistra |
|---|---|---|
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 |
Posizione centrale [-17.578]*8 | ID5 −17.58 / ID6 +17.58 | ID11 +17.58 / ID12 −17.58 |
Nota che il
closedella mano sinistra richiede ±110.16°, ben oltre quello della destra. Per questo il limite diconfig.jsonè impostato a ±120° (la gamma completa dell'SCS0009 è di circa ±150°). Un limite di ±90 taglierebbe il pugno della mano sinistra.
Domande frequenti SCS0009
Direzione del movimento invertita → controlla se il cablaggio rispetta «prima gli ID dispari»; per la mano sinistra verifica anche angle_offset_deg = -35.16.
Ampiezza del pugno della mano sinistra insufficiente / servo che ronzano → è possibile che il limite sia ancora ±90; controlla che in config.json sia stato portato a ±120.
Un dito non si muove / messaggio «attesi N motori, rilevati M» → esegui tools/scan_servos.py; gli ID della mano sinistra sono i più facili da cablare male.
Posizione centrale sbagliata → il valore centrale -17.578125 deriva dal raw ufficiale 451/571; per calibrare sul proprio assemblaggio modifica middle.positions di config.json.

