 | В прошлых двух заметках (1, 2) было указано, что коэффициент пропорциональности линейного регулятора при движении вдоль черной линии зависит от минимального и максимального значений, которые показывает датчик освещенности на данном конкретном поле. |
Прежде, чем переходить к исследованию от чего же еще зависит коэффициент, хотелось бы рассмотреть некоторые особенности управления моторами через каналы данных. Данное знание позволит более тщательно подходить к расчету коэффициента пропорциональности или, как это будет показано в конце заметки, сделать программу более устойчивой к изменению освещенности на поле.
Рассмотрим, что происходит с вращением оси мотора в случае работы следующей программы:

В программе в каждой следующей итерации цикла в качестве значения мощности мотора передаются все меньшие числа.

При запуске программы будет видно: мотор крутится вперед постепенно теряя скорость, затем останавливается и постепенно набирая скорость опять крутиться вперед.
Что доказывает -
если в среде NXT-G в качестве мощности подавать отрицательные значения, то ось мотора будет вращаться в прямом направлении (вперед), а не в обратном в обратном направлении, как это можно было бы ожидать. Следует заметить, что в других средах программирования LEGO роботов это не так.
Что же дает нам эта новая информация?

Из формул выше видно, что в случае неправильно рассчитанного "среднего" значения освещенности LA (предполагаемой освещенности на границе линии), например, когда учитывалось не самое светлое место на поле, значение мощности может стать отрицательным.
Пусть,

Тогда если при каком-то измерении на поле возникнет ситуация, когда L будет больше замерянного ранее максимального значения, то

Что приведет к тому, что вместо ожидаемой остановки, колесо начнет двигаться. А поскольку и второе колесо крутиться, причем с максимальной скоростью, то робот может вылететь с трассы.

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

Для удобства операций, значение мощности будет передаваться посредством переменной

В программе переменные будут использоваться следующим образом:

А управляющий цикл, в итоге, видоизменится:
Комментариев нет:
Отправить комментарий