четверг, 25 октября 2012 г.

Алгоритмы: черно-белое движение. Часть V

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

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

Для составления таблицы еще раз укажем формулы зависимости мощностей от показаний датчика, а также будем считать, что датчик на самом светлом участке поля (Lmax) показывает 60%, а на темном (Lmin) - 24%, таким образом получается, что ожидаемая освещенность на границе линии (LA) - 42%.

Из этих данных видно, что в то время, как показания на датчике достигают своего минимума или максимума, возможного на этом поле, мощность моторов никогда не доходит до 100%, а также моторы никогда полностью не останавливаются. Вместо этого значения мощности не выходят за пределы диапазона от 32 до 68 процентов.


Следовательно, необходимо придумать механизм (преобразование), который бы позволил при отклонении в -18 или 18 получать терминальные значения мощности (0% и 100%). Для этого запишем значения мощности в виде минимального и максимального необходимых значений: -50 и 50, с учетом того, что "средняя" мощность 50%.
Т.е. при отклонении -18 мощность на моторе B должна упасть до 0% - измениться на -50 от средней мощности, а при отклонении 18 мощность на моторе B должна наоборот возрасти до 100% - измениться на +50 к средней мощности.

Поэтому преобразовать надо -18 в -50, или увеличить -18 в 2,78 раз, чтобы получить -50, и в тоже самое время для преобразования 18 в +50, надо 18 увеличить в эти же 2,78 раз.

Необходимо напомнить, что 18 (или -18) - это отклонение текущей освещенности от освещенности на границе линии - LA - L. Таким образом, формулы определяющие зависимость мощности на моторах от освещенности теперь приобретут такой вид:
Где LA * 2,78 - называют пропорциональной составляющей линейного регулятора управляющего мощностью мотора в зависимости от показаний на датчике освещенности.

За счет этой небольшой модификации, значения мощностей, вычисленных по данным формулам, будут иметь уже вполне ожидаемый вид - изменяться от 0% до 100%. При 24% освещенности (Lmin) - колесо B будет вращаться с максимальной скоростью, а при 60% освещенности (Lmax) - полностью остановится.


Значение "2,78" называют коэффициентом пропорциональной составляющей линейного регулятора. Он не будет одним и тем же во всех программах, поскольку напрямую зависит от диапазона значений датчика освещенности, которые он может выдавать на конкретном поле при расположении на определенной высоте над поверхностью поля и в зависимости от многих других параметров.

При условиях, подобных текущему, когда средняя мощность должна быть 50%, и моторы должны варьировать свою мощность от 0% до 100% (т.е. изменяться максимум на 50 от средней мощности), формула определения коэффициента пропорционального регулятора будет следующей.
Например, если диапазон значений датчика освещенности - от 10 до 80, то коэффициент будет 1,43; если от 40 до 90, то KP = 2; если от 30 до 50, то KP = 5.

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

Комментариев нет:

Отправить комментарий

Related Posts Plugin for WordPress, Blogger...