🤖 Introdução ao SDK do Unitree G1
Objetivo do Módulo
Compreender a arquitetura de software do Unitree G1, configurar o ambiente de desenvolvimento, dominar as APIs disponíveis (Python e C++), e criar seu primeiro programa de controle do robô.
🎯 Visão Geral do Unitree G1
Especificações Técnicas Completas
| Categoria | Especificação | Detalhes |
|---|---|---|
| Dimensões | Altura: 1.32m | Ajustável via postura (1.15m - 1.45m) |
| Peso: 55kg | Distribuição: 35kg pernas, 20kg torso+braços | |
| Largura ombros: 48cm | Permite passagem em portas padrão | |
| DOF (Graus de Liberdade) | Standard: 23 DOF | 12 pernas + 7 braços + 4 torso |
| Dexterous Hands: +20 DOF | 10 DOF por mão (dedos articulados) | |
| Total máximo: 43 DOF | Configuração completa | |
| Computação Onboard | Jetson Orin NX 16GB | 100 TOPS AI performance |
| CPU: 8-core ARM | Cortex-A78AE @ 2.0GHz | |
| GPU: Ampere (1024 CUDA cores) | FP16 tensor cores | |
| Storage: 256GB NVMe SSD | Expansível via USB 3.2 | |
| Sensores | Intel RealSense D435i (x2) | Stereo depth + RGB + IMU |
| IMU 6-axis (torso) | 1000 Hz sampling rate | |
| Force/Torque (pés) | 4-axis, ±500N range | |
| Joint encoders (todos) | Magnetic, 14-bit resolution | |
| Atuadores | Unitree brushless motors | Torque máximo: 45 Nm (quadril) |
| Reduction ratio: 6:1 - 9:1 | Depende da junta | |
| Peak power: 3.5 kW total | Continuous: 1.2 kW | |
| Bateria | Capacity: 15000 mAh | Voltage: 48V (4S LiPo) |
| Runtime: ~2 horas | Carga completa: 1.5h | |
| Hot-swap: Sim | Troca sem desligar | |
| Conectividade | WiFi 6 (802.11ax) | 2.4GHz + 5GHz dual-band |
| Ethernet: Gigabit (RJ45) | Porta na parte traseira | |
| Bluetooth 5.2 | Para periféricos | |
| Sistema Operacional | Ubuntu 22.04 LTS | Kernel 5.15 RT-PREEMPT |
| ROS2 Humble | Pré-instalado e configurado |
Configurações Disponíveis
- 🦾 Standard (23 DOF)
- ✋ Dexterous Hands (+20 DOF)
- ⚙️ Custom Configuration
Composição:
- 12 DOF pernas (6 por perna)
- 3 DOF quadril (pitch, roll, yaw)
- 1 DOF joelho
- 2 DOF tornozelo (pitch, roll)
- 7 DOF braços (3.5 por braço)
- 2 DOF ombro (pitch, roll)
- 1 DOF cotovelo
- 1 DOF pulso (gripper simples)
- 4 DOF torso
- 2 DOF cintura (pitch, yaw)
- 2 DOF pescoço (pitch, yaw)
Custo: Base (~$16,000 USD) Uso: Pesquisa, locomoção, manipulação básica
Adicionais:
- 10 DOF por mão (20 total)
- Polegar: 4 DOF (oposição completa)
- Indicador: 3 DOF
- Médio: 3 DOF
- Anelar: 3 DOF (acoplado com mínimo)
- Mínimo: 3 DOF (acoplado com anelar)
- Pulso: 2 DOF (pitch, yaw)
Total sistema: 43 DOF
Custo: +$8,000 USD Uso: Manipulação fina, grasping complexo, interação social
Opções modulares:
- Force/torque sensors (braços): +$2,000
- LiDAR (Livox Mid-360): +$1,500
- Stereo camera extra (frontal): +$400
- Extended battery pack (2x): +$1,200
Integração de terceiros:
- Franka Emika gripper (compatível)
- Robotic hands (Shadow, Allegro)
- Custom end-effectors via adaptador
🏗️ Arquitetura de Software do G1
Stack Completa
┌────────────────────────────────────────────────────────┐
│ User Applications (Python/C++) │ ← Seu código aqui
├────────────────────────────────────────────────────────┤
│ Unitree SDK (unitree_sdk2_python / unitree_sdk2) │ ← APIs oficiais
├────────────────────────────────────────────────────────┤
│ DDS Middleware (Cyclone DDS) │ ← Comunicação
├────────────────────────────────────────────────────────┤
│ Robot State Manager (RSM) │ ← Estimação de estados
├────────────────────────────────────────────────────────┤
│ Motion Controllers │ ← Locomoção, balanço
│ - Whole-Body Controller (WBC) │
│ - Gait Generator │
│ - Balance Controller │
├────────────────────────────────────────────────────────┤
│ Low-Level Control (LLC) │ ← Controle de motores
│ - PID Controllers (23-43 joints) │
│ - Torque/Position modes │
│ - Safety limits │
├────────────────────────────────────────────────────────┤
│ Hardware Abstraction Layer (HAL) │ ← Drivers
│ - Motor drivers (CAN bus) │
│ - Sensor drivers (I2C, SPI) │
│ - Camera interface (USB 3.0) │
└────────────────────────────────────────────────────────┘
Unitree SDK vs ROS2: Quando Usar Cada Um?
- 🔷 Unitree SDK (Recomendado)
- 🔶 ROS2 Bridge
- 🔀 Híbrido (Best of Both)
Vantagens:
- ✅ Performance: Latência < 1ms (DDS direto)
- ✅ Simplicidade: APIs específicas do G1
- ✅ Documentação: Exemplos oficiais Unitree
- ✅ Suporte: Garantido pela Unitree
- ✅ Updates: Novos recursos liberados primeiro aqui
Desvantagens:
- ❌ Ecossistema menor (vs ROS2)
- ❌ Ferramentas de debug limitadas
- ❌ Integração com Nav2/MoveIt requer bridge
Quando usar:
- Controle de baixo nível (motores, sensores)
- Locomoção customizada
- Performance crítica (< 5ms latency)
- Prototipagem rápida com G1
Exemplo típico:
from unitree_sdk2_python import G1Robot
robot = G1Robot()
robot.set_joint_position("left_knee", 0.5) # Direto
Vantagens:
- ✅ Ecossistema: Nav2, MoveIt, Gazebo, etc.
- ✅ Ferramentas: RViz, rqt, rosbag
- ✅ Comunidade: Milhares de packages
- ✅ Padrão: Interoperabilidade com outros robôs
- ✅ Debugging: Tópicos visualizáveis em tempo real
Desvantagens:
- ❌ Latência maior (~5-10ms overhead)
- ❌ Complexidade adicional (bridge)
- ❌ Não é oficial Unitree (community-driven)
Quando usar:
- Navegação autônoma (Nav2)
- Manipulação complexa (MoveIt2)
- Integração com sistemas ROS existentes
- Simulação (Gazebo/Isaac Sim)
Exemplo típico:
import rclpy
from sensor_msgs.msg import JointState
# Publica via ROS2, bridge converte para Unitree SDK
pub.publish(JointState(...))
Arquitetura recomendada:
# Low-level control: Unitree SDK (performance)
from unitree_sdk2_python import G1Robot
robot = G1Robot()
# High-level planning: ROS2 (ecosystem)
import rclpy
from nav2_simple_commander import BasicNavigator
# Bridge manual quando necessário
def ros_to_unitree(joint_state_msg):
for name, pos in zip(joint_state_msg.name, joint_state_msg.position):
robot.set_joint_position(name, pos)
Benefícios:
- ⚡ Performance de Unitree SDK
- 🛠️ Ferramentas de ROS2
- 🎯 Melhor de ambos mundos
Trade-off: Complexidade de manter dois sistemas
Recomendação deste curso: Começar com Unitree SDK puro, migrar para híbrido se necessário.
📦 Instalação do Unitree SDK
Pré-Requisitos
# Sistema: Ubuntu 22.04
# Python: 3.10+
# Espaço em disco: 5GB
# Verificar versão Python
python3 --version # Deve ser >= 3.10
# Instalar dependências do sistema
sudo apt update
sudo apt install -y \
build-essential \
cmake \
git \
python3-pip \
python3-dev \
libboost-all-dev \
libeigen3-dev \
libssl-dev