Вчера заметил здесь же на хабре объявление о соревновании от МТС - сейчас как раз идёт отбор, до 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 и не включить это в примеры кода - я не знаю).
Если будете пробовать - поделитесь пожалуйста тоже - интересно обменяться мнениями :)
forester2k
Меня это тоже удивило. Немного потыркавшись увидел, что внизу каждой решённой задачи есть подпись "Ответ принят". Это, конечно, не то, ну да ладно, хоть что-то.