ѕродвинутый алгоритм движени€ по линии

15.01.2012, 18:51



ƒо сих пор в стать€х о алгоритмах, использующихс€ при движении вдоль линии, рассматривалс€ такой способ, когда датчик освещенности как бы следил за левой или правой ее границей: чуть робот съедет на белую часть пол€ - регул€тор возвращал робота на границу, начнет датчик перемещатьс€ вглубь черной линии - регул€тор выправл€л его обратно.
Ќе смотр€ на то, что картинка выше приведена дл€ релейного регул€тора, общий принцип движени€ пропорционального (ѕ-регул€тора) будет такой-же.  ак уже говорилось, средн€€ скорость такого перемещени€ не очень высока€ и было сделано несколько попыток увеличить ее за счет незначительного усложнени€ алгоритма: в одном случае использовалось "м€гкое" торможение, в другом, помимо поворотов, вводилось движение вперед.
ƒл€ того, чтобы позволить роботу на некоторых участках двигатьс€ вперед, в диапазоне значений выдаваемых датчиком освещенности выдел€лс€ узкий участок, который условно можно было назвать "датчик находитс€ на границе линии".
” данного подхода есть небольшой недостаток - если робот "следит" за левой границей линии, то на правых поворотах он как бы не сразу определ€ет искривлени€ траектории и, как следствие, тратит большее врем€ на поиск линии и поворот. ѕричем, можно с уверенностью сказать, что чем, круче поворот, тем дольше по времени происходит этот поиск.
Ќа следующем рисунке видно, что если бы датчик находилс€ не с левой стороны от границы, а с правой, то он уже обнаружил искривление траектории и начал бы совершать маневры по повороту.
ѕоэтому хорошей идеей €вл€етс€ оснастить робота сразу двум€ датчиками, которые располагались по разные стороны от линии и, соответственно, помогали бы роботу более оперативно реагировать на изменение направлени€ движени€.
“еперь необходимо определить, как такое изменение конструкции скажетс€ на программе. ƒл€ простоты оп€ть следует начать с простейшего релейного регул€тора и поэтому, в первую очередь, интересуют возможные положени€ датчиков относительно линии:
Ќа самом деле, можно выделить еще одно допустимое состо€ние - на сложных трассах это будет пересечение перекрестка или какого-то утолщени€ на пути.
ƒругие положени€ датчиков рассматриватьс€ не будут, потому что либо €вл€ютс€ производными от показанных выше, либо это такие положени€ робота, когда он сошел с линии и уже не сможет вернуть себ€ на нее использу€ информацию с датчиков. ¬ итоге, все перечисленные положени€ можно свести к следующей классификации:
  • левый датчик, также как и правый - над светлой поверхностью
  • левый датчик над светлой поверхностью, правый датчик над темной
  • левый датчик над темной поверхностью, правый датчик над светлой
  • оба датчика наход€тс€ над темной поверхностью
≈сли в определенный момент времени программа на роботе обнаруживает одно и из этих положений, она должна будет среагировать соответствующим образом:
  • ≈сли оба датчика над белой поверхностью, то это нормальна€ ситуаци€, в которой лини€ находитс€ между датчиками, поэтому робот должен ехать пр€мо.
  • ≈сли левый датчик еще над светлой поверхностью, а правый датчик уже над темной, значит, робот заехал своей правой частью на линию, а значить ему нужно поворачивать направо, чтобы лини€ оп€ть оказалась между датчиками.
  • ≈сли левый датчик оказалс€ над темной поверхностью, а правый еще над светлой, то дл€ выравнивани€ роботу нужно поворачивать налево.
  • ≈сли оба датчика над темной поверхностью, то в общем случае, робот оп€ть продолжает двигатьс€ пр€мо.
Ќа схеме выше сразу же показано, как конкретно в программе должно мен€тьс€ поведение моторов.“еперь, написание программы не должно составить большого труда.Ќачать стоит с того, чтобы выбрать какой датчик будет опрашиватьс€ первым. Ёто не имеет большого значени€, поэтому пусть будет левый. Ќеобходимо определить, над светлой или над темной он поверхностью:
Ёто действие еще не позвол€ет сказать в какую сторону роботу надо ехать. Ќо оно разделит состо€ни€, перечисленные выше, на две группы: (I, II) дл€ верхней ветви и (III, IV) дл€ нижней. ¬ каждой из групп теперь по два состо€ни€, поэтому необходимо выбрать какое-то из них. ≈сли внимательно посмотреть на первые два состо€ни€ I и II, то они отличаютс€ положением правого датчика - в одном случае он над светлой поверхностью, в другом - над темной. »менно это и определит выбор, какое действие предприн€ть:
“еперь можно вставить блоки, определ€ющие поведение моторов согласно таблицам выше: верхн€€ ветвь вложенного услови€ определ€ет комбинацию "оба датчика на светлом", верхн€€ - "левый на светлом, правый на темном":
Ќижн€€ ветка основного услови€ отвечает за другую группу состо€ний III и IV. Ёти два состо€ни€ также отличаютс€ друг от друга уровнем освещенности, который улавливает правый датчик. «начит, он будет определ€ть выбор каждого из них:
ѕолучившиес€ две ветви наполн€ютс€ блоками движени€. ¬ерхн€€ ветвь отвечает за за состо€ние "левый на темном, правый на светлом", а нижн€€ - за "оба датчика на темном".
—ледует отметить, что данна€ конструкци€ всего лишь определ€ет, как включить моторы в зависимости от показаний сенсоров в определенном месте пол€, естественно через мгновение программа должна проверить не изменились ли показани€, чтобы соответствующим образом подправить поведение моторов, а через мгновение еще раз, еще и т.д. ѕоэтому она должна быть помещена в цикл, который будет обеспечивать такую повтор€ющуюс€ проверку:
“ака€ довольно проста€ программа будет обеспечивать довольно высокую скорость передвижени€ робота вдоль линии без вылета за ее пределы, если правильным образом настроить максимальную скорость при движении в состо€ни€х I и IV, а также задать оптимальный способ торможени€ в состо€ни€х II и III - чем круче повороты на трассе, тем "жестче" должно быть торможение - скорость должна сбрасыватьс€ быстрее, и наоборот - при плавных поворотах вполне можно примен€ть торможение через выключение энергии или даже вообще через незначительный сброс скорости.

ѕо размещению датчиков на роботе тоже следует сказать несколько отдельных слов. ќчевидно, что по расположению этих двух датчиков относительно колес будут действовать те же самые рекомендации, что и дл€ одного датчика, только за вершину треугольника при этом беретс€ середина отрезка соедин€ющий два датчика. —амо же рассто€ние между датчика тоже должно выбиратьс€ из характеристик трассы: чем ближе датчики будут расположены друг к другу, тем чаще робот будет выравниватьс€ (выполн€ть относительно медленные развороты), но если разнести датчики достаточно широко, то есть риск вылета с трассы, поэтому придетс€ выполн€ть более "жесткие" повороты и уменьшать скорость передвижени€ на пр€мых участках.

»сточник: https://nnxt.blogspot.ru/


≈сли вы хотите видеть на нашем сайте больше статей то кликните ѕоделитьс€ в социальных сет€х! —пасибо!
—мотрите также:

ќбратите внимание полезна€ информаци€.