Controlo web SCS0009
Esta página é a descrição específica da versão de barramento série SCS0009 para o controlo web. A interface comum, o modo de arranque, as poses predefinidas e a teleoperação por câmara estão em Visão geral do controlo web.
Mapeamento dos servos
Fonte de dados: DEFAULT_HAND_SERVOS em AmazingHandControl/hand_logic.py e docs/zh-hans/CONFIG_FORMAT.md.
| Dedo | ID mão direita | ID mão esquerda |
|---|---|---|
| Anelar | 5, 6 | 11, 12 |
| Médio | 3, 4 | 13, 14 |
| Indicador | 1, 2 | 15, 16 |
| Polegar | 7, 8 | 17, 18 |
Os dois servos acionam um dedo em diferencial ⚠️
Os dois servos de cada dedo ficam montados lado a lado, com o eixo de rotação na mesma linha, e não é "um servo para a flexão, outro para a abertura": são os dois servos que acionam o mesmo dedo em conjunto:
- Os dois servos rodam no mesmo sentido → abertura lateral do dedo (abduction/adduction)
- Os dois servos rodam em sentidos opostos → extensão / flexão do dedo (flexão/extensão)
- Os dois servos com componentes no mesmo sentido e em sentidos opostos simultaneamente → sobreposição de flexão e abertura
Abertura (mesmo sentido) Flexão (sentidos opostos)
Eixo1 ↻ Eixo2 ↻ Eixo1 ↻ Eixo2 ↺A interface mostra dois eixos de controlo, não dois servos:
flexão = (servo1 + servo2) / 2
abertura = (servo1 − servo2) / 2Inversamente, o programa converte os eixos de controlo nos ângulos alvo dos dois servos:
servo1 = flexão + abertura
servo2 = flexão − aberturaAqui,
servo1/servo2são ângulos alvo de software (os IDs pares já foram invertidos por estarem montados ao contrário), não a direção física do eixo de saída dos servos. Para saber se os dois servos rodam no mesmo sentido ou em sentidos opostos no mecanismo real, é preciso olhar para os eixos de saída, não comparar diretamente estes dois valores.Exemplo: ao aplicar apenas uma abertura de
+20, os valores de software sãoservo1 = +20,servo2 = −20; após inverter uma vez mais o ID par, os dois servos rodam efetivamente no mesmo sentido.
«O dedo não abre / não fecha» significa que a quantidade de controlo da abertura é 0, ou que os dois servos não formam diferencial — por exemplo, o V de tesoura usa a abertura do indicador +17 e a abertura do médio −30 (um positivo, um negativo).
Intervalo (obtido a partir das 19 poses oficiais + posição central):
| Eixo | Intervalo | Descrição |
|---|---|---|
| Flexão | −50 ~ +90 | aberto (negativo) ↔ fechado (positivo) |
| Abertura | −45 ~ +45 | juntos (negativo) ↔ afastados (positivo) |
Duas convenções de ID (errar nelas queima servos ou inverte o movimento):
- Os IDs ímpares são o primeiro servo de cada dedo e os pares o segundo. Válido em ambas as mãos (esquerda 11/12, 13/14… também alternam par/ímpar). O segundo servo está montado ao contrário, pelo que se nega na conversão.
- Os IDs da mão esquerda não são 9–16, mas 11–18, numerados começando pelo anelar. Ligar por ordem 1-8 está sempre errado.
Direção física e posição central: contando da direita para a esquerda, a direita é ímpar e a esquerda par. Sequência central da mão direita (raw 0–1023) 451,571,451,571,451,571,451,571; mão esquerda 571,451,571,451,571,451,571,451.

Fórmulas de conversão
Idênticas ao apply_pose() do AmazingHandControl (verificadas pose a pose):
1) quando mirror_pose é verdadeiro, troca primeiro os dois valores de servo de cada dedo
2) servo_deg = (ID ímpar ? +1 : -1) × (valor da pose − angle_offset_deg)| Mão | angle_offset_deg | mirror_pose |
|---|---|---|
| Direita | 0 | Sim ⚠️ |
| Esquerda | -35.16 | Sim |
-35.16° é a diferença física de meio entalhe entre o braço do servo da mão esquerda e o da mão direita, obtida por medição na configuração oficial.
Sobre
mirror_pose—— esta unidade difere da oficialNa referência oficial, apenas a mão esquerda é
true. Nesta unidade, o par de servos do módulo da mão direita também está montado ao contrário, pelo que a mão direita também está comotrue.Esta troca, matematicamente, inverte apenas a abertura e não altera a flexão:
base = (a+b)/2não muda com a troca, enquantoside = (a−b)/2muda de sinal. Portanto, quando «a abertura de uma mão está totalmente invertida», é este interruptor que deve verificar primeiro.
O array de pose tem sempre 8 valores, na ordem [anelar, médio, indicador, polegar], dois valores por dedo — idêntico byte a byte ao data/hand_config.yaml oficial, para facilitar a comparação.
Resultados de conversão medidos
| Pose | Mão direita | Mão esquerda |
|---|---|---|
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 |
Central [-17.578]*8 | ID5 −17.58 / ID6 +17.58 | ID11 +17.58 / ID12 −17.58 |
Atenção: o
closeda mão esquerda precisa de ±110.16°, bem acima da mão direita. Por isso, o limite doconfig.jsonestá definido em ±120° (o curso total do SCS0009 é de cerca de ±150°). Um limite de ±90 cortaria o punho da mão esquerda.
Perguntas frequentes SCS0009
Sentido do movimento invertido → verifique se a cablagem segue «primeiro o ID ímpar»; na mão esquerda, confirme também angle_offset_deg = -35.16.
Punho da mão esquerda com pouca amplitude / servo a zumbir → o limite ainda pode estar em ±90; verifique se o config.json já está em ±120.
Dedo não se move / erro «eram necessários N motores, foram detetados M» → execute tools/scan_servos.py; os IDs da mão esquerda são os mais fáceis de ligar mal.
Posição central errada → o valor central -17.578125 deriva dos valores brutos oficiais 451/571; para calibrar com a sua própria montagem mecânica, edite middle.positions do config.json.

