Алгоритмы поведения - Ориентация Назад
 
 


2.5. Форматы представления карты

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

2.4.1. Растровая карта


Рис. 1

     Для простоты будем считать, что все наше помещение разбито на комнаты, соединенные друг с другом проходами (дверями). Карта каждой комнаты - двухмерный массив данных, описывающий комнату с точки зрения проходимости для робота отдельных ее зон - см. (1) на рис. 1.
     Под зоной будем понимать квадрат заданных размеров, например, равный габаритам робота (пролезет/не пролезет). Каждый квадрат (ячейка таблицы) будет содержать какое-то число, характеризующее эту зону. Например, 0 - свободно для перемещения, 9 - препятствие, а 3-6 - потенциально проблемная зона для движения - см. (2).
     Эти коэффициенты не являются неизменными. Робот может самостоятельно корректировать их в зависимости от результатов текущего сканирования. Упрощенный алгоритм изменения карты на основе практических реальных измерений сенсорами: обнаружили препятствие в зоне, свободной для движения - добавили в соответствующую ячейку таблицы +1. Если свободно и ячейка не равна 0, то отняли -1.
     Таким образом, робот будет на ходу корректировать свою карту и даже при значительных перестановках она довольно быстро станет актуальной- близкой к реальности. Во время движения в зоне с весовым коэффициентом 0-2 робот едет на полной скорости, считая, что путь свободен (мы ему даем пару ложных срабатываний на появление там проходящего человека или домашней кошечки). Если число 3-6, то ехать можно, но на невысокой скорости ибо раньше здесь были проблемы. Робот, при приближении к такой зоне, обязан сделать уточняющее сканирование проблемного участка для принятия окончательного решения. Если зоне присвоено число 7-10, то относимся к ней так, как будто там всегда была стена.
     Кроме информации о препятствиях, карта может иметь и третье измерение - один или несколько дополнительных слоев со специальными кодами. Они могут во временнОм срезе (например, через 1 час), описывать такие параметры данной зоны, как уровень освещения, шума, др. Они нужны для того, чтобы робот имел перед собой полную картину - где и когда (в каком месте помещения) бывают люди - см. (3).
     Этот служебный слой к перемещению робота непосредственного отношения не имеет, ибо не несет информации о препятствиях, но содержит полезную информацию необходимую роботу для принятия решений - куда перемещаться и зачем. С привязкой к местности. На этом слое для примера цифрой "1" обозначена автоматическая зарядная станция, "2" - место частого появления людей в определенное время. Другие нужные коды можно вводить по мере необходимости. Можно также хранить один из таких слоев для служебных пометок, выполняемых роботом. Робот-пылесос, например, может отмечать зоны (квадраты), где он уже пропылесосил. И, если одной зарядки аккумулятора не хватает для уборки всей квартиры, он будет знать - куда вернуться после подзарядки.
     В принципе, можно предусмотреть присутствие нескольких разных объектов в одной зоне. Наличие или отсутствие конкретного объекта можно обозначать наличием 1 или 0 в конкретном разряде кода в бинарном виде (например, 00101011).
     Наличие даже одного дополнительного информационного слоя (3) в дополнение к основной карте (2), удваивает размеры памяти, необходимые для хранения навигационной информации. Это оправдано, если:
- у робота достаточно аппаратных ресурсов;
- есть много объектов, которые нужно идентифицировать на местности - дополнительный слой не простаивает, а плотно заполнен информацией;
- нужно быстро находить на карте информацию (описание) о близлежащих объектах, а не перебирать данные в таблицах или вычислять их по "тяжелым" для процессора алгоритмам.
     Если же таких объектов немного, то, возможно, имеет смысл создать таблицу "Объекты" с небольшим количеством записей, например такого вида:

Номер объекта Тип объекта Номер карты Координата X Координата Y
        

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


2.4.2. Объектная карта


     Это попытка эмулировать способ мышления человека и его подход к хранению и обработке информации. Наш мозг, в отличие от компьютера, не хранит "лишнюю", не нужную ему информацию. Он ее стирает - забывает. Многие ли из нас помнят детальную карту родного города ? Мы хорошо ориентируемся в том районе, где живем, гуляем и ходим на работу. Остальная часть города может оставаться для нас малознакомой или вообще - неизвестной. И мы при этом не проявляем беспокойства по поводу "белых пятен" в нашем представлении обо всем городе.
     Мы регулярно, иногда на "автомате", пользуемся знакомыми нам маршрутами движения между объектами на местности, представляющими для нас интерес. Но после визита в незнакомый район, мозг услужливо "привяжет" новый обследованный маршрут к уже существующим. Остальная, малозначительная информация будет отброшена. Мы не запомним - сколько и каких деревьев встретилось нам по пути, какое расстояние было между столбами и многие другие "навигационные" вещи. В памяти остаются только ключевые объекты: где мы сели на трамвай, где повернули за угол и т. д.
     Возможно ли научить робота использовать эту методику ? Давайте попытаемся...


     Давайте попытаемся выделить ключевые объекты местности, необходимые для перемещения робота в помещении. К таким объектам, наверное, можно причислить дверные проемы (двери). Они важны для перемещения робота в помещении потому, что они:
- имеют специфический вид, облегчающий их нахождение и идентификацию;
- их количество конечно и невелико;
- они являются пограничной зоной между разными комнатами (потенциально - картами);
- это хорошая точка уточнения своего положения - синхронизации карты и реального мира.
     Научившись перемещаться между этими ключевыми точками помещения, робот получает возможность самостоятельно прокладывать маршрут для доступа в нужную ему комнату.
     Как может выглядеть эта специфическая объектная карта ?
Например, в виде таблицы связей ключевых точек перемещения. Но прежде, чем строить эту таблицу, попытаемся представить себе - как это все может выглядеть в реальной жизни на плане реального помещения. См. рис. 2.
Описываем наше помещение :
1. Выделяем ключевые точки перемещения (привязки к местности) - дверные проемы: A, B, C, D и точки поворота на пути следования к дверям: E, F.
2. Строим граф (таблицу связей) точек между которыми существует маршрут. Если маршрут проходит через несколько точек, то они должны быть в цепочке этого маршрута.
3. Промеряем расстояния между этими точками.

Рис. 2


Таблица связей
УзелСоседний
узел
Расстояние
до соседа
Направление
на соседа
(по часовой стрелке
в градусах)
AE5090
EB400180
EF20090
FC200180
     Таблица узлов
УзелТип узла
A1
B1
C1
D1
E2
F2

     В таблице связей столбец "Расстояние до соседа" хранит значение расстояния до соседнего узла в каких-то единицах. Не обязательно в сантиметрах или метрах, можно и в условных "попугаях", например, количество оборотов ведущих колес или др. "Направление" также можно хранить в любом виде, например: север, юг, запад, восток. Главное, чтобы алгоритм робота знал - куда нужно ехать.
     В таблице узлов, "тип" может означать, например:
1 - проем двери;
2 - перекресток;
3 - подзарядное устройство;
4 - хорошо освещенное место;
5 - здесь часто бывают люди;
6 - . . . и так далее.
     Робот может обозначить на местности в качестве узла любую точку, которая заинтересовала его по какой-то причине (это уже зависит от навороченности управляющих алгоритмов). Главное, чтобы он смог привязать эту точку к существующим узлам и маршрутам, чтобы в последствии найти ее, знать как вернуться на это место.
     Алгоритм построения маршрута строим по таблице связей.
     Например, нужно из Кухни (В) попасть в Спальню (С). Смотрим таблицу. Узел В имеет только одного соседа - узел Е. Направление из E в B известно (180`) - на юг. Значит из B в E наоборот, на север. Перемещаемся туда на 400 сантиметров (например). Далее, из Е в С существует путь через узел F. Смотрим как нам можно проехать в F, чтобы оттуда попасть в C...
     В принципе, перед тем, как включать двигатели можно просчитать все возможные маршруты из одного узла в другой, если их несколько. Затем вычислить стоимостную оценку каждого маршрута и принять решение - по какому пути двигаться. Стоимостная оценка нашего пути - сумма расстояний, которые нужно пройти: BE+EF+FC. Существует ли другой путь с меньшей стоимостью ? Проверяем - нет. Тогда, вперед - поехали. В данном случае оценка "стоимости" - по расстоянию между узлами, но можно рассчитать оценку стоимости маршрута и по времени. Например, если есть короткий путь, где много поворотов в которых нам придется тормозить и поворачивать и есть более длинный, но с меньшим количеством узлов (точек поворота). Просто считаем количествово промежуточных узлов в каждом из маршрутов, общее расстояние и решаем - какой лучше выбрать.
     При навигации описываемым методом, робот отслеживает свое положение в пространстве на каждом этапе перемещения лишь приблизительно. Он уточняет его только при прохождении через ключевой узел, например, проем дверей или другое место, которое робот в состоянии идентифицировать. На форуме http://iron.fire.usi.ru выссказывалась идея размещения "маяков" для синхронизации робота при прохождении через определенное место. Если ему придется покрывать большие расстояния и есть проблемы с привязкой к местности, то это - тоже вариант. Хоть и не очень элегантный.
     Для перемещения по комнате можно использовать схожий подход. Здесь в качестве узлов могут выступать любые интересующие робот предметы и точки поворотов в процессе прокладки маршрута. Робот, как бы, протоколирует свои действия для последующего воспроизведения. В принципе, ничто не мешает роботу вести разведку местности, исследовать каждый закуток, но если результат сканирований роботу показался не интересен, он может свои действия не записывать в таблицу.
     При таком алгоритме, количество хранимой информации невелико и работать с ней просто. Мы имеем, фактически готовые "тропинки" для перемещения в помещении. Алгоритмы построения цепочки маршрута на основании отдельных звеньев - задача другого не очень сложного алгоритма.

2.4.3. Векторная карта


     Для полноты картины нужно рассмотреть и этот вариант. Кому-то может быть полезен. Вот наберусь сил ... и впишу сюда пару идей...

Продолжение следует...

[ Оглавление ]