Перейти к содержанию
GPS навигатор СитиГИД

Недоперескорости и как с ними бороться


Рекомендуемые сообщения

В более ранних и текущей версии СГ (на сегодня это 5.0) мы часто встречаемся с проблемой неточной информации о скоростях прохождения тех или иных рёбер дорожного графа. Вспомнить хотя бы пресловутые "стодвадцатки".

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

Для примера постараюсь изложить свой вариант.

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

Предлагаю следующий вариант алгоритма.

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

Учитываем скорость посекундно (максимум, на который способны обновиться данные со спутников). При проезде по ребру получаем для него посекундный набор скоростей. Допустим, мы проехали его за 5 секунд, данные наших скоростей:

34

42

45

42

43

Получаем среднюю скорость для ребра: (34+42+45+42+43)/5 = 41,2 (то есть, примерно 41).

Для рёбер, которые мы пролетаем "со свистом", берём значение скорости для, секунды на которой мы его проезжаем и никаких сверхскоростей образовываться не будет.

Чтобы исключить лишнее переполнение памяти с каждой секундой можно использовать следующую схему. Двумерный массив, в первой колонке которого скорость, а во второй - количество её повторения для текущего ребра.

На основании примера выше получаем:

34 - 1

42 - 2

45 - 1

43 - 1

То есть, скорость 42 повторилась два раза для ребра. Соответственно, пять секунд простоя выглядят так:

0 - 5

Критикуйте... :)

Ссылка на сообщение
Поделиться на другие сайты
  • Ответов 122
  • Дата создания
  • Последний ответ

Лучшие авторы в теме

Лучшие авторы в теме

Популярные посты

Как и обещал, провел повторную проверку. Результат 120км\ч на ребре ! При этом совершил разворот и проехал ребро в обратном направлении - получил 102км\ч!! Трек 2011_03_23_gps.log:

Ни тот, ни другой. Нет не так. Это просто скорость проезда данного конкретного ребра датчиком, который после проезда данного ребра повернул направо/налево/проехал прямо. Т.е. в данном с

Ради интереса решил проверить свой мониторинг: с удивлением обнаружил след 120. Ситуация следующая ехал: по маршруту (обозначен синей линией) с промежуточной точкой на заправке, проигнорировал д

Изображения в теме

  В 26.01.2011 в 10:00, WhAle_15 сказал:

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

...

Критикуйте... :)

В чем зло? Самое простое и точное определение средней скорости. ИМХО как раз из-за того, что КМК она стала определяться по другому и все проблемы (учет скорость неполного ребра - подтверждение тому).

Ссылка на сообщение
Поделиться на другие сайты

  ERER сказал:

В чем зло?

Иначе откуда завышенные значения скоростей? Значит проблема с вычислением позиционирования именно на ребре. Отсюда и погрешности точки входа и точки выхода, на основании которых вычисляются неверные скорости. А если рассмотреть вариант, предложенный мной, то даже, если будут неточности с определением позиционирования на ребре - мы не будем иметь неверные данные о скоростях.

PS: ERER, что такое КМК? Я уже не первый Ваш пост встречаю подобные аббревиатуры от которых у меня вскипает мозг :D

Даже гугл не помощник:

1296037408-128.jpg

Ссылка на сообщение
Поделиться на другие сайты

как мне кажется biggrin.gif КМК

и Гугл знает)

) 6f590689ff27.jpg

пример приведен интересный biggrin.gif

Изменено пользователем sergges
Ссылка на сообщение
Поделиться на другие сайты

проблема по-моему в том, что приемник GPS не транслирует скорость, он транслирует координаты.

скорость вычисляется программой.

а недоперескорости возникают из-за неточностей позиционирования слабых модулей GPS,

и, как следствие, некорректного вычисления скорости программой.

более того, возникают случаи, когда из-за неточного позиционирования на коротких ребрах

погрешность позиционирования много больше длины ребра,

отсюда возникают самолеты.

вторая проблема - имея даже сверхточный gps-приемник невозможно полностью соответствовать дорожному графу на карте.

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

