Как-то раз я имел неосторожность оговориться в одном из комментариев, что строю автономную гоночную RC машину, после чего на меня подписалось сразу несколько человек. Специально для них (а также немного для себя, чтобы как-то структурировать огромный поток входящей информации по теме) я решил написать несколько заметок.
Если кто-то подумал, что мне не дают покоя лавры небезызвестного Джорджа Френсиса Хоца aka Geohot, то он сильно ошибается. Стимулом и основанием для работы явилась весьма прагматичная причина: в университете, где я волею судеб работаю, требуют не только учить студентов, но и писать “научные статьи”. Заниматься переливанием из пустого в порожнее на какую-нибудь скучную тему ну прямо сильно не хотелось, и я решил поискать что-то свежее, пока не избитое, но достаточно мейнстримное. Соответственно, нашел тему автономных транспортных средств, и увидел, что кое-что здесь можно сделать и коллективом из одного человека.
Договоримся, что пока оставим за скобками полноразмерные автономные автомобили, которые создают waymo, baidu или yandex. Эта задача слишком объёмная, чтобы решать её в одиночку. Когда мы строим гоночный автомобиль (полноразмерный или масштабную модель) всё становится несколько проще: а) трек один и замкнут, б) все едут в одну сторону, в) количество нестандартных ситуаций на дороге сводится к минимуму, г) явные измеримые критерии качества (кто быстрее, тот и молодец).
С начала этого века исследовательские группы и отдельные энтузиасты понастроили весьма большой объём автономных транспортных средств (я не буду тут расписывать уже навязшие в зубах уровни автономности; кому надо - сходит в википедию за ними; здесь и далее будем считать автономными транспортными средствами такие, на траекторию движения которых оператор влияет лишь опосредованно, а не прямыми командами). Их все можно поделить на такие группы:
1. “Жёстко запрограммированные” - устройства, жёстко следующие заложенной программе движения и минимально контактирующие с внешним миром (т.н. “управление без обратной связи”); тупо едут по заданному маршруту, описанному в терминах “10 метров прямо, затем на 30 градусов налево, потом 3 метра прямо”.
2. “Ездящие по линии” - устройства, которые двигаются по заранее физически созданной (чаще - нарисованной, иногда - в виде каких-нибудь инфракрасных меток или радиометок), но заранее не известной, траектории; устройства очень примитивные, в лучшем случае реализуют управление на PID контроллере, потеряв траекторию становятся беспомощными, сильно ограничены по скорости перемещения.
3. “Навигаторы” - устройства, определяющие собственное местоположение относительно препятствий, в идеале - формирующие топологическую карту пространства; могут произвольно “шататься” с целью исследования окружающего пространства или поиска заранее определенных объектов; если у вас есть робот-пылесос, то, скорее всего, это он и есть.
4. “Маршрутные” - самостоятельно простраивают маршрут между заданными путевыми точками (как правило, используется GPS). Это прям отдельная отрасль, в которой совсем другие размеры, подходы и цены. Вот, например, эти ребята (они неверотяно круты, хотя к ним у меня тоже есть вопросы, но об этом как-нибудь позже):
Кроме того, обнаружились интересные работы, связанные с управлением машинками при наблюдении “снаружи”, но мне это показалось не очень масштабируемо и спортивно, хотя результаты там есть впечатляющие:
В итоге сформировалось понимание того, что я хочу от автомобиля:
1. Все решения принимаются на основе данных, собранными бортовыми системами (камеры, лидары, радары, сонары - что угодно, но это должно быть прикручено к машине и ездить с ней).
2. Независимость от GPS (в помещении не особо поездишь).
3. Способность оставаться в пределах заданного (не всегда очевидным образом, например, конусами) кольцевого трека.
4. Способность учитывать нахождение на треке неподвижных и движущихся препятствий и выбирать оптимальную траекторию для избежания контакта с ними, либо самостоятельно принимать решение об остановке.
5. Способность вернуться на трек после схода при наличии его в пределах видимости.
Возможность реализации систем контроля тяги и стабилизации.
Неплохой списочек, правда?
Но, как говорится, всегда найдется человек, который наступил на эти грабли до тебя, и я начал искать уже конкретный проект. И нашёл такой! Не могу сказать, что все пункты там закрыты идеально, но тем лучше - будет о чем самому написать (дописать). Проект называется Berkley Autonomous Race Car ( http://www.barc-project.com/ - не реклама!) и выполнен на основе RC шасси масштаба 1/10. Всё неплохо документировано (хотя, по факту, это не пошаговая инструкция, а, скорее, немного разрозненный набор заметок про сборку) и даже есть большой репозиторий на github. Вообще говоря, это, скорее платформа для доработок и развития типа того, что представлено на видео ниже, но главное - оно живое!
Вообще говоря, есть и читерский вариант: можно купить готовое шасси от JetsonHacks. За 1400$, ага. Без учета самого nvidia jetson. Или готовый проект от MIT (по сути, то же самое) за 4000$.
В следующей серии (если найдутся желающие почитать, конечно): почему нельзя просто взять и собрать машину по инструкции с github, как автомобиль видит мир, и немного трёбуквенной матершины )