ETA a planowany czas przyjazdu - dwie różne wartości

ETA, czyli Estimated Time of Arrival, jest szacunkiem liczonym na bieżąco z aktualnej pozycji i warunków na trasie. Planowany czas przyjazdu powstaje wcześniej, przy układaniu kursu, i nie zmienia się wraz z tym, co dzieje się na drodze. Różnica między tymi dwiema wartościami wskazuje opóźnienie. Spedytor i odbiorca mogą z niej skorzystać, zanim pojazd faktycznie się spóźni.

Systemy Linkway dostarczają ETA na podstawie danych z monitoringu GPS, natężenia ruchu, obowiązkowych przerw kierowcy i pozostałego czasu pracy. Poniższy tekst rozkłada to na mechanizmy: jakie dane wchodzą do obliczenia, jak wygląda samo obliczenie i jak przekazuje się wynik dalej.

Kto czyta ETA i do czego jej używa

Ta sama liczba służy różnym osobom, ale każda z nich podejmuje inną decyzję. Spedytor decyduje o powiadomieniu klienta lub zmianie kursu, magazyn odbiorcy przygotowuje rampę i ludzi, a system awizacji sprawdza, czy pojazd zmieści się w zarezerwowanym oknie.

Odbiorca ETADecyzja oparta na ETASkutek błędnego ETA
Spedytorpowiadomienie klienta, zmiana kursureklamacja za nieuprzedzone spóźnienie
Magazyn odbiorcyprzygotowanie rampy i obsadybezczynność ludzi lub kolejka pojazdów
System awizacjiutrzymanie albo przesunięcie oknazablokowana rampa dla innych dostaw
Kierowcawybór miejsca przerwyprzekroczenie limitu czasu pracy

Podział na odbiorców ma konsekwencje projektowe. Magazyn odbiorcy potrzebuje ETA z odpowiednim wyprzedzeniem, żeby przygotować obsadę zgodnie z zasadami opisanymi w tekście o przyjęciu do magazynu, a kierowca potrzebuje jej w formie prostego komunikatu, nie tabeli parametrów. Ten sam wynik trzeba więc prezentować w kilku formatach.

Dane wejściowe do obliczenia ETA

Pozycja i prędkość z GPS

Podstawą jest strumień pozycji pojazdu. Każdy punkt ma współrzędne oraz znacznik czasu, a często także prędkość chwilową. Firmy transportowe zwykle mają w flocie urządzenia kilku producentów, dlatego dane trzeba sprowadzić do jednego formatu. Zajmuje się tym integrator, opisany w artykule o kontroli danych GPS w linkway.INTEGRATOR, a dane od kierowcy przekazuje aplikacja linkway.TRACKER.

Prędkość średnią z ostatnich minut można wyliczyć z samych pozycji, gdy urządzenie nie przesyła prędkości. Poniższe zapytanie T-SQL, oparte na przykładowej tabeli pozycji, zamienia dwa kolejne punkty na dystans i średnią prędkość odcinka.

WITH p AS (
    SELECT PojazdId, Czas, Lat, Lon,
           LAG(Lat)   OVER (PARTITION BY PojazdId ORDER BY Czas) AS PLat,
           LAG(Lon)   OVER (PARTITION BY PojazdId ORDER BY Czas) AS PLon,
           LAG(Czas)  OVER (PARTITION BY PojazdId ORDER BY Czas) AS PCzas
    FROM dbo.PozycjaGps
)
SELECT PojazdId, Czas,
       geography::Point(Lat, Lon, 4326)
           .STDistance(geography::Point(PLat, PLon, 4326)) / 1000.0 AS Km,
       DATEDIFF(SECOND, PCzas, Czas) AS Sekundy
FROM p
WHERE PLat IS NOT NULL;

Funkcja okna LAG w dokumentacji Microsoft pozwala odczytać poprzedni wiersz bez złączenia tabeli z samą sobą. Nazwy tabel i kolumn są ilustracyjne, a odcinki z zerową różnicą czasu trzeba odfiltrować przed dzieleniem.

Widok panelu Linkway z mapą Europy i znacznikami pojazdów w sekcji Monitoring
Mapa z pozycjami pojazdów w panelu Linkway: z tych punktów wyliczana jest droga pozostała do celu

