LXF157:Школа LXF
|
|
|
Школа LXF
Обмен опытом и передовые идеи по использованию свободного ПО в образовании
Содержание |
Взаимодействуем с окружением, или И роботы чувствовать умеют
Татьяна Казанцева продолжает рассказывать о робототехнике, которая обходится без реальных роботов.
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
Сегодня речь пойдет о датчиках, которые позволят нашему роботу ориентироваться в пространстве. В прошлом выпуске Школы (LXF156) мы начали разбираться, как можно изучить основы робототехники в условиях, когда реальные роботы недоступны. Мы научили робота двигаться, разобрались, как им можно управлять, и даже учли возможности внесения искажений в передаваемые команды.
Итак, мы научим виртуального робота взаимодействовать с окружением, оснастив его датчиками (конечно, тоже виртуальными), которые будут отражать реально существующие компоненты при построении реальных роботов.
Коснись меня
Самый простой датчик, которым оснащают роботов, это датчик касания (или бампер). Такие датчики позволяют роботу определять наличие препятствий по ходу движения, прикоснувшись к ним. Самый простой датчик – это датчик касания, расположенный по ходу движения робота. Для демонстрации движения нам понадобится также виртуальный лабиринт, по которому наш робот будет разъезжать.Робот в нашем случае будет представлять собой круглую платформу, спереди которой располагается датчик касания. Сразу стоит отметить, что рисовать датчики надо на правой стороне робота, так как именно туда смотрит направление движения 0.
Также нам понадобится поле для его запуска, которое в нашем случае будет иметь вид пространства, окруженного сплошным забором.
Алгоритм робота будет следующим:
1 Робот едет вперед, пока не коснется забора
2 Если срабатывает датчик касания, то робот отъезжает назад и поворачивается на 90 градусов по часовой стрелке.
3 Цикл повторяется.
А программа будет такой:
Запускаем мы робота щелчком по нему (это позволяет нам поставить его в любую точку поля).
Как видно, мы используем цвет датчика (красный) для определения соприкосновения с цветом стены (синий). Это позволит нам в дальнейшем использовать несколько датчиков.
Усложним задачу. Используем лабиринт, показанный на рис. 2.
Поставив робота в его начало и запустив, вы можете обнаружить, что он застрял в средней его части и не может выбраться. Что же делать? Попробовать изменить поворот в направлении против часовой стрелки? Тогда робот будет постоянно возвращаться назад.
Можно сделать следующее:
1 Столкнувшись со стенкой, робот поворачивается вправо и пробует поехать.
2 Если он снова упирается в стенку за минимальное число движения (к примеру, на величину отъезда, умноженную на два), то он поворачивается на 180 градусов.
Видоизмененный код программы будет выглядеть теперь так.
Мы добавили еще стоп-линию зеленого цвета (нарисуйте ее в конце лабиринта) и звуки при соударении со стенкой и успешном прохождении лабиринта (рис. 3):
Поэкспериментируйте с разными лабиринтами и алгоритмами.
Усложним задачу
Теперь усложним нашего робота и поставим на него два датчика – справа и слева по движению, и пустим робота ездить по полю с разбросанными кубиками (рис. 4).
Так как у нас теперь два датчика касания, то мы сможем точнее позиционировать робота и определять нахождение препятствий.
Но и алгоритм работы также усложнится:
1 Робот движется вперед.
2 При срабатывании датчика касания робот отъезжает назад.
3 Если сработал правый датчик, то мы поворачиваемся на небольшой угол (10 – 20 градусов) влево.
4 Если сработал левый датчик, то мы поворачиваемся вправо.
5 Если сработали оба датчика, то мы поворачиваемся вправо на 45 градусов.
В блоках Scratch это будет выглядеть так:
Запустив программу, вы через некоторое время можете столкнуться с тем, что ваш робот упрется в угол и не сможет из него выйти. Это связано с ограничением алгоритма, который при переменном касании датчиков поворачивается на определенный угол то вправо, то влево.
Выйти из положения можно с помощью увеличения угла поворота при последовательных касаниях или просто задавая угол случайным числом (от 10 до 20 градусов будет достаточно).
Тогда программа примет следующий вид:
Да будет свет
Следующий датчик, который мы рассмотрим и попытаемся смоделировать, будет датчиком освещения. В реальности это обычно фоторезистор или фототранзистор, который, реагируя на уровень света, меняет свою характеристику (к примеру, сопротивление). За счет преобразования в Scratch будет передан сигнал, который будет изменяться от 0 до 100, где 0 – минимальный уровень освещения, 100 – максимальный.
Источник света у нас будет реализован в виде спрайта конуса освещенности, который можно будет передвигать. Робота можно взять из первого опыта, разместив источник света посередине спереди.
Итоговое поле будет выглядеть, как показано на рис. 5.
Алгоритм работы будет такой:
1 После включения робот начинает крутиться на месте, ища источник света.
2 Если он его находит, то начинает ползти к нему.
3 Как только уровень сигнала падает, робот опять начинает крутиться на месте.
А программа получится такая:
Вы можете самостоятельно доработать программу и использовать два датчика света, как и в случае датчиков касания. Также вы можете ввести переменную, чтобы смоделировать изменение уровня освещенности при перемещении от источника или к нему. Это позволит роботу двигаться в правильном направлении, так как в текущем алгоритме он движется только вперед и может уехать в обратном от источника света направлении.
Что подо мной
Последний датчик, который мы рассмотрим в данной статье – датчик линии. По сути, это тот же датчик света, но работающий на отражение. Обычно датчик линии работает в невидимом инфракрасном диапазоне и позволяет определять, черная или белая поверхность находится под ним.
Алгоритм работы датчика линии аналогичен датчику касания, с той разницей, что сигналом будет не касание стенки, а нахождение черной линии, по которой должен двигаться робот.
Поэтому возьмите исходные данные от первого примера, замените поле, по которому будет двигаться робот, на поле с линией, и уменьшите размер датчика до небольшой точки (рис. 6).
Теперь модернизируйте алгоритм. В случае, когда робот не находит линию, он должен вращаться. То есть условие должно быть инверсным, и мы должны только повернуться на небольшой угол:
Увы, но наш робот может двигаться только по линии, которая имеет правые повороты. Для движения по линии произвольной формы нужно использовать два датчика, которые позволят также останавливать робота на горизонтальных черных линиях.
Видоизмените алгоритм самостоятельно, используя за основу рассмотренный ранее алгоритм движения робота с двумя датчиками касания, и заставьте робота ездить по произвольному пути.
На этом мы закончим наш мини-цикл. Вы можете узнать больше об робототехнике, использовании реальных микроэлектронных и робототехнических платформ Scratchduino, а также всю информацию, как самостоятельно построить их, методику обучения и многое другое на вики проекта Edumandriva по адресу http://edumandriva.ru/wiki/index.php/ScratchDuino. |