Руководство по программированию nxt

Время на прочтение
6 мин

Количество просмотров 50K

Здравствуйте. В своих статьях я хочу Вас познакомить с основами программирования микрокомпьютера LEGO NXT Mindstorms 2.0. Для разработки приложений я буду использовать платформы Microsoft Robotics Developer Studio 4 (MRDS 4) и National Instruments LabVIEW (NI LabVIEW). Будут рассматриваться и реализовываться задачи автоматического и автоматизированного управления мобильными роботами. Двигаться мы будем от простого к сложному.

Предвосхищая некоторые вопросы и комментарии читателей.

Почему именно NXT Mindstorms 2.0? Потому-что для своих проектов данный набор мне показался наиболее подходящим, т.к. микрокомпьютер NXT полностью совместим с платформами MRDS 4 и NI LabVIEW, а так же данный набор является очень гибким в плане сборки различных конфигураций роботов — затрачивается минимум времени на сборку робота.

Почему платформы MRDS 4 и NI LabVIEW? Так сложилось исторически. Обучаясь на старших курсах университета стояла задача в разработке учебных курсов с использованием данных платформ. К тому же платформы обладают достаточной простотой в освоении и функциональностью, с их использованием можно написать программу непосредственно для управления роботом, разработать интерфейс пользователя и провести тестирование в виртуальной среде (в случае с MRDS 4).

Да кому вообще нужны эти ваши уроки, в сети и так куча проектов по робототехнике! С использованием данной связки (NXT+MRDS 4/NI LabVIEW) учебных статей практически нет, в основном используется родная среда программирования, а в ней совсем все тривиально. Всем кому интересны робототехника, программирование и у кого есть набор NXT (а таких не мало), возрастная аудитория любая.

Графические языки программирования это зло, а те кто на них программируют еретики! Графические языки программирования коими и являются MRDS 4 и NI LabVIEW несомненно имеют свои минусы, например ориентированность под узкие задачи, но все же в функциональности они мало уступают текстовым языкам, тем более NI LabVIEW изначально разрабатывался как язык легкий в освоении для решения научных и инженерных задач, для этого в нем присутствует множество необходимых библиотек и инструментов. По-этому для решения наших задач данные графические языки являются наиболее подходящими. И не надо нас за это

сжигать на костре

презирать.

Все это выглядит по-детски и вообще не серьезно! Когда задача состоит в реализации алгоритмов, в обучении основам и принципам программирования, робототехники, систем реального времени без углубления в схемотехнику и протоколы, то это очень подходящий инструмент хоть и не дешевый (касаемо набора NXT). Хотя для этих же целей неплохо подойдут наборы на базе Arduino, но совместимости с MRDS 4 и NI LabVIEW у данного контроллера почти нет, а в данных платформах есть свои прелести.

Технологии, которые используются, являются продуктом загнивающих капиталистических стран, а автор враг народа и пособник западных заговорщиков! К сожалению, большинство технологий в области электроники и вычислительной техники родом с запада, буду очень рад если мне укажут на аналогичные технологии исконно отечественного производства. А пока будем использовать то, что имеем. И не надо на меня за это

сообщать спецслужбам

держать зла.

Краткий обзор платформ MRDS 4 и NI LabVIEW.

Внесу некоторую ясность в терминологию. Под платформой, в данном случае, имеется ввиду совокупность различных инструментов, например язык VPL в MRDS, а так же среда выполнения приложений, т.е. непосредственной компиляции приложений в исполняемые (*.exe) файлы нету.

В 2006 году Microsoft объявила о создании платформы Microsoft Robotics Developer Studio (более подробно в статье Википедии). MRDS – это Windows – ориентированная среда разработки приложений для робототехники и симуляции. В настоящее время актуальной является версия Microsoft Robotics Developer Studio 4. Среди особенностей: язык графического программирования VPL, Web – и Windows – ориентированные интерфейсы, среда симуляции VSE, упрощенный доступ к датчикам, микроконтроллеру и исполнительным механизмам робота, поддержка языка программирования C#, библиотеки для многопоточного программирования и распределенного выполнения приложений CCR и DSS, поддержка многих робототехнических платформ (Eddie, Boe — Bot, CoroBot, iRobot, LEGO NXT и т.д.).