Ссылка на сообщение
Поделиться на другие сайты

  В 26.01.2011 в 11:36, demalina сказал:

проблема по-моему в том, что приемник GPS не транслирует скорость, он транслирует координаты.

скорость вычисляется программой.

а недоперескорости возникают из-за неточностей позиционирования слабых модулей GPS,

и, как следствие, некорректного вычисления скорости программой.

более того, возникают случаи, когда из-за неточного позиционирования на коротких ребрах

погрешность позиционирования много больше длины ребра,

отсюда возникают самолеты.

вторая проблема - имея даже сверхточный gps-приемник невозможно полностью соответствовать дорожному графу на карте.

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

Это было. Сегодняшние проблемы явно не от этого. Т.к.:

Сложно объяснить проблемами позиционирования, погрешностями определения въезда/выезда с ребра и т.п. эти 120 км/ч на ребере длиной почти 3 км.

Да и прекрасно 120 км/ч получаются при совершенно точном следовании дельтаплана и точки по ребру. Т.ч. все погрешности уже учтены.

  В 26.01.2011 в 10:32, WhAle_15 сказал:

Иначе откуда завышенные значения скоростей? Значит проблема с вычислением позиционирования именно на ребре. Отсюда и погрешности точки входа и точки выхода, на основании которых вычисляются неверные скорости. А если рассмотреть вариант, предложенный мной, то даже, если будут неточности с определением позиционирования на ребре - мы не будем иметь неверные данные о скоростях.

Это к разрабам.

Про погрешности см. выше.

Изменено пользователем ERER
Ссылка на сообщение
Поделиться на другие сайты

  demalina сказал:

приемник GPS не транслирует скорость, он транслирует координаты

Всё верно. На основании изменения координат получаем скорость. Опять же, повторюсь:

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

Очевидцы - пожалуйста отпишитесь!

  demalina сказал:

а недоперескорости возникают из-за неточностей позиционирования слабых модулей GPS, и, как следствие, некорректного вычисления скорости программой. более того, возникают случаи, когда из-за неточного позиционирования на коротких ребрах погрешность позиционирования много больше длины ребра, отсюда возникают самолеты.

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

Покритикуйте мою методику. Приведите примеры, где она не будет работать. Вот это уже будет конструктивно.

Ссылка на сообщение
Поделиться на другие сайты

  ERER сказал:

Про погрешности см. выше.

По ситуации на скриншоте.

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

Ссылка на сообщение
Поделиться на другие сайты

  В 26.01.2011 в 11:58, WhAle_15 сказал:

Очевидцы - пожалуйста отпишитесь!

Всегда, при сбрасывании скорости. Вплоть до +10 км/ч.

  В 26.01.2011 в 11:58, WhAle_15 сказал:

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

Покритикуйте мою методику. Приведите примеры, где она не будет работать. Вот это уже будет конструктивно.

По твоей методике, ты все-равно считаешь также. Но не 1 раз, а множество. Т.е. вместо 2-х засечек делаешь n. Но, т.к. ты сам говоришь, что в определении координат могут быть погрешности, то при 2-х засечках их влияние будет меньше, чем при n.

Т.е. точность уменьшится.

  В 26.01.2011 в 12:08, WhAle_15 сказал:

По ситуации на скриншоте.

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

И что?

Изменено пользователем ERER
Ссылка на сообщение
Поделиться на другие сайты

  ERER сказал:

По твоей методике, ты все-равно считаешь также. Но не 1 раз, а множество. Т.е. вместо 2-х засечек делаешь n. Но, т.к. ты сам говоришь, что в определении координат могут быть погрешности, то при 2-х засечках их влияние будет меньше, чем при n. Т.е. точность уменьшится.

Например, как вычислить скорость для короткого ребра перед перекрёстком, если мы его проезжаем не дольше секунды, а спутниковые данные чаще не обновляются. Имеем определённую длину ребра и время на входе и выходе, отличающееся не более, чем на секунду?

  ERER сказал:

И что?

Въезд на ребро считать только при присутствии на нём скорости, отличной от нуля и в попутном направлении.

