2. Список проблем соревнования и решения
Этот список делит проблемы на четыре колонки: наблюдение, реальная причина, способ решения и границы проверки. Так мы не принимаем случайный одиночный успешный запуск за устойчивое решение.
2.1 Проблемы с пониманием задачи
Наблюдение: всё время ищем мусор, а в сцене яма, платформа и ящик
Причина: загружена Task D. Основа оценки Task D — переход через препятствия и толкание ящика, а не распознавание, захват и сброс мусора.
Решение: сначала зафиксируйте ID задачи, ID робота, размерность действий и события оценки, и только потом решайте, какой код смотреть. Логика целей-мусора, корзины и сброса входит в Task B.
Границы проверки: увиденный ящик ещё не означает, что Task D выполнена полностью. Нужно проверить положение по x, прохождение ямы, подъём на платформу, финиш и приращение оценки.
2.2 Проблемы с видом и «ничего не видно»
Наблюдение: viewer чёрный или на картинке нет ни робота, ни цели
Причина: обычно дело не в отсутствии содержимого. Чаще всего виноваты headless-режим, неверная позиция камеры viewer, не включённая камера, робот далеко от камеры или запуск входа обучения, который только пишет логи.
Решение:
сначала воспроизвести одно окружение
потом включить cameras / viewer
потом сохранить один кадр RGB-D
потом проверить сцену глобальным viewer
и только затем смотреть поведение policy
При официальной отправке нужно разделять отладочный глобальный вид и камеры, которые policy разрешено использовать. Глобальный вид подходит, чтобы ответить на вопрос «создана ли цель», но не доказывает, что её можно подавать на вход policy.
2.3 Проблемы с оценкой
Наблюдение: робот двигается, но баллов всего 2.0
Причина: выполнение действия и событие оценки — разные вещи. Низкая оценка в Task D может означать лишь то, что робот пересёк первый порог по x, но этапы толкания, платформы или финиша ещё не выполнены.
Решение: при каждом rollout сохраняйте одновременно:
- временной ряд
current_score; - root pose робота;
- положение ящика и относительную дистанцию;
- состояние стадии;
- видео последних 5 секунд перед провалом.
Смотреть нужно не на то, «двигался ли робот», а на то, после какого события оценка растёт и почему следующее событие не срабатывает.
2.4 Проблемы с размерностями наблюдений и действий
Наблюдение: policy обучается, но при отправке ошибка shape или странные движения робота
Причина: размерность выхода policy при обучении, размерность действий официального интерфейса отправки и конфигурация робота не совпадают. B2Piper и B2wPiper нельзя смешивать, а 16D locomotion action нельзя передавать как 24D official action.
Решение: поставьте на границе развёртывания явный адаптер и проверяйте shape до входа в симуляцию:
assert action16.shape[-1] == 16
action24 = adapt_taskd_16d_to_official(action16)
assert action24.shape[-1] == 24
Небольшая референсная реализация — code/taskd_reference_adapter.py. Она показывает интерфейс и логику стадий, но не утверждает, что может заменить полноценную policy.
2.5 Проблемы контакта при толкании ящика
Наблюдение: робот подходит к ящику, но ящик сдвигается не туда, теряется или застревает
Причина: одна только команда прямой скорости не справляется с отклонением курса, меняющейся поверхностью контакта, замедлением у края ямы и выходом ящика из поля зрения LiDAR.
Решение: разбейте Task D на явные состояния:
approach_box
push_box
nav_platform
climb_finish
recover
Для каждого состояния задайте свои пределы скорости, блокировку курса, пороги расстояния до ящика и условия выхода. LiDAR нужен для оценки bearing/distance ящика, оценка по очкам подтверждает, действительно ли стадия завершена, а восстановление при застревании отступает назад, поворачивает или смещается боком, если оценка долго не растёт.
2.6 Проблемы обучения
Наблюдение: reward в обучении растёт, а официальная оценка не растёт
Причина: reward обучения может поощрять только отслеживание скорости, стабильность позы или краткосрочный контакт и не покрывать события официальной оценки. Кривые обучения не заменяют успешность задачи и видео.
Решение: введите три уровня оценки:
- Уровень элемента: shape наблюдений, адаптер действий, загрузка модели.
- Уровень rollout: воспроизведение одного окружения, переключение стадий, видео и трасса оценки.
- Уровень benchmark: фиксированные seed, несколько запусков, официальный оценщик или эквивалентная локальная оценка.
Меняйте за раз только одну переменную, сохраняйте лучший checkpoint и соответствующее видео. Не перезаписывайте известную отправляемую версию только потому, что у нового checkpoint меньше loss обучения.
2.7 Проблемы переноса публичных решений
Наблюдение: скопировали solution.py из другого репозитория, программа запускается, но ведёт себя неверно
Причина: публичные репозитории могут использовать другого робота, другое имя окружения в регистрации, другой масштаб действий, другие внешние параметры камер и другой оценщик. То, что код импортируется, говорит лишь о том, что синтаксис и зависимости в основном в порядке, но не о том, что семантика управления совпадает.
Решение: переносите в таком порядке:
лицензия и upstream commit
-> задача / робот / размерность действий
-> ключи наблюдений и нормализация
-> масштаб действий и порядок суставов
-> регистрация окружения и checkpoint
-> модульные тесты и smoke rollout
-> сравнение нескольких запусков оценки
2.8 Разрыв между восприятием и манипуляцией в Task B
Наблюдение: YOLO узнаёт мусор, но робот не умеет его поднять или сбросить
Причина: модуль восприятия выдаёт только класс, bbox, глубину и мировые координаты. Он сам по себе не порождает допустимую траекторию шасси, позу концевого эффектора, конечный автомат захвата и подтверждение сброса.
Решение: зафиксируйте явный интерфейс выхода восприятия и пусть его потребляет слой манипуляции:
perception_output
-> target / objects_remaining / obstacles / bin / robot
-> approach controller
-> grasp controller
-> carry controller
-> release verifier
README восприятия у yma867 полезен как справка по интерфейсу, но его solution.py — явный заглушечный zero-action. Поэтому успешный тест зрения нельзя принимать за выполненный сбор мусора.
2.9 Проблемы публикации
Наблюдение: хочется целиком отправить в GitHub все тренировочные каталоги и внешние репозитории
Причина: тренировочные каталоги обычно содержат checkpoint, кеши, видео, ассеты симуляции, логи, приватные пути и токены. Прямая загрузка раздувает репозиторий и может раскрыть учётные данные или нарушить условия распространения сторонних материалов.
Решение:
- GitHub: учебные материалы, лёгкий исходный код, шаблоны конфигураций, разбор проблем, лицензии и ссылки на зафиксированные версии;
- Hugging Face: веса моделей, отфильтрованные данные, полные снимки исходного кода, архивы логов и SHA256;
- Локально или на сервере: Isaac Sim, conda-окружения, кеши и необработанные промежуточные артефакты.
2.10 Шаблон записи проверки
Каждая официальная запись проверки должна содержать как минимум:
задача / робот / ID окружения
commit кода
SHA256 checkpoint
размерность наблюдений / размерность действий
версия GPU и Isaac Lab
num_envs / seed / iteration
трасса оценки (score trace)
путь к видео
достигнутая стадия
сбойная стадия и следующее изменение