FTH 4 · Operar un humanoide real|INEMA.CLUB-PRO

Clase 3 · 15 min

Leer el robot: articulaciones, IMU, batería y temperatura

Antes de mandar cualquier comando, necesitas saber si el robot está vivo, de pie y frío. En esta lección escuchas el estado del G1 durante unos segundos, mides la tasa en vez de memorizarla y resumes inclinación, torque y temperatura, diciendo "sem dado" cuando el simulador no manda un campo.

Empezar la clase
Monitor en un laboratorio oscuro con gráficos de señal e indicadores desenfocados, y la articulación de una pierna de robot fuera de foco al lado.

En esta clase vas a

  1. 1Los campos reales del LowState_ del G1 (y los que no existen en él)
  2. 2La tasa se mide: 200 Hz en el simulador, medido aquí
  3. 3Inclinación del tronco a partir del cuaternión de la IMU
  4. 4Batería y temperatura: dónde están y qué no llena el simulador

Objetivo: medir la tasa del estado del G1 y resumir inclinación, torque y temperatura, sin inventar lo que el simulador no manda.

01Qué viene en un mensaje de estado

Haz clic en cada bloque. Nombres exactos del IDL unitree_hg (SDK 814556d).

Haz clic en cada bloque del diagrama para ver qué hace.

Tópico: rt/lowstate. En ROS 2 (lección 6) el mismo tópico aparece como /lowstate.

02Tres cuidados al leer

Haz clic en cada uno.

1. Tasa

En el simulador, el estado sale en cada paso de 5 ms (SIMULATE_DT de config.py): 200 Hz, y el monitor mide eso.

La tasa del robot real no está en el código del SDK. Mídela con el monitor o con ros2 topic hz (lección 6) en vez de copiar un número de una tabla.

03Escuchar 5 segundos

El simulador corre 10 s con el G1 suspendido; el monitor escucha 5 s y sale con código 0 si la tasa está en el rango.

Terminal · simulador + monitor
F=${FTH:-$HOME/fth}; cd $F/operar && . $F/.venv/bin/activate
python3 kit/sim.py --s 10 --suspenso &
python3 kit/monitor.py --s 5; echo "saída: $?"
wait
Fragmento · kit/monitor.py
    for i in range(op.N):
        tau[i] = max(tau[i], abs(s.motor_state[i].tau_est))
        temp = max(temp, max(s.motor_state[i].temperature))
Ejemplo del repositorio
simulador: G1 29 motores · DDS domínio 1 em lo · 10 s · suspenso: sim
amostras em 5 s: ≈ 1000 · taxa ≈ 200 Hz
taxa dentro de 150–250 Hz: sim
inclinação máx. do tronco: 6°
maior torque estimado: 0 N·m (sem comando: motores soltos)
temperatura máx. dos motores: sem dado (o simulador manda 0)
saída: 0
simulador: fim em t = 10.0 s · robô suspenso (pés fora do chão)

Robot suspendido y sin comando: tronco casi recto, torque cero (motores sueltos) y temperatura sin dato.

04Práctica

Medir, no memorizar.

E1 · Monitor de 5 s

5 min

Ejecuta el bloque y anota la tasa y la inclinación máxima.

Listo cuando: python3 kit/monitor.py --s 5; echo "saída: $?" → taxa dentro de 150–250 Hz: sim, temperatura máx. dos motores: sem dado (o simulador manda 0) y saída: 0.

E2 · Encontrar el "sem dado" en el código

5 min

Abre kit/monitor.py y encuentra la línea que cambia el cero por "sem dado". Escribe, en una línea, qué harías en el robot real para obtener el número.

Listo cuando: grep -c "sem dado (o simulador manda 0)" kit/monitor.py → 1, y tu línea cita el manual del fabricante como fuente del umbral.

05Prueba de la clase

La explicación aparece después de tu respuesta.

Pregunta 1 de 4

¿Dónde está la batería del G1 en los mensajes del SDK?competencia

06En tres frases

Camposrt/lowstate trae IMU y 35 motores; la batería es BmsState_.
Tasa200 Hz en el simulador, medido; la del robot real se mide en el real.
AusenciaUn campo sin rellenar es "sem dado", nunca cero.

Para ir más allá

Clase anteriorSiguiente clase