Добрый день!

 

     Итак, настало время внести некоторые изменения в пользовательский блок рулевого управления SteeringControl.

     Для тех, кто не читал предыдущую статью жмём сюда.

     Немного о причинах. Во первых, как выяснилось в процессе общения с грамотными людьми на одном известном форуме (за что им спасибо), параллельная работа отдельных блоков достаточно негативно отражается на производительности. Небольшие тесты далее на картинках. Во вторых, в процессе математических вычислений лучше применять как можно меньше блоков, т.е. лучше использовать математический блок дополнения ADV, чем несколько блоков отдельных математических действий. В третьих, так же выяснилась причина того, почему блок нерегулируемых моторов крутит колёса быстрее. Дело в том, что стандартный блок рулевого управления (который находится в зелёной палитре) использует свой внутренний PID-регулятор для управления выходной мощностью и поддержания её в заданных значениях, соответственно при первом запуске блока выходная мощность получается всегда меньше установленной в настройках, но и выйти на заданные параметры мы не можем, так как постоянно перезапускаем блок в процессе выполнения программы (в этом случае встроенный PID-регулятор каждый раз при его вызове сбрасывается и начинает считать и накапливать ошибки регулировки заново, т.е. начинает работать с самого начала). Блок нерегулируемых моторов (синяя палитра) не имеет никаких регуляторов в своём составе и работает как есть, и тут есть один подводный камень - по факту мы можем получать нестабильную мощность, она может несколько меняться в зависимости от окружающих условий, например повышенного трения. Важно: это накладывает некоторые ограничение на применение нашего пользовательского блока рулевого управления, там где важно четкое позиционирование робота (например: соревнование в номинации "Чертёжник"), этот блок применять не нужно, лучше воспользоваться стандартным рулевым управлением.

     Блок SteeringControl лучше подойдёт для соревнований где важнее скорость и не критично точное позиционирование (например "Траектория", или "Следование по линии").

     Теперь программа новой версии блока в картинках. На первой показано условие больше - равно нуля, на второй -  условие меньше нуля. Немного изменена математика (точнее собрана в один блок и убрано одно лишнее действие) и удалена параллельная работа блоков независимого управления. Если мы будем применять этот блок в соревнованиях упомянутых выше, то неодновременный запуск моторов будет даже незаметным.

     

 

 

     Теперь несколько картинок с тестами. Они показывают, сколько раз в секунду будет выполняться программа с тем или иным блоком (не стоит забывать, что по факту программа будет работать еще медленнее, так как в неё потом будут добавлены дополнительные условия, тот же PID-регулятор например). На первой картинке - стандартный блок рулевого управления, на второй - блок SteeringControl_v1, на третьей - блок SteeringControl_v2.

 

 

 

 

     

     ВАЖНО: данный блок целесообразней использовать при мощностях моторов более 70-80 ед. (лучше ставить максимальную). Если в вашей программе предусмотрена меньшая мощность, то лучше воспользоваться стандартным блоком рулевого управления (из зелёной палитры).

 

     Новая версия блока

     SteeringControl_v2

Добавить комментарий


Защитный код
Обновить