WhAle_15 Опубликовано 26 января, 2011 Поделиться Опубликовано 26 января, 2011 В более ранних и текущей версии СГ (на сегодня это 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 Критикуйте... :) Ссылка на сообщение Поделиться на другие сайты
ERER Опубликовано 26 января, 2011 Поделиться Опубликовано 26 января, 2011 Опять таки, основываясь на догадках, предполагаю, что в текущей реализации методики определения скорости на ребре используется алгоритм, когда на основании данных о времени входа на ребро и времени выхода с ребра, зная длинну ребра, вычисляем скорость его прохождения. Вот именно в этом (если мои предположения о текущем алгоритме верны) и кроется корень зла. ... Критикуйте... В чем зло? Самое простое и точное определение средней скорости. ИМХО как раз из-за того, что КМК она стала определяться по другому и все проблемы (учет скорость неполного ребра - подтверждение тому). Ссылка на сообщение Поделиться на другие сайты
WhAle_15 Опубликовано 26 января, 2011 Автор Поделиться Опубликовано 26 января, 2011 В чем зло? Иначе откуда завышенные значения скоростей? Значит проблема с вычислением позиционирования именно на ребре. Отсюда и погрешности точки входа и точки выхода, на основании которых вычисляются неверные скорости. А если рассмотреть вариант, предложенный мной, то даже, если будут неточности с определением позиционирования на ребре - мы не будем иметь неверные данные о скоростях. PS: ERER, что такое КМК? Я уже не первый Ваш пост встречаю подобные аббревиатуры от которых у меня вскипает мозг Даже гугл не помощник: Ссылка на сообщение Поделиться на другие сайты
sergges Опубликовано 26 января, 2011 Поделиться Опубликовано 26 января, 2011 (изменено) как мне кажется КМК и Гугл знает) ) пример приведен интересный Изменено 26 января, 2011 пользователем sergges Ссылка на сообщение Поделиться на другие сайты
demalina Опубликовано 26 января, 2011 Поделиться Опубликовано 26 января, 2011 проблема по-моему в том, что приемник GPS не транслирует скорость, он транслирует координаты. скорость вычисляется программой. а недоперескорости возникают из-за неточностей позиционирования слабых модулей GPS, и, как следствие, некорректного вычисления скорости программой. более того, возникают случаи, когда из-за неточного позиционирования на коротких ребрах погрешность позиционирования много больше длины ребра, отсюда возникают самолеты. вторая проблема - имея даже сверхточный gps-приемник невозможно полностью соответствовать дорожному графу на карте. отсюда возникают погрешности привязки дельтаплана к дороге которые, при неточных картах, могут быть много больше ребра вычисляемой скорости. Ссылка на сообщение Поделиться на другие сайты
ERER Опубликовано 26 января, 2011 Поделиться Опубликовано 26 января, 2011 (изменено) проблема по-моему в том, что приемник GPS не транслирует скорость, он транслирует координаты. скорость вычисляется программой. а недоперескорости возникают из-за неточностей позиционирования слабых модулей GPS, и, как следствие, некорректного вычисления скорости программой. более того, возникают случаи, когда из-за неточного позиционирования на коротких ребрах погрешность позиционирования много больше длины ребра, отсюда возникают самолеты. вторая проблема - имея даже сверхточный gps-приемник невозможно полностью соответствовать дорожному графу на карте. отсюда возникают погрешности привязки дельтаплана к дороге которые, при неточных картах, могут быть много больше ребра вычисляемой скорости. Это было. Сегодняшние проблемы явно не от этого. Т.к.: Сложно объяснить проблемами позиционирования, погрешностями определения въезда/выезда с ребра и т.п. эти 120 км/ч на ребере длиной почти 3 км. Да и прекрасно 120 км/ч получаются при совершенно точном следовании дельтаплана и точки по ребру. Т.ч. все погрешности уже учтены. Иначе откуда завышенные значения скоростей? Значит проблема с вычислением позиционирования именно на ребре. Отсюда и погрешности точки входа и точки выхода, на основании которых вычисляются неверные скорости. А если рассмотреть вариант, предложенный мной, то даже, если будут неточности с определением позиционирования на ребре - мы не будем иметь неверные данные о скоростях. Это к разрабам. Про погрешности см. выше. Изменено 26 января, 2011 пользователем ERER Ссылка на сообщение Поделиться на другие сайты
WhAle_15 Опубликовано 26 января, 2011 Автор Поделиться Опубликовано 26 января, 2011 приемник GPS не транслирует скорость, он транслирует координаты Всё верно. На основании изменения координат получаем скорость. Опять же, повторюсь: Вы видели когда-нибудь (естественно, после входа GPS-приёмника в рабочее состояние, когда он имеет приемлимую точность позиционирования, на основании количества используемых спутников), чтобы индикатор текущей скорости показывал Вам откровенно завышенные значения скорости, по сравнению, например, со спидометром в автомобиле? Очевидцы - пожалуйста отпишитесь! а недоперескорости возникают из-за неточностей позиционирования слабых модулей GPS, и, как следствие, некорректного вычисления скорости программой. более того, возникают случаи, когда из-за неточного позиционирования на коротких ребрах погрешность позиционирования много больше длины ребра, отсюда возникают самолеты. Зачем сводить задачу к поиску момента входа и выхода с ребра и на основании этих данных вычислять скорость прохождения (этот механизм склонен к появлениям существенных погрешностей), если можно решить задачу проще, описанным мной методом, когда нет жёсткой зависимости от обоих концов ребра? А главное - скорости получаются реальные. Покритикуйте мою методику. Приведите примеры, где она не будет работать. Вот это уже будет конструктивно. Ссылка на сообщение Поделиться на другие сайты
WhAle_15 Опубликовано 26 января, 2011 Автор Поделиться Опубликовано 26 января, 2011 Про погрешности см. выше. По ситуации на скриншоте. Вероятно, завышенная скорость правого поворота получилась действительно из-за ошибки позиционирования, когда при подъезде к перекрёстку точка сразу же перескочила на следующее ребро, когда фактически манёвр ещё не был совершён. Ссылка на сообщение Поделиться на другие сайты
ERER Опубликовано 26 января, 2011 Поделиться Опубликовано 26 января, 2011 (изменено) Очевидцы - пожалуйста отпишитесь! Всегда, при сбрасывании скорости. Вплоть до +10 км/ч. Зачем сводить задачу к поиску момента входа и выхода с ребра и на основании этих данных вычислять скорость прохождения (этот механизм склонен к появлениям существенных погрешностей), если можно решить задачу проще, описанным мной методом, когда нет жёсткой зависимости от обоих концов ребра? А главное - скорости получаются реальные. Покритикуйте мою методику. Приведите примеры, где она не будет работать. Вот это уже будет конструктивно. По твоей методике, ты все-равно считаешь также. Но не 1 раз, а множество. Т.е. вместо 2-х засечек делаешь n. Но, т.к. ты сам говоришь, что в определении координат могут быть погрешности, то при 2-х засечках их влияние будет меньше, чем при n. Т.е. точность уменьшится. По ситуации на скриншоте. Вероятно, завышенная скорость правого поворота получилась действительно из-за ошибки позиционирования, когда при подъезде к перекрёстку точка сразу же перескочила на следующее ребро, когда фактически манёвр ещё не был совершён. И что? Изменено 26 января, 2011 пользователем ERER Ссылка на сообщение Поделиться на другие сайты
WhAle_15 Опубликовано 26 января, 2011 Автор Поделиться Опубликовано 26 января, 2011 По твоей методике, ты все-равно считаешь также. Но не 1 раз, а множество. Т.е. вместо 2-х засечек делаешь n. Но, т.к. ты сам говоришь, что в определении координат могут быть погрешности, то при 2-х засечках их влияние будет меньше, чем при n. Т.е. точность уменьшится. Например, как вычислить скорость для короткого ребра перед перекрёстком, если мы его проезжаем не дольше секунды, а спутниковые данные чаще не обновляются. Имеем определённую длину ребра и время на входе и выходе, отличающееся не более, чем на секунду? И что? Въезд на ребро считать только при присутствии на нём скорости, отличной от нуля и в попутном направлении. Ссылка на сообщение Поделиться на другие сайты
ERER Опубликовано 26 января, 2011 Поделиться Опубликовано 26 января, 2011 (изменено) Например, как вычислить скорость для короткого ребра перед перекрёстком, если мы его проезжаем не дольше секунды, а спутниковые данные чаще не обновляются. Имеем определённую длину ребра и время на входе и выходе, отличающееся не более, чем на секунду? Такие ребра вообще не надо учитывать. На прокладку они не влияют, а только захламляют карту и увеличиваю трафик. Их нужно или игнорировать или привязывать их скорость к предыдущему нормальному ребру. Въезд на ребро считать только при присутствии на нём скорости, отличной от нуля и в попутном направлении. Я имел в виду причем тут: Вероятно, завышенная скорость правого поворота получилась действительно из-за ошибки позиционирования, когда при подъезде к перекрёстку точка сразу же перескочила на следующее ребро, когда фактически манёвр ещё не был совершён. Изменено 26 января, 2011 пользователем ERER Ссылка на сообщение Поделиться на другие сайты
WhAle_15 Опубликовано 26 января, 2011 Автор Поделиться Опубликовано 26 января, 2011 Я имел в виду причем тут: На приведённом Вами скриншоте присутствует векторная скорость поворота направо (с Октябрьской набережной на Зольную) равная 120. Такое могло произойти как раз из-за: Вероятно, завышенная скорость правого поворота получилась действительно из-за ошибки позиционирования, когда при подъезде к перекрёстку точка сразу же перескочила на следующее ребро, когда фактически манёвр ещё не был совершён. Разве не? Ссылка на сообщение Поделиться на другие сайты
demalina Опубликовано 26 января, 2011 Поделиться Опубликовано 26 января, 2011 а на кайенах уже не ездят больше 120 что ли? особенно по пустым участкам набережных более 3 км.... Ссылка на сообщение Поделиться на другие сайты
WhAle_15 Опубликовано 26 января, 2011 Автор Поделиться Опубликовано 26 января, 2011 а на кайенах уже не ездят больше 120 что ли? особенно по пустым участкам набережных более 3 км.... На приведённом скриншоте векторная пробка поворота направо (на Зольную) для встречного транспорта. Причём здесь участок набережной более 3 км? Ссылка на сообщение Поделиться на другие сайты
ERER Опубликовано 26 января, 2011 Поделиться Опубликовано 26 января, 2011 На приведённом Вами скриншоте присутствует векторная скорость поворота направо (с Октябрьской набережной на Зольную) равная 120. Такое могло произойти как раз из-за: Разве не? Поясни каким образом. На приведённом скриншоте векторная пробка поворота направо (на Зольную) для встречного транспорта. Причём здесь участок набережной более 3 км? Потому, что это ребро до Дыбенко до Зольной. Длина примерно 2700 метров. а на кайенах уже не ездят больше 120 что ли? особенно по пустым участкам набережных более 3 км.... Угу. Причем количество этих Кайонов резко возросло после 30.12.10 и только благодаря героическим усилиям разработчиков СГ-а, их количество удалось несколько уменьшить. :D Ссылка на сообщение Поделиться на другие сайты
WhAle_15 Опубликовано 26 января, 2011 Автор Поделиться Опубликовано 26 января, 2011 Поясни каким образом. Стрелочка рядом со скоростью указывает направление для манёвра на следующее ребро. Следующее ребро с таким направлением как раз выпадает на Зольную. ЗЫ. Кто-то из нас неправильно понимает толкование векторных пробок. Неужели я? :) Ссылка на сообщение Поделиться на другие сайты
ERER Опубликовано 26 января, 2011 Поделиться Опубликовано 26 января, 2011 Стрелочка рядом со скоростью указывает направление для манёвра на следующее ребро. Следующее ребро с таким направлением как раз выпадает на Зольную. ЗЫ. Кто-то из нас неправильно понимает толкование векторных пробок. Неужели я? Я спрашиваю каким образом это все объясняет скорость >= 120 км/ч. Что показывает стрелочка и какие там улицы я в курсе. ;) Ссылка на сообщение Поделиться на другие сайты
demalina Опубликовано 26 января, 2011 Поделиться Опубликовано 26 января, 2011 благодаря героическим усилиям разработчиковдык, сначала налажали, а потом "героические усилия"... :) Ссылка на сообщение Поделиться на другие сайты
WhAle_15 Опубликовано 26 января, 2011 Автор Поделиться Опубликовано 26 января, 2011 Я спрашиваю каким образом это все объясняет скорость >= 120 км/ч Попробую перефразировать свои слова: когда при подъезде к перекрёстку точка сразу же перескочила на следующее ребро, когда фактически манёвр ещё не был совершён. Векторная скорость, это (в моём уже сомневающемся понимании) скорость, с которой произошёл переход на следующее ребро с предыдущего (в данном случае: поворота направо на Зольную) Варианты: 1) Останавливаюсь на перекрёстке, собираюсь повернуть направо, но манёвр ещё не совершил, а точка позиционирования уже отобразилась на следующем ребре. То есть манёвр уже как бы совершён, отсюда и завышенное значение. 2) Либо еду (точнее, несусь) я на своём Кайене прямо по Октябрьской набережной со скоростью не менее "стадвадцати" и никак не думаю поворачивать на Зольную, а точка позиционирования на неё случайно попадает и учитывает ту скорость, с которой я перемещался прямо. Склоняюсь к первому варианту. Ссылка на сообщение Поделиться на другие сайты
ERER Опубликовано 26 января, 2011 Поделиться Опубликовано 26 января, 2011 (изменено) Попробую перефразировать свои слова: Векторная скорость, это (в моём уже сомневающемся понимании) скорость, с которой произошёл переход на следующее ребро с предыдущего (в данном случае: поворота направо на Зольную) Варианты: 1) Останавливаюсь на перекрёстке, собираюсь повернуть направо, но манёвр ещё не совершил, а точка позиционирования уже отобразилась на следующем ребре. То есть манёвр уже как бы совершён, отсюда и завышенное значение. 2) Либо еду (точнее, несусь) я на своём Кайене прямо по Октябрьской набережной со скоростью не менее "стадвадцати" и никак не думаю поворачивать на Зольную, а точка позиционирования на неё случайно попадает и учитывает ту скорость, с которой я перемещался прямо. Склоняюсь к первому варианту. Ни тот, ни другой. Векторная скорость, это (в моём уже сомневающемся понимании) скорость, с которой произошёл переход на следующее ребро с предыдущего Нет не так. Это просто скорость проезда данного конкретного ребра датчиком, который после проезда данного ребра повернул направо/налево/проехал прямо. Т.е. в данном случае, если представить, что 120 км/ч это некая реальная скорость, то это просто напросто значит, что некто проехал от Дыбенко до Зольной со средней скоростью 120 км/ч, после чего продолжил движение по Зольной. Не больше ни меньше. Изменено 26 января, 2011 пользователем ERER 2 Ссылка на сообщение Поделиться на другие сайты
WhAle_15 Опубликовано 26 января, 2011 Автор Поделиться Опубликовано 26 января, 2011 Это просто скорость проезда данного конкретного ребра датчиком, который после проезда данного ребра повернул направо/налево/проехал прямо. Эвоно как. Пепла мне, пепла! Спасибо за разъяснение. Тогда - да... Фантастика Ссылка на сообщение Поделиться на другие сайты
ERER Опубликовано 26 января, 2011 Поделиться Опубликовано 26 января, 2011 (изменено) Возвращаясь к стартовому посту. Пусть есть ребро длиной 500 метров. Мы его проезжаем равномерно за скоростью 60 км/ч. Т.е. тратим на это 30 сек. Пусть погрешность определения точке входа и выхода +/- 20 метров. В самых плохих случая мы получим: длина ребра 460 м - скорость: 55.2 км/ч длина ребра 540 м - скорость: 64.8 км/ч. разобъем ребро на 5 кусочков, для которых будем определять скорость. Но погрешность останется такой же (+/-20 м) Т.о. для каждого кусочка будет: длина куска 60 м - 36 км/ч длина куска 140 м - 84 км/ч. Т.о. результирующая скорость для ребра будет лежать в этом диапазоне. Сравни с вариантом 2-х засечек. P.S. Если я конечно ничего не напутал. :) Изменено 26 января, 2011 пользователем ERER Ссылка на сообщение Поделиться на другие сайты
WhAle_15 Опубликовано 26 января, 2011 Автор Поделиться Опубликовано 26 января, 2011 (изменено) ERER,расстояние между двумя конечными точками ребра, для которого рассчитывается скорость прохождения - есть прямая, а ребро - не есть (точнее, далеко не всегда) PS. Хотя расстояние мы берём не по прямой... Фу, чо-та я запарился сегодня ) Изменено 26 января, 2011 пользователем WhAle_15 Ссылка на сообщение Поделиться на другие сайты
YoGun Опубликовано 26 января, 2011 Поделиться Опубликовано 26 января, 2011 <...>используется алгоритм, когда на основании данных о времени входа на ребро и времени выхода с ребра, зная длинну ребра, вычисляем скорость его прохождения. <...> Начиная с 3.8SP1 это не так. Ссылка на сообщение Поделиться на другие сайты
snpy01 Опубликовано 26 января, 2011 Поделиться Опубликовано 26 января, 2011 Я думаю все проще... Въехали на ребро, координаты ситигид снял с порта и запомнил, далее происходит легкий повисун (пробки там обновляются,звонок водящий, если коммуникатор или просто винду клинит). Подъезжаем к концу ребра, зависон проходит, сидигид опрашивает порт... и опа за секунду мы проехали все ребро. Вот как-то так... Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения