G0.5: от нового наблюдения до повторной постановки двух рук
В этом разделе используется многоуровневое управление «предложение G0.5 + совмещение IK + навык пальцев». Его ценность в том, что предобученная VLA подключается к реальному процессу для двух рук и при этом сохраняет ритм и аппликатуру специализированного контроллера игры.
1. Окружение модели и загрузка
Используйте отдельное окружение Python 3.10. Инструкция по установке и лицензия вышестоящего проекта — в GalaxeaVLA; ресурсы модели — в OpenGalaxea/G05.
Проверка интерфейса в этой главе выполнена на коммите 89f2322b4ad016e192437adc1a2c253b05bab246:
git clone https://github.com/OpenGalaxea/GalaxeaVLA.git "$HOME/GalaxeaVLA"
export G05_REPO="$HOME/GalaxeaVLA"
git -C "$G05_REPO" checkout 89f2322b4ad016e192437adc1a2c253b05bab246
cd "$G05_REPO"
uv sync --index-strategy unsafe-best-match
export G05_PY="$G05_REPO/.venv/bin/python"
export G05_MODELS="$HOME/models/G05"
Установка uv описана в официальной инструкции. Расширения CUDA должны соответствовать версиям PyTorch / CUDA, которые требует вышестоящий проект; эта глава не меняет другие уже работающие обучающие окружения.
Скачайте базовую модель и общие компоненты, сохранив конфигурацию и файлы статистики:
uv pip install --python "$G05_PY" huggingface_hub
"$G05_PY" -c 'import os; from huggingface_hub import snapshot_download; snapshot_download("OpenGalaxea/G05", local_dir=os.environ["G05_MODELS"], allow_patterns=["g05-base/*", "action_tokenizer.pt", "qwen3_5_2b_base_processor/*"])'
Загрузка нужна только один раз; если модель уже есть, достаточно указать каталог. Проверьте структуру:
G05_MODELS/
action_tokenizer.pt
qwen3_5_2b_base_processor/
g05-base/
.hydra/config.yaml
dataset_stats.json
checkpoints/model_state_dict.pt
В некоторых вариантах загрузки внутри g05-base/ есть ещё один каталог с тем же именем. Найдите нужный путь командой ниже и затем задайте переменную с точным путём:
find "$G05_MODELS/g05-base" -name model_state_dict.pt
export G05_CHECKPOINT="$G05_MODELS/g05-base/checkpoints/model_state_dict.pt"
test -f "$G05_CHECKPOINT"
cd "$PIANO_ROOT"
Скрипт читает фактическую архитектуру модели из конфигурации и статистики данных рядом с контрольной точкой, поэтому сохраняйте структуру каталогов загрузки. Не копируйте только один файл весов.
На рабочей станции проверка выполнялась на устройстве с примерно 96 ГБ видеопамяти; ранний однопроцессный вывод занимал около 11 ГБ, но это не минимальное требование к железу. Скрипты публикации по умолчанию используют всю доступную квоту текущего устройства; ограничить распределение PyTorch можно переменной G05_CUDA_MEMORY_FRACTION, например значением 0.25 на общем устройстве с 96 ГБ. Это доля от полной памяти карты: память не резервируется заранее и не защищается от других процессов.
2. Что модель принимает и что выдаёт
| Направление | Содержание |
|---|---|
| Входные изображения | RGB с камеры головы, левого и правого запястья |
| Входное состояние | По 7 углов суставов для каждой руки и условная величина раскрытия кисти |
| Текстовая инструкция | Требование к подготовке двух рук / повторной постановке после перемещения инструмента |
| Выход | Блок действий R1 Pro для двух рук как предложение позы |
| Результат исполнения | Предложение после ограничения величины вместе с целями запястий передаётся в IK, затем отправляется управление приводами |
Величина раскрытия Shadow Hand нормализуется по расстоянию между большим и указательным пальцами, чтобы соответствовать наблюдению за обычным захватом; отдельные суставы пальцев приводит контроллер фортепиано.
g05_piano_client.py запускает подпроцесс g05_piano_worker.py, загружает контрольную точку один раз и обрабатывает новые наблюдения многократно. Симуляционное окружение и окружение модели обмениваются сообщениями, поэтому их зависимости не нужно объединять.
3. Как предложение действий участвует в управлении
Выход G0.5 сначала проходит ограничение диапазонов суставов и величины шага, а затем используется как опорная поза для IK. Решение учитывает:
- ошибку между запястьем и целевой позицией игры;
- ошибку ориентации запястья;
- расстояние до предложения двуручной позы G0.5;
- пределы суставов, ограничения скорости и текущую конфигурацию.
Параметр --model-weight задаёт вес опорной позы от модели. В прилагаемом упражнении используется 0.1, в исторических непрерывных экспериментах — 0.5. Для разных начальных конфигураций вес можно подбирать по остаточной ошибке восстановления, а критерий попадания запястья в цель сохраняется неизменным.
Поэтому выход модели действительно меняет команды, отправляемые двум рукам, а не только показывается на видео. Поле отчёта model_induced_command_distance_rad_seconds фиксирует изменение команд из-за предложения модели; ненулевое значение говорит о том, что предложение участвовало в управлении, но само по себе не означает повышения точности.
Координаты целей игры в этой демонстрации берутся из известной геометрии фортепиано в симуляции. Сильная сторона G0.5 здесь — мультимодальный интерфейс действий и сочетание навыков; в эксперименте положение клавиш не передавалось визуальной модели.
4. Игра с перемещением инструмента
Запуск непрерывного эксперимента из README выполняет этапы по порядку:
| Этап | Действие |
|---|---|
| Игра | Выполнение аппликатуры по плану |
| Поднятие рук | Отпускание клавиш и подъём обеих рук |
| Перемещение | Контроллер сцены сдвигает фортепиано |
| Восстановление | Новые изображения с камер и углы суставов передаются G0.5; предложение двух рук и IK совмещаются вместе |
| Опускание рук | По разнице целей суставов рассчитывается время передачи; после проверки ограничения скорости включается новая траектория для нового положения инструмента |
| Продолжение | Команды пальцев сохраняются, рука выполняет траекторию в новом положении |
--boundary обязан попадать в паузу между фразами и не должен прерывать звучащие ноты; время выравнивается по шагу управления 50 Гц. В прилагаемом упражнении используется 4,5 секунды. Сначала выполняется горизонтальный сдвиг на 2 сантиметра без изменения высоты.
Решение для восстановления включает ограничения диапазона движения и скорости, поэтому обрезка одного сустава после решения не нарушает совмещение запястья. Время опускания рук автоматически увеличивается по разнице целей суставов, а время пауз в партитуре синхронно обновляется.
Во время вывода модели часы симуляции приостанавливаются; отчёт сохраняет и симуляционное время, и фактическое время выполнения. Так сначала проверяется передача действий, а позже вызовы модели можно сделать асинхронными с тайм-аутом и режимом удержания состояния.
5. Отдельное наблюдение за повторной постановкой
"$SIM_PY" g05_recovery.py \
--reference runs/public-physical --out runs/recovery-comparison \
--modes ik_only g05_assisted --cases aligned \
--piano-shift 0 0.06 0 --duration 1.6 --hover-height 0.04 --model-weight 0.5 \
--g05-python "$G05_PY" --g05-repo "$G05_REPO" \
--g05-models "$G05_MODELS" --g05-checkpoint "$G05_CHECKPOINT" \
--g05-config-mode checkpoint --video
Это новая команда эксперимента, и её результаты определяются отчётом, созданным на вашей машине. Прилагаемый исторический эксперимент на 6 сантиметров использовал другое начальное состояние игры; полный сравнительный отчёт сохраняет результаты двух методов.
6. Как проверить, что модель действительно участвует
Проверьте выходной каталог и отчёт:
- Worker записывает фактический коммит репозитория модели, хеш контрольной точки и загруженную конфигурацию.
- Каждый вызов сохраняет наблюдение и выход, чтобы можно было проследить, какое изображение породило какое действие.
- Отчёт сессии фиксирует число новых выводов и изменение команд, вызванное предложением.
- Ошибка восстановления, записи контактов, события клавиш и звук относятся к одному и тому же запуску.
Во внешних материалах можно сказать так: «G0.5 по новому наблюдению после перемещения инструмента предлагает корректировку действий двух рук; вместе с IK и специализированным навыком пальцев она обеспечивает повторную постановку и продолжение игры».