Лабораторный практикум №3 по LEGO MINDSTORMS NXT
Целью данного урока является написание кода, с помощью которого можно будет считывать состояние мотора робота NXT и заставить моторы двигаться, используя инструментарий LabVIEW NXT.
Примечание: Перед началом работы выполните инструкции из Лабораторного практикума №1, чтобы убедиться в возможности соединения робота NXT с PC через Bluetooth.
РАЗДЕЛЫ
А. Считывание состояния мотора робота NXT
В. Написание кода для управления моторами робота NXT
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
• Lego Mindstorms NXT
• NI LabVIEW с Lego NXT инструментарием
АППАРАТНЫЕ СРЕДСТВА
• Lego Mindstorms NXT Tribot
• Ноутбук или компьютер с D-Link Bluetooth DBT-120 аппаратным ключом
ЧАСТЬ A: СЧИТЫВАНИЕ СОСТОЯНИЯ МОТОРА РОБОТА NXT
1. Для экономии времени будем работать не с нуля, а изменим код из предыдущего лабораторного практикума №2. Откройте файл, который создан в части В. Удалите весь код в структуре цикла с условием продолжения, кроме кнопки STOP.
2. Выберите NXT Direct Commands>> Output>>Get Output Values и поместите в структуру цикла с условием продолжения. Соедините информацию об NXT Object и error информацию этих VI значков.
3. Щелкните правой кнопкой мыши по второму входному порту VI иконки Get Output Values, то есть Output Port (Port A), и выберите Create>>Control в контекстном меню. По умолчанию мотор A подключится к выходному порту А NXT-блока. Пользователи могут считывать различные состояния мотора, изменяя значения настроек.
4. Щелкните правой кнопкой мыши по второму выходному порту VI иконки Get Output Values, то есть Output Port Info, и выберите Create>>Indicator в контекстном меню.
5. Соедините информацию об NXT Object и error информацию VI иконок Get Output Values и Destroy NXTObject.
6. Теперь можно запустить программу и получить обновляющееся состояние мотора. Повращайте мотор руками и наблюдайте за значениями индикатора на фронтальной панели.
7. Для улучшения кода таким образом, чтобы программа останавливала выполнение цикла, если в процессе возникала бы какая-нибудь ошибка, щелкните правой кнопкой мыши по error соединению в структуре цикла с условием продолжения. Выберите Cluster, Class, & Variant Palette>>Unbundle By Name в контекстном меню. Поместите его в структуру цикла и проведите к нему error связь.
8. Щелкните правой кнопкой мыши по зеленой штриховой линии связи в структуре цикла. Выберите Boolean Palette>>Or в контекстном меню и поместите в структуру цикла с условием продолжения.
9. Удалите зеленую штриховую линию связи и повторно соедините провода, как показано ниже:
10. С такой настройкой программа прекратит работать, если возникнет какая-либо ошибка или будет нажата кнопка STOP.
11. Добавьте в структуру цикла задержку в 40 мс для предотвращения занимания кодом всего ресурса ЦП. Щелкните правой кнопкой мыши по любому пустому месту в окне даиграмм, выберите Programming>>Timing>>Wait Until Next ms Multiple в контекстном меню и поместите в структуре цикла с условием продолжения. Щелкните правой кнопкой мыши по входному порту этого значка задержки и выберите Create>>Constant. Введите значение 40.
12. Написание кода для считывания состояния мотора закончено. Фронтальная панель должна выглядеть подобным образом:
Измените код так, чтобы последовательно считывать состояния моторов A, B, C в цикле с условием продолжения.
ЧАСТЬ B: УПРАВЛЕНИЕ МОТОРАМИ РОБОТА NXT
1. Откройте файл, созданный в части A. Удалите связи между VI иконками Get Output Values и Destroy NXTObject. Выберите и поместите следующие два VI значка в структуру цикла с условием продолжения из палитры функций NXT Direct Commands>>Output>>Set Output Values и NXT Direct Commands>>Utilities>>Keep Alive. Выберите NXT Direct Commands>>Output>>Motor Stop и поместите его вне цикла. Соедините эти VI значки следующим образом:
2. Соедините иконку Output Port (Port A) со значками Set Output Values и Motor Stop так:
3. Щелкните правой кнопкой мыши по третьему входному порту VI значка Set Output Values, то есть Output Port Info и выберите Create>>Control в контекстном меню.
4. Переименуйте Output Port Info 2 в Set Output Port Info. Переименуйте индикатор Output Port Info в Read Output Port Info.
5. Вид фронтальной панели должен выглядеть следующим образом:
6. Нажмите кнопку Run на панели инструментов и обнаружите, что мотор не будет двигаться (поскольку для него не задана соответствующая установка в элементе Set Output Port Info).
7. Щелкните по элементу управления RunState и поменяйте значение с RUN_STATE_IDLE на RUN_STATE_RUNNING.
8. Щелкните по элементу управления Mode и измените значение с COAST на MOTOR ON | BRAKE | REGULATED.
9. Нажмите на элемент Power и поменяйте значение от 0 до 10.
10. Из меню окон выберите Edit>>Make Current Values Default.
11. Сохраните код для будущего использования. Теперь можно нажать кнопку Run на панели инструментов и увидеть, что мотор вращается до тех пор, пока не нажмете кнопку STOP.
Измените код таким образом, чтобы одновременно управлять моторами B и C.