Внешний видмобильного робота LEGO Mindstormsс датчикамикасания |
Цель занятия: создать виртуальный прибор-программу в среде LabVIEW, использующую вложенные логические структуры Case и предназначенную для управления мобильным роботом LEGO Mindstorms, обходящим встречные препятствия при помощи двух датчиков касания (нажатия).
Идея и алгоритм программы. Для практического решения задачи используется трёхколёсный LEGO-робот с двумя ведущими задними колесами, сервоприводы которых (исполнительные органы объекта управления) подключены к портам микрокомпьютера NXT. Информацию о появлении препятствия робот получает от двух датчиков касания, расположенных в его передней части и тоже подключённых к портам микрокомпьютера.
В собранной для лабораторного занятия конструкции робота (см. рис.):
- с левой стороны по ходу движения размещёны:
- датчик касания № 1, подключённый к порту 3 микрокомпьютера;
- колесос сервоприводом, подключённым к порту Амикрокомпьютера;
- с правой стороны по ходу движения размещёны:
- датчик касания № 2, подключёный к порту 4 микрокомпьютера;
- колесос сервоприводом, подключённым к порту С микрокомпьютера.
<p>Требуется разработать в среде LabVIEW управляющую программу (виртуальный прибор), обеспечивающую объезд роботом встречных препятствий. Остановка робота должна произойти через заданное время.
Программа управления движением такого робота должна обеспечивать выполнение следующих действий в каждой из 4-х возможных ситуаций, возникающих при движении робота среди препятствий:
- ситуация 1 – контакта с препятствием нет – датчики не срабатывают;
- ситуация2 – контакт с препятствием, расположенным перепендикулярно вектору скорости робота – оба датчика срабатывают одновременно;
- ситуация 3 – контакт с препятствием слева по ходу движения робота – срабатывает левый датчик (№ 1);
- ситуация 4 – контакт с препятствием справа по ходу движения робота – срабатывает правый датчик (№ 2).
Для обхода препятствия, встреченного роботом при движении в направлении I, он должен совершить соответствующий манёвр II – отъехать немного назад, а затем продолжить прямолинейное движение в направлении III (см.рис.).
В каждой из перечисленных ситуаций, чтобы объехать встречные препятствия, робот должен совершить соответствующий манёвр (отреагировать на нажатие датчиков) за счет включения управляющей программой того или иного сервопривода. Перечень этих манёвров приведён в следующей таблице:
Датчик № 1 нажат ? | Датчик № 2 нажат ? | |
н е т | д а | |
Н Е Т | СИТУАЦИЯ 1 Препятствиявпереди нет – Манёвр не нужен! Моторыпродолжают работать синхронновперёд ( = ). | СИТУАЦИЯ 4 Препятствие справа– ОТЪЕЗД НАЗАДВПРАВО: моторы работают синхронноназад, . |
Д А | СИТУАЦИЯ 3 Препятствие слева–ОТЪЕЗД НАЗАДВЛЕВО: моторы работают синхронноназад, . | СИТУАЦИЯ 2 Препятствие – прямо по курсу – ОТЪЕЗД НАЗАД: моторы работают синхронно назад ( ) или ( ). |
Программа управления движением таким роботом требует использования в среде LabVIEW вложенных логических структур Case (Выбор).
ИнструментCase (Выбор) среды LabVIEW доджен «научить» робота принимать решение и является аналогом условного оператора (оператора ветвления) If традиционных языков программирования высокого уровня (Паскаль и др.). В данной программе оператор выбора Case, в отличие от оператора If, оперирует не логическим выражением, а переменной-селектором. По ходу выполнения оператора Case, значение переменной-селектора (в данном случае оно зависит от того, нажат датчик или нет) сравнивается с метками-значениями (1и0). Как только совпадение будет найдено, выполняется набор команд для данной метки и происходит выход в основную ветку программы. Если совпадений не будет, то выполняется альтернативный блок.
Последовательность разработки в среде LabVIEW виртуального прибора:
1.Определим набор параметров задачи:
- общее время Т движения робота до принудительной остановки (в миллисекундах);
- мощность NБ «быстрого» мотора при отъезде робота от встретившегося препятствия (для манёвра IIна рис. 2 – это мощность мотора А);
- мощность NМ «медленного» мотора при отъезде робота от встретившегося препятствия (для манёвра IIна рис. 2 – это мощность мотора С).
2. Разместим структуру «циклWhile» (см. ЛЗ-2) и оформим условие выхода из цикла после окончания заданного времени (для примера: 30 секунд = 30000 msec) движения робота. Кроме уже известных элементов блок-диаграммы, используем элементы Reset Timer и Read Timer .
Они размещены среде LabVIEW по адресу:
Function NXT Robotics NXT I/O
Complete Sensors.В результате циклWhileимеет следующий первоначальный вид.
3. Разместим на блок-диаграмме структуруCase датчика 1 (Port 1), которая состоит из двух поддиаграмм вариантов и отражает две ситуации по датчику 1:
нажат –Trueи ненажат –False.
СтруктураCase размещена по адресу:
Function NXT Robotics NXT Programming Structures.
На верхней стороне рамки элемента Case расположен переключатель вариантов поддиаграммы (True / False), срабатывающий при нажатии мышкой на любой из стрелок по обеим сторонам обозначения варианта.
Промежуточный вид программы со структурой Case 1-го датчика (ещё не заполненной командами моторам робота) выглядит следующим образом для обоих вариантов поддиаграммы.
4.Следующий шаг программирования: внутрь структуры выбораCase датчика1 (Port 1) вставляем аналогичную структуру выбораCase для датчика 2 (Port 2). При этом не принципиально, какая структра из двух (датчика 1 или датчика 2) будет внешней, а какая – внутренней, так как в данной задаче нет предпочтительного поведения робота на реакцию датчика.
В результате создания двух структур Case с двумя поддиаграммами вариантов обеспечена возможность реализовать алгоритм управления роботом для 4-х (2х2=4) ситуаций, приведённых в таблице.
5.Заполним каждую поддиаграмму тем набором команд управления моторами, который соответствует конкретной ситуации из таблицы, и обеспечим остановку обоих моторов после окончания выполнения программы.
Итоговый вид виртуального прибора, управляющего движением робота, обходящим препятствия с помощью датчиков касания (нажатия) для конкретных (для примера) параметров задачи:
- общая продолжительность движения робота по программе Т = 30000 миллисекунд;
- маршевая синхронная мощность моторов вне препятствий NМ = 75 ;
- продолжительность манёвра (отъезда II) робота t = 1200 миллисекунд;
- мощность «быстрого» мотора при объезде препятствияNБ = 90 ;
- мощность «медленного» мотора при объезде препятствияNМ = 20;
имеет вид, представленный на последующих страницах.
Примечание:
В поддиаграмме False для датчика 1 и False для датчика 2 (ситуация 1 в таблице) следует применить вместо команды включения всех (All Ports) моторов вперёд другую функцию (см. рисунок справа). Эту функцию можно найти на пути Function NXT Robotics NXT I/O Complete Motors Steering On .
Данная функция относится к двум из трёх моторов, подключённых к NXT, и предназначена для обеспечения с помощью параметра Steering максимально возможной прямолинейности траектории движения робота.
Параметр «подруливания» Steering (регулирование) задаётся в качестве константы в нижней части пиктограммы. Если, например, Steering = -100, то быстрее будет работать мотор порта, указанный слева (А на рисунке). Если задать Steering = 100, то быстрее будет работать мотор порта, расположенный справа (С на рисунке). Если задать Steering = 0 (как рисунке), то моторы будут работать синхронно, а траектория движения робота будет строго прямолинейной.
6.
Статьи к прочтению:
Датчик касания
Похожие статьи:
-
Оснащенного датчиком освещенности
Цель занятия: создать виртуальный прибор-программу в среде LabVIEW, предназначенную для управления мобильным роботом LEGO Mindstorms, движущимся при…
-
Вкладка датчики управляет параметрами отслеживания движений головы
Чувствительность вращения позволяет настроить каждую ось по отдельности Yaw– повороты головы влево/вправо Pitch – наклоны головы вверх/вниз Roll– наклоны…