2013-06-29

Wykorzystanie odbiornika GPS do określenia kontekstu

Wykorzystując informacje pochodzące z interfejsu GPS można z dokładnością do kilku metrów określić poszczególny punkt na mapie. W przeciwieństwie do pozostałych interfejsów urządzeń mobilnych przy pomocy GPS nie ustalimy większego obszaru czy otoczenia a jedynie pojedyncze miejsce, ściśle określone przez koordynaty wyliczone w oparciu o sygnały odebrane z satelitów systemu GPS. Możemy więc stworzyć profil kontekstu lokalizacyjnego zawierający bardzo precyzyjne dane o lokalizacji na całej kuli ziemskiej. Ograniczeniem popularnych odbiorników jest niezbyt silna antena umożliwiająca pomiar sygnału GPS jedynie na otwartej przestrzeni, co również odróżnia kontekst GPS od kontekstów określanych w oparciu o obecność urządzeń Wi-Fi czy też Bluetooth, które to najczęściej spotykane są w zamkniętych budynkach lub ich otoczeniu. W związku z tym, iż błąd pomiarów odbiornika w oparciu o dane systemu GPS wynosi kilka metrów, kontekst ten będzie opisywać lokalizację w przestrzeni o promieniu kilku metrów. Dodatkowo można wykorzystać informację o prędkości poruszania się odbiornika, którą to również otrzymujemy w oparciu o informacje z systemu GPS obliczone na podstawie różnicy odległości między dwoma punktami pomiaru i czasu między pomiarami. W ten sposób można w łatwy sposób określić kontekst prędkości poruszania się urządzenia mobilnego zaopatrzonego w odbiornik GPS.  

GPS - wyznaczanie pozycji i precyzja pomiaru

Algorytm wyznaczania pozycji


Metoda wyznaczania pozycji przy pomocy sygnału GPS opiera się na matematycznym wyliczeniu drogi sygnału od satelity do odbiornika. Znając czas jaki był potrzebny do przesłania sygnału odległość tą można wyliczyć ze wzoru:

                       
D= ∆τ∙c

gdzie:
D  – droga sygnału; 
 – różnica czasu potrzebna na dotarcie sygnału z satelity do odbiornika;
C  – prędkość światła (300 000 km/s).

Do wyznaczenia różnicy czasu wykorzystuje się najczęściej jedną z kilku metod różniących się obarczonym błędem pomiarów (Zogg, 2009).
 

Precyzja pomiaru

Aby możliwe było wyznaczenie współrzędnych odbiornik GPS powinien odbierać sygnał jednocześnie z minimum 3 satelitów lub 4 dla pomiaru wysokości bezwzględnej. Określając promienie sfer w oparciu o odległość nadajników do odbiornika (gdzie centrum sfery jest pojedynczy satelita) możemy w oparciu o miejsca przecięcia się sfer oszacować położenie odbiornika GPS.

