Вчера заметил здесь же на хабре объявление о соревновании от МТС — сейчас как раз идёт отбор, до 15 числа можно влиться. Точнее их там даже два — алгоритмическое и «программирование роботов». Я продрался сквозь регистрацию и сейчас немного расскажу что внутри, чтобы вы могли легче решиться попробовать (или наоборот).
Сайт честно говоря немного расфуфыренный и невнятный, поэтому я не сразу нашёл даты — и не особо понял, что требуется для участия в роботах.
Регистрация скорее всего вас неприятно поразит — не спрашивают разве что размер труселей 🙂 Вряд ли столько данных следует собирать для отбора онлайн.
Алгоритмический трек
Для квалификационного раунда выложено три задачи, нужно решить хотя бы одну. Задачи буквально на несколько строчек, я сдал на питоне хотя не очень был уверен в своих скиллах в нём — всё зашло с первой попытки. Однако какой-нибудь плашки что я квалифицировался — по-моему нигде не нахожу. Код задач впрочем сохранён — возможно он будет окончательно верифицирован 16 числа по окончании приёмки задач. В общем, тут больше делать нечего.
Заметил краем глаза что Go версии 1.19 — учитывая что в версиях 21-23 подвезли многие приятные ништяки, непонятно что помешало организаторам установить у себя компилятор посвежее.
Программирование роботов
Здесь всё гораздо более насосно 🙂 В интерфейсе для решения задачи сверху ссылка на «дополнительные материалы» — ну я думаю, что-то скачать для локального запуска придётся.
О-о-о, переходя по этой ссылке мы попадаем на другой вообще домен (cybertech.ai) с плашкой «авторизоваться через True Tech Arena». Мудрено, но да ладно.
На что нужно обратить внимание — ваш токен. Он понадобится в дальнейшем, но вспомнить на какой странице его искать — это может быть проблематично.
Здесь нужно скачать бандл на 260 мегабайт. Внутри вы найдёте некую приложеньку которая запускает локальный сервер с АПИ робота и сваггером.
Фиг знает почему таким путём пошли — казалось бы, ну запустили бы это незамысловатое АПИ на своём публичном сервере. Зачем всем N участникам качать этот страх — а самим разработчикам упарываться над инструкциями и поддержкой?
Дальше всё приблизительно понятно — нужно делать вызовы к АПИ чтобы двигать робота, и как указано в задании выше — например, определить конфигурацию лабиринта. Тут главное не запутаться в вызовах, т.к. они на все задачи и на разные способы запуска похоже.
Например я запустил версию No UI — и не сразу понял почему АПИ меня посылает к лешему (утверждая что «нет робота» или как-то так). Оказывается нужно было найти другие методы — по странице сваггера они в самом конце.
Попробуем их и посмотрим формат ответа. Если вы не очень знакомы со сваггером (или с данной версией) то в первые секунды можно задуматься что же тут нажать. Открываете нужный эндпойнт, находите справа кнопку «Try it out» — после этого поля для ввода токена (и параметров, если они есть) станут доступны. Введите, после чего нажмите синенькую «Execute».
/robot-python/restart
— я вызвал вначале, хотя возможно он в начале не требуется. Почему эндпойнты для «No UI» называются robot-python
я не знаю. В тексте эндпойнты называются на нашем родном наречии «ручками», что заставляет задуматься когда же дойдут до переименования небогоугодных словечек вроде «файл» или «сервер».
/robot-python/sensor-data
— возвращает текущее положение робота и что он «видит», например:
{ "down_x_offset": -107.9, "down_y_offset": -124.5, "front_distance": 5, "back_distance": 5, "left_45_distance": -1, "right_45_distance": -1, "left_side_distance": 5, "right_side_distance": 38.3, "rotation_pitch": 0, "rotation_yaw": 0, "rotation_roll": 0 }
Как видим, с непривычки такое обилие данных может немного смутить. Первые два поля — это так завуалированно обозвали координаты в лабиринте. Следующие шесть — расстояния измеренные датчиками в каждом из направлений до стены, если она видна поблизости. Значение «-1» предположительно означает что датчика такого нет. Пространственные углы ориентации (последние три) вам наверное не понадобятся по крайней мере для первой задачи (меняться будет только rotation_yaw
— при поворотах).
/robot-python/forward
— попытка двинуться вперед из положения указанного выше ни к чему не приводит — sensor-data возвращает неизменную позицию. Ага, понятно — потому что у нас перед носом была стенка.
/robot-python/right
— попробуем повернуться назад — увидимо что координаты остались те же, а вот расстояния до стен поменялись, по-видимому, релевантно повороту на 90 градусов. Это подтверждается тем что rotation_yaw
меняет значение на 90
.
После этого повторный /forward
срабатывает и мы уже где-то в новой точке.
{ "down_x_offset": -91.3, "down_y_offset": -124.5, "front_distance": 21.6, "back_distance": 21.6, "left_45_distance": -1, "right_45_distance": -1, "left_side_distance": 5, "right_side_distance": 5, "rotation_pitch": 0, "rotation_yaw": 90, "rotation_roll": 0 }
Видим что ddown_x_offset
уменьшился — мы сдвинулись в сторону центра лабиринта — а вот down_y_offset
остался прежним — ну это нормально, мы ведь проехали строго вдоль оси X
.
Заключение
В общем, пользоваться можно! Возможно даже немного развлекательно (задачи с роботом) — но вероятно потребуют у вас хоть час-другой времени чтобы просто раскурить что тут делать надо. Кроме условия задачи технические вопросы можно найти, кажется, только в FAQ, вперемежку с нетехническими. Токен например видимо нужно хардкодить (почему было не сделать через ENV и не включить это в примеры кода — я не знаю).
Если будете пробовать — поделитесь пожалуйста тоже — интересно обменяться мнениями 🙂
ссылка на оригинал статьи https://habr.com/ru/articles/849886/
Добавить комментарий