Hi-Tech  ->  Программы  | Автор: | Добавлено: 2015-05-28

Лаберинт

Обучение прохождения лабиринта

В работе представлена программа движения робота в лабиринте с поиском цели в нём. Робот имеет четыре сенсора, которыми он ощупывает пространство вокруг. Программа определяет ответвления лабиринта и обследует каждое встретившееся ответвление. Серьёзной проблемой являлось наличие круговых трасс, т. е. совокупности последовательных ответвлений, идя по которым, робот возвращается тоже место. Попадая в такую «трассу» робот начинал ходить по ней бесконечно. Проблема была решена с помощью использования роботом своего «следа» и «перерезания» им круговых трасс, превращающего их в некруговые.

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

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

Для написания программы использовался язык программирования BASIC в оболочке Microsoft QuickBasic V4. 5.

ОПИСАНИЕ ЛАБИРИНТА, ЦЕЛИ И РОБОТА

Лабиринт является плоским и образуется с помощью вырезания проходов шириной в 5точек чёрным цветом в синем поле размером 640x480 точек. Проходы лабиринта могут идти лишь в горизонтальном или вертикальном направлениях. Для рисования лабиринта используется функция LINE.

Цель находится в одном из проходов и представляет собой красный квадратик размером 5x5 точек. Для рисования цели также используется функция LINE.

Роботом является зелёный квадратик размером 5x5 точек, который может передвигаться только по проходам лабиринта (он не может «пробивать» стенки). Задачей робота является поиск и достижение цели (соприкосновение с ней).

Робот снабжён четырьмя сенсорами – «глазами», определяющими расстояние до стенок и их цвет. Они просматривают пустое (чёрное) пространство по четырём направлениям (вверх, вниз, вправо и влево) до тех пор, пока его взгляд не упрётся в нечто, имеющее не чёрный цвет. После этого движение его взгляда останавливается и вычисляется расстояние до обнаруженного препятствия (оно измеряется в точках) и запоминается цвет препятствия. Для программной реализации сенсоров используется функция POINT и конструкция цикла FOR-NEXT.

Кроме того, робот может определять свои двумерные координаты X и Y. В реальных условиях он сможет это делать с помощью некой локальной системы позиционирования, развёрнутой в районе его работы.

Движение робота происходит в рамках большого цикла программы, в течение которого он может переместиться на один шаг (точку) вверх, вниз, вправо или влево. В программе есть ограничители, основанные на описанных выше сенсорах, не позволяющие роботу «пробивать» стенки.

ПОИСК ОТВЕТВЛЕНИЙ В ПРОХОДАХ ЛАБИРИНТА

Робот ищет боковые ответвления в проходах лабиринта. Сенсоры, которые находятся на боковых стенках робота, измеряют расстояние до стенок. Ответвление определяется по резкому увеличению расстояния от робота до стенки в данном направлении. После обнаружения ответвления робот идёт в его сторону. Если он дошёл до конца и не нашёл других ответвлений, он понимает что это - тупик, после чего выходит оттуда и «закрывает» его (не физически, а в своей памяти). Таким образом, робот обследует все тупики и, в простых лабиринтах, приходит к цели. Когда робот видит цель, он сразу идёт к ней, не сворачивая.

Однако в более сложных лабиринтах могут встречаться круговые трассы, т. е. совокупность последовательных ответвлений, идя по которым, робот возвращается тоже самое место, откуда начал движение по этой трассе. Попадая в такую «трассу» робот начинал ходить по ней бесконечно. Для преодоления этой проблемы я сделал следующее. Робот оставляет за собой след, и когда он касается его с другой стороны, он определяет, что это круговая трасса и ставит в этом месте лабиринта особую метку. Данные след и метки также являются не физическими, а представляют собой информацию в памяти робота. Таким образом, он «перерезает» круговую трассу, превращая её в некруговую.

После данной модификации программы робот стал преодолевать уже любые лабиринты.

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

Комментарии


Войти или Зарегистрироваться (чтобы оставлять отзывы)