E1 · O G1 parado
3 minRode o bloco e confira as três linhas finais.
Pronto quando: python3 kit/sensores.py termina em soma dos contatos / peso do robô (327 N): 1.00.
Aula 5 · 15 min
Um humanoide em pé está sempre caindo um pouco e se corrigindo. Para isso ele precisa saber como está inclinado, onde está cada junta e quanto peso há em cada pé. Nesta aula você lê os sensores que o MJCF do G1 declara, acrescenta os que faltam sem editar o arquivo e confere a leitura contra o peso do robô.
Começar a aula
Objetivo: ler a IMU e a força em cada pé do G1 parado e conferir que a soma dos contatos com o chão bate com o peso do robô.
Os quatro primeiros respondem "como está o meu corpo"; o último, "o que há em volta". Clique em cada um.
Sensores que o MJCF não declara não existem na simulação até você acrescentar.
Clique em cada uma.
O acelerômetro mede a força que segura o sensor, não o movimento: parado no chão, ele lê 9,8 m/s² para cima. Em queda livre, leria zero.
É assim que a IMU sabe onde é "para baixo" e, daí, a inclinação.
O sensores.py abre o arquivo com mujoco.MjSpec.from_file, acrescenta um sensor de orientação (framequat) na IMU da pelve e um de força em cada pé, e compila.
O arquivo do Menagerie fica intocado: você muda o robô no seu script, versionado junto com o seu código.
O sensor de força no sítio do pé mede o que passa do pé para a perna; o contato mede o que o chão empurra. A diferença, cerca de 6 N, é o peso do próprio pé (0,61 kg no modelo).
Num robô real, a célula de carga fica no tornozelo pelo mesmo motivo.
Parado, a soma das forças de contato tem de igualar o peso: 33,3 kg × 9,81 = 327 N. A razão 1.00 mostra que o robô está apoiado só nos pés e sem empurrão.
Se der menos de 1, alguma coisa está segurando o robô (outra parte tocando o chão, uma força externa).
soma dos contatos / peso do robô (327 N): 1.00
O trecho mostra como o script acrescenta os três sensores; o bloco roda 1 s com o G1 parado.
spec = mujoco.MjSpec.from_file(str(fth.caminho(MODELO)))
spec.add_sensor(name="orientacao_pelve", type=mujoco.mjtSensor.mjSENS_FRAMEQUAT,
objtype=mujoco.mjtObj.mjOBJ_SITE, objname="imu_in_pelvis")
for lado, sitio in (("esq", "left_foot"), ("dir", "right_foot")):
spec.add_sensor(name=f"forca_pe_{lado}", type=mujoco.mjtSensor.mjSENS_FORCE,
objtype=mujoco.mjtObj.mjOBJ_SITE, objname=sitio)
m = spec.compile()F=${FTH:-$HOME/fth}; cd $F/anatomia && . $F/.venv/bin/activate
python3 kit/sensores.py --segundos 1G1 parado 1 s · 7 sensores (4 do arquivo + 3 acrescentados) imu-torso-angular-velocity [0. 0. 0.] imu-torso-linear-acceleration [0. 0. 9.8] imu-pelvis-angular-velocity [0. 0. 0.] imu-pelvis-linear-acceleration [0. 0. 9.8] IMU (pelve): inclinação lateral 0.0° · frente/trás -0.1° sensor de força no tornozelo: pé esquerdo 158 N · pé direito 157 N contatos com o chão: pé esquerdo 164 N · pé direito 163 N soma dos contatos / peso do robô (327 N): 1.00
Giroscópios em zero, acelerômetros em 9,8 para cima, inclinação perto de zero e o peso dividido entre os dois pés.
Ler [0. 0. 9.8] e concluir que o robô está subindo é o erro clássico. O acelerômetro mede força específica: parado, mostra a reação do chão contra a gravidade. Para ver movimento de verdade, compare com o giroscópio e com a altura da pelve.
Ler, conferir e acrescentar um sensor seu.
Rode o bloco e confira as três linhas finais.
Pronto quando: python3 kit/sensores.py termina em soma dos contatos / peso do robô (327 N): 1.00.
Rode com --segundos 3. Se o robô estivesse escorregando ou afundando, a razão mudaria.
Pronto quando: python3 kit/sensores.py --segundos 3 | tail -1 → soma dos contatos / peso do robô (327 N): 1.00.
Copie kit/sensores.py para kit/meus_sensores.py (na mesma pasta, porque ele importa o fth.py) e acrescente um framequat no sítio imu_in_torso, com o venv ativo.
Pronto quando: cd ~/fth/anatomia && python3 kit/meus_sensores.py | head -1 → G1 parado 1 s · 8 sensores (4 do arquivo + 4 acrescentados).
A explicação aparece depois da sua resposta.
Pergunta 1 de 3
O acelerômetro da pelve do G1 parado lê [0, 0, 9.8]. O que isso significa?competência
Pergunta 2 de 3
O sensor de força do pé leu 158 N e o contato com o chão 164 N. Por que a diferença?
Pergunta 3 de 3
Por que acrescentar sensores pela MjSpec em vez de editar o g1.xml do Menagerie?
Escolha uma alternativa. A explicação aparece depois da sua tentativa.