SONIC-DR 2x tracker
whole-body трекер для Unitree G1
Это ONNX-политика для гуманоида Unitree G1 29-DoF: каждые 20 мс получает состояние робота и референсное движение (поза таза и 29 углов суставов), а выдаёт 29 целевых позиций для моторных PD-контроллеров. Обучена по стабильному рецепту SuperMimic S3G с SONIC-рандомизацией, сетью на 17,8 млн параметров и look-ahead целью.
📌 Ключевые особенности
- ⚡ ONNX opset 17, 71 МБ; нормализаторы observation и goal уже внутри графа.
- 🎯 Goal — не следующие 10 кадров, а кадры t+1, t+6, …, t+46: шаг 5, горизонт до 0,92 с. Старый deploy без
goal_strideмолча подаёт неверную цель. - 🛡 Обучение с hidden-reference fall recovery: при падении достаточно удерживать stand pose, политика встаёт сама.
- 🔄 Вариант без резиновых рук; масса торса и запястий рандомизирована x0.8–1.5, трение 0.3–1.6, есть толчки и 10% клипов с замороженными кадрами.
- 📊 В RoboJuDo sim2sim все девять демо-движений прошли на 1.0x и 0.7x без падений.
🖥 Пример
import json
import numpy as np
import onnxruntime as ort
name = 's3gla_nohand_sonicdr_2x_ckpt030000'
meta = json.load(open(f'{name}/{name}.json'))
session = ort.InferenceSession(f'{name}/{name}.onnx', providers=['CPUExecutionProvider'])
action = session.run(['action'], {'obs_hist': np.zeros((1, 10, 99), np.float32), 'goal': np.zeros((1, 730), np.float32)})[0]
Подробнее
Бенчмарки в MuJoCo: normalized tracking return 0,653 против 0,620 у S3G 30k; failed clips 7/40 против 11/40; на held-out наборах failure rate 0,7%/0,4%, HI-MPJPE 27,6/27,8 мм.Реальные конфиги идут на CPU Jetson: около 2,2 мс на шаг при 50 Гц; нужен onnxruntime.
На реальном G1 модель ещё не запускали — только sim2sim и офлайн-проверки. Слабые места: высокие удары и подъёмы колена (стопа может оставаться на 25+ см ниже референса), вставание на 1–2 с дольше, чем у S3G.








Комментарии