Перейти к содержанию
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. Ситуация следующая ехал: по маршруту (обозначен синей линией) с промежуточной точкой на заправке, проигнорировал д

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

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

...

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

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

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

В чем зло?

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

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

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

1296037408-128.jpg

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

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

и Гугл знает)

) 6f590689ff27.jpg

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

И что?

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

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

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

И что?

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

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

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

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

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

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

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

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

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

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

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

Разве не?

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

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

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

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

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

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

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

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

Разве не?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Варианты:

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

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

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

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

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

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

Варианты:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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