педагог дополнительного образования, ГБОУ Гимназия № 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.


