Hobots

Робототехника на Hobot L в mBlock Scratch

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

Информация о датчике расстояния

Ультразвуковой дальномер модуль – это помещенные на одну плату приемник и передатчик ультразвукового сигнала. Принцип действия основан на хорошо известном явлении эхолокации. Излучатель формирует акустический сигнал, который отразившись от преграды, возвращается к датчику и регистрируется приемником. Зная скорость распространения ультразвука в воздухе и время запаздывания между излученным и принятым сигналом, легко рассчитать расстояние до акустической преграды. В отличие от инфракрасных дальномеров на ультразвуковой датчик не влияют источники света или цвет препятствия. Могут возникнуть затруднения при определении расстояния до пушистых или тонких объектов. Кроме приемника и передатчика на плате находится необходимая обвязка.

ДатчикПорт
Датчик расстояния TrigЦифровой 11
Датчик расстояния EchoЦифровой 10

Примечание: датчик не требует установки отдельного расширения в mBlock, для опроса данного датчика можно использовать команду УЗ датчик с портов trig “” echo “” раздела Датчик. В режиме Онлайн команда команда неактивна, поэтому работаем с датчиком только в режиме Загрузка.

Установка используемых расширений

Так как датчик расстояния работает только в режиме Загрузка, установим в mBlock два расширения, необходимых для передачи данных с Arduino на компьютер:

  1. В режиме Устройства нажмите кнопку +расширение под алитрой команд (разноцветными кругами), чтобы войти в Центр расширений. В верхней строке должно находится расширение для связи с компьютером в режиме Загрузка – Upload Mode Broadcast. Добавьте его в проект.

2. Перейдите во вкладку Персонажи. Нажмите +расширение, чтобы попасть в Центр расширений.
3. Найдите и добавьте в проект расширение Трансляция режима передачи (находится во второй строке всех расширений):

Передача расстояния c Arduino на компьютер

Перед тем, как использовать датчик расстояния в сложных программах управления роботом, нужно убедиться, что он работает и правильно измеряет расстояние. Для этого опросим датчик и передадим информацию с него на компьютер, чтобы расстояние выводилось на экран, схема передачи расстояния:

Датчик расстояния подключается к разъему 1 (над USB портом), пины Arduino 10 и 11.
Опрос на закрепление освоения предыдущего занятия и напоминание принципа записи значений с датчика и отправки персонажу:
Вопрос ученикам 1: какой командой mBlock мы записываем значение расстояния с датчика расстояния в переменную, каждый раз новое значение? (ответ — Задать)
Вопрос ученикам 2: а какой командой мы отправим значение этой переменной персонажу? (ответ : Отправить сообщение в режиме загрузки message со значением этой переменной)

  1. Алгоритм для Arduino, чтобы опросить датчик, записать в переменную Расстояние (её нужно создать) и отправить расстояние на компьютер:
  1. Начало
  2. Повторять всегда:

2. Алгоритм и код для персонажа: принять расстояние с Arduino и сказать его для показа на экране:

  1. При получении сообщения message в режиме загрузки:
  2. Сказать Сообщение в режиме загрузки messege значение

3. Загрузите программу в робота, запустите код персонажа и убедитесь, что датчик расстояния работает (поводите рукой перед датчиком, расстояние на экране должно меняться соответственно расстоянию от датчика до руки)

Ветвление

Для принятия решений роботом о том, куда ему ехать на основе того, что он узнает расстояние до препятствия, используются ветвления

Что такое ветвление

Ветвление в программировании — это как развилка на дороге. Допустим, мы идем по дороге и видим развилку, где дорога разделяется на две части. Если мы выберем одну дорогу, мы пойдем в одном направлении, а если выберем другую дорогу, то пойдем в другом направлении. Точно также и в программировании, программа может разделиться на две части и в зависимости от определенного условия выполнить тот или иной блок кода

