Оглавление:

ИИ в роботе-лабиринте LEGO EV3: 13 шагов
ИИ в роботе-лабиринте LEGO EV3: 13 шагов

Видео: ИИ в роботе-лабиринте LEGO EV3: 13 шагов

Видео: ИИ в роботе-лабиринте LEGO EV3: 13 шагов
Видео: Лабиринт. Задать путь вручную EV3 среда Classroom 2024, Ноябрь
Anonim
Image
Image
Как решается лабиринт
Как решается лабиринт

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

Мой предыдущий робот описан здесь:

Робот построен с использованием LEGO Mindstorms EV3. Программное обеспечение EV3 запускается на компьютере и генерирует программу, которая затем загружается в микроконтроллер, называемый модулем EV3. Метод программирования основан на пиктограммах и является высокоуровневым. Это очень просто и универсально.

Запасы

ЧАСТИ

  1. Набор LEGO Mindstorms EV3
  2. Ультразвуковой датчик LEGO Mindstorms EV3. Он не входит в набор EV3.
  3. Гофрокартон для лабиринта. Двух картонных коробок должно хватить.
  4. Небольшой кусок тонкого картона для стабилизации углов и стен.
  5. Склейте и скотчем соедините кусочки картона вместе.
  6. Красный конверт с поздравительной открыткой для обозначения выхода из лабиринта.

ИНСТРУМЕНТЫ

  1. Универсальный нож для разрезания картона.
  2. Стальная линейка для облегчения процесса резки.

ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ

Программа находится здесь:

Шаг 1. Как решается лабиринт

СПОСОБ ВОЖДЕНИЯ В ЛАБИРИНТУ

Есть несколько методов навигации по лабиринту. Если вы заинтересованы в их изучении, они очень хорошо описаны в следующей статье Википедии:

Я выбрал метод следования левой стене. Идея состоит в том, что робот будет удерживать стену с левой стороны, принимая следующие решения по мере прохождения лабиринта:

  1. Если есть возможность повернуть налево, сделайте это.
  2. В противном случае, если возможно, идите прямо.
  3. Если нельзя ехать налево или прямо, по возможности поверните направо.
  4. Если ничего из вышеперечисленного невозможно, значит, это тупик. Повернись.

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

РЕШЕНИЕ ЛАБИРИНТА, ЧТОБЫ НАЙТИ ПРЯМОЙ ПУТЬ

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

Возможные повороты: налево, направо, назад (в тупике) и прямо (на перекрестке).

Комбинации заменяются следующим образом:

  • «Влево, назад, влево» становится «прямо».
  • «Влево, назад, вправо» становится «Назад».
  • «Влево, назад, прямо» становится «вправо».
  • «Вправо, назад, влево» становится «Назад».
  • «Прямо, назад, влево» становится «вправо».
  • «Прямо, назад, прямо» становится «Назад».

КАК РОБОТ УПРАВЛЯЕТ МОЙ лабиринт

  1. Когда робот начинает движение, он видит пространство справа и сохраняет Straight в списке в массиве.
  2. Затем он поворачивает налево и добавляет к списку Left. Список теперь содержит: Прямо, Влево.
  3. С тупиком разворачивается и добавляет Back в список. Список теперь содержит: Прямо, Влево, Назад.
  4. Проходя переулок от входа, он добавляет Прямой в список. Список теперь содержит: Прямо, Влево, Назад, Прямо. Он распознает комбинацию и меняет Left, Back, Straight to Right. Список теперь содержит Прямо, Право.
  5. С тупиком разворачивается и добавляет Back в список. Список теперь содержит: Прямо, Право, Назад.
  6. После левого поворота список содержит Прямо, Вправо, Назад, Влево. Он распознает комбинацию и меняет правую, обратную, левую на заднюю. Список теперь содержит "Прямо", "Назад".
  7. После следующего поворота налево список будет содержать «Прямо», «Назад», «Влево». Это изменяет эту комбинацию на Right. В списке теперь только Правые.
  8. Он передает пробел и добавляет Straight в список. Список теперь содержит "Право, Прямо".
  9. После поворота вправо список содержит «Вправо», «Прямо», «Вправо» - прямой путь.

Шаг 2: соображения при программировании робота

СООБРАЖЕНИЯ ДЛЯ ЛЮБОГО МИКРОКОНТРОЛЛЕРА

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

