Diagram Navigation

Материал из roboforum.ru Wiki
Перейти к: навигация, поиск

Страница находится в процессе формирования. Может содержать как ошибки так и полностью концептуальные заблуждения. Информация размещается здесь в продолжение обсуждения форума. И развивается по мере поступления новых теоретических и практических данных.

Внимание страничка ведется SkyStorm, внесение изменений без обсуждения не допускается (не считая грамматики :)

Введение

Диаграммы направленности (DN) Diagram Navigation, практическая отработка алгоритмов планируется проводить на основе робота OR-TT-Diana.

Описание алгоритмов (чисто наброски)

Измерение имеет два параметра Расстояние, Направление(0-359 градусов, где 0 - север) Диаграммы направленности состоит из N измерений с шагом M градусов, при этом должны выполняться следующие условия

  1. N целочисленное число от 4..360
  2. шаг 360 / N = M градусов,

Построение карты замкнутого пространства

  1. позиционируем ось робота на 0(North)
  2. делаем замеры каждые N замеров через M град., при N=8 M=45гр, при N=24 M=15гр, при N=360 M=1гр ;)
  3. соединив полученные точки получаем схемотехническую карту помещения.
  4. передвигаемся по оси 0(North) и на пункт 2.
  5. повторяем 4. до достижения необходимой детализации

Формирование Диаграммного паспорта помещения Diagram Room Certificate(DCR) для чего находим центр помещения

  1. Выполняем пункты 1. - 3. „Построение карты замкнутого пространства“
  2. сравниваем полученные плечи N - Дальномер, S - Дальномер
  3. сравниваем полученные плечи W - Дальномер, E - Дальномер
  4. вычисляем направление движения для выхода на точку достижения равновесия плечей, движимся
  5. повторяем 1. - 4. до достижения равновесия плечей
  6. в полученной точке снимаем DN - это будет DCR.

Узнавание помещения

Для узнавания помещения введем понятие коэффициент соответствия в % Correction Coefficient(СС).

  1. Оказавшись в неизвестном помещении выполняем алгоритм построения DCR
  2. проводим операцию сравнения полученного DCR с имеющейся базой с учетом СС
  3. если есть совпадения то мы нашлись
  4. если нет то мы разведали еще одно помещение!!! сохраняем полученный DCR в базу.

Навигация по пространству(расчет положения, пройденного пути)

Структуры данных

Прежде всего определим структуру самой DN

Name Type Defult Description
dn_id int 0 Идентификатор DN внутри сессии. 0 - означает что эта диаграмма у нас DCR
timestamp timestamp 0 Время в unix формате
arm_count int 4 Колиество плечей 4<= N <= 360
global_position string "" GPS координата
dcr_name string "" если диаграмма у нас DCR, то можем назначить имя, например кухня )))

Структура измерения direction

Name Type Defult Description
direction_id int 0 Номер измерения в DN
range int -1 измеренное расстояние, если -1 то не мерилось или не определено
unit char 0 единица измерения. 0=мм, 1=см, 2=м, 3=inch
detector int 0 тип измерителя расстояния

Структура измеритель detector

Name Type Defult Description
detector_id int 0 Номер датчика в БД
detector_description string "" Онисание тип и модель
detector_min int 0 минимальное расстояние в мм
detector_max int 0 максимальное расстояние в мм

Поток данных

При использовании DN на роботе связанным с PC возникает естественная необходимость передачи данных. Рассмотрим два варианта работы.

Без обратной связи

Если мы имеем однонаправленный канал Bot To PC, или обратное направление занято под другие задачи.
Что нам надо передать на PC что бы сформировать DN. Возьмем выше приведенные структуры данных.
Есть DN, Direction и Detector.

  • Detector будет в принципе неизменный, поэтому достаточно передавать только его detector_id.
  • Direction все что есть передаем
  • DN здесь все сложно, по идее надо все передовать, но получается большая избыточность, ограничемся dn_id, arm_count.

Результат

Name Type Defult Description
dn_id int 0 Идентификатор DN внутри сессии. 0 - означает что эта диаграмма у нас DCR
arm_count int 4 Колиество плечей 4<= N <= 360
direction_id int 0 Номер измерения в DN
range int -1 измеренное расстояние, если -1 то не мерилось или не определено
unit char 0 единица измерения. 0=мм, 1=см, 2=м, 3=inch
detector_id int 0 тип измерителя расстояния, номер датчика в БД

Передадим в текстовом виде и за разделитель примем `;` с открывающим и закрывающим разделителем. При такой предаче длинна посылки составит 35 символов. При этом визуально будут читаться все данные.
;dn_id;arm_count;direction_id;range;unit;detector_id;

При передаче в бинарном виде, заменяем данные hex значениями с открывающим 00. При такой передачи длинна посылки составит фиксированные 24 символа.

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

  • Количество direction, по окончанию приема всегда соответствует DN.arm_count
  • direction.direction_id для одного DN.dn_id всегда инкриментируется


С обратной связью

опишу позже ...