В репозитории содержатся инженерные материалы, созданные и использованные командой OSError при проектировании и программировании беспилотного автомобиля для участия в Российской робототехнической олимпиаде 2022 в категории Будущие инженеры.
https://youtu.be/0HV11u2FUfQ - URL-адрес видеоролика на платформе youtube, показывающий автономное вождение автомобиля и его краткий обзор
team_photo
- 2 командные фотографии: одна официальная и одна неофициальная (забавная) со всеми членами командыrobot_photo
- 6 фотографий транспортного средства (со всех сторон, сверху и снизу)Видео
- файл video.md, в котором содержится URL-адрес на видеоролик на платформе youtube, показывающий автономное вождение автомобиля и демонстрацию его отдельных компонентовschematic
- схематические диаграммы всеx электромеханических компонентов (электронные компоненты и двигатели), используемых в автомобиле, и способы их соединения друг с другомsrc
- программный код беспилотного автомобиля.3D модели
- 3D модели для печати, необходимые для производства элементов автомобиля
Наш робот создан для решения задания РРО категории Будущие Инженеры. Его главной задачей является прохождение гоночной трассы с установленными на ней дорожными знаками или смещенными коридорами на время. Дорожные знаки указывают сторону полосы движения, по которой должен следовать автомобиль. Если на пути красный столб - нужно держаться правой стороны полосы. Если зелёный, то левой стороны полосы. Задание считается выполненным, если автомобиль проехал 3 круга. Сбивать или сдвигать с места дорожные знаки - запрещено. Направление, в котором автомобиль должен двигаться по трассе (по часовой стрелке или против часовой стрелки), будет варьироваться в разных матчах. Начальное положение автомобиля, а также количество и расположение дорожных знаков определяются случайным образом во время жеребьёвки перед матчем.
Для движения интеллектуального беспилотного автомобиля используется мотор на 600 оборотов в минуту и потребляющий напряжение в 12 Вольт, соединенный с ведущей осью через дифференциал. Такая конструкция позволяет равномерно распределять крутящий момент мотора между ведущими колесами и обеспечивает надлежащую плавность хода.
Для ориентирования в процессе движения по гоночной трассе наш робот оборудован всеми необходимыми датчиками и сенсорами, а также камерой. Среди них - датчик абсолютной ориентации BNO085. В BNO085 есть свой модуль вычислений, это 32-битное ядро ARM Cortex M0, что позволяет производить большинство расчетов непосредственно внутри BNO085 и пользоваться уже готовыми результатами. Ядро получает данные: акселерометра, гироскопа, магнитометра, производит расчеты и сохраняет результаты. Результаты в дальнейшем могут быть запрошены внешними устройствами.
Для определения цвета дорожных знаков и ориентации используются 2 камеры, оснащенные сенсором SONY IMX-477, подключаются через интерфейс CSI.
Главным вычислительным модулем на роботе является одноплатный вычислительный модуль NVIDIA Jetson Nano. Модуль Jetson Nano — это компактный компьютер на базе ИИ, который обладает производительностью и энергоэффективностью, необходимой для современных задач искусственного интеллекта, параллельной работы нескольких нейронных сетей и одновременной обработки данных с нескольких датчиков высокого разрешения. Поэтому он представляет собой отличное начальное решение для внедрения сложных средств искусственного интеллекта во встраиваемые системы. NVIDIA Jetson Nano обеспечивает потрясающие новые возможности в миллионах компактных энергоэффективных систем ИИ. Решение открывает новые возможности для встроенных IoT-приложений, в том числе для видеорегистраторов начального уровня, домашних роботов и интеллектуальных шлюзов с возможностями аналитики.
Для квалификационного этапа соревнований используется программа . Стратегия прохождения данного этапа – движение вдоль внешней черной стены, используя показания BNO, те придерживаясь курса. После запуска программа инициализирует все необходимые модули, зажигается синий светодиод – робот готов к старту, необходимо лишь нажать кнопку. Далее робот набирает крейсерскую скорость и едет до ближайшей цветной линии. Если линия синего цвета – движение против часовой стрелки, если оранжевого – наоборот. Как только направление движения распознано, задается значение переменной clock: 1 по часовой и -1 против, она будет использоваться при расчете курса BNO. Далее движение продолжается до того, как робот увидит стену впереди себя, после чего требуемый курс BNO меняется на 90 градусов влево или вправо в зависимости от направления движения. Как только робот поворачивает, к счетчику секторов прибавляется 1. Так после 3х кругов, когда значение счетчика равно 12, робот останавливается.
Для финального этапа соревнований используется программа . По большей части она аналогична cvalification.py, но также добавлено распознавание дорожных знаков. Старт, финиш и определение направление движения происходят как на квалификации. В поворотах объезд кубиков производится по пропорционально-дифференциальному регулятору, как только робот замечает кубик и определяет его цвет и позицию – начинается регуляция, причем различная в зависимости от положения знака. На прямых участках трассы регулирование реализовано иначе: используя метод векторов, робот рассчитывает угол отклонения знака от траектории движения, после чего рассчитывает ошибку в зависимости от цвета и положения кубика, своего положения, отклонения от курса, величины угла отклонения знака, которая корректирует курс BNO. Используя функциональную зависимость, калькулируется время маневра, после чего робот меняет свой курс, объезжая знак или приближаясь к нему, в конце маневра возвращаясь на исходную прямую траекторию.
1. Начинаем с нижней рамы и крепления сервомотора
2. Устанавливаем штифты и оси LEGO для крепления других элементов
3. Устанавливаем балки LEGO
4. Устанавливаем сервомотор
5. Устанавливаем элементы рулевой рейки и дифференциал
__6. Втыкаем LEGO штифты __
7. Устанавливаем уголки и балки LEGO
8. Устанавливаем блок с мотором
9. Устанавливаем крепление JETSON NANO
10. Устанавливаем UPS POWER MODULE для JETSON NANO
11. Устанавливаем колеса
12. Устанавливаем servo shield
13. Устанавливаем крепление камер и сами камеры, батарейный блок для мотора
14. Устанавливаем JETSON NANO, верхний блок с кнопкой, светодиодами, датчиком BNO085, DC-DC преобразователь для питания мотора, антенны (при необходимости). Сборка готова
1. Включаем питание Jetson Nano и моторов, дожидаемся полной загрузки. Модуль стартует собственный hotspot с именем w1bot.
2. Заранее скачиваем один из общедоступных IDE с поддержкой удаленного ssh подключения и редактирования кода, например мы используем Visual Studio Code.
3. Выбираем из списка доступных сетей w1bot, подключаемся.
4. После подключения переходим в каталог home/eg4/Documents/NN, находим папку competitions, в ней программы cvalification.py и final.py
5. Устанавливаем робота на полигоне, запускаем нужную программу, ждем, когда загорится синий светодиод, после чего робот готов к старту. Нажимаем на кнопку – происходит старт.
6. При необходимости автозапуска: через консоль редактируем файл startpython.sh, расположенный в каталоге home/eg4. Там раскомментируем строчку с запуском программы, меняем имя на cvalification.py или final.py по необходимости. Таким образом после перезагрузки Jetson Nano программа запустится самостоятельно.