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

Controle web SCS0009 ​

Esta página é a descrição específica do controle web na versão de barramento serial SCS0009. Para a interface geral, formas de iniciar, poses predefinidas e teleoperação por câmera, veja Visão geral do controle web.

Mapeamento de servos ​

Fonte: 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 o dedo juntos, em diferencial ⚠️ ​

Os dois servos de cada dedo ficam lado a lado, com eixos colineares; não é "um servo para flexão e outro para abdução", e sim dois servos acionando juntos o mesmo dedo:

  • Os dois servos giram no mesmo sentido → o dedo se move lateralmente (abdução/adução)
  • Os dois servos giram em sentidos opostos → o dedo estende / flexiona (flexão/extensão)
  • Os dois servos têm componentes iguais e opostos ao mesmo tempo → flexão e abdução se somam
text
abdução (mesmo sentido)     flexão (sentidos opostos)
eixo1 ↻   eixo2 ↻           eixo1 ↻   eixo2 ↺

A interface mostra dois eixos de controle, não dois servos:

flexão  = (servo1 + servo2) / 2
abdução = (servo1 − servo2) / 2

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

servo1 = flexão + abdução
servo2 = flexão − abdução

Aqui servo1 / servo2 são ângulos-alvo de software (o ID par já foi negado por causa da montagem invertida), não a direção física do eixo de saída do servo. Para saber se os dois servos giram no mesmo sentido ou em sentidos opostos no mecanismo real, observe o eixo de saída; não compare diretamente esses dois valores.

Exemplo: dando apenas abdução +20, os valores de software são servo1 = +20 e servo2 = −20; após negar o ID par, os dois servos giram de fato no mesmo sentido.

"O dedo não abre / não fecha" significa que o valor de controle de abdução é zero ou que os dois servos não formam um diferencial — um V estilo tesoura vem da abdução do indicador +17 e da abdução do médio −30 (um positivo, um negativo).

Faixa (derivada das 19 poses oficiais mais a posição do meio):

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

Duas regras de ID (errar nelas queima servos ou inverte o movimento):

  1. IDs ímpares são o primeiro servo de um dedo, IDs pares o segundo. Vale nas duas mãos (na esquerda, 11/12, 13/14… também alternam). O segundo servo é montado ao contrário, então negue-o na conversão.
  2. A mão esquerda não usa 9–16, e sim 11–18, numerada começando pelo anelar. Ligá-la como 1–8 em sequência está sempre errado.

Direção física e meio: contando da direita para a esquerda, a direita é ímpar e a esquerda é par. Ordem do meio 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êntico ao apply_pose() do AmazingHandControl (verificado pose por pose):

1) quando mirror_pose é verdadeiro, primeiro troque 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° é o deslocamento físico de meio entalhe dos horns dos servos da mão esquerda em relação à direita, obtido da configuração oficial.

Sobre o mirror_pose — esta montagem difere da oficial

No exemplar de referência oficial, só a mão esquerda é true. Nesta montagem, os pares de servos do módulo da mão direita também são montados invertidos, então a mão direita também é true.

A troca inverte matematicamente apenas a abdução, nunca a flexão: base = (a+b)/2 não muda com a troca, enquanto side = (a−b)/2 troca de sinal. Então, se a abdução de uma mão sair espelhada, este é o primeiro interruptor a verificar.

O array de pose é sempre 8 valores na ordem [anelar, médio, indicador, polegar], dois por dedo — idêntico byte a byte ao data/hand_config.yaml oficial, então você pode compará-los diretamente.

Exemplos resolvidos ​

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

Note que o close da mão esquerda precisa de ±110.16°, bem além do da direita. É por isso que o config.json define o limite em ±120° (a faixa completa do SCS0009 é de cerca de ±150°). Um limite de ±90 cortaria o punho fechado da mão esquerda.


Perguntas frequentes do SCS0009 ​

O movimento está invertido → verifique se a fiação segue "ID ímpar primeiro"; na mão esquerda, confirme também angle_offset_deg = -35.16.

O punho da mão esquerda fica pequeno demais / os servos zumbem → o limite provavelmente ainda está em ±90; verifique se o config.json tem ±120.

Um dedo não se move / erro "expected N motors, found M" → rode tools/scan_servos.py; os IDs da mão esquerda são os mais fáceis de ligar errado.

A posição do meio está errada → o valor do meio -17.578125 é convertido do bruto oficial 451/571. Para calibrar com a sua própria montagem, edite middle.positions no config.json.

Páginas relacionadas ​