Ruch drogowy i ograniczenia trasy

Sama pozycja nie wystarcza, bo pozostały dystans zależy od drogi, a nie od odległości w linii prostej. System wyznacza trasę po sieci dróg, a następnie przypisuje odcinkom przewidywane prędkości z uwzględnieniem natężenia ruchu i utrudnień, takich jak wypadek czy zamknięcie. Odcinek autostrady w godzinach szczytu ma inną prędkość średnią niż w nocy, więc jeden współczynnik dla całej trasy dawałby duże błędy.

Rodzaj pojazdu i ładunku

Prędkość, z jaką pojazd pokonuje odcinek, zależy od jego klasy. Zestaw ciężarowy podlega innym limitom prędkości niż samochód dostawczy, a ładunek niebezpieczny lub ponadnormatywny nakłada dodatkowe ograniczenia trasy. Profil pojazdu, w tym masa i wysokość zestawu, powinien trafiać do obliczenia razem ze zleceniem, bo prędkość średnia z ruchu ogólnego zawyży ETA dla ciężarówki.

Czas pracy kierowcy jako składnik ETA

Kierowca nie może jechać bez ograniczeń. Po 4,5 godziny prowadzenia pojazdu obowiązuje przerwa co najmniej 45 minut, a łączny czas jazdy w ciągu doby i tygodnia jest limitowany. ETA, która ignoruje te przerwy, będzie systematycznie zbyt optymistyczna na trasach dłuższych niż kilka godzin. Dlatego system uwzględnia obowiązkowe pauzy i pozostały czas pracy, a zasady rejestracji czasu opisuje tekst o programie do logistyki transportu i tachografie.

Filtrowanie błędnych pozycji

Strumień GPS zawiera błędy, które bez filtrowania zniekształcą ETA. Typowe przypadki to skok pozycji o kilkaset metrów po utracie sygnału, punkty przychodzące w odwróconej kolejności oraz duplikaty po ponownym wysłaniu z urządzenia. Każdy z nich obsługuje osobna reguła: odrzucenie punktu, który wymagałby prędkości fizycznie niemożliwej, sortowanie po znaczniku czasu urządzenia i deduplikacja po parze pojazd i czas.

Osobnym problemem są strefy czasowe. Znaczniki czasu z urządzeń różnych dostawców trzeba sprowadzić do jednego wzorca, najlepiej UTC z przesunięciem zapisanym w typie datetimeoffset, bo inaczej przy zmianie czasu na letni prognoza przesunie się o godzinę.

Składniki obliczenia ETA

Wzór i jego elementy

W uproszczeniu ETA to bieżący czas powiększony o czas jazdy pozostałych odcinków. Do tego dochodzą obowiązkowe przerwy oraz obsługa przystanków po drodze. Każdy składnik ma własne źródło danych i własny błąd.

SkładnikŹródło danychGłówne źródło błędu
Czas jazdy odcinkówpozycja GPS, sieć dróg, ruchnagły korek lub zamknięcie drogi
Przerwy obowiązkowetachograf, czas pracy kierowcybrak parkingu w miejscu wymaganej przerwy
Obsługa przystankówhistoria postojów i okna odbiorcówkolejka przy rozładunku
Luki w danychostatnia znana pozycjatunel, brak zasięgu, wyłączone urządzenie

Poniższy fragment w JavaScript pokazuje samą arytmetykę, bez połączenia z jakimkolwiek systemem. To przykład ogólny, a nie kod aplikacji Linkway.

// segments: [{ km: 42.5, avgKmh: 68 }, ...]
// breaks:   [{ minutes: 45 }, ...]
function computeEta(now, segments, breaks, stopMinutes) {
  const driveMs = segments.reduce(
    (sum, s) => sum + (s.km / s.avgKmh) * 3600000, 0);
  const breakMs = breaks.reduce(
    (sum, b) => sum + b.minutes * 60000, 0);
  return new Date(now.getTime() + driveMs + breakMs + stopMinutes * 60000);
}

