педагог дополнительного образования, ГБОУ Гимназия № 000, г. Москва

Оптимальное управление моторами EV3 в задачах следования по линии


Рассматриваются вопросы задания режимов работы блоков управления моторами в задачах следования по линии роботов на базе конструктора LEGO Mindstorms EV3

После первого ознакомления с блоками языка программирования EV3 возникает естественное желание, опираясь на собственный опыт программирования в языках NXT-G и Robolab 2.9.4, тут же попробовать создать нечто подобное и в языке EV3. Существенную помощь в этой работе может оказать хорошо известная книга [1].

Мною накоплен серьезный опыт создания программ управления движением робота на основе материалов указанной книги – фактически все программы следования по линии, приведенные в ней, и их модификации. При этом использовал язык программирования Robolab 2.9.4 как для микропроцессоров RCX, так и для NXT. Поэтому разработку программ для роботов EV3 начал с простейшей – реле-регулятора с одним датчиком освещенности (датчика цвета в EV3). При этом сразу же возникла альтернатива: использовать в программе по аналогии с [1] два одиночных блока управления моторами (блок «Большой мотор») или вместо двух один – блок «Независимое управление моторами». Решил сначала точно следовать рекомендациям , а затем уже отыскивать наилучшее решение.

Вот первая моя программа (рис. 1). Далее будем именовать ее «вариант №1».

Рис.1 Простейшая программа управления движением по линии на основе реле-регулятора с одним датчиком освещенности

НЕ нашли? Не то? Что вы ищете?

В ней в каждой из ветвей перехода по показаниям датчика цвета (порт 1) оба мотора работают в режимах «Включить» с уровнем мощности -75% (движение назад в связи с конструктивными особенностями робота) либо «Выключить» с торможением (аналог «Красного стопа» Robolab 2.9.4). Величина дискрета времени в блоке «Ожидание» (вход «Время») в соответствии с рекомендациями [1] задана 0,001с.

Робот начинает движение при нажатии датчика касания, подсоединенного ко 2 порту.

Возникает вопрос: а почему не задать длительность работы моторов непосредственно в соответствующем «работающем» блоке «Большой мотор», например, так, как показано на рис.2?

Рис. 2. Ввели время работы моторов В и С непосредственно в блоки «Большой мотор»

Однако при этом возникла одна заковыка: при запуске программы робот остается неподвижным, как его не уговаривай. Почему? На сей счет у меня есть одна догадка, однако она остается пока на уровне предположений. Модель начинает двигаться при уменьшении величины дискрета времени до 0,1с, но и тогда скорость движения оказывается существенно более низкой, нежели у робота с программой (рис. 1).

Еще одна возможность усовершенствования связана с заменой двух блоков «Большой мотор» в каждой из ветвей на один блок «Независимое управление моторами».

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

Программа второго варианта представлена на рис. 3. В ней один из моторов вращается с мощностью -75%, как и в первом варианте, а ко второму подведена мощность, равная 0%. Блоки «Независимое управление моторами» работают в режиме «Включить». Выключение блоков производится по окончании времени, заданного величиной дискрета D, без торможения.

Рис. 3. Реле-регулятор с блоками «Независимое управление моторами».

Для выявления предпочтительного варианта управления движением роботов, следующих по линии, были проведены две серии испытаний, соответственно, для первого и второго вариантов программы. В качестве показателя эффективности программы было выбрано время прохождения роботом трассы. Для испытаний использовалось поле, аналогичное используемым в соревнованиях по робототехнике «Линия».

Результаты приведены в таблицах 1 и 2.

Таблица 1

Результаты испытаний программы управления движением, вариант №1

№ испы-тания

Входные параметры

Время прохожд. трассы (мин:с)

Комментарий

Мощность моторов, режим, торможение:

Дискрет D (с)

Мотор В (верх. ветвь)

Мотор С (ниж. ветвь)

Мотор С (верх. ветвь)

Мотор В (ниж. ветвь)

1

-75

0

0,001

0:53,6

2

-75

?

0,001

-

Робот сходит с линии

3

-75

?

0,001

0:53,85


Таблица 2

Результаты испытаний программы управления движением, вариант №2

№ испы-тания

Входные параметры

Время прохожд. трассы (мин:с)

Комментарий

Мощность моторов, режим торможения

Дискрет D (с)

Моторы (В+С)

(верх. ветвь)

Моторы (В+С)

(ниж. ветвь)

Торможение

1

-75; 0

0; -75

0,001

-

неподвижен

2

0,01

-

неподвижен

3

0,1

1:18,1

значит. отклонения; медленное движ.

4

0,05

1:33,4

малые отклонения от границы; очень медленно


Из сравнения результатов испытаний можно сделать следующие выводы:

В задачах управления движением робота по линии наиболее предпочтительным является использование блоков «Большой мотор», нежели «Независимое управление моторами» Использование режимов «Включить» с мощностью 0 или «Выключить» с торможением в варианте №1 не дает ощутимых различий. В то же время задание движения накатом по окончании времени работы D (испытание 2, табл.1) приводит к сильным колебаниям робота и сходу его с линии на крутых поворотах. Эффективность управления движением с помощью блока «Независимое управление моторами» (вариант №2) существенно зависит от величины выбранного дискрета времени отсчета D и во всех исследованных случаях значительно уступает варианту №1.

Весьма интересен (и несколько неожидан) факт зависимости скорости движения робота от величины дискрета времени отсчета D в программах с использованием блока «Независимое управление моторами». Тем более это неожиданно в связи с тем, что ничего подобного не наблюдалось ни с роботами на базе RCX (обычные моторы), ни с NXT (сервомоторы). Правда, в тех и других для управления роботами использовался язык Robolab 2.9.4 и так называемое «продвинутое управление моторами» на основе широтно-импульсной модуляции (ШИМ). Какой принцип управления сервомоторами используется в блоке «Независимое управление моторами» EV3, неизвестно, однако правдоподобным представляется следующее объяснение.

Если предположить, что при включении моторов в указанном блоке на заданное время D вследствие каких-то неизвестных нам особенностей программной реализации блока подача напряжения на мотор в начале работы и выключение его в конце происходят не мгновенно, а в течение какого-то отрезка времени ?t, подчиняясь какому-то закону, например, экспоненциальному (см. рис. 4), то при относительно больших значениях D это не будет существенно влиять на скорость вращения моторов (рис. 4.а), но при значениях, сопоставимых с величиной интервала времени ?t, влияние величины дискрета на скорость вращения моторов будет уже значительным (рис. 4.б и 4.в).

Что же касается слабого влияния величины дискрета D на скорость прохождения трассы роботом при использовании блоков «Большой мотор» и «Ожидание» (вход «Время») варианта программы №1, возможно, в этих блоках используется другой принцип управления моторами, нежели в «Независимом управлении моторами», например, упоминавшийся выше ШИМ.

И последнее наблюдение. Размах между значениями уровней белого и черного (примерно 55 и 5) позволяет отказаться от калибровки датчиков цвета: колебания уровней освещенности рабочего поля видимым образом не влияют на устойчивость движения робота по линии, в связи с чем уровень серого может быть выставлен заранее и не изменяться.

Литература:

Робототехника для детей и родителей. Изд. 2-е дополненное и исправленное. / Под ред д-ра техн. наук, проф. . – СПб.: Наука, 2011.