Mão de Teleoperação
Especificações da Mão Wuji
Especificações técnicas completas para a mão destro do Wuji — sensores, formato de fluxo JSONL e parâmetros do agente da plataforma.
Mecânica e Sensoriamento
| Dedos | 5 — polegar, indicador, médio, anelar, mínimo |
| Articulações dos dedos | 4 |
| Total de posições articulares | 20 (array 5×4, float, radianos) |
| Mapa de pressão tátil | 24 linhas × 32 colunas (768 valores, float [0, 1]) |
| Canais IMU | 6-eixos (acelerômetro de 3-eixos + giroscópio de 3-eixos), até 16 slots no fluxo |
| EMF do canal | Dobra por dedo + rotação de mão (dicionário chaveado pelo nome do dedo) |
| Lados da mão | Esquerda, direita ou detectada automaticamente a partir do primeiro quadro |
Interface e SDK
| ID do fornecedor USB | 0x0483 (padrão; passe --usb-vid para substituir) |
| Pacote SDK | wujihandpy (Python) |
| instalar | pip install wujihandpy numpy |
| Aplicativo de estúdio | Wuji Studio v0.7.0 (Linux amd64 .deb / .tar.gz / .zip) |
| Script de transmissão | wuji_hand_sdk_stream.py (emite JSONL para stdout) |
| Módulo do agente | wuji_glove_agent.py (ponte de plataforma via WebSocket) |
| Transmissão simulada | mock_wuji_stream.py (JSONL sintético, sem hardware necessário) |
Parâmetros de Transmissão e Agente
| Hz de stream padrão | 30 Hz (configurável com --hz) |
| Formato de stream | JSONL — um objeto JSON por linha para stdout |
| Tipo de dispositivo da plataforma | wuji_hand |
| Módulo do agente | wuji_glove_agent |
| URL WebSocket o back-end | ws://127.0.0.1:8000 (padrão; substituir com --backend) |
| Telemetria Hz | 30 Hz (configurável com --telemetry-hz) |
| Política de reconexão | Atraso exponencial: mínimo de 1 s, máximo de 10 s |
Campos de Quadro JSONL (por quadro)
| Campo | Tipo | Forma / Faixa | Descrição |
|---|---|---|---|
| ts | flutuante | Segundos Unix | Timestamp do quadro (time.time()) |
| lado_da_mão | str | "esquerda" | "direita" | A qual mão este quadro pertence |
| dobras | dicionário | 5 chaves, [0, 1] | Dobra normalizada por dedo (polegar, indicador, médio, anelar, mínimo) |
| posição_atual_da_junta_5x4 | lista[lista[float]] | 5×4, radianos | Posições brutas das juntas do wujihandpy, 5 dedos × 4 juntas |
| mapa_de_pressão_24x32 | lista[lista[float]] | 24×32, [0, 1] | Distribuição de pressão tátil na superfície da mão |
| imu | lista[float] | até 16 valores | IMU de 6 eixos: [ax, ay, az, gx, gy, gz, ...] (slots restantes zerados) |
| emf | dicionário | por-dedo + parte_de_trás_da_mão | Leituras do sensor EMF; cada entrada é um float ou um dicionário com as chaves "bend"/"angle" |
A bends os valores são derivados de joint_actual_position_5x4 ao calcular a média dos 4 ângulos das juntas por dedo e normalizar do intervalo [0, π/2] para [0, 1].
wuji_glove_agent.py — Sinalizadores Chave
| Flag | Padrão | Descrição |
|---|---|---|
| --backend | ws://127.0.0.1:8000 | URL base do WebSocket da plataforma |
| --session | (obrigatório) | ID da sessão de Teleop da plataforma |
| --node-id | wuji-glove-node | Identificador para este nó de dispositivo na sessão |
| --glove | automático | Lado da mão: esquerda, direita ou automático (lido do primeiro quadro) |
| --device-kind | wuji_hand | Tipo de dispositivo registrado na plataforma |
| --telemetry-hz | 30.0 | Taxa de encaminhamento de telemetria para a plataforma |
| --wuji-cmd | python3 wuji_hand_sdk_stream.py --hand-side right --hz 30 | Comando de shell que emite quadros JSONL para stdout |
| --reconnect-min-s | 1.0 | Tempo mínimo de reconexão (segundos) |
| --reconnect-max-s | 10.0 | Tempo máximo de reconexão (segundos) |