Precyzja pomiaru położenia przeprowadzonego w oparciu o dane systemu GPS zależna jest od kilku czynników takich jak dokładność położenia i poruszania się po orbicie satelity, zakłócenia sygnału radiowego (szum), panujące w trakcie pomiaru warunki atmosferyczne czy też naturalne lub sztuczne przeszkody fizyczne. W przypadku błędnie zmierzonego czasu przesłania sygnału z satelity do odbiornika o 1 µs odchylenie od prawidłowej pozycji może wynieść nawet do 300 m (Zogg, 2009). Bariery fizyczne, które znajdą się pomiędzy odbiornikiem a nadajnikiem (jak budynki, ściany czy też wysokie góry) mogą wpłynąć na błąd pomiaru do 30 m. Zaś sam szum generowany przez urządzenia lub przedmioty znajdujące się w pobliżu odbiornika GPS może spowodować pomyłkę rzędu do 10 m. Jest to jeden z najczęściej spotykanych czynników wywierających wpływ na pomiar położenia (informacje oparte o artykuł zamieszczony pod adresem: http://www.maps-gps-info.com/gps-accuracy.html). Z przytoczonych informacji jasno wynika, iż sygnał GPS jest bardzo narażony na zakłócenia co skutkować może błędem obliczenia pozycji. Najbardziej dokładnie koordynaty lokalizacji obliczone zostaną kiedy odbiornik i satelita znajdować się będą wprost na linii „wzroku” przy dobrej pogodzie (bez chmur). Istnieją oczywiście systemy pomocnicze, których działanie niweluje błędy pomiaru GPS, do których można zaliczyć AGPS, DGPS czy też systemy różnicowe WAAS/EGNOS/MSAS/GAGAN.

2013-06-25

Architektura systemu GPS

Segment kosmiczny

Na wysokości około 20 tysięcy kilometrów nad powierzchnią ziemi na orbicie okołoziemskiej, umieszczone są sztuczne satelity (Rysunek 1). Tak zwany segment kosmiczny składa się z 24 satelitów, krążących po 6 wytyczonych orbitach. Prędkości poruszania się jak i trajektorie orbit są tak opracowane aby w każdej chwili, w dowolnym miejscu na Ziemi widocznych było dla odbiornika GPS 8 do 12 satelitów. W każdej chwili czasu wiadomo, który satelita gdzie się znajduje, na jakiej wysokości, z jaką prędkością i w którym kierunku się porusza a także w jakim czasie sygnał od niego powinien dotrzeć do Ziemi. Bardzo ważna jest również precyzyjna w czasie emisja sygnału z satelity do Ziemi, która to opiera się na danych z zegarów atomowych (opisanych poniżej), w które zaopatrzone są satelity. Te wszystkie precyzyjne dane teoretyczne (wraz z informacją o stanie danej satelity) na temat całej konstelacji satelitów składają się na dane zwane almanachem. Almanach przechowywany jest przez każdą z satelitów i wysyłany jest do odbiornika GPS w chwili kiedy ten jest włączany. Almanachu informuje odbiornik GPS o stanie satelitów oraz którego z nich należy w danym czasie szukać. Ważność danych almanachu może wynosić kilka dni.

Segment kontrolny

Pomimo wielkiej precyzji systemu satelitów może wystąpić sytuacja awaryjna mogąca spowodować błędne funkcjonowanie systemu GPS np.: zboczenie danej satelity z kursu czy też inną prędkość transmisji sygnału. W celu kontroli czy nie wystąpiła wyżej opisana sytuacja każdy sygnał emitowany z każdego satelitę analizowany jest szczegółowo przez sieć naziemnych stacji zlokalizowanych w kilku miejscach na kuli ziemskiej. Sieć ta nazywana jest segmentem kontrolnym. Jego głównym celem jest sprawdzanie zgodności działania systemu z założeniami jak i korekcja trajektorii satelity (poprzez uruchamianie mini-silniczków rakietowych satelity). Dane dotyczące orbity danego satelity przechowywane są w postaci tzw. efemerydy. Efemerydy przesyłane są do odbiornika GPS zaraz po otrzymaniu przez niego sygnału zawierającego almanach z pojedynczego satelity i są niezbędne do wyliczenia pozycji odbiornika. Ważność danych efemerydy wynosi kilka godzin.

Segment użytkownika

W skład tak zwanego segmentu użytkownika wchodzi odbiornik GPS wraz z oprogramowaniem wspomagającym odbiór i obróbkę sygnału emitowanego przez satelity.

Podstawowy sygnał GPS satelity

Oprócz opisanych powyżej danych almanachu i efemerydy odbiornik GPS otrzymuje trzeci rodzaj danych emitowany przez daną satelitę służący do obliczenia odległości odbiornika GPS od danej satelity.

Idea funkcjonowania systemu GPS opiera się na odpowiedniej interpretacji informacji otrzymanych właśnie z tych satelitów.
Rysunek 1. Model rozmieszczenia satelitów operacyjnych systemu GPS (http://www2.jpl.nasa.gov/basics/bsf9-1.php).

Każdy satelita okrąża dwukrotnie kulę ziemską w ciągu doby z dużą prędkością. W tym czasie w sposób ciągły transmituje sygnał w kierunku powierzchni ziemi używając dwóch częstotliwości, wojskowej (1227,60 MHz) oraz cywilnej (1575,42 MHz). Prędkość transmisji sygnału z satelity wynosi około 50b/s. Wszystkie satelity (obecnie 31) do transmisji używają tych samych częstotliwości wykorzystując metodę CDMA (ang. „Code Division Multiple Access”), w której sygnał każdej z nich podlega modulacji umożliwiającej ich identyfikację.

Dane wysyłane przez satelity przekazywane są przy pomocy protokołu komunikacyjnego o nazwie NMEA 0183 (skrót od amerykańskiej organizacji rozwijającej protokół: „National Marine Electronics Association). Każdy odbiornik GPS otrzymuje dane w postaci łańcucha ASCII (do 82 znaków). Sentencję rozpoczyna identyfikator zdania – nazwa znacznika poprzedzona znakiem początku linii „$”. Kolejne pola w sentencji opisują między innymi informacje o pozycji odbiornika GPS i jej jakości, zawierają dane o ilości śledzonych satelitów wraz z ich położeniem jak i czas wyznaczenia pozycji w oparciu o informacje z zegarów atomowych, w które to zaopatrzone są satelity (w celu synchronizacji pracy całego systemu). Terminem zegar atomowy określa się niezwykle precyzyjne urządzenia do pomiaru czasu, które wg definicji mogą pomylić się o 1 sekundę raz na 30 tys. do 1 mln lat.  Poglądowy schemat wiadomości NMEA przedstawiony został na Rysunek 2.


Rysunek 2. Przykład wiadomości NMEA wysyłanej przez satelitę do odbiorników GPS (na podstawie informacji ze strony http://www.gpsinformation.org).

Skrócona historia systemu GPS

W roku 1973 Departament Obrony Stanów Zjednoczonych Ameryki (USA) opracował system nawigacji satelitarnej (GPS; ang. “Global Positioning System”). Pierwotnie opracowany na potrzeby wojskowe marynarki i lotnictwa USA, do użytku publicznego został udostępniony w 1993 roku.


Tworzony system miał za zadanie określać pozycję z czasem w dowolnym miejscu kuli ziemskiej. Dokonywane pomiary miały dawać wyniki z jak największą precyzją niezależnie od  panujących warunków atmosferycznych. Stąd wzięła się pełna nazwa systemu NAVSTAR – GPS, w rozwinięciu Układ Nawigacji Satelitarnej Określania Czasu i Odległości Globalnego Systemu Pozycjonowania (ang. ”Navigational Satellite Time and Ranging, Global Positioning System”). Proces określania pozycji powinien odbywać się w czasie rzeczywistym, zaś precyzja pomiarów powinna wynosić około 5 m.

2013-06-21

Tomcat - konfiguracja DataSource

Konfiguracja połączenia kontenera Tomcat z bazą danych Oracle. 


Wersja Tomcat 5.5/7.0;
Wersja DB Oracle: 11g;
Wersja Java: 1.5/1.7;
Ścieżka instalacji Tomcat: TOMCAT_HOME=c:\Program Files\Apache Software Foundation\Tomcat 5.5\



wrzucamy bibliotekę do połączenia z bazą danych oracle 





definicja DataSource po stronie serwera Tomcat 


  • plik: %TOMCAT_HOME%\conf\context.xml 
  • konfiguracja do dodania:


konfiguracja po stronie aplikacji
  • w pliku web.xml dodajemy:

2013-06-11

Wzbudzenie wibracji w systemie Android

Aby wykorzystać wibracje w urządzeniu z systemem Android wystarczy minuta przygotowań.

Po pierwsze tworzymy zmienną  obiektową w klasie Activity o typie Vibrator (Android.os.Vibrator). 
Po drugie inicjujemy zmienną. Przypisujemy do niej serwis sytemowy odpowiedzialny za wibrację, podając odpowiedni kontekst wibracji (Context.VIBRATOR_SERVICE);
Na końcu wywołujemy specjalną metodę obiektu wibratora - vibrate: void android.os.Vibrator.vibrate(long milliseconds).

Przykładowy kod poniżej:


2013-06-10

Wyświetlenie obiektu ProgressDialog w trakcie logowania i tworzenia nowego Activity

Aby wyświetlić obiekt ProgressDialog w Activity systemu Android, w trakcie kiedy oczekujemy na zakończenie długo wykonującej się akcji (typu logowanie, połączenie do serwera zewnętrznego i oczekiwanie na odpowiedź) musimy obiekt ten zainicjować w osobny, równolegle przetwarzającym się wątku.



Do wyświetlenia ProgressDialog potrzebujemy tylko klika linijek kodu (a właściwie to jednej):


Zakańczamy wyświetlanie informacji o postępie wywołując prostą funkcję:

Jak widać ta część jest banalna. Niestety bez zastosowania osobnego wątku nie będzie to działało - obiekt nie pokaże się na ekranie smartfonu. Całość należy zgrabnie opakować w osobny wątek. A zmienne "wynieść" do zmiennych obiektowych (pola obiektu):