Nawigacja - wykrywanie opuszczenia trasy

0

Załóżmy że implementuje aplikacje do nawigacji. Czy macie pomysły na wykrycie na którym odcinku trasy znajduje się pojazd oraz na wykrycie kiedy ktoś opuszcza trasę? Szukałem jakichś sensownych publikacji na ten temat, ale nic wartościowego nie znalazłem.
Założenia:

  • mapa jest zadana w postaci grafu
  • trasa to lista krawędzi / wierzchołków (wierzchołki mają koordynaty gps)
    Sposoby które testowałem:
  • Przyjęcie założenia ze startujemy z wierzchołka i odliczanie ile przejechaliśmy i na tej podstawie przeskakiwanie na kolejny odcinek kiedy "przejedziemy" poprzedni. Nie ma tu możliwości wykrycia wyjechania poza trasę plus jest to słabe jeśli gps zwróci nam chociaż trochę niedokładne dane.
  • Do wykrycia gdzie na drodze jesteśmy: sprawdzanie czy pojazd "zbliża się" do kolejnego wierzchołka drogi i kiedy zacznie się "oddalać" to znaczy że zmieniliśmy odcinek drogi na kolejny. Słabe bo może się zdarzyć że ktoś wcale nie minie tego wierzchołka a my to wykryjemy przez przypadek. Do sprawdzenia czy ktoś wyjechał poza trasę: obliczanie jak daleko jesteśmy od prostej wyznaczonej przez wierzchołki pomiędzy którymi jesteśmy. Słabe dla serpentyn, równoległych dróg blisko siebie i ostrych zakrętów bo możemy wykryć zmianę drogi niepoprawnie.

Może znacie jakiś bardziej sensowny sposób?

0
  • Do wykrycia gdzie na drodze jesteśmy: sprawdzanie czy pojazd "zbliża się" do kolejnego wierzchołka drogi i kiedy zacznie się "oddalać" to znaczy że zmieniliśmy odcinek drogi na kolejny. Słabe bo może się zdarzyć że ktoś wcale nie minie tego wierzchołka a my to wykryjemy przez przypadek.

Nie takie słabe gdybyś wykorzystał do tego dodatkowo parametr HDG z GPS, a podejrzewam, że skoro masz koordynaty to pewnie masz kilka innych parametrów z NMEA.

0

Chodzi o aplikację androidową więc: http://developer.android.com/reference/android/location/Location.html :) to jest dostępne.
Ale nadal nie widzę jak kierunek mógłby mi pomóc.

0

Nie jestem pewien czy rozumiem, ale:

Masz:

  • mapa jest zadana w postaci grafu
  • trasa to lista krawędzi / wierzchołków (wierzchołki mają koordynaty gps)

Chcesz:

Czy macie pomysły na wykrycie na którym odcinku trasy znajduje się pojazd oraz na wykrycie kiedy ktoś opuszcza trasę?

Prosty sposób, pewnie niepoprawny skoro go nie użyłeś:
Szukasz najbliższej krawędzi (od pozycji użytkownika) na mapie, sprawdzasz odległość do niej. Jeśli pozycja jest dalej niż ustalony epsilon, użytkownik jest poza trasą. W przeciwnym wypadku, pozycja na trasie to rzutowanie obecnej pozycji (punktu) na krawędź (odcinek).

0

@msm problem w tym że "najbliższa krawędź" niekoniecznie będzie tą krawędzią na której realnie jesteśmy (bo już sam fakt wykrywania na którym odcinku trasy jesteśmy jest problematyczny). Wyobraź sobie równoległe drogi i weź pod uwagę że odczyty gps nie są idealne, szczególnie w telefonach ;)

1

Gdyby ktoś był zainteresowany to mogę opisać w jaki sposób finalnie sobie poradziłem ;)

  1. Z GPSu pobieram pozycję, prędkość (http://developer.android.com/reference/android/location/Location.html#getSpeed()) oraz timestamp
  2. Kiedy przychodzi update z GPSu wyliczam najpierw spodziewaną pozycję (na podstawie prędkości, ostatniej pozycji oraz wyznaczonej trasy). Do jej wyliczenia potrzebuje informacji o tym ile przejechaliśmy. Po to potrzebny timestamp i prędkość. Na podstawie informacji o prędkości i o czasie od ostatniej aktualizacji pozycji wyliczam ile mniej wiecej przejechaliśmy. Samo wyliczanie spodziewanej pozycji polega na:
  • wyznaczeniu segmentu drogi na którym jesteśmy - "kasujemy segmenty" odejmując ich dlugość od przejechanej od ostatniego czasu odległości aż trafimy na ten na którym powinniśmy być
  • przesunięcie początku tego segmentu o odpowiedni wektor w kierunku końca (w zależności od tego ile metrów na tym segmencie przejechaliśmy)
  1. Porównujemy pozycję spodziewaną i tą którą GPS podaje jako aktualną. Jeśli są zbliżone (z dokładnością do pewnej delty) to zakładam, że wszystko jest ok i aktualna pozycja samochodu jest taka jak podana przez GPS. Jeśli pozycje się nie zgadzają to znaczy że zjechaliśmy z trasy i trzeba wyznaczyć nową od aktualnej pozycji do miejsca docelowego.

Wszelkie pomysły z wykrywaniem na podstawie samej tylko pozycji podanej przez GPS okazały się nie działać w praktyce:

  • sprawdzanie współliniowości naszej pozycji z kolejnymi odcinkami drogi wysypuje się jeśli mamy prostą drogę pociętą na segmenty
  • dodanie do współliniowości warunku na znajdowanie sie w prostokącie wyznaczanym przez wierzchołki drogi wysypuje się bo gps moze nam dać niedokładny sygnał i możemy wypaść z tego prostokąta (a jak damy za dużą potencjalną deltę to znów możemy wykryć się w niepoprawnym segmencie :D)

1 użytkowników online, w tym zalogowanych: 0, gości: 1