Как видим из примеров выше, ветвление в блок-схемах обозначается ромбом (читается Если), из двух углов которого выходит путь, по которому Исполнитель идёт, если на вопрос в ромбе ответ “Да”, из другого выходит путь, по которому Исполнитель идёт, если на вопрос в ромбе ответ “Нет”
Примеры ветвления
Ветвление с одной веткой:

  1. Начало
  2. Если “Идёт дождь”:
  3. Взять зонт

В Scratch ветвление с одной веткой выглядит так: если “условие” – тогда:

Ветвление с двумя ветками:

  1. Начало
  2. Если “Идёт дождь”:

3. Иначе:

В Scratch ветвление с двумя ветками выглядит так: если “условие” то (действия, которые надо сделать, если условие выполняется), иначе (действия, которые надо сделать, если условие на выполняется)

Остановка робота у стены или другого препятствия

Робот с датчиком расстояния не может видеть, он похож на человека с вытянутой вперёд рукой, но с закрытыми глазами. Человек идёт вперед, пока не коснётся стены (то есть расстояние до стены станет меньше длины его руки), как только коснётся стены — остановится. Сделаем аналогичный алгоритм для робота. Робот должен опрашивать датчик и проверять расстояние до стены в бесконечном цикле, иначе он один раз проверит расстояние до стены и поедет не обращая внимание на стену.

Начало

Повторять всегда:

Иначе:

Ветвления часто лучше понятны, когда представлены не в виде текстового алгоритма, а в виде блок-схемы, поэтому показываются оба варианта:

Для движения робота потребуется создать (через раздел Мои блоки) функции Вперёд и Стоп, а для их работы указать в программе, какие номера пинов отвечают за эти направления. Доработаем алгоритм:

  1. Начало
  2. Задать для Мотор левый Направление значение 4
  3. Задать для Мотор правый Направление значение 7
  4. Задать на 4 значение “низкий”
  5. Задать на 7 значение “низкий”
  6. Задать для Мотор левый Скорость значение 5
  7. Задать для Мотор правый Скорость значение 6
  8. Задать для Скорость Левая значение 250
  9. Задать для Скорость Правая значение 250
  10. Повторять всегда:

11. Иначе:

Определить Вперёд:

Определить Стоп:

Код на основе данного алгоритма и блок-схемы:

Загрузите программу в робота и убедитесь, что робот останавливается у стены или другого препятствия. Если робот ударяется о стену — увеличьте пороговое расстояние (например, поставьте 30 вместо 20). Также можно уменьшить скорость движения робота, чтобы он успевал остановиться.
Примечание: в итоговой отлаженной программе блок отправки расстояния на компьютер можно убрать, чтобы увеличить скорость реакции робота

Остановка робота у стены и разворот

Предыдущая программа была похожа на программу системы безопасности — например, робот в цехе завода едет по заданному пути, когда на его пути препятствие (например, человек) — останавливается, когда препятствия нет (человек прошел) — робот едет дальше. Также это похоже на алгоритм автомобиля с автопилотом (как Тесла). Напишем программу, которая дает роботу возможность объезжать препятствия, похоже на программу робота — пылесоса. Изменение прошлого алгоритма будет в том, что при обнаружении препятствия робот не останавливается, а разворачивается на месте (попробуем сделать разворот на 90 градусов):

В программе изменится только то, что вместо функции Стоп нужно добавить в ветвление и создать через Мои блоки функцию Вправо 90

Если Расстояние < 20:

Иначе:

Чтобы робот повернулся на определённый угол, нужно, чтобы он включил моторы на вращение на месте и какое-то время держал их включенными. От этого времени зависит угол поворота, его нужно подобрать. Время задаём командой подождать “” раздела Управление:

Определить Вправо 90:

  1. Задать на Мотор левый Направление значение “высокий”
  2. Задать на Мотор правый Направление значение “низкий”
  3. Установить на порт Мотор левый Скорость ШИМ Скорость левая
  4. Установить на порт Мотор правый Скорость ШИМ Скорость правая
  5. Подождать 0.5 секунд

Загрузите программу в робота и испытайте, при необходимости доработайте.

Назад в Учебник по робототехническому конструктору Hobots L

0%