E1 · Erro antes e depois
3 minRode a correção com o log da aula 3.
Pronto quando: python3 kit/delta.py ~/fth/log.npz; echo "saída: $?" → erro de rastreio sim × real: antes 8.16° → depois 3.82° e saída: 0.
Aula 5 · 15 min
Às vezes o gap não cabe em dois parâmetros. A ideia do ASAP (RSS 2025) é aprender a ação que falta: um modelo que, somado ao comando dentro do simulador, faz ele repetir o que o robô real fez. Nesta aula você ajusta uma versão mínima dessa ideia com o log da bancada e mede o erro do simulador antes e depois.
Começar a aula
Objetivo: corrigir o simulador com dados do robô por um modelo de ação delta e medir o erro de rastreio sim × real antes e depois.
Clique em cada bloco. As quatro etapas estão no README do LeCAR-Lab/ASAP.
O ASAP mostrou habilidades ágeis no G1 com esse ciclo. O kit só faz as etapas 2 e 3, em pequeno.
delta.py, com o log.npz da aula 3. Clique em cada etapa.
Por junta da perna: δ = a·(alvo − q) + b·dq, recalculado a cada 20 ms (o passo da política) e somado ao alvo dentro do simulador.
Quatro juntas, dois coeficientes cada.
mujoco.minimize.least_squares procura os 8 números que fazem o simulador, repetindo o comando do log com a correção, chegar às posições que o robô mediu.
Comparar a trajetória inteira, e não um passo de cada vez, evita que o atraso escondido confunda o ajuste.
a negativo puxa o alvo para perto da posição atual: é o simulador imitando um motor mais mole e mais lento. Juntando o kp de 0,6 e o atraso de 20 ms, faz sentido.
Não é o ASAP: lá o modelo delta é uma rede com o estado inteiro, treinada por RL em GPU, e a política é ajustada depois. Aqui são 8 coeficientes e nenhum retreino.
Serve para ver a ideia funcionando em CPU e em minutos.
Usa o mesmo log.npz da aula 3. Leva de 1 a 2 minutos em CPU (cada avaliação repete os 4 s do ensaio).
F=${FTH:-$HOME/fth}; cd $F/sim2real && . $F/.venv/bin/activate
python3 kit/delta.py $F/log.npz; echo "saída: $?"log: ~/fth/log.npz · correção recalculada a cada 20 ms · δ = a·(alvo − q) + b·dq por junta left_hip_pitch a = -0.66 b = -0.013 left_hip_roll a = -0.48 b = +0.006 left_knee a = -0.66 b = +0.011 left_ankle_pitch a = -0.71 b = +0.031 erro de rastreio sim × real: antes 8.16° → depois 3.82° (RMS das posições) saída: 0
Antes, o simulador erra as posições da perna em 8,16° (RMS). Com a correção, 3,82°. Sai 0 quando o erro cai.
A primeira versão deste script ajustava δ trecho a trecho (20 ms), linearizando o simulador em cada trecho, e o erro piorou em vez de cair. O atraso de 20 ms faz um trecho isolado parecer um motor ainda mais mole, e a correção exagera. Ajustar contra a trajetória inteira resolveu: confira sempre o erro depois da correção, nunca só o ajuste.
Fazer o simulador imitar o robô.
Rode a correção com o log da aula 3.
Pronto quando: python3 kit/delta.py ~/fth/log.npz; echo "saída: $?" → erro de rastreio sim × real: antes 8.16° → depois 3.82° e saída: 0.
Compare os valores de a das quatro juntas com o kp identificado na aula 3 e escreva, em uma linha, por que todos saíram negativos.
Pronto quando: uma linha citando os quatro a (entre −0,48 e −0,71) e a palavra "mole" ou "atraso".
Para cada caso, escreva qual você usaria: (1) a bateria nova deixou o robô 2 kg mais pesado; (2) a transmissão do joelho tem folga que muda com a temperatura.
Pronto quando: (1) sysid/medir a massa; (2) delta action ou actuator network, com o motivo em uma frase cada.
A explicação aparece depois da sua resposta.
Pergunta 1 de 3
No ASAP, para que serve o modelo de delta action?competência
Pergunta 2 de 3
O delta.py ajusta 8 coeficientes. O que o separa do ASAP de verdade?
Pergunta 3 de 3
Ajustar trecho a trecho piorou o erro; contra a trajetória inteira, melhorou. Por quê?
Escolha uma alternativa. A explicação aparece depois da sua tentativa.