Jump to content
GPS навигатор СитиГИД

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


Recommended Posts

В более ранних и текущей версии СГ (на сегодня это 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

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

Link to post
Share on other sites
  • Replies 122
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

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

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

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

Posted Images

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

...

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

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

Link to post
Share on other sites

В чем зло?

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

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

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

1296037408-128.jpg

Link to post
Share on other sites

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

и Гугл знает)

) 6f590689ff27.jpg

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

Edited by sergges
Link to post
Share on other sites

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

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

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

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

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

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

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

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

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

Link to post
Share on other sites

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Edited by ERER
Link to post
Share on other sites

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

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

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

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

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

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

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

Link to post
Share on other sites

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

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

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

Link to post
Share on other sites

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

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

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

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

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

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

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

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

И что?

Edited by ERER
Link to post
Share on other sites

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

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

И что?

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

Link to post
Share on other sites

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

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

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

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

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

Вероятно, завышенная скорость правого поворота получилась действительно из-за ошибки позиционирования, когда при подъезде к перекрёстку точка сразу же перескочила на следующее ребро, когда фактически манёвр ещё не был совершён.
Edited by ERER
Link to post
Share on other sites

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

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

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

Разве не?

Link to post
Share on other sites

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

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

Link to post
Share on other sites

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

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

Link to post
Share on other sites

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

Разве не?

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

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

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

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

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

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

Link to post
Share on other sites

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

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

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

Link to post
Share on other sites

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

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

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

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

Link to post
Share on other sites
благодаря героическим усилиям разработчиков
дык, сначала налажали, а потом "героические усилия"... :)
Link to post
Share on other sites

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

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

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

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

Варианты:

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

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

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

Link to post
Share on other sites

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

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

Варианты:

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

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

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

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

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

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

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

Edited by ERER
  • Upvote 2
Link to post
Share on other sites

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

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

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

Link to post
Share on other sites

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

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

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

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

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

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

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

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

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

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

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

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

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

Edited by ERER
Link to post
Share on other sites

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

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

Edited by WhAle_15
Link to post
Share on other sites

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

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

Link to post
Share on other sites

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

Link to post
Share on other sites
Guest
This topic is now closed to further replies.

×
×
  • Create New...