LabVIEW (Laboratory Virtual Instrumentation Engineering Workbench) — это среда разработки и платформа для выполнения программ, созданных на графическом языке программирования «G» фирмы National Instruments (более подробно в статье Википедии). LabVIEW используется в системах сбора и обработки данных, а также для управления техническими объектами и технологическими процессами. Идеологически LabVIEW очень близка к SCADA-системам, но в отличие от них в большей степени ориентирована на решение задач не столько в области АСУ ТП (автоматизированные системы управления технологическим процессом), сколько в области АСНИ (автоматизированных систем научных исследований). Графический язык программирования «G», используемый в LabVIEW, основан на архитектуре потоков данных. Последовательность выполнения операторов в таких языках определяется не порядком их следования (как в императивных языках программирования), а наличием данных на входах этих операторов. Операторы, не связанные по данным, выполняются параллельно в произвольном порядке. Программа LabVIEW называется и является виртуальным прибором (англ. Virtual Instrument) и состоит из двух частей:

  • блочной диаграммы, описывающей логику работы виртуального прибора;
  • лицевой панели, описывающей интерфейс пользователя виртуального прибора.

Краткий обзор набора LEGO NXT Mindstorms 2.0.

Комплект NXT состоит из управляющего блока, четырех датчиков и трех сервоприводов. Управляющий блок содержит в себе:

  • 32-битный микроконтроллер AVR7 с 256 КБайт FLASH памяти и 64 КБайт RAM памяти;
  • 8-битный микроконтроллер AVR c 4 Кбайт FLASH памяти и 512 Байт RAM памяти;
  • радиомодуль Bluetooth V 2.0;
  • USB-порт;
  • 3 разъема для подключения сервоприводов;
  • 4 разъема для подключения датчиков;
  • LCD дисплей разрешением 99×63 пикселей;
  • динамик;
  • разъем для 6 батареек типа AA.

Датчики (в разных комплектациях разные наборы датчиков ):

  • ультразвуковой датчик;
  • два тактильных датчика (датчики касания);
  • датчик опредения цвета.

Рисунок 1 — Микрокомпьютер NXT с подключенными датчиками и приводами

И конечно же в наборе находятся разнообразные детали LEGO в форм-факторе LEGO Technic из которых будут собраны исполнительные механизмы и несущая конструкция.

Рисунок 2 — Детали в форм-факторе LEGO Technic

Пишем первое приложение.

Напишем первое приложение. Пусть, классически, данное приложение выводит текст “Hello, World!”. Реализация будет происходить поочередно в MRDS 4 и NI LabVIEW, в процессе будем рассматривать специфику каждой платформы.

Предварительно инсталлируем платформы MRDS 4 и NI LabVIEW, в случае с MRDS 4 инсталляция должна проводится в папку путь к которой не состоит из кириллицы (русских букв), учетная запись пользователя так-же должна состоять только из латинских букв.

1. Платформа MRDS 4.

Запускаем среду VPL (Меню Пуск — Все Программы — Microsoft Robotics Developer Studio 4 — Visual Programming Language). Данная среда позволяет разрабатывать приложения на языке VPL, проводить тестирование в виртуальной среде VSE. Программа в VPL представляет собой диаграмму, состоящую из соединенных между собой блоков. В открывшемся окне, помимо стандартной панели команд и меню, присутствует 5 основных окон:

  1. Basic Activities – содержит базовые блоки, которые реализуют такие операторы как константа, переменная, условие и т.д.;
  2. Services – содержит блоки, предоставляющие доступ к функционалу платформы MRDS, например блоки для взаимодействия с какой-либо аппаратной составляющей робота, или блоки для вызова диалогового окна;
  3. Project – объединяет диаграммы входящие в проект, а так же различные конфигурационные файлы;
  4. Properties – содержит свойства выделенного блока;
  5. Diagrams window – содержит, непосредственно, диаграмму (исходный код) приложения.

Рисунок 3 — Среда программирования VPL

Выполним следующую последовательность действий:

  1. добавим блоки Data (из окна Basic Activities) и блок сервиса Simple Dialog (из окна Services),
  2. в блок Data введем “Hello, World!” (без кавычек) и выберем тип данных String,
  3. соединим блок Data с блоком Simple Dialog, появиться диалоговое окно,
  4. далее, все выполняем как на рисунках
  5. Рисунок 4 — Окно Connections

  6. Рисунок 5 — Окно Data Connections

  7. Рисунок 6 — Законченный вид диаграммы

  8. Запустим программу на выполнение.

    Рисунок 7 — Результат выполнения программы

2. Платформа NI LabVIEW.

На данной платформе все реализуется, практически, идентично. Запустим среду LabVIEW. Перед нами появиться два окна, первое — Front Panel, предназначено для реализации интерфейса пользователя (внешнего вида виртуального прибора), второе — Block Diagram, для реализации логики программы.

Рисунок 8 — Окна среды LabVIEW

