🧪 Stanno arrivando nuovi tutorial — dal braccio robotico al sensore
Vai al contenuto
Acquista questo prodottoNegozio ufficialeSito ufficiale

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.

DitoID mano destraID mano sinistra
Anulare5, 611, 12
Medio3, 413, 14
Indice1, 215, 16
Pollice7, 817, 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
text
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) / 2

Al contrario, il programma converte gli assi di controllo negli angoli target dei due servo:

servo1 = flessione + divaricazione
servo2 = flessione − divaricazione

Qui servo1 / servo2 sono 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 sono servo1 = +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):

AsseIntervalloDescrizione
Flessione−50 ~ +90aperto (negativo) ↔ chiuso (positivo)
Divaricazione−45 ~ +45unite (negativo) ↔ separate (positivo)

Due convenzioni sugli ID (sbagliarle brucia i servo o inverte il movimento):

  1. 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.
  2. 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.

Both_Hands-IDs


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)
Manoangle_offset_degmirror_pose
Destra0sì ⚠️
Sinistra-35.16sì

-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 ufficiale

Nel 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 a true.

Questo scambio in matematica inverte solo la divaricazione, non la flessione: base = (a+b)/2 resta invariato con lo scambio, side = (a−b)/2 cambia 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 ​

PosaDestraSinistra
open [-35]*8ID5 −35 / ID6 +35ID11 +0.16 / ID12 −0.16
close [75]*8ID5 +75 / ID6 −75ID11 +110.16 / ID12 −110.16
Posizione centrale [-17.578]*8ID5 −17.58 / ID6 +17.58ID11 +17.58 / ID12 −17.58

Nota che il close della mano sinistra richiede ±110.16°, ben oltre quello della destra. Per questo il limite di config.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.

Pagine correlate ​