Вернуться в Курс

Уровень 1. Роботы и Искусственный интеллект с Кварки

0% завершено
0/0 Шагов
  1. НАЧАЛО
    Урок 1: Здравствуй, робот Кварки!
    5 Темы
    |
    1 Тест
  2. РОБОТЫ
    Урок 2: Игры с роботами
    3 Темы
    |
    1 Тест
  3. Урок 3: Робот с беспроводным управлением
    3 Темы
  4. Урок 4: Датчики отслеживания маршрута
    2 Темы
  5. Урок 5: Робот, который двигается по линии
    3 Темы
    |
    1 Тест
  6. ПЕРЕНОС ОБУЧЕНИЯ В РЕАЛЬНЫЙ МИР
    Урок 6: Кварки как робот-курьер с искусственным интеллектом - Часть 1
    3 Темы
  7. Урок 7: Кварки как робот-курьер с искусственным интеллектом - Часть 2
    4 Темы
  8. Урок 8: Создаём собственного робота сборщика мусора - Часть 1
    2 Темы
  9. Урок 9: Создаём собственного робота сборщика мусора - Часть 2
    3 Темы
    |
    1 Тест
  10. Урок 10: Создаём свой собственный беспилотный автомобиль
    5 Темы
    |
    1 Тест
  11. Урок 11: Робот-питомец
    4 Темы
  12. ЗАВЕРШАЮЩИЙ ПРОЕКТ
    Урок 12: Итоговый проект
Урок прогресс
0% завершено

Создаем робота, который двигается по линии – Обзор урока

Ранее мы узнали о роботах, которые двигаются по линии – как они устроены и для чего они нужны. Теперь давайте попробуем сделать такого робота самостоятельно.

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

Трасса

Положите лист с трассой на пол или другую ровную поверхность.

На трассе есть 3 черные полосы, перпендикулярные основной линии. Нам эти полосы пригодятся в последующих уроках в качестве проверочных участков – Чек-поинтов.

Принцип работы

Принцип движения по линии достаточно простой:

  1. Первое – нужно настроить порог срабатывания для левого и правого ИК-сенсоров
  2. Если оба сенсора активны, это означает, что робот оказался на перекрестке (перекрестии линий) и должен остановиться.
  3. Если только левый сенсор активен, это значит, что робот движется вправо от линии и нам нужно его вернуть обратно на трассу. Т.е. нам нужно сместить его немного влево.
  4. Если только правый сенсор активен, это значит, что робот движется влево от линии и нам нужно его в сместить немного вправо.
  5. Если оба сенсора неактивны, это значит, что линия находится строго между ними и робот движется в верном направлении. Ничего менять не нужно. Только продолжать движение.
  6. Повторяем шаги с 2 по 5й.

Есть 3 важных параметра, которые мы будем использовать:

  1. F: Скорость, с которой робот будет двигаться вперед, если оба сенсора не активны (не обнаружили черную линию).
  2. T1 & T2: Когда робот движется по линии и один из сенсоров, например левый, обнаружил черную линию, это означает, что робот свернул с линии и ему нужно повернуть налево, чтобы снова вернуться на линию. Мы знаем, как поворачивать влево. Левый мотор крутится назад и правый мотор крутится вперед. Но, если оба мотора крутятся с одинаковой скоростью, то движение робота будет дерганным и не очень эффективным. Таким образом, нам нужны два значения скорости – T1 и T2:
    • T1 – это будет скорость, с которой моторы будут крутиться вперед.
    • T2 – это будет скорость, с которой моторы будет крутиться назад.
  3. И нам нужно установить значения для F, T1, T2 во время написания скрипта и затем откалибровать эти значения для эффективного движения по линии.

Теперь, давайте напишем скрипт для Кварки, в соответствии с этим принципом.

Начинаем кодировать!

Давайте продолжим работу с тем скриптом, который мы написали, когда калибровали наши ИК сенсоры.

  1. Заходим на вкладку My Blocks (Мои блоки). И создаем новый блок LED Feedback (Лед – фидбеэк).

Будут созданы два типа блоков – верхний (шапка) и внутренний (стопка).

  • Перетаскиваем два блока if-else из текущего скрипта под верхний блок-шапку LED Feedback.
  • Поставим внутренний блок LED Feedback внутри блока с Бесконечным циклом (forever).
    evive Notes Icon
    Важно: ИК-сенсоры реагируют на изменение освещения. Внешние освещение всегда разное. Поэтому необходимо повторно сделать калибровку и обновить пороговые значения.

  • Добавляем блок if-else ниже внутреннего блока LED Feedback.
  • Идем в группу Operators (Операторы) и переносим блок a () and () внутрь места в форме ромба. Этот блок создает логическое условия, что код внутри оператора if сработает только в том случае, если произойдут оба события внутри блока окажутся истинными.
  • Добавляем блок проверки активность ИК-сенсора – is () IR sensor active в первое и второе место блока () and (). Выбираем IR-L и IR-R у первого и второго блока.
  • Теперь добавляем блок stop robot внутрь ветки IF. Поскольку мы ранее разбирали, что в случае, когда оба сенсора активны – робот должен остановиться. Это знак того, что мы оказались на перекрестке.
  • Добавим еще один if-else блок ниже команды else внутри первого блока if-else.
  • В блоке IF в поле условие добавляем блок is () IR sensor active? и внутри него выбираем IR-L, поскольку мы хотим проверить активность именно сенсора слева.
  • Логично, что в этом случае, нам нужно, чтобы Кварки сдвинулся слегка влево. Для этого под блоком If нужно добавить два блока run () motor () with () % speed. Измените поле Motor на right (правый) и speed (cкорость) на 40% (T1).
  • Во втором блоке для левого мотора нужно изменить направление на backward и понизить скорость (speed) до 25% (T2). Понижая скорость проверьте, что мотор создает небольшое движение влево, достаточное для того, чтобы вернуться на линию.
  • Добавьте еще один блок if-else внутри условия else второго блока if-else.
  • В блоке с условием if нужно добавить блок is () IR sensor active? и внутри него выбрать IR-R.
  • В этом случае, нам нужно, чтобы Кварки двигался немного вправо. Поэтому, под условием if нужно добавить два блока run () motor () with () % speed. В первом из них нужно установить значение мотора на Left и скорость на 40% (T1).
  • Во втором блоке для правого мотора, нужно изменить направление на обратное – backward – и снизить скорость до 25% (T2). Понизить скорость нужно до такого значения, чтобы мотор добавил только небольшое движение вправо, достаточное, чтобы вернуться обратно на линию.
  • Далее, в блоке else размещаем блок add go () at ()% speed и выбираем направление forward (вперед) и скорость 40%.(F).

Теперь размещаем робота на треке и запускаем весь скрипт, кликая на зеленый флаг.

Калибровка робота

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

Нам нужно откалибровать все значения скорости в трех параметрах F, T1 и T2, для того, чтобы движение робота стало правильным. Давайте посмотрим, что изменится, если мы скорректируем каждый из параметров.

  1. F: Здесь мы контролируем как быстро робот двигается вперед. Если робот выходит за линию и не может вернуться, значит, нужно понизить это значение.
  2. T1 & T2: Эти параметры контролируют, насколько сильно робот поворачивает, когда ему нужно вернуться обратно на линию. При низких значениях робот не успевает восстановить правильное положение вдоль линии. При высоких, робот поворачивает слишком сильно и пересекает линию в другую строну. Обычно мы стараемся подобрать скорость для параметра T2 в диапазоне от 0 до 20. И после этого подбираем значение T1, пока не получим наилучший результат.

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