Lego Mindstorms EV3 и отслеживание линии
Среда моделирования Simulink позволяет сделать очень много интересных проектов, и сегодня, я надеюсь, мы разберем один из них: моделирование движения по линии робота Lego Mindstorms EV3. Также в проекте была реализована модель удаленного управления роботом через Simulink (режим External mode).
Итак, давайте начнем по порядку. Проект состоит из нескольких моделей, отличающихся друг от друга:
- Первая модель, EV3-Tracker_fullmodel, где реализовано отслеживание линии роботом в режиме External mode а также две модели в Simulink: движение робота по дороге и по линии.
- Вторая модель. EV3-Tracker_hostmode, где реализовано удаленное управление роботом через среду Simulink (External mode)
Вспомогательные модели: - Третья модель, EV3-Tracker_linetracking - реализовано отслеживание линии роботом в режиме Host mode, также был подобран ПИД-контроллер.
- Четвертая модель, EV3-Tracker_linetracking_without_PID - реализовано отслеживании линии роботом в режиме Host mode, но здесь уже нет ПИД-контроллера, алгоритм работает на конечных автоматах, которые были составлены в среде StateFlow.
Рассмотрим главные модели подробнее:
1. Первая модель
В данной модели есть возможность смоделировать движение робота по дороге и по линии, в среде Simulink (кнопки Simulink Road и Simulink Line), которые перестраивают модель в необходимый вид. Также есть возможность управлять сигналом по скорости черезе Control Block.
В блоке Execution Block реализована обратная связь по датчику цвета, где мы сравниваем уставку (промежуточное значение света между белым и черным) со значением, которое показывает датчик цвета, и передаем его на ПИД-контроллер. Дальше сигнал идет на двигатели (блок Robot System).
Блок Robot System содержит в себе две модели, одну из которых мы разберем ниже:
Simulink Model:
Реализует алгоритм движения робота по линии и по дороге, данные блоки находятся внутри блока ColorSensor => regionTracker.
Отличие у этих блоков : различные реализации датчика цвета, отдельно для движения по прямой линии и отдельно для движения по дорожке.
Также на данной схеме можно увидеть моторы EV3, содержащие в себе передаточную функцию двигателя, и преобразователь выходных данных с моторов в м\сек. После этого в блоке RobotPoseEstimation решается прямая задача кинематики и оценивается местоположение робота в пространстве, что используется для дальнейшего моделирования движения робота в блоке Robot Visualizer1, который содержит в себе карту местности (Occupancy Grid). Для линии и дороги используются отдельные карты.
К примеру, нажав на верхнем уровне модели кнопку "Simulink Road", и запустив модель кнопкой "Run" , мы увидим следующую карту и движение робота :
Нажав на кнопку "Simulink Line" и проделав те же действия, что и выше, получим следующие карту и движение робота:
Как можно заметить, робот выполняет поставленные задачи. Что же делать теперь?
Запуск алгоритма на роботе
Теперь мы, имея модель робота в среде Simulink, примерно представляем, как он должен двигаться, и можем загрузить данный алгоритм непосредственно в робота.
Для этого на верхнем меню модели включим модель EV3, нажав на кнопку "Run on EV3".
Можно заметить, что картинка блока RobotSystem изменилась. Кликнув по этому блоку два раза, мы увидим, что система переключилась на подсистему "RealModel", зайдя в нее, мы увидим, что теперь мы имеем дело с блоками из библиотеки для Lego Mindstorms EV3.
Запустить данную модель на роботе довольно просто:
Для этого на вкладке HARDWARE необходимо в графе PREPARE найти значок Hardware Settings и кликнуть по нему.
Мы увидим следующее окно,где Вам необходимо перейти на вкладку Hardware Implementation и выбрать в выпадающем списке Hardware board LEGO MINDSTORMS EV3, а внизу, в поле Hardware board settings => Target hardware resources настроить подключение к вашему роботу, указав предпочитаемый способ подключения к роботу, его ID и IP adress (если используется wi-fi подключение)
После проделанных действий закройте данное меню и убедитесь, что во вкладке HARDWARE в графе HARDWARE BOARD указан именно LEGO MINDSTORMS EV3.
Теперь, указав все необходимые параметры, можно запустить данную модель на роботе в режиме External mode, нажав на кнопку Monitor & Tune. Но перед этим не забудьте поставить робота на дорожку =)
Готово! Теперь ваш механический друг выполняет поставленную Вами задачу.
2. Вторая модель
EV3-Tracker_hostmode, где реализовано удаленное управление роботом через среду Simulink (External mode). Данную модель можно увидеть на рисунке ниже:
Как мы видим, в данной модели есть все, что нужно, для управления роботом: алгоритм, основанный на конечных автоматах (инструмент StateFlow), который позволяет управлять роботом с помощью панели управления (Driving panel), с помощью которой можно включать\выключать робота, регулировать сигнал скорости, указывать направление движения(прямо\назад и влево\прямо\вправо).
Так выглядит реализованный алгоритм конечных автоматов:
Начало алгоритма идет от лока Straight (Движение прямо), где мы видим, что скорость левого мотора равна speed*fwd*on( сигнал скорости, направление движения, вкл\выкл соответственно), поэтому данная формула позволяет менять направление движения (прямо\назад) и останавливать робота, если был подан сигнал выключения.
Далее, в зависимости от сигнала, идущего от переключателя направления Direction, состояние робота меняется.
Теперь можно заняться самым увлекательным : управлением робота!
Для этого нужно выполнить все те же самые шаги, что мы делали выше для первой модели: настроить подключение к нашему роботу.
Выполнив все необходимые действия, можно запустить данную модель на роботе, нажав на кнопку Monitor & Tune.
Готово! Теперь вы можете управлять своим роботом через панель управления (Driving Panel) и наблюдать за изменением параметров:
3. Загрузка проекта
Данный проект вы можете скачать себе в MATLAB, выполнив следующие действия:
Выполните в MATLAB
eval(webread('https://git.io/Jv24V'))
ИЛИ
1. Скачайте архив по ссылке
2. Распакуйте
3. Откройте в MATLAB файл EV3-Tracker.prj
Спасибо за внимание!
Надеюсь, данная тема была интересна для Вас=)
Комментарии
А с NXT 2.0? будет работать?
К сожалению, NXT больше не поддерживается MATLAB/Simulink.