E1 · A árvore do G1
5 minRode o bloco "listar as juntas" e marque na saída as 6 juntas de uma perna.
Pronto quando: a última linha é RESUMO: 29 juntas articuladas + 1 base flutuante · nu=29 · bate com nu: sim e saída: 0.
Aula 3 · 15 min
"23 a 43 graus de liberdade" é propaganda; a árvore de juntas do arquivo é o corpo que o seu controlador vai comandar. Nesta aula você lista as 29 juntas do G1 com limites em graus e torque máximo, entende por que a perna tem seis e confere que o número bate com os atuadores.
Começar a aula
Objetivo: listar as juntas do G1 com limites em graus e torque máximo e conferir que o número de juntas articuladas bate com nu.
Cada bloco é um ramo da árvore que começa na pelve. Clique para ver as juntas.
12 nas pernas + 3 na cintura + 14 nos braços = 29 = nu.
Clique em cada etapa.
left_hip_roll_joint: perna esquerda, quadril, rotação em roll (inclinar para o lado). Pitch dobra para frente e para trás; yaw gira em torno do eixo vertical.
A indentação da saída mostra quem está pendurado em quem: o tornozelo depende do joelho, que depende do quadril.
O arquivo guarda range="-0.087267 2.8798" em radianos; o script converte: -5° a 165° no joelho.
O roll do quadril é assimétrico e espelhado: esquerdo de -30° a 170°, direito de -170° a 30°. A perna abre muito para fora e pouco para dentro, onde está a outra perna.
O atributo actuatorfrcrange da junta corta o que o motor pode fazer: 139 N·m no joelho, 88 no pitch do quadril, 50 no tornozelo, 25 no ombro, 5 no pitch e no yaw do punho.
É o limite do modelo. Revendas citam 90 N·m (base) e 120 N·m (EDU) para o joelho do G1 real (relatado): mais um ponto em que arquivo e robô podem divergir.
O total de juntas (njnt=30) inclui a base livre. O número que interessa ao controlador é o de juntas articuladas, que tem de bater com o de atuadores.
Se não bater, sobrou junta passiva (sem motor) ou motor fora de junta: os dois mudam o seu controlador.
RESUMO: 29 juntas articuladas + 1 base flutuante · nu=29 · bate com nu: sim
O juntas.py lê tudo do MJCF e imprime uma linha por junta.
F=${FTH:-$HOME/fth}; cd $F/anatomia && . $F/.venv/bin/activate
python3 kit/juntas.py unitree_g1/scene.xml; echo "saída: $?"unitree_g1/scene.xml · 29 juntas articuladas
junta mín° máx° torque máx (N·m)
left_hip_pitch_joint -145 165 88
left_hip_roll_joint -30 170 139
left_hip_yaw_joint -158 158 88
left_knee_joint -5 165 139
left_ankle_pitch_joint -50 30 50
left_ankle_roll_joint -15 15 50
right_hip_pitch_joint -145 165 88
right_hip_roll_joint -170 30 139
right_hip_yaw_joint -158 158 88
right_knee_joint -5 165 139
right_ankle_pitch_joint -50 30 50
right_ankle_roll_joint -15 15 50
waist_yaw_joint -150 150 88
waist_roll_joint -30 30 50
waist_pitch_joint -30 30 50
left_shoulder_pitch_joint -177 153 25
left_shoulder_roll_joint -91 129 25
left_shoulder_yaw_joint -150 150 25
left_elbow_joint -60 120 25
left_wrist_roll_joint -113 113 25
left_wrist_pitch_joint -93 93 5
left_wrist_yaw_joint -93 93 5
right_shoulder_pitch_joint -177 153 25
right_shoulder_roll_joint -129 91 25
right_shoulder_yaw_joint -150 150 25
right_elbow_joint -60 120 25
right_wrist_roll_joint -113 113 25
right_wrist_pitch_joint -93 93 5
right_wrist_yaw_joint -93 93 5
RESUMO: 29 juntas articuladas + 1 base flutuante · nu=29 · bate com nu: sim
saída: 0O abrir.py da aula 2 imprime juntas: 30 (1 base flutuante + 29 articuladas). Quem usa njnt=30 como número de motores monta um vetor de comando de 30 posições e o MuJoCo recusa: ctrl tem nu=29. Conte só as articuladas.
Ler a árvore e tirar conclusões dela.
Rode o bloco "listar as juntas" e marque na saída as 6 juntas de uma perna.
Pronto quando: a última linha é RESUMO: 29 juntas articuladas + 1 base flutuante · nu=29 · bate com nu: sim e saída: 0.
Rode o mesmo script no H1 e compare: quantas juntas tem a perna dele e qual o maior torque declarado?
Pronto quando: python3 kit/juntas.py unitree_h1/scene.xml | tail -1 → RESUMO: 19 juntas articuladas + 1 base flutuante · nu=19 · bate com nu: sim.
Ache no G1 a junta da perna com a menor faixa de movimento e explique por que ela é pequena.
Pronto quando: python3 kit/juntas.py | grep ankle_roll mostra -15 15 nas duas linhas, e você escreveu uma frase sobre o porquê.
A explicação aparece depois da sua resposta.
Pergunta 1 de 3
O G1 do Menagerie tem njnt=30 e nu=29. De onde vem a diferença?competência
Pergunta 2 de 3
Por que a perna de um humanoide costuma ter 6 juntas?
Pergunta 3 de 3
A ficha da Unitree diz 1 junta na cintura; o modelo do Menagerie tem 3. Como tratar isso?
Escolha uma alternativa. A explicação aparece depois da sua tentativa.