Алгоритмы: черно-белое движение. Часть VII Следы NiNoXT в Галактике / 28.11.2012 В прошлых двух заметках (1, 2) было указано, что коэффициент пропорциональности линейного регулятора при движении вдоль черной линии зависит от минимального и максимального значений, которые показывает датчик освещенности на данном конкретном поле.Прежде, чем переходить к исследованию от чего же еще зависит коэффициент, хотелось бы рассмотреть некоторые особенности управления моторами через каналы данных. Данное знание позволит более тщательно подходить к расчету коэффициента пропорциональности или, как это будет показано в конце заметки, сделать программу более устойчивой к изменению освещенности на поле.Рассмотрим, что происходит с вращением оси мотора в случае работы следующей программы:В программе в каждой следующей итерации цикла в качестве значения мощности мотора передаются все меньшие числа.При запуске программы будет видно: мотор крутится вперед, постепенно теряя скорость, затем останавливается, и постепенно набирая скорость, опять крутится вперед.Что доказывает - если в среде NXT-G в качестве мощности подавать отрицательные значения, то ось мотора будет вращаться в прямом направлении (вперед), а не в обратном направлении, как это можно было бы ожидать. Следует заметить, что в других средах программирования LEGO роботов это не так.Что же дает нам эта новая информация?Из формул выше видно, что в случае неправильно рассчитанного "среднего" значения освещенности LA (предполагаемой освещенности на границе линии), например, когда учитывалось не самое светлое место на поле, значение мощности может стать отрицательным.ПустьТогда если при каком-то измерении на поле возникнет ситуация, когда L будет больше замерянного ранее максимального значения, тоЧто приведет к тому, что вместо ожидаемой остановки, колесо начнет двигаться. А поскольку и второе колесо крутится, причем, с максимальной скоростью, то робот может вылететь с трассы.Чтобы избежать такой ситуации внутри цикла управления, после расчета мощностей, устанавливают ограничитель, который бы позволил избежать запуск моторов при непредвиденных значениях освещенности.Для каждого рассчитываемого значения мощности - свой ограничитель.Для удобства операций, значение мощности будет передаваться посредством переменной:В программе переменные будут использоваться следующим образом:А управляющий цикл, в итоге, видоизменится: алгоритмы датчики робототехника