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:
- итоговые веса модели: Datawhale/atec2026-task-e-act-seed1-best
- полный репозиторий воспроизведения Task E: Datawhale/atec2026-task-e-reproducibility
Репозиторий воспроизведения содержит 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 45000 | 12.00 |
| ACT seed2 50000 | 6.00 |
| ACT seed1 best | 15.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 на один файл, но двоичные веса не нужно хранить в истории учебного репозитория. Рекомендуемый порядок:
- В GitHub хранить код, README, SHA256 и описание отправки.
- На Hugging Face хранить веса и полный архив отправки.
- В 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
Можно ли безопасно удалить локальные данные
Можно, но порядок такой:
- Убедитесь, что каталог уже отправлен в GitHub.
- Убедитесь, что на Hugging Face загружены
policy_act.pt, zip отправки, фрагменты данных воспроизведения и журналы. - Проверьте, что SHA256 модели, SHA256 фрагментов и SHA256 восстановленного отфильтрованного HDF5 совпадают.
- Сохраните этот каталог и
docs/workspace-memory-taske-complete-debugging-record.md. - Только после этого удаляйте крупные выходы обучения,
datasets,runs,logs/videos, checkpoint openpi в$PROJECT_ROOT.
Не удаляйте единственный локальный policy_act.pt, пока не убедились, что веса можно скачать с HF.