Ссылка на сообщение
Поделиться на другие сайты

  В 26.01.2011 в 12:19, WhAle_15 сказал:

Например, как вычислить скорость для короткого ребра перед перекрёстком, если мы его проезжаем не дольше секунды, а спутниковые данные чаще не обновляются. Имеем определённую длину ребра и время на входе и выходе, отличающееся не более, чем на секунду?

Такие ребра вообще не надо учитывать. На прокладку они не влияют, а только захламляют карту и увеличиваю трафик.

Их нужно или игнорировать или привязывать их скорость к предыдущему нормальному ребру.

  В 26.01.2011 в 12:19, WhAle_15 сказал:

Въезд на ребро считать только при присутствии на нём скорости, отличной от нуля и в попутном направлении.

Я имел в виду причем тут:

  Цитата
Вероятно, завышенная скорость правого поворота получилась действительно из-за ошибки позиционирования, когда при подъезде к перекрёстку точка сразу же перескочила на следующее ребро, когда фактически манёвр ещё не был совершён.
Изменено пользователем ERER
Ссылка на сообщение
Поделиться на другие сайты

  ERER сказал:

Я имел в виду причем тут:

На приведённом Вами скриншоте присутствует векторная скорость поворота направо (с Октябрьской набережной на Зольную) равная 120. Такое могло произойти как раз из-за:

  WhAle_15 сказал:

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

Разве не?

Ссылка на сообщение
Поделиться на другие сайты

а на кайенах уже не ездят больше 120 что ли?

особенно по пустым участкам набережных более 3 км....

Ссылка на сообщение
Поделиться на другие сайты

  demalina сказал:

а на кайенах уже не ездят больше 120 что ли? особенно по пустым участкам набережных более 3 км....

На приведённом скриншоте векторная пробка поворота направо (на Зольную) для встречного транспорта. Причём здесь участок набережной более 3 км?

Ссылка на сообщение
Поделиться на другие сайты

  В 26.01.2011 в 12:33, WhAle_15 сказал:

На приведённом Вами скриншоте присутствует векторная скорость поворота направо (с Октябрьской набережной на Зольную) равная 120. Такое могло произойти как раз из-за:

Разве не?

Поясни каким образом.

  В 26.01.2011 в 12:44, WhAle_15 сказал:

На приведённом скриншоте векторная пробка поворота направо (на Зольную) для встречного транспорта. Причём здесь участок набережной более 3 км?

Потому, что это ребро до Дыбенко до Зольной. Длина примерно 2700 метров.

  В 26.01.2011 в 12:36, demalina сказал:

а на кайенах уже не ездят больше 120 что ли?

особенно по пустым участкам набережных более 3 км....

Угу. Причем количество этих Кайонов резко возросло после 30.12.10 и только благодаря героическим усилиям разработчиков СГ-а, их количество удалось несколько уменьшить. :D

Ссылка на сообщение
Поделиться на другие сайты

  ERER сказал:

Поясни каким образом.

Стрелочка рядом со скоростью указывает направление для манёвра на следующее ребро. Следующее ребро с таким направлением как раз выпадает на Зольную.

ЗЫ. Кто-то из нас неправильно понимает толкование векторных пробок. Неужели я? :)

Ссылка на сообщение
Поделиться на другие сайты

  В 26.01.2011 в 12:49, WhAle_15 сказал:

Стрелочка рядом со скоростью указывает направление для манёвра на следующее ребро. Следующее ребро с таким направлением как раз выпадает на Зольную.

ЗЫ. Кто-то из нас неправильно понимает толкование векторных пробок. Неужели я? :)

Я спрашиваю каким образом это все объясняет скорость >= 120 км/ч.

Что показывает стрелочка и какие там улицы я в курсе. ;)

Ссылка на сообщение
Поделиться на другие сайты
  Цитата
благодаря героическим усилиям разработчиков
дык, сначала налажали, а потом "героические усилия"... :)
Ссылка на сообщение
Поделиться на другие сайты

  ERER сказал:

Я спрашиваю каким образом это все объясняет скорость >= 120 км/ч