Мы будем использовать окно Block Diagram. Выполним следующие шаги:

  1. в окне Block Diagram вызовем контекстное меню, нажатием правой кнопкой мыши,
  2. в появившемся окне перейдем по вкладкам, как на рисунке и выберем String Constant,

    Рисунок 9 — Контекстное меню

  3. разместим данный блок и введем «Hello, World!»,
  4. аналогичным образом выберем блок One Button Dialog,

    Рисунок 10 — Блок One Button Dialog

  5. соединим блоки как показано на рисунке,

    Рисунок 11 — Готовая диаграмма

  6. запустим программу, нажав кнопку в виде горизонтальной стрелки на панели задач,

    Рисунок 12 — Результат выполнения программы

Резюме

  • Мы сделали обзор программных платформ для разработки приложений микрокомпьютера NXT.
  • Мы рассмотрели основные принципы разработки приложений в платформах MRDS 4 и NI LabVIEW.
  • Познакомились с интерфейсом сред.

В следующих статьях мы будем заниматься непосредственно программированием NXT. По среде LabVIEW в сети есть много учебных материалов, по VPL гораздо меньше. Очень рекомендую изучить справочное руководство обеих платформ (необходимо знание английского), в данных руководствах очень много примеров которые можно реализовать и не имея NXT, а так же следующие книги:

  • Программируем микрокомпьютер NXT в LabVIEW — Лидия Белиовская, Александр Белиовский,
  • Microsoft Robotics Developer Studio. Программирование алгоритмов управления роботами — Василий Гай.

В своих статьях я буду описывать только свои проекты, т.к. не вижу смысла переписывать информацию из одних источников в другие. Приму любую конструктивную критику, отвечу на любые вопросы касаемо рассмотренных платформ. Заранее спасибо!

#include <string.h>

#include «kernel.h»

#include «kernel_id.h»

#include «ecrobot_interface.h»

#include «trik_studio_utils.h»

#include <time.h>

#include <stdlib.h>

#include <stdio.h>

#include <stdarg.h>

#include <math.h>

U32 __interpretation_started_timestamp__ = 0;

static const float pi = 3.14159265;

void ecrobot_device_initialize(void)

{

srand(systick_get_ms());

}

void ecrobot_device_terminate(void)

{

}

/* nxtOSEK hook to be invoked from an ISR in category 2 */

void user_1ms_isr_type2(void)

{

}

/* Main task */

TASK(TASK_MAIN)

{

__interpretation_started_timestamp__ = systick_get_ms();

TerminateTask();

}

Автор: Daniele Benedettelli

Перевод: © Ботов Антон aka =DeaD=, 2009

Эксклюзивно для www.roboforum.ru
копирование на другие ресурсы и публикация перевода
без разрешения его автора запрещены

Содержание

  • 1 Первая программа
    • 1.1 Постройка робота
    • 1.2 Запуск Bricx Command Center
    • 1.3 Написание программы
    • 1.4 Запуск программы
    • 1.5 Ошибки в программе
    • 1.6 Изменяем скорость
    • 1.7 Подводим итоги

Первая программа

В этой главе я покажу, как написать очень простую программу. Мы запрограммируем робота на движение 4 секунды вперед, 4 — назад и остановку в конце. Не очень впечатляюще, но на этом примере вы сможете получить представления об простейших способах программирования. Кроме того, вы сможете понять, насколько это просто. Но, прежде чем писать программу, нам нужно собрать робота.

Постройка робота

Робот, которого мы будем использовать в этом курсе — Tribot — первый колёсный робот, которого инструкция к NXT советует собрать после покупки набора. Единственное отличие будет заключаться в том, что вы должны подключить правый мотор в порт A, левый мотор в порт C, а мотор захвата в порт B.

Lego NXT Tribot.jpg

Убедитесь, что вы правильно установили драйверы Mindstorms NXT Fantom Drivers,
поставляемые с набором.

Запуск Bricx Command Center

Мы будем писать программы используя Bricx Command Center. Запустите его двойным щелчком по иконке BricxCC (я предполагаю, что вы уже установили BricxCC. Если нет, загрузите его с сайта (см. введение) и установите его в любой удобный вам каталог). Программа попросит предоставить ей возможность подключиться к роботу. Включите робота и нажмите «ОК». Программа (скорее всего) автоматически найдёт робота. Ниже приведено избражение интерфейса пользователя, появляющееся после успешного завершения синхронизации (закладки с текстовым окном быть не должно).

BricxCCScreenShot1.jpg

Интерфейс выглядит как стандартный текстовый редактор с обычным меню, кнопками для открытия и сохранения файлов, печати, редактирования и т.п. Однако среди них есть несколько специальных меню для компилирования программ и загрузки их в робота, а также для получения отладочной информации; пока вы можете не обращать на них внимание. Сейчас мы хотим написать новую программу, так что нажимайте кнопку «New File» для создания нового окна с текстовым редактором.

