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