Объезд препятствий: различия между версиями

Материал из MIK32 микроконтроллер
(Новая страница: «мини В рамках этой статьи мы постараемся составить свой алгоритм объе...»)
 
Нет описания правки
Строка 10: Строка 10:




 
Включаем датчики:
<nowiki>#</nowiki>Включаем датчики:
[[Файл:Включение датчиков.png|слева|безрамки|382x382пкс]]
[[Файл:Включение датчиков.png|слева|безрамки|382x382пкс]]






<nowiki>#</nowiki>Считаем показания датчиков:
Считаем показания датчиков:[[Файл:Показание датчиков.png|слева|безрамки|415x415пкс]]
[[Файл:Показание датчиков.png|слева|безрамки|415x415пкс]]
 


После запуска симуляции, мы наблюдаем следующие показания в консоли:
После запуска симуляции, мы наблюдаем следующие показания в консоли:
[[Файл:ConsolePS Test.png|слева|безрамки]]
[[Файл:ConsolePS Test.png|слева|безрамки]]




Строка 29: Строка 27:
Из технической документации на сайте Webots, мы знаем, что ps7 и ps0- это передний левый и правый датчики соответственно, ps5 и ps2-левый и правый, расположенные по бокам, а ps4 и ps3-задний левый и задний правый. Из консоли мы получаем значения, считываемые этими датчиками. Эти показания понадобятся нам для того, чтобы создать функцию поворота, по мере приближения к препятствию. e-puck может обнаружить стену перед собой, если мы подключим один из передних датчиков, проделаем это с ps7
Из технической документации на сайте Webots, мы знаем, что ps7 и ps0- это передний левый и правый датчики соответственно, ps5 и ps2-левый и правый, расположенные по бокам, а ps4 и ps3-задний левый и задний правый. Из консоли мы получаем значения, считываемые этими датчиками. Эти показания понадобятся нам для того, чтобы создать функцию поворота, по мере приближения к препятствию. e-puck может обнаружить стену перед собой, если мы подключим один из передних датчиков, проделаем это с ps7
[[Файл:Подключение датчика ps7.png|слева|безрамки|333x333пкс]]
[[Файл:Подключение датчика ps7.png|слева|безрамки|333x333пкс]]




Строка 44: Строка 45:




Так же добавляем соответствующие условие
Так же добавляем соответствующие условие[[Файл:Left corner.png|слева|безрамки]]
[[Файл:Left corner.png|слева|безрамки]]






Окончательный вариант этого алгоритма выглядит следующим образом:
Окончательный вариант этого алгоритма выглядит следующим образом:[[Файл:Алгоритм объезда препятствий.png|слева|безрамки|476x476пкс]]
[[Файл:Алгоритм объезда препятствий.png|слева|безрамки|476x476пкс]]

Версия от 22:05, 28 мая 2021

Лабиринт.png

В рамках этой статьи мы постараемся составить свой алгоритм объезда препятствий для робота e-puck в среде Webots. Для примера будет построен лабиринт, где робот должен будет успешно избегать столкновений с препятствиями и объезжать их. Сначала нам необходимо будет построить сам лабиринт на арене, этот момент мы пропустим. Затем нам нужно добавить на арену робота e-puck и создать для него новый контроллер, программируемый python. Теперь, когда все готово, переходим к написанию самого алгоритма.

И так, обращаясь к конфигурации робота e-puck, на официальном сайте Webots, мы знаем, что у нашего робота есть 2 двигателя, называемых Мотором левого и правого колос соответственно. У нас так же имеется 8 датчиков приближения, имеющих имена: PS0; ... ; PS8. Попробуем включить оба двигателя и все датчики.

  • #Включаем все двигатели:
Включаем двигатели.png


Включаем датчики:

Включение датчиков.png


Считаем показания датчиков:

Показание датчиков.png

После запуска симуляции, мы наблюдаем следующие показания в консоли:

ConsolePS Test.png




Из технической документации на сайте Webots, мы знаем, что ps7 и ps0- это передний левый и правый датчики соответственно, ps5 и ps2-левый и правый, расположенные по бокам, а ps4 и ps3-задний левый и задний правый. Из консоли мы получаем значения, считываемые этими датчиками. Эти показания понадобятся нам для того, чтобы создать функцию поворота, по мере приближения к препятствию. e-puck может обнаружить стену перед собой, если мы подключим один из передних датчиков, проделаем это с ps7

Подключение датчика ps7.png



И так, мы разрабатываем следующий алгоритм движения:

опираясь на показания переднего и бокового левого датчиков, робот будет следовать вдоль левой стенки пока перед ним впереди не будет препятствий. Как только это условие будет нарушено, возникшем впереди препятствием, робот совершит поворот направо, если же стенки слева не будет, то робот должен будет выполнить поворот налево. И последнее условие: если стенки слева нет, а впереди есть препятствие, то робот поворачивает направо.

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

Здесь возможны ошибки!

В процессе движения робот может слишком близко подойти к стенке, это может затруднить или вовсе остановить процесс его движения. Следовательно нам нужно сделать так, чтобы робот мог отъехать от левой стенки, если она находится к нему слишком близко. Для этого задействует датчик ps6, который находится между левым боковым-ps5 и левым передним-ps7.

Подключаем ps6.png


Так же добавляем соответствующие условие

Left corner.png


Окончательный вариант этого алгоритма выглядит следующим образом:

Алгоритм объезда препятствий.png