Написание программы

Теперь введите текст программы:

task main()
{
OnFwd(OUT_A, 75);
OnFwd(OUT_C, 75);
Wait(4000);
OnRev(OUT_AC, 75);
Wait(4000);
Off(OUT_AC);
}


На первый взгляд выглядит немного сложно, так что давайте разберемся в ней.

Программы NXC состоят из задач («task»). Наша программа содержит всего одну задачу с именем «main». Любая программа на языке NXC должна содержать задачу с именем «main», которая и будет исполняться роботом (о задачах мы поговорим подробнее в главе 6). Задача состоит из набора команд — операторов. Операторы заключены в фигурные скобки для того, чтобы была ясна их принадлежность к конкретной задаче. Каждый оператор заканчивается точкой с запятой. Это позволяет понять, где кончается один оператор и начинается следующий. В целом задача обычно выглядит следующим образом:

task main()
{
statement1;
statement2;
…
}


Наша программа содержит 6 операторов. Давайте разберем их по очереди:

OnFwd(OUT_A, 75);

Этот оператор говорит роботу включить выход «A» модуля NXT. Это означает, что мотор, подключенный нами ранее, будет двигать модель вперед. Число, следующее за указанием порта, устанавливает скорость мотора в 75% от максимальной.

OnFwd(OUT_C, 75);

Тот же оператор, но теперь включаем мотор «C». После выполнения этих операторов оба мотора вращаются, и робот едет вперёд.

Wait(4000);

Теперь время немного подождать. Этот оператор говорит нам подождать 4 секунды. Аргумент, которым является число в скобках, указывается в 1/1000 секунды, так что мы можем с большой точностью указать программе необходимую задержку. Следующие 4 секунды программа будет ждать, а робот с включенными двигателями ехать вперед.

OnRev(OUT_AC, 75);

Робот проехал вперед достаточно далеко, так что мы скажем ему ехать в обратном направлении, т.е. назад. Обратите внимание, что мы можем установить режим работы обоих моторов сразу используя аргумент OUT_AC; таким же образом можно заменить первые два оператора задачи.

Wait(4000);

Снова ждём 4 секунды.

Off(OUT_AC);

И наконец, выключаем оба мотора.

Вот и вся программа. Она включает на 4 секунды оба мотора на движение вперед, затем назад и в конце выключает их.

Вы, наверное, заметили при написании программы автоматическое выделение фрагментов кода разными цветами. Эти цвета и стили используемые текстовым редактором можно настроить, если они вам кажутся неудобными.

Запуск программы

После написания программы нам потребуется её скомпилировать (превратить её в двоичные коды, которые робот может разобрать и выполнить) и переслать полученные двоичные коды в робота, используя USB-кабель или Bluetooth-донгл (сокращенно: загрузить программу в робота).

BricxCCScreenShot2.jpg

На этой панели расположены кнопки, которые позволяют (слева направо) компилировать программу, загружать её в робота, запускать выполнение программы на роботе и останавливать его.

Нажмите вторую кнопку, и, если вы не сделали ошибок при написании программы, она корректно скомпилируется и загрузится в робота (если вы допустили ошибки, об этом будет выдано сообщение, см. более подробно ниже).

Теперь мы можем запустить нашу программу на выполнение. Чтобы сделать это зайдите в меню «My Files» на модуле, «Software files», и запустите («run») программу с названием «1_simple». Помните: файлы программ в файловой системе NXT имеют такие же имена, как и исходные NXC-файлы.

Кроме того, ваша программа может запускаться автоматически после загрузки. Используйте комбинацию клавиш CTRL+F5 или после загрузки программы на робота нажмите зелёную кнопку запуска программы.

Делает ли робот то, что мы запрограммировали? Если нет, проверьте соединения проводов.

Ошибки в программе

Когда вы набираете программы, существует вероятность допустить ошибки. Компилятор сообщает обо всех обнаруженных им ошибках внизу окна, в котором вы писали программу, как это показано на рисунке:

BricxCCScreenShot3.jpg

Он автоматически выделяет первую ошибку (неправильное написание наименования мотора). Когда у вас выдалось несколько ошибок, вы можете щёлкнуть на интересующем вас сообщении об ошибке и перейти к соответствующему месту программы. Обратите внимание, что часто ошибки в начале программы могут повлечь ошибки в других местах. Так что лучше исправлять только первые несколько ошибок, после чего скомпилировать программу еще раз. Так же заметим: подсветка синтаксиса помогает избежать ошибок при разработке. Например, в последней строке мы написали Of вместо Off. Так как это неизвестная команда, она не подсвечена.