Reguła: ETA zawsze podaje się razem ze znacznikiem czasu ostatniej znanej pozycji, bo wartość liczona z pozycji sprzed dwudziestu minut nie ma takiej samej wagi jak wartość z ostatniej minuty.

Skąd aplikacja mobilna bierze pozycję kierowcy

Gdy pozycję przesyła telefon kierowcy, źródłem jest zwykle interfejs lokalizacji przeglądarki lub systemu operacyjnego. Opis mechanizmu z parametrem dokładności i wiekiem odczytu znajduje się w dokumentacji metody watchPosition.

navigator.geolocation.watchPosition(
  pos => send({
    lat: pos.coords.latitude,
    lon: pos.coords.longitude,
    speed: pos.coords.speed,
    ts: pos.timestamp
  }),
  err => console.warn(err.code, err.message),
  { enableHighAccuracy: true, maximumAge: 5000 }
);

Kiedy przeliczać ETA i kiedy powiadamiać

Przeliczanie i powiadamianie to dwie różne czynności. ETA można odświeżać przy każdej nowej pozycji, ale wysyłanie odbiorcy komunikatu przy każdej zmianie o minutę szybko zniechęca do czytania powiadomień. System powinien więc odróżniać zmianę istotną od szumu.

Podstawowa reguła polega na porównaniu nowego ETA z ostatnią wartością wysłaną odbiorcy. Komunikat wychodzi dopiero wtedy, gdy różnica przekroczy próg, a próg maleje w miarę zbliżania się do celu, bo dla rampy oddalonej o pół godziny każda minuta ma większe znaczenie niż dla celu oddalonego o cały dzień. Uzupełnieniem jest histereza, czyli mechanizm opisany w tekście o przeplanowaniu tras w locie.

  • Próg zmiany - minimalna różnica między nowym a ostatnio wysłanym ETA, która uruchamia komunikat.
  • Próg zbliżania - zmniejszanie progu w miarę skracania się czasu do celu.
  • Odstęp minimalny - najkrótszy czas między dwoma komunikatami do tego samego odbiorcy.
  • Alert o wyjściu z okna - osobne powiadomienie, gdy ETA wykracza poza zarezerwowane okno rozładunku.

Zmiany ETA na trasie - typowe scenariusze

Prognoza zmienia się z konkretnych powodów, a każdy z nich zostawia inny ślad w danych. Rozpoznanie przyczyny pomaga dobrać reakcję: korek wymaga tylko przeliczenia, natomiast awaria pojazdu wymaga decyzji spedytora o zastąpieniu kursu.

ZdarzenieŚlad w danychReakcja systemu
Korek na trasiespadek prędkości średniej odcinkaprzeliczenie ETA i powiadomienie po przekroczeniu progu
Awaria pojazduprędkość zerowa poza planowanym postojemalert dla spedytora, nowa trasa lub pojazd zastępczy
Dłuższy rozładunek u poprzedniego odbiorcyopóźnienie wyjazdu z przystankuprzesunięcie ETA kolejnych przystanków
Utrata zasięgubrak nowych pozycjioznaczenie ETA jako opartej na starej pozycji

Przy dłuższej przerwie w danych system nie powinien zgadywać. Bezpieczniej jest utrzymać ostatnią wartość z wyraźnym oznaczeniem wieku odczytu niż pokazywać precyzyjną liczbę wyliczoną z założenia, że pojazd jedzie ze stałą prędkością.

Dłoń trzymająca tablet z widokiem sieci dróg i trasy, w tle naczepa ciężarówki na drodze
Widok mapy na tablecie: ETA pokazuje się w tym samym miejscu, w którym odbiorca sprawdza pozycję pojazdu

Przekazywanie ETA do odbiorcy i partnerów

Integrator jako punkt dystrybucji

ETA nie jest odizolowaną funkcją. Za pomocą integratora informacja o czasie przyjazdu trafia do zainteresowanych systemów: portalu klienta, systemu magazynowego odbiorcy albo wewnętrznego CRM firmy transportowej. Ogólne zasady działania integratora przedstawia opis linkway.INTEGRATOR na stronie producenta, a szersze tło - artykuł o integratorze GPS dla flot.

