Алгоритмы: черно-белое движение. Часть VIII Следы NiNoXT в Галактике / 30.11.2012 Как и было обещано ранее, настало время рассмотреть от чего же еще зависит коэффициент пропорциональности линейного регулятора при движении вдоль линии.В предыдущих заметках было выведено, что он однозначно зависит от освещенности трассы и яркости элементов на ней:Где Lmax - значения сенсора освещенности на самом светлом участке поля, а Lmin - значение сенсора на самом темном участке.Данный коэффициент использовался в формуле, которая определяла мощность, подаваемую на каждый мотор при том или ином значении освещенности во время движения.Значения мощностей, получаемых этими формулами, можно отобразить на графике:Иными словами, в заметке №5 было показано, что посредством введения коэффициента пропорциональности, для каждого значения освещенности от Lmin до Lmax, сопоставились значения мощности в диапазоне от 0 до 100%.Из графика и из формулы выше видно, что мощность колеблется вокруг некоторого среднего значения - 50%. Что по сути обозначает мощность, при которой оба мотора двигаются в одном направлении с одинаковой скоростью, т.е. робот едет прямо, в случае, когда текущее показание освещенности (показание на границе линии) равно LA. Такую мощность мы назвали средней мощностью.Легко предположить, что бывают ситуации, при которых средняя мощность может принимать другие значения.Например, если линия, вдоль которой происходит движение, практически не изменяет своего направления, средняя скорость может быть больше, потому что ситуации, когда робот выскочит за линию и начнет снова ее искать, очень редки.Другой пример - очень извилистая линия. Здесь средняя скорость может быть, наоборот, очень низкая, чтобы избегать вылетания с трассы и потери времени на поиск границы линии.Существуют и другие причины для выбора средней скорости отличной от 50%: при большом диаметре колеса она может быть меньше, чем при маленьком диаметре, при большой нагрузке на робота или при севших батарейках скорость придется увеличить, иначе робот будет двигаться слишком медленно и т.д.Итак, для простоты объяснения рассмотрим оба варианта: один, когда средняя скорость меньше 50%, и второй, когда скорость больше 50%.Первый вариант: PA (средняя скорость ) > 50%Представим, что робот едет по границе линии, а затем съезжает с нее, т.е. сначала освещенность примерно равна LA, а затем увеличивается до Lmax.Одно из колес при этом должно полностью остановиться, чтобы движение второго вернуло робота на линию, т.е. мощность на этом колесе должна измениться со значения PA до 0.В действительности, если продолжать рассчитывать коэффициент и мощность по старым формулам, то произойдет примерно следующее:Пусть LA = 42, а Lmax = 60, а PA = 70, тогда KP = 2,78.Из таблицы видно, что скорее всего колесо не остановится и будет медленно, но вращаться, что может привести к тому, что робот потеряет линию.Следовательно, значения, использующиеся в формуле вычисления мощности, должны быть изменены таким образом, чтобы обеспечить изменение мощности от PA до 0 при изменении освещенности от LA до Lmax. Иными словами, каждому значению из диапазона от LA до Lmax должно быть поставлено в соответствие значение мощности от PA до 0.Используя свойства подобных треугольников, можно вывести формулу для коэффициента пропорциональности:Теперь, если в формулу подставить значения, приведенные выше, то KP станет равным:А мощность при разных значениях L:Следует заметить, что в таблице появляются мощности выше 100 - такие значения не требуют никакой специальной обработки - firmware на NXT блоке в таких случаях автоматически будет использовать максимальную возможную мощность - 100%.Второй вариант: PA (средняя скорость ) < 50%.Робот сейчас и так едет достаточно медленно, но дело еще усугубляется тем, что при сильном съезде с границы линии робот не спешит возвращаться на нее - особенно это актуально для трассы с крутыми поворотами, представленной на картинке выше.Значения в таблице показывают, что на моторы при заезде на светлую часть трассы (или темную) никогда не будет подаваться максимум энергии.Чтобы добиться подачи максимально возможной энергии на мотор, нужно сопоставить каждому значению из диапазона LA ... Lmax значение мощности от PA до 100. Проделаем преобразования, аналогичные тем, что представлены выше:Это приведет к следующим показаниям мощности.Видно, что увеличением удалось добиться максимальной мощности в 100%. При этом также начали появляться отрицательные значения мощности. Что, без специальной обработки, может привести к неправильному поведению робота - само поведение и как избежать его описывалось в прошлой заметке.В двух вариантах для вычисления коэффициента получились две разные формулы, которые отличаются лишь верхней частью делимого. Можно рассмотреть, есть ли какая-нибудь закономерность в этих частях, так, чтобы все-таки свести их к единой формуле.Если провести дальнейшую подстановку полученных разностей в формулы для вычисления коэффициента, то можно будет заметить, что "правильному" коэффициенту (тому, который приводит приближение мощности при крайних значениях освещенности к 100 или 0) соответствуют максимальные значения разности. Отсюда математическая запись формулы приходит к следующему виду:Что по сути обозначает - для вычисления коэффициента пропорциональности линейного регулятора выберите наибольшую разность между максимальной желаемой мощностью и средней мощностью или между средней мощностью и минимальной желаемой мощностью.В формуле умышленно брались Pmax и Pmin вместо 100 и 0, для того, чтобы показать, что в определенных случаях желаемые максимальные и минимальные мощности могут отличаться от предельно допустимых, если программист робота точно понимает какого результата он хочет добиться. Но в большинстве случаев, вместо Pmax следует использовать 100, а вместо Pmin - 0.Чтобы посмотреть, как может выглядеть программа на языке NXT-G, вычисляющая коэффициент пропорциональности линейного регулятора для движения робота-тележки вдоль границы черной линии, можно перейти по этой ссылке. алгоритмы датчики робототехника