Могут быть ошибки, которые не обнаруживаются компилятором. Если мы указали OUT_B в управлении мотором, то будет вращаться не тот двигатель, который нам нужен. Если ваш робот ведёт себя не так, как вы запланировали, скорее всего вы что-то неправильно написали в управляющей им программе.

Изменяем скорость

Как вы заметили, робот перемещается достаточно быстро. Чтобы изменить его скорость, вам потребуется изменить второй параметр внутри круглых скобок. Скорость вращения моторов задаётся числом между 0 и 100: 100 — это самая большая скорость, 0 — полная остановка (сервопривод NXT будет удерживать положение). Вот новая версия нашей программы, под управлением которой робот будет перемещаться медленно:

task main()
{
OnFwd(OUT_AC, 30);
Wait(4000);
OnRev(OUT_AC, 30);
Wait(4000);
Off(OUT_AC);
}

Подводим итоги

В этой главе вы написали свою первую программу на языке NXC, используя среду разработки BricxCC. Теперь вы умеете набирать программу, загружать её в робота и запускать её выполнение. BricxCC может делать многие другие вещи, чтобы получить о них больше информации, прочитайте документацию поставляемую с этим пакетом. Этот обучающий курс в первую очередь направлен на освоение языка NXC и затрагивает только те функции BricxCC, без которых мы не можем обойтись.

Также вы освоили некоторые важные аспекты языка NXC. Прежде всего вы узнали, что каждая программа имеет задачу с именем «main», которая будет выполняться роботом. Также вы изучили 3 простые команды для управления двигателями:
OnFwd(), OnRev() и Off(). И наконец, вы узнали об операторе Wait().

—>

Автор:

Вязовов Сергей Михайлович, заведующий кафедрой информатики МАОУ «Лицей №14 имени Заслуженного учител Российской Федерации А.М.Кузьмина» г.Тамбова

1. ИСПОЛЬЗОВАНИЕ УЛЬТРАЗВУКОВОГО ДАТЧИКА ДЛЯ ОБНАРУЖЕНИЯ ОБЪЕКТОВ

Ультразвуковой датчик часто используется для обнаружения препятствия во время движения.

Для понимания сути вопроса рассмотрим задачу остановки робота в 10 сантиметрах от стены.

 Реализация программы:

 

Настройка блока движения:

 

Настройка блока ожидания состояния ультразвукового датчика:

 

В последнем блоке задаётся отключение моторов робота.

Задачи:

  1. Реализуйте алгоритм работы робота, по которому, достигнув стены он разворачивается на 180°, и едет в течение 5 секунд в противоположном направлении.
  2. Реализуйте алгоритм работы робота, который движется вокруг коробки высотой 50 см.

Робот-охранник

Задача. Необходимо разработать алгоритм работы робота, охраняющего коробку, находящуюся на расстоянии не более 15 см, в соответствии с которым, как только коробку попытаются унести (расстояние от робота до коробки станет более 15 см), он должен начать издавать звуковой сигнал.

Реализация:

 

Решение задачи заключается в следующем:

В бесконечном цикле происходит выполнение двух блоков:

  1. Блок «Wait» (ожидание состояния ультразвукового датчика) с параметром «Until» расстояние до объекта («Distans») больше 15 см.
  2. Блок «Sound» (звуковой сигнал).

Как только расстояние от робота до коробки превысит 15 см (1), проигрываем звук (2) и снова переходим к ожиданию состояния ультразвукового датчика (1). Если объект на место не вернули, то снова издаём звуковой сигнал (2). И так до «бесконечности».

Задача:

В нашей программе робот охраняет объект, который находит в зоне его видимости. Сконструируйте механизм, который будет вращать ультразвуковой датчик вокруг робота и издавать сигнал при приближении к нему другого объекта.

2. ОРГАНИЗАЦИЯ ДВИЖЕНИЯ РОБОТА ПО ТРАЕКТОРИИ

Движение по прямой

Движение по прямой в течение некоторого периода организуется при помощи блока «Move». За продолжительность движения отвечает параметр «Duration», значение которого может быть задано в градусах, в оборотах мотора вокруг своей оси, и в секундах.

 

Организация поворота

Если одно колесо робота вращается быстрее другого, то есть смещён ползунок мощности моторов в сторону одного из них, то робот едет не по прямой, а по дуге. Чем больше смещение ползунка мощности мотора, тем меньше радиус дуги. При полном смещении ползунка робот начинает вращаться вокруг одного колеса, что лежит в основе решения задач поворота робота на заданный угол.

 

