RawGPS
: sobota, 15 gru 2012, 18:03
Witam
Chciałem krótko przedstawić obecny stan prac nad software-owym odbiornikiem GPS. Zanim przejdę do szczegółów, może najpierw po co to jest i skąd się wzięła koncepcja.
Do tej pory do rejestrowania wysokości wszyscy radzą sobie używając altimetów bazujących na pomiarze ciśnienia. Jest to w zasadzie bardzo dobre rozwiązanie, ale do kilkunastu kilometrów - później coraz większy błąd i ostatecznie brak możliwości pomiaru. Pozostaje GPS, ale te ze względu na międzynarodowe limity ITAR mają albo ograniczenie do 60000 stóp albo prędkości do 1000 węzłów, albo oba jednocześnie (zależy od modelu i producenta). Nawet jeżeli udałoby się znaleźć model który nie ma limitów w ogóle (raczej na zasadzie hacka w jego oprogramowaniu), to konsumenckie urządzenia mają algorytm zoptymalizowany pod kątem "ziemskich" zastosowań i przy dużych przyspieszeniach będą gubiły locka. Jest to związane m.in. wyjściem nośnych satelit poza mierzony zakres, ze względu na znacznie większy efekt dopplera. Na sztywno zaszyty interwał liczenia pozycji co 1 sekundę też jest pewnym ograniczeniem jeśli interesują nas dane o chwilowej dynamice rakiety.
W samym sygnale wysyłanym przez satelity nie ma żadnych ograniczeń i teoretycznie możliwe jest liczenie pozycji z dokładnością do 10m co 1 ms, aczkolwiek wysokość jest obarczona większym błędem niż reszta wymiarów. Potrzebny jest "jedynie" odpowiednio skonstruowany odbiornik GPS. I tutaj wchodzi koncepcja software-owego odbiornika, czyli zaimplementowania całego rozwiązania czysto w oprogramowaniu, sprzęt ograniczając wyłącznie do części RF (antena, wzmacniacz, filtr, sampler). Ilość danych do przetworzenia w obecnym rozwiązaniu to 1,5MB na sekundę, więc sam odbiornik jedynie nagrywa całą sesję radiową na karcie SD - 16GB powinno więc starczyć minimum na 2,5h. Po fakcie, całość przetwarza się na PCcie i otrzymuje wyniki. Na tą chwilę nie zoptymalizowałem jeszcze algorytmów na tyle, żeby liczyć pozycję przy użyciu komputera pokładowego w czasie rzeczywistym, ale jest to możliwe. Nie jest to też krytyczne z punktu widzenia naszych zastosowań. Obecnie czas rzeczywisty uzyskuje się przy śledzeniu 4 satelit na procesorze Intel i7 3.4GHz, widać więc jak dużo operacji trzeba wykonać.
Samo urządzenie wygląda tak:
Jest to natomiast prototyp i można oczywiście bardziej całość zminiaturyzować. Będzie się to jednak wkładać tylko do dużych rakiet, powyżej 10km, więc rozmiar nie powinien mieć aż takiego znaczenia.
Do testów zapakowałem sprzęt do samochodu i poniżej zamieszczam wyniki. Są one dość mocno zaszumione, ponieważ z nagrania udało się wydobyć sygnał z jedynie 4 satelit, na 9 widocznych w danej chwili. 4 to minimum, a każdy kolejny radykalnie poprawia dokładność. Spowodowane to było przetwornicą impulsową na 3.3V w wersji mobilnej urządzenia, która wprowadzała dodatkowe zakłócenia - będę musiał pomyśleć nad innym rozwiązaniem. Jest też masa miejsca na usprawnienie algorytmów przetwarzania sygnału w celu radzenia sobie z większymi szumami, niemniej jednak do naszych zastosowań ani widoczność satelit ani odbicia sygnału nie są problemem.
To jest rzut na zarejestrowaną trasę po filtrze dolnoprzepustowym, z restracją co 1 s (uśrednione 1000 pomiarów co 1 ms). To samo jest do obejrzenia w Google Earth w wersji surowej i po filtrze po ściągnięciu załącznika. Można załadować oba na raz w celu porównania.
Na końcu trasy zaczął pojawiać się las i algorytm zgubił sygnał z jednego z satelit, więc liczenie pozycji nie mogło być kontynuowane z pozostałymi trzema.
Należy zaznaczyć, że w naszych zastosowaniach nie interesuje nas dokładność obliczania pozycji względem geoidy, a jedynie dokładność względem punktu startu rakiety. Niemniej jednak pozycja względem Ziemi i tak jest zadziwiająco dokładna, zważywszy na to że nie uwzględniam jeszcze poprawek tropo- i jonosferycznych.
Chciałem krótko przedstawić obecny stan prac nad software-owym odbiornikiem GPS. Zanim przejdę do szczegółów, może najpierw po co to jest i skąd się wzięła koncepcja.
Do tej pory do rejestrowania wysokości wszyscy radzą sobie używając altimetów bazujących na pomiarze ciśnienia. Jest to w zasadzie bardzo dobre rozwiązanie, ale do kilkunastu kilometrów - później coraz większy błąd i ostatecznie brak możliwości pomiaru. Pozostaje GPS, ale te ze względu na międzynarodowe limity ITAR mają albo ograniczenie do 60000 stóp albo prędkości do 1000 węzłów, albo oba jednocześnie (zależy od modelu i producenta). Nawet jeżeli udałoby się znaleźć model który nie ma limitów w ogóle (raczej na zasadzie hacka w jego oprogramowaniu), to konsumenckie urządzenia mają algorytm zoptymalizowany pod kątem "ziemskich" zastosowań i przy dużych przyspieszeniach będą gubiły locka. Jest to związane m.in. wyjściem nośnych satelit poza mierzony zakres, ze względu na znacznie większy efekt dopplera. Na sztywno zaszyty interwał liczenia pozycji co 1 sekundę też jest pewnym ograniczeniem jeśli interesują nas dane o chwilowej dynamice rakiety.
W samym sygnale wysyłanym przez satelity nie ma żadnych ograniczeń i teoretycznie możliwe jest liczenie pozycji z dokładnością do 10m co 1 ms, aczkolwiek wysokość jest obarczona większym błędem niż reszta wymiarów. Potrzebny jest "jedynie" odpowiednio skonstruowany odbiornik GPS. I tutaj wchodzi koncepcja software-owego odbiornika, czyli zaimplementowania całego rozwiązania czysto w oprogramowaniu, sprzęt ograniczając wyłącznie do części RF (antena, wzmacniacz, filtr, sampler). Ilość danych do przetworzenia w obecnym rozwiązaniu to 1,5MB na sekundę, więc sam odbiornik jedynie nagrywa całą sesję radiową na karcie SD - 16GB powinno więc starczyć minimum na 2,5h. Po fakcie, całość przetwarza się na PCcie i otrzymuje wyniki. Na tą chwilę nie zoptymalizowałem jeszcze algorytmów na tyle, żeby liczyć pozycję przy użyciu komputera pokładowego w czasie rzeczywistym, ale jest to możliwe. Nie jest to też krytyczne z punktu widzenia naszych zastosowań. Obecnie czas rzeczywisty uzyskuje się przy śledzeniu 4 satelit na procesorze Intel i7 3.4GHz, widać więc jak dużo operacji trzeba wykonać.
Samo urządzenie wygląda tak:
Jest to natomiast prototyp i można oczywiście bardziej całość zminiaturyzować. Będzie się to jednak wkładać tylko do dużych rakiet, powyżej 10km, więc rozmiar nie powinien mieć aż takiego znaczenia.
Do testów zapakowałem sprzęt do samochodu i poniżej zamieszczam wyniki. Są one dość mocno zaszumione, ponieważ z nagrania udało się wydobyć sygnał z jedynie 4 satelit, na 9 widocznych w danej chwili. 4 to minimum, a każdy kolejny radykalnie poprawia dokładność. Spowodowane to było przetwornicą impulsową na 3.3V w wersji mobilnej urządzenia, która wprowadzała dodatkowe zakłócenia - będę musiał pomyśleć nad innym rozwiązaniem. Jest też masa miejsca na usprawnienie algorytmów przetwarzania sygnału w celu radzenia sobie z większymi szumami, niemniej jednak do naszych zastosowań ani widoczność satelit ani odbicia sygnału nie są problemem.
To jest rzut na zarejestrowaną trasę po filtrze dolnoprzepustowym, z restracją co 1 s (uśrednione 1000 pomiarów co 1 ms). To samo jest do obejrzenia w Google Earth w wersji surowej i po filtrze po ściągnięciu załącznika. Można załadować oba na raz w celu porównania.
Na końcu trasy zaczął pojawiać się las i algorytm zgubił sygnał z jednego z satelit, więc liczenie pozycji nie mogło być kontynuowane z pozostałymi trzema.
Należy zaznaczyć, że w naszych zastosowaniach nie interesuje nas dokładność obliczania pozycji względem geoidy, a jedynie dokładność względem punktu startu rakiety. Niemniej jednak pozycja względem Ziemi i tak jest zadziwiająco dokładna, zważywszy na to że nie uwzględniam jeszcze poprawek tropo- i jonosferycznych.