Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ATEC2026, трек 2 L0 «Уборка стола», Task E: разбор после соревнования

Этот документ описывает полный путь участия в Task E трека 2 L0 «Уборка стола» онлайн-этапа ATEC2026. Задача: манипулятор Piper распознаёт три случайно расставленных предмета, захватывает их и кладёт в указанную корзину. Наш лучший онлайн-результат — 15.00, это не максимальный балл. Ценность открытого каталога — в честном разборе инженерного пути, сохранённом каркасе отправки и записях неудачных направлений, чтобы другие не повторяли те же ошибки.

Цель задачи

Основной процесс Task E:

визуальное восприятие -> распознавание и локализация цели -> планирование движения или выход политики -> захват -> перенос -> освобождение над корзиной

Онлайн-отправка — загрузка исходного кода в виде файла. Защищённый пакет нашей отправки взят из ветки ACT seed1 best_loss:

code/act_seed1_best_submission/
  solution.py
  act/detr/*.py
  requirements.txt
  run.sh
  server.py
  UPLOAD_README.md

Внимание: policy_act.pt в GitHub не загружен. Его нужно взять из локального пакета отправки или из репозитория моделей Hugging Face и положить в тот же каталог.

Ресурсы Hugging Face для воспроизведения

Локальная копия симуляции ATEC очищена; для воспроизведения все крупные файлы берутся с Hugging Face:

Репозиторий воспроизведения содержит source/, scripts/, demo/, atec_robot_model/, third_party/GraspGen/ и code/task_e_collection/. Отфильтрованный HDF5 лежит в каталогах фрагментов data/; восстанавливается через RESTORE_FILTERED_DATASET.sh в корне репозитория.

Итоговый балл и пакет отправки

ПараметрРезультат
ЗадачаL0 уборка стола, Task E
РоботPiper
Лучший онлайн-результат15.00
Защищённый итоговый вариантACT seed1 best_loss
Локальная историяв одном запуске до 18, но разброс между seed большой
Стабильно ли максимальный баллнет

Источник защищённого пакета — файл task_e_act_seed1_best_20260608_upload.zip в репозитории моделей Hugging Face.

Ключевые SHA256:

policy_act.pt  282614de9673dc01e229557448e380b6a02c196b5c3953cec77b2aebd2305a8e
solution.py    a08790e7512c914e5b78132303e1c6098c8aba3b01a373933e6ddc617fa3a485

Какие пути мы пробовали

1. Генерация данных скриптованным оракулом

Официальный скриптованный оракул Task E лучше справлялся с объектом object_3, но у object_1 и object_2 были проблемы: контакт при захвате, несовпадение TCP Piper, различие между корнем USD и геометрическим центром, несоответствие примитивов переноса. В итоге мы сгенерировали демонстрации для трёх объектов, используя примитивы под каждый объект и замкнутое сервоуправление:

datasets/atec_task_e_obj321_servo_100demos

Эти данные подходят для обучения ACT, но это не набор правил для контроллера с максимальным баллом.

2. ACT / XSA-ACT

ACT оказался самым надёжным путём для отправки. Ключевые исправления:

  • исправлена семантика действия Task E: действие равно (joint_target - default_joint_pos) / 0.5, а не скорости и не простой дельте;
  • solution_act.py автоматически загружает model_args из checkpoint;
  • модификация внимания XSA может служить вариантом ACT, но онлайн-результат нестабилен;
  • loss обучения слабо коррелирует с успешностью задачи, поэтому её нужно измерять отдельно для каждого seed.

Результаты онлайн-проверок:

ВариантОнлайн-результат
XSA-ACT, загруженная версия6.00
ACT seed2 4500012.00
ACT seed2 500006.00
ACT seed1 best15.00

Поэтому каталог защищает ACT seed1 best, а не checkpoint seed2, который однажды показал максимальный балл на одном seed.

3. GraspNet / AnyGrasp / SAM3 / PCA в стиле GraspGen

Мы подключали и проверяли несколько маршрутов планирования захвата:

  • TunTunClaw / GraspNet;
  • SDK AnyGrasp;
  • сегментация изображений SAM3;
  • геометрический захват PCA/AABB в стиле GraspGen;
  • центрирование корзины при освобождении;
  • подход перед захватом / защищённая вставка;
  • «захват с вдвиганием и закрытием» для кубика object_1;
  • низкое положение cradle/servo для переноса банана object_3.

Эти маршруты показали, что восприятие и кандидаты позиций захвата не бесполезны: object_1 и object_3 в ряде seed удавалось поднять. Однако итоговый вариант demo/solution_pca.py в формате отправки оставался нестабильным в IK, в отслеживании центра пальцев, удержании контакта и освобождении над корзиной, поэтому он не может заменить ACT в финальной отправке.

Важный урок:

AnyGrasp / GraspNet — не контроллер с максимальным баллом «одной кнопкой»;
они дают лишь априорную позу захвата, а дальше нужны IK Piper, калибровка TCP, удержание контакта захвата и примитив освобождения над корзиной.

4. pi0.5 / OpenPI

Мы системно пробовали pi0.5/OpenPI:

  • старая ветка с дополнением до 16D при фиксированной базе;
  • ветка с состоянием и действием native8;
  • 20 демонстраций / 100 демонстраций;
  • LoRA;
  • pi05_base;
  • сырые неотфильтрованные данные + абсолютное целевое действие;
  • ветки action expert / action head;
  • нулевой шум / настройка числа шагов выполнения chunk.

Ни одна ветка не превзошла ACT; несколько веток на seed 11/12/13 дали 0/0/0 или очень низкий балл. После соревнования выяснилось, что проблема не в «слабости модели» pi0.5, а в том, что текущее представление данных и моделирование фаз плохо подходят для траекторий Task E:

  • фильтрация данных удалила много кадров удержания и стабилизации, что нарушило временную семантику action chunk;
  • связь одной камеры и текстового промпта с фазой захвата слабая;
  • модель прямого распространения вблизи домашней позиции и высокого положения не имеет непрерывной фазы, поэтому действия дрожат между домашней позицией и средней частью траектории;
  • даже при переобучении на одной демонстрации с сырым абсолютным целевым действием в rollout Isaac не получалось устойчивого pick/place.

Поэтому pi0.5 сейчас не рассматривается как кандидат на отправку.

Содержимое каталога

L0-desktop-organization-taske/
  README.md
  code/act_seed1_best_submission/
    UPLOAD_README.md
    solution.py
    requirements.txt
    run.sh
    server.py
    act/detr/*.py
  docs/
    atec2026-taske-rules-physical-configuration-and-submission-instructions-20260604.md
    workspace-memory-taske-complete-debugging-record.md
  hf_model_package/
    README.md
    policy_act.sha256
    task_e_act_seed1_best_20260608_upload.zip.sha256

docs/workspace-memory-taske-complete-debugging-record.md — полная рабочая память, в которой собраны многие промежуточные неудачные маршруты, пути к видео, пути к checkpoint и выводы по отладке. Документ длинный, но для разбора очень важен.

Как восстановить пакет отправки

Положите policy_act.pt в каталог:

l0-desktop-organization-taske/code/act_seed1_best_submission/policy_act.pt

Затем при загрузке исходного кода сохраняйте такую структуру:

solution.py
policy_act.pt
act/detr/backbone.py
act/detr/detr_vae.py
act/detr/position_encoding.py
act/detr/transformer.py
act/detr/utils.py
requirements.txt

Если платформа загружает целый служебный каталог, можно добавить:

server.py
run.sh

Почему policy_act.pt не хранится в GitHub

policy_act.pt весит около 64 МБ. Формально это ниже жёсткого лимита GitHub на один файл, но двоичные веса не нужно хранить в истории учебного репозитория. Рекомендуемый порядок:

  1. В GitHub хранить код, README, SHA256 и описание отправки.
  2. На Hugging Face хранить веса и полный архив отправки.
  3. В README поддерживать ссылки на HF и контрольные значения.

Ссылки на Hugging Face

Веса и полный архив отправки загружены в репозиторий Datawhale на Hugging Face:

https://huggingface.co/Datawhale/atec2026-task-e-act-seed1-best

Коммит загрузки:

https://huggingface.co/Datawhale/atec2026-task-e-act-seed1-best/commit/4583bda9e3118e75987a0f91de62c155a70a2bed

Команды загрузки, список файлов и SHA256 — в hf_model_package/README.md.

Данные и журналы для воспроизведения вынесены в отдельный репозиторий наборов данных Hugging Face:

https://huggingface.co/datasets/Datawhale/atec2026-task-e-reproducibility

Статус загрузки: 19.07.2026 завершена удалённая проверка, все 337 фрагментов на месте; README.md, скрипт восстановления, манифест SHA256 и архив журналов уже есть в репозитории.

Файл trajectory_filtered.hdf5 весит около 33 GiB; это 100 успешных демонстраций с тремя объектами 3,2,1 с калиброванным сервоуправлением, прошедших фильтрацию ACT. Чтобы передача через веб и CLI была стабильной, файл разбит на 337 фрагментов по 100 MiB:

data/final_100demos_filtered_split_100m/trajectory_filtered.hdf5.part-0000
...
data/final_100demos_filtered_split_100m/trajectory_filtered.hdf5.part-0336

Восстановление:

bash RESTORE_FILTERED_DATASET.sh
sha256sum -c SHA256_FILTERED_ORIGINAL.txt

SHA256 исходного полного отфильтрованного HDF5:

4b85980e72b8e76261ad037bfba97b4795210e3f77cdb5b71479846b9230ac02

Можно ли безопасно удалить локальные данные

Можно, но порядок такой:

  1. Убедитесь, что каталог уже отправлен в GitHub.
  2. Убедитесь, что на Hugging Face загружены policy_act.pt, zip отправки, фрагменты данных воспроизведения и журналы.
  3. Проверьте, что SHA256 модели, SHA256 фрагментов и SHA256 восстановленного отфильтрованного HDF5 совпадают.
  4. Сохраните этот каталог и docs/workspace-memory-taske-complete-debugging-record.md.
  5. Только после этого удаляйте крупные выходы обучения, datasets, runs, logs/videos, checkpoint openpi в $PROJECT_ROOT.

Не удаляйте единственный локальный policy_act.pt, пока не убедились, что веса можно скачать с HF.