Задачи:

  1. Организуйте движение по окружности (подберите количество оборотов, которое необходимо задать, чтобы робот описал полную окружность).
  2. Организуйте поворот робота на одном колесе на угол 90 градусов.
  3. Организуйте движение робота по периметру квадрата.

Движение робота по спирали

Идея движения по спирали заключается в том, что через одинаковые промежутки времени робот начинает двигаться по окружности всё с большим и большим радиусом.

Программное это выглядит следующим образом:

 

Для каждого блока движения необходимо задать параметры:

  1. смещение мощности моторов;
  2. мощность моторов;
  3. продолжительность движения.

Мощность моторов для всех блоков одинакова, остальные параметры плавно увеличиваются от блока к блоку.

3. ОБНАРУЖЕНИЕ ЧЁРНОЙ ЛИНИИ

Задача заключается в реализации алгоритма движения робота до чёрной линии.

Для организации движения достаточно одного блока управления моторами со значением параметра продолжительности движения «Unlimited».

 

Следующим блоком в программе будет блок ожидания состояния датчика освещённости (или датчика цвета). Движение будет происходить до тех пор, пока не наступит состояние, задание в параметре «Until». Значение состояния, соответствующего положению датчика над чёрной линии, подбирается экспериментальным путём и зависит от многих факторов, таких как: уровень внешней освещённости, высота датчика над чёрной линией, генерируемый датчиком свет и др.

 

Если программа запущена с подключенным роботом к компьютеру, то для блока ожидания данных мы сможем наблюдать текущее значение, получаемое сенсором. Это позволит наиболее точнее отладить нашу программу.

Обратите внимание, что после достижения требуемого состояния (в нашем примере – уровень отражённого света стал меньшим 35%, то есть мы достигли чёрного цвета), робот должен перейти к следующему блоку. Если его нет, робот может не остановиться и продолжить движение ещё в течении небольшого времени. Чтобы этого не случилось, можно добавить блок управление движением моторов в режиме «Stop»:

 

Задачи:

  1. Робот движется до чёрной линии. После её достижения, он останавливается на 5 секунд, после чего продолжает движение до следующей чёрной линии, затем останавливается.
  2. Робот движется до чёрной линии. После её достижения он разворачивается на 360̊ и продолжает движение в течении 5 секунд.

4. РАБОТА С ПЕРЕМЕННЫМИ

Создание и удаление переменных

Создать и удалить переменные можно, вызвав диалоговое окно «Edit Variables» пункта меню Edit – Define Variables.

 

Для использования переменных (для записи в них значения и чтения из них значения для передачи в другой блок) в программе нам понадобятся контейнеры (блок «Variables»). Они расположены в группе блоков «Data».

 

Передача значений сенсоров в переменную

Для того чтобы передать текущее значение считанное сенсором уровня освещённости (или сенсором цвета, работающего в режиме сенсора освещённости) в переменную EtalonLight нам понадобится блок «Light Sensor» (или «Color Sensor»), расположенные в группе блоков «Sensor» и блок «Variables» с именем переменной EtalonLight.

 

Для того чтобы передать значение уровня освещенности, необходимо соединить параметр «Intensity» (для Ligth Sensor) или параметр «Detected Color» (для Color Sensor) с входом «Read» блока переменной путем протаскивания мыши.

В программе это выглядит следующим образом:

 

Для того, чтобы данные с датчика освещённости (или датчика цвета) успели передаться в переменную, часто после блока переменой помещают блок ожидания сенсора касания. На соревнованиях такая кнопка осуществляет старт робота, а все блоки, которые расположены до неё осуществляют калибровку робота под текущие внешние факторы.

Чтение данных из переменной

Очевидно, что данные в переменную можно не только записать (Write), но и считать (Read). Считанные данные из переменной можно передать в другую переменную, передать как параметр в условие или цикл, применить к ним математические или логические операции.

 

  1. Производится передача данных (то есть запись) значения ультразвукового датчика в переменную Etalon.
  2. Значение переменной Etalon считывается (выход «Read») и передаётся в переменную Double (вход «Write»).
  3. Значение переменной Double считывается (выход «Read») и передаётся в качестве аргумента А блока «Math» с операцией «Addition», осуществляющий сложение с константным значением аргумента B.
  4. Результат операции сложения (Addition) передаётся, как параметр, в блок Switch.

Значение логической переменной можно использовать в качестве параметра, определяющего время работы цикла.