Po stronie odbiorcy ETA jest danymi wejściowymi dla awizacji. Moduły linkway.YMS do zarządzania placem i linkway.OSB do rezerwacji okien czasowych, zintegrowane z danymi o ETA, ograniczają kolejki przy bramie. Podobny mechanizm w produkcie SoftwareStudio - prognozę dojazdu z danych GPS - opisuje artykuł o systemie VSS.net, a przygotowanie magazynu do przyjęcia tekst o planowaniu dostaw do magazynu.

Dane z innych systemów GPS

Wiele firm ma pojazdy wyposażone w lokalizatory różnych dostawców i nie chce ich wymieniać. Integracja danych z systemu Seris Konsalnet z platformą linkway.INTEGRATOR pozwala zarządzać wszystkimi pojazdami z jednego miejsca, więc spedytor nie przełącza się między programami przy sprawdzaniu ETA. Szczegóły wraz z zastrzeżeniem, że Linkway nie jest producentem tego systemu, są opisane na stronie integracji Seris Konsalnet z Linkway.

Dokładność ETA i jej pomiar

Jak mierzyć błąd ETA

Dokładność ETA sprawdza się przez porównanie wartości wysłanej z faktycznym czasem przyjazdu. Wystarczy zapisywać każdą wysłaną prognozę razem z czasem wysłania i po zakończeniu kursu policzyć średni błąd bezwzględny w minutach, z podziałem na odległość do celu. Błąd dla prognoz wysyłanych na godzinę przed przyjazdem powinien być znacznie mniejszy niż dla prognoz wysyłanych rano.

SELECT DATEDIFF(MINUTE, e.WyslanoO, e.Przyjazd) / 30 * 30 AS MinutDoCeluOd,
       AVG(ABS(DATEDIFF(MINUTE, e.EtaWyslane, e.Przyjazd))) AS BladSrMin
FROM dbo.EtaLog AS e
GROUP BY DATEDIFF(MINUTE, e.WyslanoO, e.Przyjazd) / 30 * 30
ORDER BY MinutDoCeluOd;

Grupowanie po połowie godziny pozwala zobaczyć, jak błąd maleje wraz z zbliżaniem się do celu. Jeśli krzywa jest płaska, oznacza to, że system nie wykorzystuje bieżących danych, tylko powtarza wartość z planu.

Korekta z danych historycznych

Prędkość odcinka przewidywana z ruchu bywa w konkretnym miejscu zaniżona albo zawyżona. Jeśli system przechowuje czasy przejazdu tych samych odcinków z poprzednich kursów, może wyliczyć współczynnik korekty jako stosunek czasu rzeczywistego do przewidywanego i stosować go do kolejnych prognoz w tym samym przedziale godzinowym. Rozwiązanie jest proste i sprawdza się na trasach powtarzalnych, na przykład przy zaopatrzeniu stałych punktów.

Ograniczeniem jest liczba obserwacji. Dla odcinka odwiedzanego raz w miesiącu korekta opiera się na niewielu próbkach i bywa mniej wiarygodna niż model bez korekty, więc warto ustalić minimalną liczbę przejazdów, od której korekta w ogóle się włącza.

Granice ETA

ETA jest szacunkiem, a nie zobowiązaniem. Nie przewidzi kolejki przy rozładunku u poprzedniego odbiorcy ani decyzji kierowcy o dłuższym postoju. Można ją natomiast oznaczać poziomem pewności: wartość liczona z pozycji sprzed kilku sekund i z trasy bez utrudnień jest bardziej wiarygodna niż wartość z ostatniej znanej pozycji sprzed pół godziny.

Jeśli ETA trafia do umowy z klientem, jej sens musi być zdefiniowany: czy jest to czas przyjazdu do bramy, do rampy, czy do zakończenia rozładunku. Każda z tych wartości różni się o czas oczekiwania i obsługi, więc bez jasnej definicji strony będą oceniać dokładność inaczej.

Warto dołączać do ETA także status źródła danych. Odbiorca, który wie, że pojazd stracił zasięg, nie traktuje starej prognozy jak bieżącej. Szerszy kontekst kontroli terminowości opisuje tekst o oknach dostaw i alertach o opóźnieniu, a rolę aplikacji po stronie kierowcy - artykuł o aplikacji dla kierowcy.