Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Otwarty odbiornik GPS SDR

ghost666 03 Paź 2018 16:01 1350 0
  • Otwarty odbiornik GPS SDR
    GNSS-SDR to projekt, który prowadzony i sponsorowany jest przez Centre Tecnològic de Telecomunicacions de Catalunya (CTTC), organizację badawczą non-profit, która znajduje się w Castelldefels, około 20 kilometrów na południe od Barcelony.

    Stworzony tutaj pakiet oprogramowania GNSS-SDR to efekt wspólnego wysiłku wielu studentów, programistów i naukowców z tej, oraz szeregu innych, instytucji naukowych. To w pełni otwarty pakiet oprogramowania dedykowany do globalnej nawigacji i pozycjonowania. Oparty jest on o znany i uznany framework GNU Radio, który doczekał się zarówno wielu implementacji, jak i szerokiej akceptacji, jako de facto standard w zakresie otwartych platform radia definiowanego programowo.

    Otwarty odbiornik GPS SDR
    Oprogramowanie GNSS-SDR napisane jest w C++. Dzięki wykorzystaniu tego frameworku każdy może zbudować programowo definiowany odbiornik systemów globalnej nawigacji. Całość oprogramowywana jest z wykorzystaniem prostych bloczków, które łączy się ze sobą liniami reprezentującymi przepływ danych. W ten sposób każdy poradzi sobie ze stworzeniem dedykowanego oprogramowania do dekodowania sygnałów satelitów systemów globalnej nawigacji.

    Framework wyposażony jest w interfejs dla różnych front-endów radiowych. Zaimplementowano w tym pakiecie cały tor sygnałowy odbiornika wraz z modułem nawigacji. Jego projekt pozwala na wprowadzanie daleko idących zmian w programie, między innymi modyfikację źródeł sygnału, zmiany w algorytmach przetwarzających dane czy łączenie z innymi systemami, zmiana formatu wyjściowego danych etc. Dodatkowo w ramach frameworku dostęp mamy do wszystkich pośrednich sygnałów, zmiennych i parametrów z ich analizą na poszczególnych etapach.

    Celem projektu było stworzenie wydajnego kodu, który można by powtórnie wykorzystywać w wielu projektach. Dzięki temu kod jest łatwiejszy w czytaniu i utrzymaniu, jest w nim mniej bugów. Dzięki optymalizacji oprogramowania możliwe jest kompilowanie go do wydajnych plików wykonywalnych, które pracować mogą na szerokiej gamie platform sprzętowych i pod wieloma systemami operacyjnymi.

    Głównym wyzwaniem dla programistów było osiągnięcie kompromisu pomiędzy wysokopoziomową abstrakcją a wydajnością. Zrealizowano to przez szereg działań:

    * skorzystanie z konkurencyjnych procesów dla wielordzeniowych procesorów;
    * optymalizację wydajności, przy wykorzystaniu zalet różnych architektur procesorów;
    * stworzenie narzędzi do optymalizacji i pomiaru wydajności systemu;
    * zapewnienie przenoszalności kodu pomiędzy różnymi systemami operacyjnymi i maszynami.
    * zapewnienie możliwości uruchamiania systemu w czasie rzeczywistym (jeśli wydajność systemu na to pozwala) lub jako algorytm do post-processingu danych.
    * udostępnienie możliwości rozszerzania systemu poprzez ułatwienie dodawania i testowania nowych algorytmów i implementacji.

    Stworzony framework działać może na zwykłym komputerze osobistym i zapewnia interfejsy dla dowolnych systemów RF poprzez USB i Ethernet. Pozwala to na podłączenie szerokiej gamy front-endów radiowych dostępnych zarówno komercyjnie, jak i robionych samemu.

    Algorytmy przetwarzania danych w systemie dopasowują się do częstotliwości pośrednich i prędkości próbkowania, jakie oferują podłączane urządzenia. System przetwarzać też może dane pochodzące np. z pliku.

    Oprogramowanie wykonuje akwizycję sygnału i śledzenie dostępnych satelitów systemu nawigacji. Następnie dekoduje komunikaty nawigacyjne i oblicza wartości wymagane przez algorytmy pozycjonowania. One ostatecznie obliczają pozycję użytkownika.

    System został zaprojektowany w celu ułatwienia implementacji nowych technik przetwarzania sygnałów, oferując łatwy sposób zmierzenia ich wpływu na ogólną wydajność odbiornika. Testowanie wszystkich procesów w ramach frameworku odbywa się zarówno poprzez systematyczne sprawdzanie poprawności funkcjonalnej każdego pojedynczego bloku oprogramowania, jak i przez eksperymentalne sprawdzanie kompletności odbiornika przy użyciu sygnałów rzeczywistych i syntetycznych.

    Dane wyjściowe z algorytmów mogą być przechowywane w niezależnym formacie wymiany danych odbiornika (RINEX) używanym przez większość oprogramowania do przetwarzania geodezyjnego dla GNSS lub też przesyłane jako wiadomości RTCM 3.2 przez serwer TCP / IP w czasie rzeczywistym. Wyniki obliczeń algorytmów nawigacji są przechowywane w formatach KML i GeoJSON.

    Otwarty odbiornik GPS SDR
    Oprogramowanie odbiornika GNSS jest bardzo złożonym systemem, które opis musi być analizowany na wielu poziomach abstrakcji. Poniżej znajduje się opis tego otwartego frameworku i architektury zaimplementowanej w GNSS-SDR.

    Poniższy opis systemu jest bardzo uproszczony, ale pozwala zrozumieć podstawy jego architektury i wewnętrznego przepływu informacji.

    Płaszczyzna kontroli

    Płaszczyzna kontroli jest odpowiedzialna za tworzenie grafu przepływu danych, w którym strumień próbek z front-endu RF przechodzi przez sieć połączonych ze sobą bloków przetwarzania sygnału, aż do ustalenia pozycji przez blog nawigacyjny. Charakter odbiornika GNSS narzuca pewne wymagania, jeśli chodzi o architekturę.

    Z uwagi na to, że sygnał GNSS zmienia się w czasie (początkowo niektóre satelity będą widoczne, ale po pewnym czasie mogą wyjść z pola widoczności, a pojawią się nowe), niektóre kanały stracą sygnał i będzie konieczność utworzenia nowych kanałów, do analizy danych z kolejnych satelitów. Z uwagi na to odbiornik musi dynamicznie dostosowywać ilość kanałów przetwarzania danych do obecnych potrzeb - między innymi tym zajmuje się płaszczyzna kontroli. Dodatkowo opisuje ona sposób implementacji tych kanałów w GNSS-SDR.

    Płaszczyzna przetwarzania danych

    Płaszczyzna przetwarzania danych składa się z zestawu bloków, które realizują poszczególne elementy algorytmów cyfrowego przetwarzania sygnału radiowego. Wydajność tych bloków jest szczególnie krytyczna przed i w trakcie korelacji sygnałów (najbardziej złożona operacja pod względem obciążenia procesora; jednocześnie operacja ta zmniejsza częstotliwość próbek w dalszym torze sygnału o trzy rzędy wielkości). Nawet nowoczesny, zaawansowany procesor komputerowy nie poradzi sobie z tym zadaniem, jeżeli program nie będzie odpowiednio napisany. System musi to osiągnąć w czasie rzeczywistym, aby korelacja sygnałów była możliwa. Bloki przetwarzania sygnałów w tej sekcji opisują rzeczywiste implementacje przetwarzania sygnałów w GNSS-SDR.

    Patrząc w jeszcze większym ogóle, GNSS-SDR jest programie w C++, który podczas pracy pobiera próbki z zdefiniowanego źródła sygnału (to dosyć abstrakcyjny komponent, który reprezentuje interfejs, z którego pobierane są dane – analogowy front-end dołączony do komputera, plik czy jeszcze coś innego) i przetwarza je na inny sygnał, który mówi o pozycji odbiornika.

    Tak jak w każdym programie w C++, główna metoda wywoływana przy uruchamianiu programu to klasyczne main. Po inicjalizacji wszystkich nielokalnych obiektów ze statycznym czasem retencji, uruchamiany jest program, który działa w ramach systemu operacyjnego. Poniżej zamieszczono przykładową implementację funkcji main dla systemu GNSS-SDR, którą znaleźć można w gnss-sdr/src/main/main.cc. Kod funkcji wygląda następująco:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Główna metoda programu GNSS-SDR w pierwszej kolejności analizuje parametry przesłane z linii komend, przekazuje użytkownikowi potrzebne dane i następnie uruchamia bibliotekę zajmującą się logowaniem działania systemu. Następnie zapisuje czas uruchomienia systemu i tworzy specjalny wskaźnik do obiektu typu ControlThread.

    Konstruktor obiektu ControlThread wczytuje plik konfiguracyjny, tworzy kolejkę kontrolną oraz generuje odpowiedni graf przepływu danych w systemie, zgodny z konfiguracją z pliku. Następnie uruchamiana jest metoda run() tego obiektu – łączy ona ze sobą elementy grafu przepływu danych i uruchamia przezeń przepływ danych.

    Następnie system odczytuje wiadomości pochodzące z bloku odpowiedzialnego za odbieranie danych z front-endu analogowego. Komunikaty i dane przesyłane są przez specjalną kolejkę pracującą w osobnym wątku. System działa do momentu, w którym któryś z bloków przetwarzania danych wyśle wiadomość stopu. Po niej system zatrzymuje się, mierzy czas pracy i czyści środowisko po swoim działaniu. Destruktor obiektu ControlThread deealokuje pamięć i jest uruchamiany automatycznie na końcu wykonywania metody main.

    Cała ‘magia’ dzieje się, gdy uruchomi się metodę run() instancji obiektu typu ControlThread. Jeśli jesteście ciekawi, jak dokładnie to działa i chcecie zobaczyć, co robi ta metoda, to możecie w dokumentacji od razu skoczyć do sekcji poświęconej płaszczyźnie przetwarzania (Control Plane). Na początku jednakże dobrze jest przyswoić sobie podstawowe informacje zawarte w dokumentacji dostępnej na stronie www projektu. W podstawach opisana jest dokładnie architektura wewnętrzna oprogramowania GNSS-SDR oraz kluczowe koncepcje, które koniecznie trzeba zrozumieć, by pojąć całość działania systemu.

    Źródło: https://gnss-sdr.org/docs/overview/

    Fajne! Ranking DIY
    O autorze
    ghost666
    Tłumacz Redaktor
    Offline 
    Fizyk z wykształcenia. Po zrobieniu doktoratu i dwóch latach pracy na uczelni, przeszedł do sektora prywatnego, gdzie zajmuje się projektowaniem urządzeń elektronicznych i programowaniem. Od 2003 roku na forum Elektroda.pl, od 2008 roku członek zespołu redakcyjnego.
    ghost666 napisał 10009 postów o ocenie 8266, pomógł 157 razy. Mieszka w mieście Warszawa. Jest z nami od 2003 roku.
  • IT SerwisIT Serwis