Репозиторий команды SUAI TECH для соревнования True Tech Champ 2024
- python
- requests
- git
- все :)
Все этапы соревнования состоят в управлении роботом "мышкой" (micromouse) в лабиринте. Целью соревнования является добраться от стартовой ячейки до центра лабиринта размером 16*16 клеток.
Робот имеет 4 колеса, 6 датчиков расстояния, гироскоп и энкодеры (начиная с финала).
Датчики расстояния смотрят:
- вперед
- вперед-вправо под 45*
- вправо
- назад
- влево
- вперед-влево под 45*
Колеса с каждой из сторон управляются одним мотором через систему шестерней, т.е. используется "танковое" управление. Колеса не поворотны.
Побеждает робот, добравшийся до центра лабиринта быстрее остальных. В некоторых случаях возможно несколько заездов на одном лабиринте - для исследования и выбора наилучшего маршрута, а затем забега на время.
Управление роботом через HTTP API. Доступа к прошивке нет.
Индивидуальное участие. Участникам предложат 3 задачи в виртуальном лабиринте: сканирование пространства и сбор данных, выход из тупика, скоростное прохождение робомыши от старта к финишу.
Задачи:
- На локальном эмуляторе исследовать лабиринт и отправить его полную карту
- На локальном эмуляторе исследовать лабиринт и на скорость добраться до его центра
- Аналогична второй, но имеет более реалистичное управление
Решение 1 и 2 задач:
- движение через встроенные команды
- использование 4 кардинальных датчиков для определения ближайших стен
- сохранение лабиринта в виде графа
- поиск кратчайшего маршрута через дейкстру
- отсутствие оптимизаций
Сложности:
- перенос обхода графа из абстрактной задачи в реальную
- из-за ошибок проверочной системы, решение было проверено только после аппеляции
Результат:
- 1 задание - 100% счета
- 2 задание - топ 20 по времени выполнения
- 3 задание - не решено
- проход в следующий этап
Командное участие. Участники коллективно продолжат работу над алгоритмом и получат доступ к дистанционному управлению робомышью на офлайн-полигоне с лабиринтом. В финал выйдут 20 команд, которые быстрее остальных пройдут лабиринт
Задача:
- На физическом роботе, проход до центра лабиринта на время
- Встроенные команды управления или прямое ШИМ управление
Сложности:
- Встроенные команды на протяжении большей части этапа имели ужасную точность. Ближе к концу этапа все ошибки в прошивке были исправлены организаторами.
- Долгое время обновления датчиков расстояния. В прошивке они опрашивались последовательно, поэтому для получения валидных результатов датчиков необходимо было подождать 1.3 секунды после движения до опроса датчиков расстояния (гироскоп обновлялся мгновенно)
- Индивидуальные особенности роботов в виде повышенного сопротивления на некоторых колесах
Ограничения:
- Отсутствие постоянного доступа к роботу
- У каждой команды есть всего 5 подключений к удаленному роботу на 30 минут каждое. В один из слотов необходимо совершить забег на время
Решение:
- После множественных итераций и уточнения особенностей лабиринта - возвращение к прохождению по правилу правой руки
- Откладывание попыток до момента исправления багов в прошивке
- Корректирование расстояния от стен путем врезания в них (дополнительный эффект - устранение накопительных ошибок при поворотах)
- запись маршрута для последующего воспроизведения полностью без запроса датчиков - следовательно, ускорение на 1.3 секунды после каждого движения
Результат:
- успели квалифицировать на исследовательском проходе. Время - 93 секунды
- не успели попробовать воспроизведение. Предполагаемое время - около 40 секунд
- заняли 20 место, прошли в финал.
Команды попробуют управление робомышью в усложненном лабиринте, смогут доработать свой алгоритм на месте или написать заново. В ходе финала будут определены 9 команд с лучшим временем прохождения лабиринта, которые выйдут в Суперфинал
Задача:
- На физическом роботе, прохож до центра лабиринта на время
- Встроенные команды управления или прямое ШИМ управление
- Новые двигатели с энкодерами
- Новая прошивка
Ограничения:
- 4 удаленных сессии по 1 часу
- 11 часов с физическом роботе в ночь перед финалом
- 15 минут для показания лучшего времени на лабиринте во время Фестиваля
Облегчения:
- возможность хардкода маршрута робота
- возможность ручного управления роботом
Сложности:
- ужасно нестабильная прошивка робота на старте. Фактически, все онлайн сессии оказались бесполезны из-за непредсказуемого поведения робота. Встроенные команды ехали почти в случайную сторону. Прямое ШИМ управление иногда включало двигатели в разное время. Датчики 2 из 10 измерений выдавали ошибку.
- Датчики не видят стену на расстоянии больше 1.5 клеток, видят пол
- доработка прошивки другими участниками исправила быстродействие датчиков, исправила управление ШИМ, добавила опрос энкодеров в API
Сложности из-за сборки робота организаторами:
- наша команда получила робота на 8 часов позже обещанного
- у нашего робота работал только задний датчик расстояние, остальные 5 либо отсутствовали, либо смотрели внутрь корпуса робота и были бесполезны
- у нашего робота направления подключения моторов было перепутано (вперед = назад и наоборот)
- отсутствие запасного аккума для длительных тестов
- отсутствие обещанных резиновых колес, предоставленные пластиковые скользили при любой нагрузке
Решение:
- использование прошивки от других участников вместо официальной
- отказ от использования датчиков расстояния, кроме заднего
- использование гироскопа для поворотов
- использование энкодеров для точного движения
Из-за малого количества времени из-за позднего получения робота (в 22:30, финал в 10 следующим утром), данный вариант реализован в полноценном виде не был. Разница в хакарактеристиках материала нашего самодельного лабиринта и финального сбила все коэффициенты.
Однако, главной проблемой мы считаем помехи от 136!!! других сетей WIFI на площадке во время финала. Управление роботом по WIFI имело огромную и непредвиденную задержку.
В результате нам пришлось использовать ручное управление, написанное за 10 минут до нашего забега.
Результат
- время ручного забега - около 180 секунд
- не прошли в суперфинал
Сложности:
- Дым и пиротехника, мешающие датчикам расстояния
- Вращающиеся стенки
К сожалению, мы не вошли в суперфинал