Попробую перефразировать свои слова:

  WhAle_15 сказал:

когда при подъезде к перекрёстку точка сразу же перескочила на следующее ребро, когда фактически манёвр ещё не был совершён.

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

Варианты:

1) Останавливаюсь на перекрёстке, собираюсь повернуть направо, но манёвр ещё не совершил, а точка позиционирования уже отобразилась на следующем ребре. То есть манёвр уже как бы совершён, отсюда и завышенное значение.

2) Либо еду (точнее, несусь) я на своём Кайене прямо по Октябрьской набережной со скоростью не менее "стадвадцати" и никак не думаю поворачивать на Зольную, а точка позиционирования на неё случайно попадает и учитывает ту скорость, с которой я перемещался прямо.

Склоняюсь к первому варианту.

Ссылка на сообщение
Поделиться на другие сайты

  В 26.01.2011 в 13:08, WhAle_15 сказал:

Попробую перефразировать свои слова:

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

Варианты:

1) Останавливаюсь на перекрёстке, собираюсь повернуть направо, но манёвр ещё не совершил, а точка позиционирования уже отобразилась на следующем ребре. То есть манёвр уже как бы совершён, отсюда и завышенное значение.

2) Либо еду (точнее, несусь) я на своём Кайене прямо по Октябрьской набережной со скоростью не менее "стадвадцати" и никак не думаю поворачивать на Зольную, а точка позиционирования на неё случайно попадает и учитывает ту скорость, с которой я перемещался прямо.

Склоняюсь к первому варианту.

Ни тот, ни другой.

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

Нет не так. Это просто скорость проезда данного конкретного ребра датчиком, который после проезда данного ребра повернул направо/налево/проехал прямо.

Т.е. в данном случае, если представить, что 120 км/ч это некая реальная скорость, то это просто напросто значит, что некто проехал от Дыбенко до Зольной со средней скоростью 120 км/ч, после чего продолжил движение по Зольной. Не больше ни меньше.

Изменено пользователем ERER
  • Upvote 2
Ссылка на сообщение
Поделиться на другие сайты

  ERER сказал:

Это просто скорость проезда данного конкретного ребра датчиком, который после проезда данного ребра повернул направо/налево/проехал прямо.

Эвоно как. Пепла мне, пепла! Спасибо за разъяснение.

Тогда - да... Фантастика

Ссылка на сообщение
Поделиться на другие сайты

Возвращаясь к стартовому посту.

Пусть есть ребро длиной 500 метров.

Мы его проезжаем равномерно за скоростью 60 км/ч. Т.е. тратим на это 30 сек.

Пусть погрешность определения точке входа и выхода +/- 20 метров. В самых плохих случая мы получим:

длина ребра 460 м - скорость: 55.2 км/ч

длина ребра 540 м - скорость: 64.8 км/ч.

разобъем ребро на 5 кусочков, для которых будем определять скорость. Но погрешность останется такой же (+/-20 м)

Т.о. для каждого кусочка будет:

длина куска 60 м - 36 км/ч

длина куска 140 м - 84 км/ч.

Т.о. результирующая скорость для ребра будет лежать в этом диапазоне.

Сравни с вариантом 2-х засечек.

P.S. Если я конечно ничего не напутал. :)

Изменено пользователем ERER
Ссылка на сообщение
Поделиться на другие сайты

ERER,расстояние между двумя конечными точками ребра, для которого рассчитывается скорость прохождения - есть прямая, а ребро - не есть (точнее, далеко не всегда) :)

PS. Хотя расстояние мы берём не по прямой... Фу, чо-та я запарился сегодня )

Изменено пользователем WhAle_15
Ссылка на сообщение
Поделиться на другие сайты

  В 26.01.2011 в 10:00, WhAle_15 сказал:

<...>используется алгоритм, когда на основании данных о времени входа на ребро и времени выхода с ребра, зная длинну ребра, вычисляем скорость его прохождения. <...>

Начиная с 3.8SP1 это не так.

Ссылка на сообщение
Поделиться на другие сайты

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

Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.

×
×
  • Создать...