E1 · Cadeia fechada
10 minRode a cadeia completa sobre o boxe. Antes de rodar, numa bancada nova, a conferência mostra as etapas que faltam.
Pronto quando: python3 kit/conferir_pipeline.py; echo "saída: $?" → 4 etapas ok e saída: 0.
Aula 8 · 15 min
Cada aula deixou uma peça: clipe lido, retargeting sem violação, rastreio medido, checagem. O que vai para um robô é a cadeia inteira, num só movimento. Nesta aula você roda as quatro etapas em sequência, confere que todas passam e falam do mesmo arquivo, e gera o seu plano de estudo.
Começar a aula
Objetivo: rodar a cadeia mocap → retargeting → rastreio → segurança num só movimento e provar que as quatro etapas passam.
Clique em cada etapa. Cada script grava um resumo em ~/fth/movimentos/etapas/.
A cadeia só vale se as etapas 2, 3 e 4 falarem do mesmo arquivo e a 2 vier do BVH da etapa 1.
O checar_seguranca.py lê o movimento retargeted, quadro a quadro, no G1 do Menagerie.
F=${FTH:-$HOME/fth}; cd $F/corpo-inteiro && . $F/.venv/bin/activate
python3 kit/checar_seguranca.py $F/movimentos/boxe_g1.npz; echo "saída: $?"ok · limites de junta: 0 quadro×junta fora ok · velocidade de junta: máx 313°/s em left_elbow_joint (teto 400°/s) ok · pé não afunda no chão: site do pé desce até 3.8 cm (de pé: 3.3 cm) ok · área de trabalho: pelve se afasta até 0.22 m (raio 1.5 m) segurança: 4/4 regras saída: 0
O cotovelo esquerdo chega a 313°/s num soco. Com um teto de 150°/s (por exemplo, para o primeiro teste perto de pessoas), a mesma regra reprova o movimento: --teto-graus-s 150 dá segurança: 3/4 regras.
segurança: 3/4 regras
Com o teto do primeiro teste perto de pessoas, o boxe reprova na velocidade.
Roda as quatro etapas em sequência sobre o mesmo clipe e confere. Cada linha mostra o resultado de uma etapa; a conferência diz se a cadeia fecha.
F=${FTH:-$HOME/fth}; cd $F/corpo-inteiro; B=$F/GMR/assets/xsens_bvh_test/251021_04_boxing_120Hz_cm_3DsMax.bvh
. $F/.venv/bin/activate && python3 kit/ler_clipe.py $B | tail -1
( . $F/.venv-gmr/bin/activate && python3 kit/retarget.py $B --fim 1200 --nome boxe_g1 | grep violações )
python3 kit/reproduzir.py $F/movimentos/boxe_g1.npz | grep "erro médio"
python3 kit/checar_seguranca.py $F/movimentos/boxe_g1.npz | tail -1
python3 kit/conferir_pipeline.py; echo "saída: $?"linhas de movimento conferidas: 4249/4249 violações de limite (Menagerie, folga 0.5°): 0 erro médio de junta: 0.3° · pior junta: right_shoulder_roll_joint (1.9°) segurança: 4/4 regras ok · mocap (BVH lido): 4249 quadros a 120 Hz ok · retargeting: 1200 quadros, 0 violações de limite ok · rastreio no simulador: erro médio 0.3° (máx 2°), queda: não ok · checagem de segurança: 4/4 regras cadeia: um só movimento (boxe_g1.npz) 4 etapas ok saída: 0
Quatro etapas ok e um só movimento do começo ao fim.
segurança: 4/4 regras violações de limite (Menagerie, folga 0.5°): 0 erro médio de junta: 0.3° · pior junta: right_shoulder_roll_joint (2.7°) ok · mocap (BVH lido): 4249 quadros a 120 Hz ok · retargeting: 600 quadros, 0 violações de limite ok · rastreio no simulador: erro médio 0.3° (máx 2°), queda: não ok · checagem de segurança: 4/4 regras FALHA · cadeia: as etapas falam de arquivos diferentes (boxe_curto.npz, boxe_g1.npz) 3 de 4 etapas ok saída: 1
Depois da cadeia fechada, alguém refez o retargeting (agora com 600 quadros) e o rastreio, mas não a checagem de segurança. Cada etapa passa sozinha; a cadeia não: a segurança foi conferida num arquivo e o que iria para o robô é outro.
violações de limite (Menagerie, folga 0.5°): 0 erro médio de junta: 1.5° · pior junta: right_ankle_pitch_joint (5.1°) ok · limites de junta: 0 quadro×junta fora FALHA · velocidade de junta: máx 635°/s em left_knee_joint (teto 400°/s) FALHA · pé não afunda no chão: site do pé desce até 1.4 cm (de pé: 3.3 cm) ok · área de trabalho: pelve se afasta até 0.05 m (raio 1.5 m) segurança: 2/4 regras cadeia: um só movimento (boxe_trecho2.npz) 3 de 4 etapas ok
Os quadros de 1200 a 2400 passam no retargeting e no rastreio, mas o joelho chega a 635°/s e o pé desce 1,9 cm abaixo da pose de pé (o retargeting não impõe o contato com o chão). A cadeia fecha num só arquivo e reprova: é o resultado certo.
Bases como a do SONIC têm milhões de quadros: a cadeia roda em fila. Rode, interrompa no meio e rode de novo.
Simulação no navegador: nada roda de verdade aqui. Aprovado e reprovado batem com o kit (19/10/2026): o trecho 1200–2400 reprova na checagem de segurança.
Quatro entregas principais. Clique num degrau para ver o "pronto quando".
A bancada em ~/fth e as três camadas contadas: a base de todas as práticas.
Movimento humano lido, com licença pensada, e levado ao G1 pelo GMR num ambiente próprio.
Replay com e sem pórtico, teleop com latência e a mão do G1 no modelo.
Comandos de alto nível conferidos e a cadeia mocap → segurança fechada.
Quatro entregas em sequência. O próximo passo é operar um robô de verdade com segurança: o curso 4 da FTH.
A ordem importa: sem o retargeting conferido, rastreio e segurança medem o movimento errado.
Escolha a data de início e quanto tempo você tem por semana. O plano lista as práticas de cada aula.
Fechar a cadeia e ajustar as regras.
Rode a cadeia completa sobre o boxe. Antes de rodar, numa bancada nova, a conferência mostra as etapas que faltam.
Pronto quando: python3 kit/conferir_pipeline.py; echo "saída: $?" → 4 etapas ok e saída: 0.
Rode a checagem com o teto de 150°/s e escreva em uma frase qual parte do boxe passou do teto.
Pronto quando: python3 kit/checar_seguranca.py ~/fth/movimentos/boxe_g1.npz --teto-graus-s 150 | tail -1 → segurança: 3/4 regras.
Leve o trecho de 1200 a 2400 quadros pela cadeia inteira (retarget, reproduzir e checar com o mesmo arquivo) e escreva quais regras ele quebra e por quê.
Pronto quando: python3 kit/conferir_pipeline.py | tail -2 → cadeia: um só movimento (boxe_trecho2.npz) e 3 de 4 etapas ok.
A explicação aparece depois da sua resposta.
Pergunta 1 de 3
Cada etapa passou sozinha, mas a conferência diz "cadeia quebrada". O que aconteceu?competência
Pergunta 2 de 3
De onde vem o teto de 400°/s da regra de velocidade?
Pergunta 3 de 3
Por que o critério de rastreio deste curso usa o pórtico, e o de um projeto real não deveria?
Escolha uma alternativa. A explicação aparece depois da sua tentativa.