Рассмотрим пример, в котором цикл завершает свою работу, как только значение ультразвукового датчика становится меньше 10.

 

  1. В процессе движения робота в цикле происходит постоянно считывание ультразвуковым датчиком расстояния до объекта, которое передаётся в качестве аргумента А в блок сравнений (Compare).
  2. Результат сравнения текущего значения ультразвукового датчика (аргумент А) с константным значением (аргумент В) передаётся в логическую переменную Logic1 (вход «Write»).
  3. Текущее значение логической переменной передаются как параметр в цикл. Если это значение истинно, то цикл завершает свою работу.

Значения переменных можно передавать в значения опций моторов или датчиков.

Рассмотрим пример управления скоростью моторов с помощью переменных, на примере организации равноускоренного движение робота.

 

  1. В переменную Power записываем начальное значение, равное 10.
  2. В бесконечном цикле значение переменной Power передаём (выход «Write») в параметр мощности моторов (вход «Power»).
  3. Затем значение переменной при помощи операции Addition блока Math к значению переменной Power добавляется константное значение аргумента B, равное 10.
  4. Через 2 секунды возвращаемся к началу цикла (2).

5. МОДИФИКАЦИЯ АЛГОРИТМА ОБНАРУЖЕНИЯ ЧЁРНОЙ ЛИНИИ

Идея реализации программного решения состоит в том, что робота сначала помещают датчиком освещённости над чёрной линией и берут, так называемую, эталонную пробу. Это позволит избежать конфликта с изменяющимся внешним освещением и необходимостью каждый раз менять программу. А затем уже текущее значение отражённого света сравнивают с эталонной пробой.

Очевидно, что эталонную пробу придётся где-то хранить. Для этого используются переменные.

Таким образом, полная программа движения до чёрной линии с остановкой будет выглядеть таким образом:

 

Порядок работы программы:

  1. Робот помещается так, чтобы датчик освещённости был расположен над чёрной линией и запускается программа, первые два блока которой выполняют калибровку робота и значение сохраняется в переменную EtalonColor.
  2. Робот переносится в место старта и ожидается нажатие кнопки на датчике касания, осуществляющей старт робота.
  3. В нашей программе старт будет осуществлён с пятисекундной задержкой.
  4. Движение робота осуществляется в бесконечном цикле. Постоянно считывается текущее показание датчика и оно сравнивается с эталонным. (Блок сравнения, математический блок и блок логических операций расположены в группе блоков «Data»).
  5. Результаты сравнения в виде логического параметра (истина/ложь) передаются в блок выбора «Switch».
  6. Если результат сравнения оказался истинным, то есть текущий уровень освещённости меньше эталонного, то мы достигли чёрной линии и нужно остановить моторы.
  7. В противном случае мы ещё не достигли чёрной линии и нужно продолжить движение.

6. ДВИЖЕНИЕ ВДОЛЬ ЧЁРНОЙ ЛИНИИ

Рассмотрим алгоритмы движения робота вдоль чёрной линии. Эти алгоритмы основаны на понятии регуляторов.

Под регулятором будем понимать некоторое программное решение, которое управляет моторами робота, не позволяя ему покидать чёрную линию. Робот, в процессе своего движения считывает показания датчика освещённости и при их изменении изменяет мощность моторов. В результате робот постоянно поворачивает то в одну, то в другую сторону.

Пусть переменная motor – это первоначальная скорость моторов. При старте робота эта мощность одинаковая для обоих моторов. Переменная UP – это управляющее воздействие на моторы робота. Тогда, для того, чтобы робот начинал поворачивать к чёрной линии или уходить с неё, необходимо на один мотор подать мощность motor + UP, а на другой мотор motor – UP.

В теории управления существует несколько видов регуляторов. Мы рассмотрим два самых простых: релейный регулятор и пропорциональный регулятор.

Для организации любого регулятора нам понадобится правильным способом разместить робота над чёрной линией.

Для начала обратим внимание, что человек и робот видят чёрную линию по-разному. У человека границы чёрной линии и белой чёткие, а у робота размытые.

Поэтому правильным размещением робота над линией является то, когда датчик расположен на границе чёрной и белой линии.

Релейный регулятор

Пусть S – это начальное значение, полученное с датчика при калибровке робота. Если текущее значение уровня отражённого света меньше S, то это означает, что датчик сильнее сместился на чёрную линию и его надо вернуть обратно, то есть робот должен двигаться влево. Если же текущее значение стало меньше S, то робот наоборот сместился ближе к белой линии и его надо вернуть на чёрную линию, то есть он должен двигаться вправо.

Реализация алгоритма выглядит следующим образом:

 

Настройки блока (1):

  

Настройки блока (2):

 

