суббота, 21 декабря 2013 г.

EV3 производительность. Часть I

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

Например, вот выступление новосибирской команды Лига Роботов на World Robot Olympiad 2013 в Джакарте. Робот движется на достаточно большой скорости и отличить красный шарик от синего позволит только частый опрос датчиков цвета. Но если при этом произойдет значительная задержка при выполнении операции остановки, то робот проедет шарик мимо и выполнить его сбор будет уже невозможно:


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


Поэтому, при появлении LEGO Mindstorms EV3 у команд занимающихся робоспортом знания о том, насколько эта платформа производительна, решают будет взята она для разработки робота или нет.

Для NXT роботов уже такие исследования проводились. Теперь настала пора для EV3.

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


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

Результат нескольких экспериментов показывает, что число, выводимое на экран - 1.4 миллисекунды. Что, в общем и целом, - достаточно быстро!

Но в программе, как видно, используется блок "Независимое управление моторами" (Tank Move). Этот блок является уже довольно сложной программной единицей и с помощью настраиваемых параметров может делать многое. Можно сделать предположение, что чем сложнее блок, тем больше времени он занимает на исполнение, внося задержки в управляющий цикл. Избавиться от них поможет более простой блок "Нерегулируемый мотор" (Unregulated Motor), который принимает только один параметр - мощность, которую необходимо подать на заданный мотор.


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


А последующие запуски робота с данной программой дают результат 1.2 миллисекунды. Хоть прирост получился и небольшой (16%), но зато четко ясно, что в ситуациях, когда в управляющем цикле много операций с моторами, то следует рассмотреть возможность использования блока "Нерегулируемый мотор" (Unregulated Motor). Именно он будет использоваться в большинстве дальнейших тестов, посвященных измерению производительности.

Продолжение следует...

3 комментария:

Related Posts Plugin for WordPress, Blogger...