Опубликован: 10.09.2014 | Уровень: для всех | Доступ: платный | ВУЗ: Оренбургский государственный педагогический университет
Лекция 2:

Программирование моторов: команда Move

< Лекция 1 || Лекция 2 || Лекция 3 >
Аннотация: Рассматриваются возможности управления моторами робота Lego Mindstorms NXT 2.0 при помощи блока Move. Изучаются настройки блока. Цель: научиться управлять роботом при помощи блока Move.

Одна из основных функций робота - движение. Двигаться может как весь робот целиком, так и отдельные его части. Движением управляют сервомоторы (или сервоприводы). В конструкторе Lego Mindstorms сервомоторы имеют датчики оборотов, подсчитывающие количество градусов поворота главной оси. Важным компонентом сервомотора является редуктор, который через систему шестерней превращает чрезвычайно быстрое вращение внутреннего электрического двигателя в более медленное. Наличие датчика оборотов и редуктора позволяют сервомотору совершать прецизионные движения главной оси. Сервопривод Lego может быть повёрнут с точностью 1°. Внутреннее устройство сервопривода показано на Рис. 2.1.

Сервопривод (слева) и его внутреннее устройство (справа)

увеличить изображение
Рис. 2.1. Сервопривод (слева) и его внутреннее устройство (справа)

Программирование движения происходит посредством блока Move (Движение), который находится в общей и полной палитрах (Рис. 2.2).

Блок Move в общей (слева) и полной (справа) палитрах

увеличить изображение
Рис. 2.2. Блок Move в общей (слева) и полной (справа) палитрах

Блок Move имеет массу настроек, позволяющих управлять поведением мотора (Рис. 2.3).

Настройки блока Move

Рис. 2.3. Настройки блока Move

На рисунке цифрами отмечены:

  1. Моторы, которыми управляет этот блок.
  2. Направление вращения моторов.
  3. Уровень мощности мотора (скорость). Заметим, что реальная скорость робота будет зависеть также и от его конструкции, типа поверхности (скользкая, шершавая и пр.), наклона поверхности, массы робота и т. п.
  4. Параметр длительности движения: без ограничения, в градусах, оборотах или секундах.

Настройка блока Move, как и других блоков, производится в нижней части экрана после выбора блока (Рис. 2.4):

Панель настроек блока Move

Рис. 2.4. Панель настроек блока Move

На рисунке цифрами отмечены:

  1. Выбор моторов, которыми нужно управлять (Port). Может быть A, B или C. Один блок Move может управлять сразу двумя моторами (для остановки - даже время); на рисунке как раз выбраны моторы B и C. Заметим, что при создании колёсных или гусеничных роботов лучше левые и правые колёса (гусеницы) назначать моторам B и C, а вспомогательные операции (манипуляторы, поворотные башни и пр.) отводить мотору A. Это связано с устройством блока NXT и позволит реализовывать более точное передвижение робота.
  2. Выбор направления вращения мотора/моторов (Direction). Может быть "вперёд", "назад" или "стоп".
  3. При управлении двумя моторами служит для поворота: переместите слайдер (бегунок) Steering влево или вправо. Для прямолинейного движения установите его посередине. Если использовать промежуточные значения этого параметра, то робот будет ехать под дуге. Чем дальше слайдер от центра, тем круче поворот.
  4. Power задаёт уровень мощности 0 - 100 %. Мощность не может выходить за этот диапазон.
  5. Duration - длительность работы мотора задаётся в:
    • Rotations - количествах оборотов двигателя;
    • Degrees - градусах, на которые повернётся вал двигателя;
    • Seconds - секундах;
    • Unlimited - без ограничения. Это очень важный параметр; его выбор подразумевает, что двигатель будет работать до наступления некоторого события. Например, мы можем запустить мотор и остановить его, когда робот заедет на красное поле.
  6. Next Action действие моторов после выключения. Здесь возможны два варианта:
    • Brake - тормозить. В этом случае при остановке мотор немедленно прекратит своё вращение. На выполнение этой задачи будет потрачена энергия. В частности, при постоянных резких торможениях батарея садится быстрее.
    • Coast - после команды на остановку просто отключить питание от двигателя и катиться по инерции. Этот режим выгодно использовать, если не требуется точной остановки.
  7. Поле обратной связи. Здесь отображаются текущие значения поворотов моторов при наличии соединения робота с компьютером.

Задание 2.1. Смена настроек.

  • Запустите среду для программирования роботов Lego Mindstorms NXT.
  • Создайте новый файл. Добавьте в программу блок Move.
  • Изменяя настройки блока Move, понаблюдайте за изменениями на изображении блока в программе.
  • Не создавая программу на Рис. 2.5 прочитайте её. Какие настройки соответствуют каждому блоку программы?
Пример программы к заданию 2.1