Такой регулятор позволяет роботу пройти по чёрной линии, однако на сильно изогнутой линии (на слаломе в случае «Биатлона») нет плавности движения и робот постоянно теряет скорость. Поэтому данное решение в соревнованиях не применяют.

Пропорциональный регулятор

Данный регулятор позволяет применить к мощностям робота управляющее воздействие, которое вычисляется по формуле:

 

UP – управляющее воздействие, k – коэффициент управляющего воздействия, S – начальное значение уровня отражённого света (эталон, полученный до старта робота), Light – текущее значение уровня отражённого света.

Задача достижения плавности движения робота на максимально возможной скорости сводится к верному подбору коэффициента k управляющего воздействия.

Управляющее воздействие UP также позволяет роботу поворачивать то влево, то вправо. Если датчик сместился на чёрную линию, то разность

Light – S < 0, а если на белую, то Ligth — S > 0. То есть, мощность одного мотора увеличиваем на UP, а другого уменьшаем.

Таким образом,

motorC = motor + UP

motorB = motor – UP

Реализация алгоритма:

 

Пропорциональный регулятор для робота с двумя датчиками освещенности.

Управляющее воздействие в случае пропорционального регулятора с использованием двух датчиков вычисляется по формуле:

где S1 – значение левого датчика освещённости, S2 – значение правого датчика освещённости. Напомним, что вместо датчиков освещённости можно использовать датчики цвета, работающие в режиме датчиков освещённости.

Однако, датчики при калибровке могут иметь разные начальные значения, поэтому формулу можно улучшить таким образом:

 

где Sleft – начальное значение левого датчика, а Sright – начальное значение правого датчика

Инструкция
по программированию роботов
NXT

1.      Зайдите в поисковую
систему. В строку поиска введите майндстормс nxt 2.0 и откройте эту страницу

или пройдите по ссылке https://education.lego.com/ru-ru/downloads/retiredproducts/nxt/software

2.      Вы увидите вот такое
окно, где  нужно нажать загрузить

3.      После загрузки документа
разархивируйте документ в нужную папку, откройте его и установите программу,
следуя подсказкам установщика, нажав на
setup

4.      После
установки у вас появиться вот такой значок на рабочем столе, откройте его
двойным щелчком левой кнопки мыши.

 

5.      В
открывшемся окне введите название программы на английском языке (название
должно отражать суть действий и не должно повторяться, чтобы можно было его
найти в памяти робота) и нажать далее…

6.      В появившемся окне
в левой части мы видим основные функции программы

7.      В
этой части мы можем открыть дополнительные блоки программирования. Например,
включить фару, если она есть и задать ей цвет.

8.      При
наведении курсора мыши мы видим подписи, которые нам помогают для выбора нужной
функции.

 

9.      Что
выбрать действие блок нужно перетащить в рабочее поле
.
В нижней части экрана мы видим все действия, на которые мы можем
запрограммировать  данный блок (более подробно по программированию блоков
смотри в видео).
https://www.youtube.com/watch?v=81qqnikHvac&feature=emb_logo

https://www.youtube.com/watch?v=zeDuQTmEBQ8&feature=emb_logo

10.  Пример
программы на 5 действий с использованием датчика звука.

Словесное
описание (необходимо написать в комментарии к домашнему заданию):1. Едет прямо
5 секунд, 2. Стоит 3 секунды, 3. Поворачивает налево на 90 градусов, 4. Стоит
пока не услышит хлопок. 5. Едет назад 4 секунды.

Общий вид программы:

                     Настройка блока 1.
Едет прямо 5 секунд

Настройка блока 2.
Стоит 3 секунды

 

Настройка блока 3.
Поворачивает налево на 90 градусов

Настройка блока 4.
Стоит пока не услышит хлопок.

Настройка блока 5.
Едет назад 4 секунды.

11.  Для
того, чтобы сохранить и отправить файл программы нажимаем сохранить на верхней панели инструментов. Мы увидим
окно, где нужно проверить название программы, можно выбрать куда сохранить
нажав на кнопку обзор (например выберем рабочий
стол) и нажимаем кнопку сохранить

12. 
На рабочем столе
(если вы выбрали местом сохранения рабочий стол у вас появиться ваш файл, с
вашим названием). Этот файл вы прикрепляете к домашнему заданию.

Желаю Вам удачи в программировании
вашего робота!

Понравилась статья? Поделить с друзьями:
  • Капсикам мазь инструкция цена для чего применяется
  • Как применять пульмикорт для ингаляций в небулайзере взрослым инструкция
  • Принтер samsung scx 4200 инструкция по эксплуатации
  • Sp400 spirax sarco инструкция на русском
  • Radtel rt 830 инструкция на русском