🧪 Novos tutoriais em andamento — do braço robótico ao sensor
Ir para o conteúdo
Compre este produtoLoja oficialSite oficial

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.

DedoID mão direitaID mão esquerda
Anelar5, 611, 12
Médio3, 413, 14
Indicador1, 215, 16
Polegar7, 817, 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
text
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) / 2

Inversamente, o programa converte os eixos de controlo nos ângulos alvo dos dois servos:

servo1 = flexão + abertura
servo2 = flexão − abertura

Aqui, servo1 / servo2 sã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ão servo1 = +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):

EixoIntervaloDescrição
Flexão−50 ~ +90aberto (negativo) ↔ fechado (positivo)
Abertura−45 ~ +45juntos (negativo) ↔ afastados (positivo)

Duas convenções de ID (errar nelas queima servos ou inverte o movimento):

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

Both_Hands-IDs


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ãoangle_offset_degmirror_pose
Direita0Sim ⚠️
Esquerda-35.16Sim

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

Na 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á como true.

Esta troca, matematicamente, inverte apenas a abertura e não altera a flexão: base = (a+b)/2 não muda com a troca, enquanto side = (a−b)/2 muda 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 ​

PoseMão direitaMão esquerda
open [-35]*8ID5 −35 / ID6 +35ID11 +0.16 / ID12 −0.16
close [75]*8ID5 +75 / ID6 −75ID11 +110.16 / ID12 −110.16
Central [-17.578]*8ID5 −17.58 / ID6 +17.58ID11 +17.58 / ID12 −17.58

Atenção: o close da mão esquerda precisa de ±110.16°, bem acima da mão direita. Por isso, o limite do config.json está 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.

Páginas relacionadas ​