- Кружок «Робототехника» в г.Томске
- Ведется набор детей у педагога Бойкова Е.А.
- Движение вдоль стены
- Не правда ли программа, заданная в качестве задачки на понимание NXT-G в этом посте, похожа на программы, поясняющие движение вдоль линии?
- Робот движение вдоль стены
- пятница, 26 ноября 2010 г.
- Алгоритмы: движение вдоль стены
- Роботы MindStorms
- Страницы
- Облако тегов:
- ДО курс по робототехнике
- 3 апреля 2013 г.
- Алгоритмы: движение вдоль стены
- Как построить робота – следование за стеной
- Обзор
- Следование за стенами
- Программирование
- robot_wall_follower.ino
- robot.h
- robot.ino
- Следование вдоль стен на моей кухне
- Заключение
- Управление движением робота при помощи системы с отрицательной обратной связью
- Релейный регулятор
Кружок «Робототехника» в г.Томске
Ведется набор детей у педагога Бойкова Е.А.
Движение вдоль стены
Не правда ли программа, заданная в качестве задачки на понимание NXT-G в этом посте, похожа на программы, поясняющие движение вдоль линии?
Разница между программами в том, что в одной используются сенсор расстояния, а в другой — сенсор овещенности. В остальном программы похожи: робот меняет направление поворота после того как значение на сенсоре измениться.
Если быть более точным, то в задаче робот поворачивает вправо, если расстояние на сенсоре меньше 14 см. и влево, если расстояние на сенсоре больше 16 см. Сложно представить, для чего может понадобиться такое движение, если сенсор смотрит вперед или назад. Но многое встает на свои места, если предположить, что сенсор установлен на одном из бортов робота и смотрит в сторону.
Если нарисовать схему такого движения, то становится видно, что по левому борту робота на протяжении всего движения, находится какое-то препятствие и робот пытается не подъезжать к нему слишком близко и не отъезжать слишком далеко. Если предположить, что препятствие это стена, то движение робота можно назвать движением вдоль стены. При некрутых заворотах стены, робот будет стараться держаться на определенном расстоянии, т.е. поворачивать вместе с заворотом стены.
Как и с предложенным алгоритмом движения вдоль линии, следует помнить, что данная реализация движения вдоль стены тоже является базовой для изучения. Т.е. при решениях реальных задач, алгоритм движения будет значительно сложнее, но принцип движения останется тот же.
Сейчас же хотелось бы обратить внимание на одну деталь, об которую довольно часто «спотыкаются» те, кто только начинает реализовывать дивжение вдоль стены.
В общем случае, движение робота параллельно стене и сенсор расстояния показывает вполне ожидаемые значение, на основе которых принимается решение в какую сторону поворачивать.
Но может возникнуть ситуация, когда робот в попытке вновь приблизиться к стене, значительно повернется к ней. Это приведет к тому, что сенсор начнет показывать очень большое расстояние — данные после отражения от стены не поступают в сенсор и он «думает», что препятствие еще слишком далеко.
В этом случае, робот будет стараться приблизиться к стене, увеличивая угол между сенсором и стеной, что только будет усугублять ситуацию.
Источник
Робот движение вдоль стены
пятница, 26 ноября 2010 г.
Алгоритмы: движение вдоль стены
Не правда ли программа, заданная в качестве задачки на понимание NXT-G в этом посте, похожа на программы, поясняющие движение вдоль линии, в этом?
Разница между программами в том, что в одной используются сенсор расстояния, а в другой — сенсор овещенности. В остальном программы похожи: робот меняет направление поворота после того как значение на сенсоре измениться.
Если быть более точным, то в задаче робот поворачивает вправо, если расстояние на сенсоре меньше 14 см. и влево, если расстояние на сенсоре больше 16 см. Сложно представить, для чего может понадобиться такое движение, если сенсор смотрит вперед или назад. Но многое встает на свои места, если предположить, что сенсор установлен на одном из бортов робота и смотрит в сторону.
Если нарисовать схему такого движения, то становится видно, что по левому борту робота на протяжении всего движения, находится какое-то препятствие и робот пытается не подъезжать к нему слишком близко и не отъезжать слишком далеко. Если предположить, что препятствие это стена, то движение робота можно назвать движением вдоль стены. При некрутых заворотах стены, робот будет стараться держаться на определенном расстоянии, т.е. поворачивать вместе с заворотом стены.
Кстати, этот вариант ответа (движение вдоль стены) тоже был среди ответов, которые были присланы после публикации задачи.
Как и с предложенным алгоритмом движения вдоль линии, следует помнить, что данная реализация движения вдоль стены тоже является базовой для изучения. Т.е. при решениях реальных задач, алгоритм движения будет значительно сложнее, но принцип движения останется тот же.
Сейчас же хотелось бы обратить внимание на одну деталь, об которую довольно часто «спотыкаются» те, кто только начинает реализовывать дивжение вдоль стены.
В общем случае, движение робота параллельно стене и сенсор расстояния показывает вполне ожидаемые значение, на основе которых принимается решение в какую сторону поворачивать.
Но может возникнуть ситуация, когда робот в попытке вновь приблизиться к стене, значительно повернется к ней. Это приведет к тому, что сенсор начнет показывать очень большое расстояние — данные после отражения от стены не поступают в сенсор и он «думает», что препятствие еще слишком далеко.
В этом случае, робот будет стараться приблизиться к стене, увеличивая угол между сенсором и стеной, что только будет усугублять ситуацию.
Источник
Роботы MindStorms
Роботы в работе! Создаем, программируем, проектируем, соревнуемся и выигрываем!
Страницы
Облако тегов:
ДО курс по робототехнике
3 апреля 2013 г.
Алгоритмы: движение вдоль стены
Не правда ли программа, заданная в качестве задачки на понимание NXT-G в этом посте, похожа на программы, поясняющие движение вдоль линии, в этом ?
Разница между программами в том, что в одной используются сенсор расстояния, а в другой — сенсор освещенности В остальном программы похожи: робот меняет направление поворота после того как значение на сенсоре измениться.
Если быть более точным, то в задаче робот поворачивает вправо, если расстояние на сенсоре меньше 14 см. и влево, если расстояние на сенсоре больше 16 см. Сложно представить, для чего может понадобиться такое движение, если сенсор смотрит вперед или назад. Но многое встает на свои места, если предположить, что сенсор установлен на одном из бортов робота и смотрит в сторону.
Если нарисовать схему такого движения, то становится видно, что по левому борту робота на протяжении всего движения, находится какое-то препятствие и робот пытается не подъезжать к нему слишком близко и не отъезжать слишком далеко. Если предположить, что препятствие это стена, то движение робота можно назвать движением вдоль стены . При некрутых заворотах стены, робот будет стараться держаться на определенном расстоянии, т.е. поворачивать вместе с заворотом стены.
Кстати, этот вариант ответа (движение вдоль стены) тоже был среди ответов, которые были присланы после публикации задачи .
Как и с предложенным алгоритмом движения вдоль линии, следует помнить, что данная реализация движения вдоль стены тоже является базовой для изучения. Т.е. при решениях реальных задач, алгоритм движения будет значительно сложнее, но принцип движения останется тот же.
Сейчас же хотелось бы обратить внимание на одну деталь, об которую довольно часто «спотыкаются» те, кто только начинает реализовывать движение вдоль стены.
В общем случае, движение робота параллельно стене и сенсор расстояния показывает вполне ожидаемые значение, на основе которых принимается решение в какую сторону поворачивать.
Но может возникнуть ситуация, когда робот в попытке вновь приблизиться к стене, значительно повернется к ней. Это приведет к тому, что сенсор начнет показывать очень большое расстояние — данные после отражения от стены не поступают в сенсор и он «думает», что препятствие еще слишком далеко.
В этом случае, робот будет стараться приблизиться к стене, увеличивая угол между сенсором и стеной, что только будет усугублять ситуацию.
Источник
Как построить робота – следование за стеной
Как построить робота (от Travis Fagerness)
Заставьте своего робота следовать за стеной!
Обзор
Это шестая часть из серии статей о моем опыте построения робота, который мог бы выполнять разные простые вещи. Я думал, что было бы замечательно создать робота, которого легко было бы собрать лишь с одним паяльником, и комплектующие к нему были бы доступны. Я составил следующий список требований к этому роботу:
- Многие наборы стоят дорого, поэтому он должен быть относительно недорог.
- Он должен быть простым в сборке, не требуя специального оборудования.
- Он должен быть простым в программировании, не требуя сложных IDE и программатора.
- Он должен быть мощным для расширяемости.
- Он должен запускаться от простого источника питания.
- Он должен быть способен следовать за линией или за стеной и избегать препятствий.
В данной статье я расскажу о том, как запрограммировать робота, чтобы тот следовал за стенами.
Следование за стенами
Чтобы следовать за стенами, вам нужно как минимум два датчика (2 бита информации) для обработки четырех потенциальных ситуаций, в которых робот может оказаться. Один датчик должен быть спереди, а второй слева или справа от робота. Чем больше датчиков вы используете, тем больше будет у вас информации, позволяющей лучше определить, что происходит. Для этого примера я использовал только два. Робот не может найти стену, поэтому вы должны поместить робота рядом с ней. Если вы поместите робота посередине робота, он будет просто кататься по кругу.
Передний датчик | Правый датчик | Ситуация | Действие |
---|---|---|---|
нет | нет | Робот удаляется от стены | Вернуться назад к стене, повернуть направо. |
да | нет | Робот далеко от стены, но направлен на стену или на препятствие. | Резко повернуть налево, чтобы встать параллельно со стеной. |
нет | да | Робот следует вдоль стены. | Двигаться вперед. |
да | да | Робот находится в углу. | Резко повернуть налево. |
Для правильной работы мне пришлось добавить код для резкого поворота налево. Резкий поворот налево просто означает, что я включаю только правое колесо, поэтому робот разворачивается практически на месте, а не продолжает при повороте двигаться вперед. Я не мог медленно поворачиваться, как в примере со следованием за линией, потому что мы не знаем, насколько близко робот находится от стены. Это ограничение датчика, который я выбрал, поскольку отраженный сигнал зависит от типа поверхности. Кроме того, используется только двоичная логика, поскольку нет способа определить расстояние на основе показаний выбранного датчика. Если бы мы знали расстояние, то могли бы добавить дополнительную логику, чтобы изменять скорость в зависимости от расстояний, чтобы робот быстрее перемещался по комнате. На самом деле я не смог получить от датчика показаний принятого сигнала, отраженного от полностью черной поверхности; поэтому на видео вы увидите, что перед посудомоечной машиной мне пришлось положить белую поверхность. У ультразвукового датчика такой проблемы не будет.
Программирование
Приведенный ниже скетч реализует следующую логику:
- Запускает драйвер робота и ждет 5 секунд. Это дает нам время поставить робота у стены, прежде чем он начнет движение.
- Прочитать показания датчиков.
- Определить состояние по таблице истинности, используя инструкции if .
- Каждый оператор выполняет действие, зависящее от состояния датчиков.
Примечание: в каталог со скетчем программы необходимо поместить файлы библиотеки Robot ( robot.ino и robot.h ), исходный текст которых приведен в третьей статье из данной серии.
robot_wall_follower.ino
Для резкого поворота налево необходимо внести некоторые изменения в файлы robot.h и robot.ino .
robot.h
Добавьте HARD_LEFT в перечисление направлений.
robot.ino
Добавьте case для HARD_LEFT в rbt_move() .
Следование вдоль стен на моей кухне
Заключение
В данной статье я показал, как вы можете использовать датчики приближения для следования вдоль стен, чтобы перемещаться по комнате. Это завершает серию статей по созданию робота. Теперь робот может автономно следовать за линией, вдоль стены и избегать препятствий. Можете объединить их в одном роботе, который мог бы делать всё это? Вы также можете добавить управление, добавив BLE модуль, и управлять модулем со своего телефона!
Источник
Управление движением робота при помощи системы с отрицательной обратной связью
Релейный регулятор
Пример 9.1. Движение робота вдоль стены.
Пусть имеется робот, оснащённый датчиком ультразвука, и не очень ровная стена (с небольшими выступами и впадинами). Требуется написать программу управления движением робота вдоль стены на заданном расстоянии.
Следует заранее продумать положение датчика ультразвука. Как упоминалось выше (см. с. 38), этот датчик медленный. Поэтому его следует располагать чуть впереди корпуса робота. Кроме этого, его следует сместить как можно дальше от стены (см. Рис. 9.1), потому что на малых расстояниях (5 — 7 см) показания датчика ультразвука становятся слишком неточными. Далее мы увидим, что направление датчика также следует подкорректировать.
Алгоритм движения робота, записанный в словесной форме, может быть примерно таким (Рис. 9.2):
- двигаться прямо;
- если расстояние до стены больше заданного, то повернуть к стене;
- если расстояние до стены меньше заданного, то повернуть от стены;
- повторять шаги 2 — 3 бесконечно (или до наступления некоторого события).
Одним из самых очевидных решений этой задачи является релейный регулятор.
Для определённости примем в качестве заданного расстояния 20 см. Получим следующую программу (Рис. 9.3):
Как видно из текста программы, после включения обоих моторов запускается бесконечный цикл, в котором реализован вышеописанный словесный алгоритм. Хорошо заметной особенностью этого подхода является «рыскающее» движение: робот всегда поворачивает с одной и той же интенсивностью, независимо от того, насколько далеко или близко он оказался по отношению к стене. Поэтому траектория всегда будет зигзагообразной, так как во время поворотов робот всегда будет «прыгать» вокруг среднего значения 20 см. Так как датчик ультразвука является «медленным», в цикле используется небольшая задержка (0,1 с) для того, чтобы показания датчика успевали обрабатываться блоком NXT. Величина задержки фактически определяет время, в течение которого робот будет двигаться в неизменном направлении. Другими словами, увеличивая время задержки мы получим более крупные «зубцы» траектории. Как отмечалось ранее, делать задержку меньше 0,06 с не имеет смысла, потому что в этом случае датчик ультразвука просто не успеет провести измерения.
При использовании релейного регулятора возможны частые уходы робота с дистанции. Одна из причин состоит в том, что при выбранном нами расположении датчика ультразвука робот не сможет различать положения, симметричные относительно нормального положения. То есть два положения, показанные на Рис. 9.4 будут идентичными, и расстояние до стены в обоих случаях окажутся больше 20 см. В соответствии с вторым шагом алгоритма робот должен повернуть к стене (влево). И если для второго положения это верно, то для первого — ошибочно: робот ещё больше уйдёт с трассы.
Эту проблему можно решить, если расположить датчик не перпендикулярно к направлению движения (т. е. строго влево), а под углом 45° к направлению движения (Рис. 9.5).
Так нам удастся избежать случая, показанного на Рис. 9.4. Действительно, при подруливании влево расстояние до стены будет (при небольших углах поворота U(t) на моторы робота в момент времени t вычисляется по формуле:
( 9.1) |
— отклонение робота от заданного положения (другими словами, ошибка, Error , или ещё говорят невязка);
— заданное расстояние до стены (у нас 20 см);
— текущее показание датчика;
— усиливающий коэффициент (коэффициент пропорциональности). Всегда положительный.
Очевидно, графиком для расчёта управляющего воздействия U в зависимости от ошибки E будет прямая (см. Рис. 9.6):
Из графика очень просто определить коэффициент . Выберем произвольную точку на графике. В нашем случае это точка A(1; 2) . Тогда
Ошибка может быть как положительная (если мы ближе к стене, чем надо), так и отрицательная (если мы отъехали от стены дальше, чем необходимо). Таким образом, управляющее воздействие U(t) тоже может быть как положительным, так и отрицательным.
Пусть мы имеем P-регулятор для робота, движущегося вдоль стены. Тогда мощность моторов PowerB(t) и PowerC(t) в момент времени t вычисляется по формулам:
( 9.2) |
( 9.3) |
- Nm — нормальная мощность моторов: мощность, с которой должны крутиться оба двигателя, если отклонение от курса равно нулю. В нашей программе можно положить Nm = 50;
- U(t) — управляющее воздействие на моторы, вычисляемое по формуле (9.1).
Рассмотрим смысл коэффициента пропорциональности . Как видно, поворот производится в силу того, что от мощности одного мотора управляющее воздействие вычитается, тогда как к другому — прибавляется. Таким образом коэффициент
может усиливать или ослаблять воздействие регулятора на моторы: если он больше единицы, то происходит усиление, а если меньше — ослабление. Большой
сделает робот очень чутким к ошибкам, что приведёт к резким рывкам для исправления траектории. Малый
сделает движения робота плавнее, но на крутых поворотах робот может потерять стену и сойти с траектории. Конкретные значения коэффициента
, наиболее подходящие в каждом конкретном случае, будут зависеть от конструктивных особенностей робота, скорости движения (нормальной мощности), сложности трассы, используемых датчиков. Величины PowerB(t) и PowerC(t) должны лежать в диапазоне [0; 100] . Поэтому при больших ошибках (и, соответственно, больших управляющих сигналах) мощность моторов будет ограничиваться так, чтобы она не выходила из указанного диапазона. В этом случае пропорциональный регулятор не будет работать корректно, поскольку не сможет скомпенсировать большие ошибки. Таким образом, одной из особенностей P-регулятора является адекватная работа только при небольших ошибках. Для того, чтобы учесть это в нашей задаче нужно иметь стену без резких поворотов и двигаться с небольшой скоростью.
Реализуем алгоритм P-регулятора согласно приведённым формулам при помощи вложенных процедур ( My blocks ) на языке NXT-G.
Блок вычисления отклонения (ошибки) от заданного расстояния, который мы назовём Error , имеет следующие параметры:
- входные — текущее показание датчика расстояния X(t) ;
- выходные — ошибка E(t)) .
Блок Error на языке NXT-G выглядит так:
Мы используем его в подпрограмме для вычисления управляющего воздействия U(t) . Она имеет следующие параметры:
- входные — текущее показание датчика X(t) ;
- выходные — управляющее воздействие на моторы.
Этот блок мы используем для разработки блока P-регулятора. Он будет иметь следующие параметры:
- входные — текущее показание датчика;
- выходные — мощность моторов B и C .
Наконец, полная программа, реализующая бесконечное движение вдоль стены, получается с использованием блока P-регулятора и формул (9.2) и (9.3):
Задание 9.4. Реализуйте предложенный алгоритм движения вдоль стены с использованием P-регулятора. Проверьте его работу. Настройте регулятор при помощи подбора коэффициента .
Задание 9.5. Реализуйте алгоритм следования по линии с использованием P-регулятора. Настройте регулятор, добиваясь наиболее уверенного прохождения роботом крутых поворотов.
Задание 9.6. Проведите соревнование в своей группе да скоростное прохождение трассы.
Задание 9.7. После того, как робот стал двигаться по линии более или менее уверенно, попробуйте (1) увеличить подобранный коэффициент вдвое; (2) уменьшить подобранный коэффициент
вдвое. Как изменяется характер движения робота? Удаётся ли ему пройти трассу? Какие участки наиболее проблемны?
Задание 9.8. Реализуйте алгоритм следования за рукой с использованием P-регулятора (см. задание 5.4 на с. 63). Настройте регулятор так, чтобы движение робота стало как можно более плавным.
Тем не менее, использование P-регулятора не позволяет решить задачу полностью: движение робота будет сильно зависеть от его конструкции, настроек регулятора и пр. Чтобы движение стало ещё стабильнее, нужно обратиться к более интеллектуальным алгоритмам. В первую очередь здесь следует назвать пропорционально-дифференциальный (PD) и пропорционально-интегрально-дифференциальный (PID) регуляторы. В настоящем пособии начального уровня указанные алгоритмы изучаться не будут. Интересующихся мы отсылаем к книге С. А. Филиппова [6], где подробно рассмотрены эти и другие интереснейшие задачи.
Источник