Рис. 2.5. Пример программы к заданию 2.1

Для дальнейшей работы нам понадобится тестовая модель робота.

Задание 2.2. Сборка тестовой модели.

Задание 2.3. Программа движения робота.

  • Создайте программу, показанную на Рис. 2.6.
  • Внимательно рассмотрите настройки блока Move. Что, по-вашему, будет делать робот в соответствии с этой программой?
  • Проверьте свои предположения, загрузив программу на робот и запустив её. Выполнил ли робот то, что вы ожидали?
  • Не отключая USB-кабель вращайте один из моторов рукой и одновременно наблюдайте за показаниями в поле обратной связи. В каких единицах выдаётся информация в этом поле?
Пример программы к заданию 2.3

увеличить изображение
Рис. 2.6. Пример программы к заданию 2.3

Задание 2.4. Движение одним мотором [1].

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

Имейте в виду, что длины USB-кабеля может не хватить на восемь оборотов. Поэтому не забудьте отсоединить его перед запуском программы на выполнение!

Заполните таблицу:

Мотор Направление Характер движения
Левый Вперёд
Левый Назад
Правый Вперёд
Правый Назад

При выполнении дальнейших заданий Вам понадобится тестовое поле, которое поставляется в комплекте с роботом.

Задание 2.5. Движение двумя моторами [1].

  • Изучите доступные параметры продолжительности движения, изменяя их в поле Duration.
  • Установите Next Action в Brake и проведите замеры расстояний1Для замеров расстояний используйте линейку на тестовом поле. С одной стороны поля цена деления линейки составляет 1 см, а с другой стороны - 1 дюйм., которые проезжает робот при различных значениях параметра Duration и заполните таблицу:
Количество Тип Расстояние (см)
1 Seconds
2,5 Seconds
1 Rotations
2 Rotations
360 Degrees
720 Degrees
Unlimited

Обратите внимание, что при установке длительности движения в Unlimited робот не движется до бесконечности, как мы могли бы ожидать. Напротив, едва начав движение он останавливается и программа завершается. Чтобы разобраться в этом поведении надо понять, как работает блок Move в режиме Unlimited. При запуске программы первым запускается блок Move (он у нас единственный). Если в этом блоке установлена длительность движения, отличная от Unlimited, то блок отрабатывает положенное время или количество оборотов и программа завершается. Если установлено движение Unlimited, то моторы запускаются в параллельном режиме. Это значит, что после включения моторов программа не ждёт, пока завершится выполнение блока Move, а переходит к следующему блоку программы; предполагается, что моторы позже будут остановлены "вручную". Итак, запустив моторы, программа переходит к следующему блоку. Но его в нашей программе нет, поэтому программа завершается: она достигла своего конца. Вместе с завершением программы автоматически останавливаются все моторы. Этим и объясняется такое необычное, на первый взгляд, поведение нашего робота.

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

Задание 2.6. Повороты при помощи Steering.

Установите слайдер Steering в любое положение, отличное от центра, и загрузите программу на робот. Как ведёт себя робот? Изменяя положение слайдера и наблюдая за поведением робота, ответьте на следующие вопросы.

  • В какую сторону поворачивает робот?
  • От чего зависит крутизна поворота?
  • При каком положении слайдера поворот наиболее крутой?
  • В каком направлении вращаются ведущие колёса при поворотах разной крутизны?
  • Где расположен центр поворота при поворотах разной крутизны?

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

Когда второй двигатель выключен (слайдер Steering в этот момент недоступен) робот осуществляет плавный медленный поворот одним мотором; центр поворота - неподвижное колесо. Движение робота похоже на работу циркуля.

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

Задание 2.7. Повороты на месте [1].

Напишите программу для поворота робота (не мотора!) на месте на 90°; на 180°; на 270°; на 360°. Назовём способ поворота быстрым, если робот вращает два колеса в противоположные стороны (слайдер Steering передвинут до упора); назовём его плавным, если поворот осуществляется одним колесом (второе неподвижно).

Для замеров углов поворотов установите робот в центре тестового поля так, чтобы заднее колесо"смотрело" на 180°, а ось ведущих колёс совпадала с красной полосой.

Занесите в таблицу углы поворотов двигателей В и С.

Угол поворота робота Способ поворота Угол поворота моторов
90° Быстрый
180° Быстрый
270° Быстрый
360° Быстрый
90° Плавный
180° Плавный
270° Плавный
360° Плавный

Попробуйте использовать полученные данные для поворота на заданное количество градусов в другую сторону. Получилось?

Задание 2.8. Гонки.

Напишите программу для движения робота вокруг коробки от набора Lego Mindstorms. Устройте соревнование в группе по скоростному объезду коробки: один заезд - три круга.

< Лекция 1 || Лекция 2 || Лекция 3 >