E1 · El G1 parado
3 minCorre el bloque y comprueba las tres líneas finales.
Listo cuando: python3 kit/sensores.py termina en soma dos contatos / peso do robô (327 N): 1.00.
Clase 5 · 15 min
Un humanoide de pie siempre está cayendo un poco y corrigiéndose. Para eso necesita saber cuánto está inclinado, dónde está cada articulación y cuánto peso hay en cada pie. En esta clase lees los sensores que el MJCF del G1 declara, agregas los que faltan sin editar el archivo y comparas la lectura con el peso del robot.
Comenzar la lección
Objetivo: leer la IMU y la fuerza en cada pie del G1 parado y comprobar que la suma de los contactos con el suelo coincide con el peso del robot.
Los cuatro primeros responden "cómo está mi cuerpo"; el último, "qué hay alrededor". Haz clic en cada uno.
Los sensores que el MJCF no declara no existen en la simulación hasta que los agregues.
Haz clic en cada una.
El acelerómetro mide la fuerza que sostiene al sensor, no el movimiento: parado en el suelo, lee 9,8 m/s² hacia arriba. En caída libre, leería cero.
Así es como la IMU sabe dónde queda "abajo" y, de ahí, la inclinación.
El sensores.py abre el archivo con mujoco.MjSpec.from_file, agrega un sensor de orientación (framequat) en la IMU de la pelvis y uno de fuerza en cada pie, y compila.
El archivo del Menagerie queda intacto: tú cambias el robot en tu script, versionado junto con tu código.
El sensor de fuerza en el sitio del pie mide lo que pasa del pie a la pierna; el contacto mide lo que el suelo empuja. La diferencia, cerca de 6 N, es el peso del propio pie (0,61 kg en el modelo).
En un robot real, la celda de carga va en el tobillo por la misma razón.
Parado, la suma de las fuerzas de contacto tiene que igualar el peso: 33,3 kg × 9,81 = 327 N. La razón 1.00 muestra que el robot se apoya solo en los pies y sin empujón.
Si da menos de 1, algo está sosteniendo al robot (otra parte tocando el suelo, una fuerza externa).
soma dos contatos / peso do robô (327 N): 1.00
El fragmento muestra cómo el script agrega los tres sensores; el bloque corre 1 s con el 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
Giroscopios en cero, acelerómetros en 9,8 hacia arriba, inclinación cercana a cero y el peso repartido entre los dos pies.
Leer [0. 0. 9.8] y concluir que el robot está subiendo es el error clásico. El acelerómetro mide fuerza específica: parado, muestra la reacción del suelo contra la gravedad. Para ver movimiento de verdad, compáralo con el giroscopio y con la altura de la pelvis.
Lee, comprueba y agrega un sensor tuyo.
Corre el bloque y comprueba las tres líneas finales.
Listo cuando: python3 kit/sensores.py termina en soma dos contatos / peso do robô (327 N): 1.00.
Corre con --segundos 3. Si el robot se estuviera deslizando o hundiendo, la razón cambiaría.
Listo cuando: python3 kit/sensores.py --segundos 3 | tail -1 → soma dos contatos / peso do robô (327 N): 1.00.
Copia kit/sensores.py a kit/meus_sensores.py (en la misma carpeta, porque importa el fth.py) y agrega un framequat en el sitio imu_in_torso, con el venv activo.
Listo cuando: cd ~/fth/anatomia && python3 kit/meus_sensores.py | head -1 → G1 parado 1 s · 8 sensores (4 do arquivo + 4 acrescentados).
La explicación aparece después de tu respuesta.
Pregunta 1 de 3
El acelerómetro de la pelvis del G1 parado lee [0, 0, 9.8]. ¿Qué significa eso?competencia
Pregunta 2 de 3
El sensor de fuerza del pie leyó 158 N y el contacto con el suelo 164 N. ¿Por qué la diferencia?
Pregunta 3 de 3
¿Por qué agregar sensores con MjSpec en vez de editar el g1.xml de Menagerie?
Elige una alternativa. La explicación aparece después de tu intento.