posted on 2025-11-16
Как и обещал, начинаю серию постов про хакатон MTS True Tech 2025. Это технический хакатон, который разделен на две части. Первая часть алгоритмическая, а вторая часть робототехническая. Участвовать можно только в какой-то одной. Я решил попробовать себя в робототехнике. При этом опыта на момент старта было примерно ноль. Никогда раньше ничего не делал для роботов и было очень интересно попробовать.
Хакатон начался в сентябре, но присоединился я к нему только лишь в начале октября, пропустив довольно большое количество времени просто из-за того, что в сентябре участвовал в другом хакатоне, лидеры цифровой трансформации, да и не было полной уверенности еще в том, что я хочу попробовать себя в робототехнике. MTS TrueTech состоит из нескольких этапов.
Первый этап, отборочный, представлял собой три задачи, которые нужно было решить. В каждой задаче требовалось управлять роботом внутри симулятора. При этом код можно было писать на любом языке и, конечно, я выбрал в качестве языка Common Lisp. Было интересно попробовать, как вообще на нем можно делать что-то для роботов.
Cоздатели MTS TrueTech подготовили для участников специальную прослойку, которая позволяла запускать код, управляющий роботом, как отдельный процесс, и она могла взаимодействовать с симулятором, получая от него информацию и подавая управляющие воздействия на робота.
На видео, которое приложено к этому посту, видно одно из моих первых решений. Это решение для первой задачи, первого отборочного этапа, где нужно было проехать роботом из одной виртуальной комнаты в другую, обойдя все препятствия. Мы называли эту задачу "уточки", потому что робот стартовал из тупика ограниченного игрушечными уточками.
В этом решении участникам заранее организаторы сказали, что можно, в общем-то, и захардкодить путь робота. Это я и пытался сделать почти неделю – хотел написать алгоритм, который проведет робота по точкам. Но дело осложнялось тем, что у робота была большая инерция, а так же не было точных координат этого робота. Из-за этого он постоянно пролетал мимо точек, либо доворачивался не на тот угол, который нужно. В итоге, к концу трека робот часто сбивался c пути и не выходил на заданную точку – до центра второй комнаты, где нарисован белый прямоугольник.
Затем мне один из участников в чате подсказал, что на самом деле нужно использовать другой подход. Я переключился на другой подход и сделал решение не за неделю, а всего за полдня. В этот раз робот ехал ориентируясь на лидар.
Лидар это такое устройство, которое с помощью лазера измеряет расстояние до других объектов. Вот у робота был такой лидар, который направлен вперед. И по этому лидару я замерял расстояние до стен. Причем использовал всего три точки лидара. Одну, которая смотрит прямо, и два крайних луча, которые смотрят под 45 градусов. Я написал специальный DSL-чик на Лиспе, который позволяет описать последовательность условий, при которых нужно изменять управляющее воздействие на робота.
И с помощью такого нехитрого алгоритма робот гораздо более стабильно начал доходить до цели. При чём мой робот проехал уровень достаточно быстро, чтобы попасть на 45 строчку лидерборда из 124 участников!
Если вам интересно, напишите в комментариях, и я следующим постом приложу ролик, который показывает, как робот ехал по новому алгоритму, и покажу кусочек кода того, как выглядел на DSL для описания шагов робота.
This blog covers learning, ai, automation, voice, holism, ideas, zerocoder, python, codeassistant, aider, cursor, llm, project, i18n, commonlisp, poftheday, projects, closed, tips, seo, telegram, bot, прототип, smarthome, yandexcloud, logging, software, thoughts, programming, hackathon, mtstruetech, robotics, salebot, bots, notes, emacs, lisp, infrastructure, news, lispworks, life, mcp, sql, yandex, cloud