From 32243b1e5aaeb0387bed302ece9d095dc7ce92a3 Mon Sep 17 00:00:00 2001 From: Vladimir Byko-Ianko Date: Thu, 14 Jun 2018 16:31:30 +0300 Subject: [PATCH] Tunning location extrapolation. LOG TID(1) INFO 2.9087e-05 extrapolation_benchmark/extrapolation_benchmark.cpp:223 main() General tracks statistics. Number of tracks: 885 Number of track points: 567362 Average points per track: 641 Average track length: 15343.1 meters LOG TID(1) INFO 142.85 extrapolation_benchmark/extrapolation_benchmark.cpp:314 main() Processed 148291 points. 1482910 extrapolations is calculated. Projection is calculated for 1483123 extrapolations. LOG TID(1) INFO 142.85 extrapolation_benchmark/extrapolation_benchmark.cpp:317 main() Cumulative moving average, variance and standard deviation for each extrapolation: LOG TID(1) INFO 142.85 extrapolation_benchmark/extrapolation_benchmark.cpp:324 main() Extrapolation 1 , 200 seconds after point two. Cumulative moving average = 0.666922 meters. Variance = 0.867515 . Standard deviation = 0.931405 LOG TID(1) INFO 142.85 extrapolation_benchmark/extrapolation_benchmark.cpp:324 main() Extrapolation 2 , 400 seconds after point two. Cumulative moving average = 1.32145 meters. Variance = 3.33216 . Standard deviation = 1.82542 LOG TID(1) INFO 142.85 extrapolation_benchmark/extrapolation_benchmark.cpp:324 main() Extrapolation 3 , 600 seconds after point two. Cumulative moving average = 1.94983 meters. Variance = 7.09659 . Standard deviation = 2.66394 LOG TID(1) INFO 142.85 extrapolation_benchmark/extrapolation_benchmark.cpp:324 main() Extrapolation 4 , 800 seconds after point two. Cumulative moving average = 2.51536 meters. Variance = 11.7494 . Standard deviation = 3.42774 LOG TID(1) INFO 142.85 extrapolation_benchmark/extrapolation_benchmark.cpp:324 main() Extrapolation 5 , 1000 seconds after point two. Cumulative moving average = 2.99075 meters. Variance = 16.7746 . Standard deviation = 4.09567 LOG TID(1) INFO 142.85 extrapolation_benchmark/extrapolation_benchmark.cpp:324 main() Extrapolation 6 , 1200 seconds after point two. Cumulative moving average = 3.54507 meters. Variance = 21.3933 . Standard deviation = 4.62529 LOG TID(1) INFO 142.85 extrapolation_benchmark/extrapolation_benchmark.cpp:324 main() Extrapolation 7 , 1400 seconds after point two. Cumulative moving average = 4.04992 meters. Variance = 26.5523 . Standard deviation = 5.15289 LOG TID(1) INFO 142.85 extrapolation_benchmark/extrapolation_benchmark.cpp:324 main() Extrapolation 8 , 1600 seconds after point two. Cumulative moving average = 4.514 meters. Variance = 32.3517 . Standard deviation = 5.68786 LOG TID(1) INFO 142.877 extrapolation_benchmark/extrapolation_benchmark.cpp:324 main() Extrapolation 9 , 1800 seconds after point two. Cumulative moving average = 4.94482 meters. Variance = 38.8987 . Standard deviation = 6.23688 LOG TID(1) INFO 142.877 extrapolation_benchmark/extrapolation_benchmark.cpp:324 main() Extrapolation 10 , 2000 seconds after point two. Cumulative moving average = 5.34581 meters. Variance = 46.295 . Standard deviation = 6.80405 --- map/extrapolation/extrapolator.cpp | 10 ++-------- map/extrapolation/extrapolator.hpp | 2 +- .../extrapolation_benchmark.cpp | 1 + 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/map/extrapolation/extrapolator.cpp b/map/extrapolation/extrapolator.cpp index 4fb3d80303..cf15f635c9 100644 --- a/map/extrapolation/extrapolator.cpp +++ b/map/extrapolation/extrapolator.cpp @@ -15,8 +15,8 @@ namespace // If the difference of values between two instances of GpsInfo is greater // than the appropriate constant below the extrapolator will be switched off for // these two instances of GpsInfo. -double constexpr kMaxExtrapolationSpeedMPS = 85.0; -double constexpr kMaxExtrapolationDistMeters = 120.0; +double constexpr kMaxExtrapolationSpeedMPS = 75.0; +double constexpr kMaxExtrapolationDistMeters = 100.0; double constexpr kMaxExtrapolationTimeSeconds = 2.1; class LinearExtrapolator @@ -63,12 +63,6 @@ location::GpsInfo LinearExtrapolation(location::GpsInfo const & gpsInfo1, e.Extrapolate(gpsInfo1.m_horizontalAccuracy, gpsInfo2.m_horizontalAccuracy); result.m_altitude = e.Extrapolate(gpsInfo1.m_altitude, gpsInfo2.m_altitude); - if (gpsInfo1.HasVerticalAccuracy() && gpsInfo2.HasVerticalAccuracy()) - { - result.m_verticalAccuracy = - e.Extrapolate(gpsInfo1.m_verticalAccuracy, gpsInfo2.m_verticalAccuracy); - } - // @TODO(bykoianko) Now |result.m_bearing| == |gpsInfo2.m_bearing|. // In case of |gpsInfo1.HasBearing() && gpsInfo2.HasBearing() == true| // consider finding an average value between |gpsInfo1.m_bearing| and |gpsInfo2.m_bearing| diff --git a/map/extrapolation/extrapolator.hpp b/map/extrapolation/extrapolator.hpp index 0eeba5d148..4ae20fe2fb 100644 --- a/map/extrapolation/extrapolator.hpp +++ b/map/extrapolation/extrapolator.hpp @@ -38,7 +38,7 @@ public: // |kMaxExtrapolationTimeMs| is time in milliseconds showing how long location will be // extrapolated after last location gotten from GPS. - static uint64_t constexpr kMaxExtrapolationTimeMs = 1000; + static uint64_t constexpr kMaxExtrapolationTimeMs = 2000; // |kExtrapolationPeriodMs| is time in milliseconds showing how often location will be // extrapolated. So if the last location was obtained from GPS at time X the next location // will be emulated by Extrapolator at time X + kExtrapolationPeriodMs. diff --git a/map/extrapolation_benchmark/extrapolation_benchmark.cpp b/map/extrapolation_benchmark/extrapolation_benchmark.cpp index 117eaf05d3..9d58eba729 100644 --- a/map/extrapolation_benchmark/extrapolation_benchmark.cpp +++ b/map/extrapolation_benchmark/extrapolation_benchmark.cpp @@ -276,6 +276,7 @@ int main(int argc, char * argv[]) auto const & iter = followedPoly.GetClosestProjectionInInterval( posSquare, [&extrapolatedMerc](FollowedPolyline::Iter const & it) { + ASSERT(it.IsValid(), ()); return MercatorBounds::DistanceOnEarth(it.m_pt, extrapolatedMerc); }, 0 /* start segment index */, followedPoly.GetPolyline().GetSize() - 1);