Когда робот обнаруживает перекресток справа, но это не поворот направо, я обнаружил, что хорошо, если робот будет двигаться вперед примерно на 10 дюймов (25 см), не проверяя свои датчики.

СООБРАЖЕНИЯ, ОСОБЕННЫЕ ДЛЯ LEGO MINDSTORMS EV3

Хотя LEGO Mindstorms EV3 очень универсален, он позволяет подключать не более одного датчика каждого типа к одному блоку. Два или более Brick можно было соединить гирляндой, но я не хотел покупать еще Brick, поэтому я использовал следующие датчики (вместо трех ультразвуковых датчиков): инфракрасный датчик, датчик цвета и ультразвуковой датчик. Это хорошо сработало.

Но датчик цвета имеет очень короткий диапазон, около 2 дюймов (5 см), что требует некоторых особых соображений, как описано ниже:

  1. Когда датчик цвета обнаруживает стену впереди, и робот решает повернуть направо или развернуться, он должен сначала отступить, чтобы дать себе достаточно места для поворота, не натыкаясь на стену.
  2. Сложная проблема возникает с некоторыми «прямыми» перекрестками. Из-за малого радиуса действия датчика цвета робот не может определить, распознает ли он правильный «прямой» перекресток или приближение к повороту направо. Я попытался решить эту проблему, настроив программу на сохранение «Straight» в списке каждый раз, когда робот обнаруживает один, а затем удалял более одного «Straight» подряд в списке. Это исправляет ситуацию, когда правый поворот следует за «Прямой» в лабиринте, но не ситуацию, когда есть правый поворот без «Прямой» перед ним. Я также попытался настроить программу так, чтобы исключить «прямую», если она находится непосредственно перед «направо», но это не работает, если поворот направо следует за «прямым». Мне не удалось найти решение, которое подходило бы для всех случаев, хотя я полагаю, что робот мог бы посмотреть на пройденное расстояние (считывая датчики вращения двигателя) и решить, «прямой» он или правильный. перемена. Я не думал, что это усложнение стоит того, чтобы продемонстрировать концепцию искусственного интеллекта в этом проекте.
  3. Преимущество цветового датчика заключается в том, что он различает коричневый цвет стены и красный цвет барьера, который я использовал на выходе, и дает роботу простой способ решить, когда он закончил лабиринт.

Шаг 3: Основная программа

Основная программа
Основная программа

LEGO Mindstorms EV3 имеет очень удобный метод программирования на основе значков. Блоки отображаются в нижней части экрана дисплея компьютера, и их можно перетаскивать в окно программирования для создания программы. Модуль EV3 может быть подключен к компьютеру с помощью кабеля USB, Wi-Fi или Bluetooth, а затем программа может быть загружена с компьютера в устройство.

Программа состоит из основной программы и нескольких «Мои блоки», которые являются подпрограммами. Загруженный файл содержит всю программу, которая находится здесь:

Шаги в основной программе следующие:

  1. Определите и инициализируйте переменную подсчета ходов и массив.
  2. Подождите 5 секунд и скажите «Вперед».
  3. Начать цикл.
  4. Проезжайте через лабиринт. Когда выход достигнут, цикл завершается.
  5. Отобразите на экране кирпича пересечения, найденные на данный момент в лабиринте.
  6. Проверьте, нужно ли сократить путь.
  7. Отобразите пересечения укороченного пути.
  8. Вернитесь к шагу 4.
  9. После петли проехать по прямой дорожке.

На снимке экрана показана эта основная программа.

Шаг 4: Мои блоки (подпрограммы)

Мои блоки (подпрограммы)
Мои блоки (подпрограммы)

Отображается блок «Навигация по моему», который управляет движением робота по лабиринту. Отпечаток очень мелкий и может быть нечитаемым. Но это хороший пример того, насколько универсальны и эффективны операторы if (в системе LEGO EV3 они называются переключателями).

  1. Стрелка №1 указывает на переключатель, который проверяет, видит ли инфракрасный датчик объект на расстоянии, превышающем определенное расстояние. Если это так, выполняется верхняя серия блоков. Если нет, то управление передается большому нижнему ряду блоков, где расположена стрелка №2.
  2. Стрелка №2 указывает на переключатель, который проверяет, какой цвет видит датчик цвета. Есть 3 случая: без цвета вверху, красный посередине и коричневый внизу.
  3. Две стрелки №3 указывают на переключатели, которые проверяют, видит ли ультразвуковой датчик объект на расстоянии, превышающем определенное расстояние. Если это так, выполняется верхняя серия блоков. Если нет, то управление передается нижнему ряду блоков.

Мои блоки для сокращения пути и проезда по прямому пути сложнее и будут совершенно неразборчивыми, поэтому они не включены в этот документ.

Шаг 5: Начало сборки робота: база

Начало сборки робота: база
Начало сборки робота: база
Начало сборки робота: база
Начало сборки робота: база

Как упоминалось ранее, LEGO Mindstorms EV3 позволяет подключать не более одного датчика каждого типа к одному блоку. Я использовал следующие датчики (вместо трех ультразвуковых): инфракрасный датчик, датчик цвета и ультразвуковой датчик.

На парах фотографий ниже показано, как собрать робота. На первом фото каждой пары показаны необходимые детали, а на втором фото показаны те же детали, соединенные вместе.

Первый шаг - построить основу робота, используя показанные детали. База робота показана в перевернутом виде. Маленькая L-образная деталь в задней части робота является опорой для спины. Он скользит по мере движения робота. Это нормально работает. В комплекте EV3 нет детали типа катящегося шарика.

Шаг 6: верх основания, 1

Вершина базы, 1
Вершина базы, 1
Вершина базы, 1
Вершина базы, 1

Этот шаг и следующие 2 шага относятся к верхней части основания робота, датчику цвета и кабелям, которые представляют собой 10-дюймовые (26 см) кабели.

Шаг 7: верх основания, 2

Вершина базы, 2
Вершина базы, 2
Вершина базы, 2
Вершина базы, 2

Шаг 8: верх основания, 3

Вершина базы, 3
Вершина базы, 3
Вершина базы, 3
Вершина базы, 3

Шаг 9: Инфракрасные и ультразвуковые датчики

Инфракрасные и ультразвуковые датчики
Инфракрасные и ультразвуковые датчики
Инфракрасные и ультразвуковые датчики
Инфракрасные и ультразвуковые датчики

Далее идут инфракрасный датчик (слева от робота) и ультразвуковой датчик (справа). А также 4 штифта для крепления кирпича сверху.

Инфракрасный и ультразвуковой датчики расположены вертикально, а не горизонтально. Это обеспечивает лучшую идентификацию углов или концов стен.

Шаг 10: кабели

Кабели
Кабели

Кабели подключаются к модулю следующим образом:

  • Порт B: левый большой мотор.
  • Порт C: правый большой мотор.
  • Порт 2: ультразвуковой датчик.
  • Порт 3: датчик цвета.
  • Порт 4: инфракрасный датчик.

Шаг 11: Последний шаг в создании робота: украшение

Последний шаг в создании робота: украшение
Последний шаг в создании робота: украшение
Последний шаг в создании робота: украшение
Последний шаг в создании робота: украшение

Крылья и плавники служат только для украшения.

Шаг 12: построить лабиринт

Построить лабиринт
Построить лабиринт
Построить лабиринт
Построить лабиринт

Для лабиринта должно хватить двух картонных коробок из гофрированного картона. Я сделал стены лабиринта высотой 5 дюймов (12,5 см), но 4 дюйма (10 см) тоже подойдут, если у вас не хватает гофрированного картона.

Сначала я обрезаю стенки картонных коробок на расстоянии 10 дюймов (25 см) от дна. Затем я обрезаю стены на 5 дюймов от дна. Это дает несколько 5-дюймовых стен. Кроме того, я обрезаю дно картонных коробок, оставляя около 2,5 см прикрепленных к стенкам для устойчивости.

Различные части можно вырезать и приклеить или приклеить лентой в любом месте, чтобы сформировать лабиринт. Между боковыми стенками должно быть расстояние 11 или 12 дюймов (30 см) на любом пути с тупиком. Длина должна быть не менее 10 дюймов (25 см). Эти расстояния нужны роботу, чтобы развернуться.

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

У выхода есть красный барьер, состоящий из половины красного конверта с поздравительной открыткой и основы из двух кусков тонкого картона, как показано на рисунке.

Шаг 13: Лабиринт

Лабиринт
Лабиринт

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

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

ЗАКЛЮЧИТЕЛЬНОЕ ЗАМЕЧАНИЕ

Это был интересный проект и отличный опыт обучения. Надеюсь, вам это тоже интересно.

Рекомендуемые: