Продолжим...
Режим NAVIGATE MODE.
Распознавание объектов нам пригодится и для движения по маякам. Причем, как мы уже говорили, не обязательно развешивать по углам красные кружочки. Картина на стене или лампа на тумбочке могут служить прекрасным маяком. В режиме «навигации», модуль старается приблизить найденный объект к его оригинальным размерам и положению , путем подачи роботу комманд «вперед», «назад», «вправо», «влево»
Соответствующие переменные:
NV_FORWARD и NV_BACKWARDS принимают значения от 0 до значения «Body inertia»+1(сделано для возможности плавного разгона).
NV_LEFT, NV_RIGHT принимают только значения 0 или 1 и всегда появляются в сочетании с NV_FORWARD и NV_BACKWARDS.
При этом предполагается, что робот должен крутится на месте, а не ехать по дуге, т.е. сочетания NV_LEFT + NV_FORWARD и NV_RIGHT+ NV_BACKWARDS должны поворачивать робота на месте против часовой стрелки.
В левой нижней части экрана мы видим индикаторы комманд движения . 4 нижних соответствуют вышеперечисленным переменным. Квадратик закрашен, если переменная не равна 0.
Расположение индикаторов управления соответствует расположению клавиш управления курсором (стрелка вверх, вниз, влево вправо)
Кроме того, мы видим чуть выше еще 3 индикатора. Соответствующие им переменные:
NV_TURRET_RIGHT, NV_TURRET_LEFT - принимают значения от 0 до значения «Turret inertia»+1. И предназначены для вращения «башни», т.е. поворота камеры в горизонтальной плоскости. Это крайние квадратики индикатора.
Средний оттображает состояние переменной NV_FIRE, которая пока не используется.
Индикаторы меняют свой цвет в зависимости от режима работы:
зелёный – режим навигации, автоматическое управление моторами;
зелёный в желтой рамочке – индикация «инерции» (Turret/Body Inertia не равны нулю).
красный – режим записи «пути по воротам» в память ;
сиреневый – режим управления пользователем ;
Для отслеживания поворота башни имеется также NV_TURRET_BALANCE – целочисленная переменная , диапазон от –100 до 100. Значение – 100 соответствует повороту камеры относительно корпуса робота на 70 градусов против часовой стрелки, а +100 на 70 градусов по часовой стрелке (ноль – смотрит прямо). Значение NV_TURRET_BALANCE нарастает/убавляется плавно – при каждом импульсе NV_TURRET_RIGHT, NV_TURRET_LEFT.
Почему именно такой набор комманд, станет понятно, если посмотреть на
платформу-танк, которую автор «навигатора» использовал для его отладки. Также станет понятно, почему индикаторы управления движением перемигиваются с такой бешенной частотой. Легкому танчику достаточно короткого импульса, чтобы слегка повернуться. Чего нельзя сказать о моем 10-ти килограммовом роботе. Короче, такое управление мне явно не годится. Хорошо, что в следующей версии «навигатора» уже не будет никаких перемигиваний, а будет нормальное задание мощности ходовым двигателям , что обеспечивается двумя новыми целочисленными переменными: NV_L_MOTOR, NV_R_MOTOR , с диапазоном от –100 до 100 (соответственно: –100 для движение назад, +100 для движения вперёд, и 0 – двигатель выключен).
Режим навигации имеет 2 функции «в одном флаконе»: движение по маякам и проезд в «ворота». Переключение между режимами происходит автоматически. В режиме навигации робот ищет либо ворота, либо маяк-образ. Чему будет отдан приоритет, в случае обнаружения маяка и ворот одновременно, я пока не разобрался.
По задумке автора алгоритма слежения, башня-камера является более подвижной и плавной в движении, чем сам робот. Поэтому на нее возлагается функция быстрого отслеживания объекта или ворот в горизонтальной плоскости. А, корпус робота при этом, старается выровняться по отношению к башне. Если из поля зрения исчезают и «знакомые объекты» и «ворота», то робот начинает вращаться на месте, из стороны в сторону, пытаясь найти либо ворота, либо объект-маяк. Башня при этом стоит неподвижно.
В режиме движения по воротам задействуется еще одна переменная NV_GATE_HORIZON . Это переменная с плавающей запятой и диапазоном -1...1, отображает степень отклонения от центра ворот по горизонтали.
NV_GATE_HORIZON=0, если не были распознаны не одни ворота, либо ворота находятся строго по центру (чего во время движения практически не бывает). В алгоритме управления роботом заложена зона нечувствительности: если отклонение от центра ворот не превышает 0.09 по абсолютному значению, то едем прямо.
Индикатор «горизонта» добавлен в нижней части экрана навигатора.
Окраска индикаторов самих «ворот» тоже имеет значение. Область ворот окрашена в синий цвет, если эти ворота не участвуют в данном маршруте (весовой коэффициент= 0) и более тёплые цвета, заканчивая желтым цветом, показывают градацию «важности» ворот в текущем маршруте.
Кроме того, в области данных отражаются значения весовых коэффициентов для семи маршрутов, которые указывают, насколько важны данные ворота для каждого конкретного маршрута. Поскольку эти коэффициенты недоступны пользователю в виде переменных, ценность их демонстрации на экране сомнительна. Как и других статистических данных, выводимых на экран. Они интересны скорее разработчику, чем пользователю.
Если, в подрежиме навигации «на маяк» у нас есть вся информация о маяке, благодаря переменным, описанным в предыдущем разделе, то в «движении по воротам», в нашем распоряжении только «линия горизонта» текущих ворот. Этого явно недостаточно, чтобы организовать свой алгоритм «движения по воротам». Т.е прийдется доверится авторскому алгоритму, призванному максимально облегчить жизнь пользователю. Однако, как я уже говорил, алгоритм пока сильно «заточен» под авторскую модель. И поворотная камера в нем является важным элементом. Без нее я попробовал – не идет. Пришлось задействовать комманды поворота камеры и соорудить виртуальную башню программно. Но, думаю всеже сделать поворот камеры в горизонтальной плоскости. Чем крутить зря тяжелого робота и тратить на это драгоценную энергию, всяко лучше сначала осмотреться. А к автору пожелание давать пользователю больше свободы в выборе алгоритма: хочешь с башней, хочешь без нее, а если нравится самому управлять движением – получи полную информацию о воротах.
Чтобы программно начать «движения по воротам», надо произвести следующие действия с переменными:
- Устанавливаем номер маршрута, для чего записываем номер в переменную NV_IN_WAY_NUMBER;
- Подтверждаем номер маршрута, записывая в переменную NV_IN_SUBMIT_WAY единицу;
- Включаем режим навигации, NV_IN_SET_MODE = 1 - Navigate mode.
При этом робот будет находиться в движении до тех пор, пока не найдет контрольную точку, соответствующую данному маршруту. Впрочем, пользователь может догадаться о том, что «миссия выполнена» только взглянув на экранчик навигатора. Т.к. никаких прорграммных сигналов для этого не предусмотрено.
Режим NOVA GATE MODE
Используется для прокладки маршрутов. Всего можно запомнить до 7-ми маршрутов, что не так уж мало. Проложить маршрут несложно: выбрали № маршрута, установили робота в начало пути, нажали «Walking by way», провели робота по маршруту с помощью ДУ пульта, стараясь не маячить у него перед глазами, а повороты выполнять плавненько, затем нажали «Set Checkpoint», чтобы зафиксировать точку назначения. После этого робот начинает крутиться на месте, как бы оглядываясь и запоминая получше точку прибытия (индикаторы движения красного цвета). Потом сообщает, что маршрут запомнен, о чем свидетельствует фиолетовый цвет индикаторов. Во время прокладки маршрута, робот запоминает множество «ворот». При последующем воспроизведении маршрута, робот будет либо идти на «ворота», которые относятся к данному маршруту, либо искать их. И так, пока не увидит, что очередные ворота являются конечной точкой маршрута. Таким образом, робот может направиться к цели не обязательно с начала пути, а из любой точки маршрута.
Уффф аж сам замучался читать свою писанину....