Spisu treści:

Monitorowanie drogi: 15 kroków
Monitorowanie drogi: 15 kroków

Wideo: Monitorowanie drogi: 15 kroków

Wideo: Monitorowanie drogi: 15 kroków
Wideo: WYPADEK ŚMIERTELNY. NAGRANIE Z MONITORINGU - KRAKÓW 28.08.19 2024, Lipiec
Anonim
Monitorowanie dróg
Monitorowanie dróg

Dziś pokażemy, jak stworzyliśmy system monitorowania anomalii drogowych oparty na akcelerometrach, LoRaWAN, Amazon Web Services i Google Cloud API.

Krok 1: Wymagania

  • Płyta DISCO-L072CZ-LRWAN1
  • Moduł rozszerzający X-NUCLEO-IKS01A2 (dla akcelerometru)
  • X-NUCLEO-GNSS1A1 (do lokalizacji)
  • Konto AWS
  • Konto Google Cloud Platform

Krok 2: Budowanie i flashowanie oprogramowania układowego czujnika

Podłącz IKS01A2 i GNSS1A1 na górze płyty przez piny GPIO. Pobierz kod oprogramowania układowego z GitHub. Utwórz (jeśli jeszcze go nie masz) konto na ARM Mbed i zaimportuj kod do repozytorium na kompilatorze online. Ustaw platformę docelową na DISCO-L072CZ-LRWAN1 i zapisz projekt. Teraz przejdź do The Things Network i utwórz konto, jeśli jeszcze go nie masz. Utwórz aplikację, utwórz nowe urządzenie wewnątrz aplikacji i ustaw tryb połączenia na OTAA. Pobierz odpowiednie parametry, aby wypełnić następujące pola w pliku mbed_app.json: "lora.appskey", "lora.nwkskey", "lora.device-address".

Czujnik będzie okresowo rejestrował dane akcelerometru i GNSS i przesyłał je przez połączenie LoRa do najbliższej bramki, która przekaże je do naszej aplikacji w The Things Network. Następnym krokiem jest konfiguracja serwera w chmurze i integracja HTTP na TTN.

Krok 3: Konfiguracja chmury

Konfigurowanie chmury
Konfigurowanie chmury

Teraz jesteśmy gotowi do skonfigurowania infrastruktury chmury, która będzie zbierać i agregować dane ze wszystkich wdrożonych płyt. Infrastruktura ta jest pokazana na poniższym rysunku i składa się z:

  • Kinesis, do obsługi przychodzącego strumienia danych;
  • Lambda do filtrowania i wstępnego przetwarzania danych przed ich przechowywaniem;
  • S3, do przechowywania wszystkich danych;
  • EC2, do analizy danych i hostowania naszego front-endu.

Krok 4: Skonfiguruj AWS Lambda

Konfiguracja AWS Lambda
Konfiguracja AWS Lambda

Zilustrujemy kroki niezbędne do skonfigurowania tej infrastruktury, zaczynając od Lambdy.

  1. Zaloguj się na swoje konto AWS, a następnie ze strony głównej konsoli i przejdź do Lambda
  2. Kliknij Utwórz funkcję
  3. W górnej części strony należy wybrać Autora ze Scratch. Następnie wypełnij pozostałe pola jak na obrazku, a następnie kliknij Utwórz funkcję
  4. Po utworzeniu funkcji AWS Lambda przejdź do https://github.com/roadteam/data-server i skopiuj zawartość pliku aws_lambda.py do edytora, który znajdziesz w drugiej połowie strony. Twoja funkcja Lambda jest już gotowa:)

Krok 5: Skonfiguruj strumień danych AWS Kinesis Firehose

Skonfiguruj strumień danych AWS Kinesis Firehose
Skonfiguruj strumień danych AWS Kinesis Firehose
  1. Wróć teraz do strony głównej konsoli AWS, a następnie do Usługi przejdź do Kinesis
  2. Teraz jesteś na stronie głównej Kinesis. Po prawej stronie, w sekcji „Strumień dostarczania Kinesis Firehose” wybierz „Utwórz nowy strumień dostarczania”
  3. W polu „Nazwa strumienia dostawy” wpisz „strumień monitorowania dróg”. Pozostałe pola pozostaw domyślne i kliknij Dalej
  4. Teraz w „Transform source records with AWS Lambda” wybierz Enabled, a jako funkcję Lambda kliknij nowo utworzoną „road-monitoring-lambda”. Nie przejmuj się, jeśli pojawi się ostrzeżenie o przekroczeniu limitu czasu funkcji, ponieważ operacja, którą wykonujemy, nie jest kosztowna obliczeniowo. Pozostałe pola pozostaw domyślne i kliknij Dalej
  5. Jako miejsce docelowe wybierz Amazon S3, a jako miejsce docelowe S3 wybierz Utwórz nowy. Jako nazwę zasobnika wpisz „zasobnik-monitorowania dróg”, a następnie przejdź. Teraz pozostaw pozostałe pola domyślnie i kliknij Dalej
  6. Możesz ustawić rozmiar bufora na 1 MB i odstęp bufora na 60 sekund. Bufor zostanie opróżniony do S3, gdy spełniony zostanie jeden z dwóch warunków. Nie opuszczaj strony, zobacz następny krok

Krok 6: Skonfiguruj rolę uprawnień dla Kinesis

Skonfiguruj rolę uprawnień dla Kinesis
Skonfiguruj rolę uprawnień dla Kinesis

Teraz ustawiamy uprawnienia bezpieczeństwa dla Kinesis, ponieważ musi wywołać funkcję Lambda do wstępnego przetwarzania, a następnie zapisze na S3

  1. Na dole strony, w której znajdujesz się „Rola IAM”, wybierz „Utwórz nową z wybranych”, utwórz nową rolę uprawnień jak na zdjęciu i kliknij Zezwalaj
  2. Teraz wracasz do poprzedniej strony, kliknij dalej. Teraz możesz chcieć dwukrotnie sprawdzić wszystkie parametry. Po zakończeniu kliknij „Utwórz strumień dostawy”

Rurociąg Kinesis-Lambda-S3 już działa!

Krok 7: Skonfiguruj AWS EC2

Skonfiguruj AWS EC2
Skonfiguruj AWS EC2

Teraz skonfigurujemy instancję EC2 z kilkoma interfejsami API, które pozwolą nam przesyłać i pobierać dane z chmury AWS, a także z serwera, na którym hostujemy nasz frontend aplikacji. W środowisku produkcyjnym możesz chcieć opublikować interfejs API przy użyciu bardziej skalowalnej bramy interfejsu API AWS.

  1. Ze strony głównej konsoli AWS przejdź do usługi EC2
  2. Kliknij Uruchom instancję
  3. W górnym pasku wyszukiwania wklej ten kod: „ami-08935252a36e25f85”, czyli kod identyfikacyjny prekonfigurowanej maszyny wirtualnej do użycia. Kliknij Wybierz po prawej stronie
  4. Wybierz t2.micro z kolumny „Typ” i kliknij „Sprawdź i uruchom”. Nie uruchamiaj jeszcze instancji, przejdź do następnego kroku

Krok 8: Skonfiguruj rolę zabezpieczeń uprawnień dla EC2

Skonfiguruj rolę zabezpieczeń uprawnień dla EC2
Skonfiguruj rolę zabezpieczeń uprawnień dla EC2
  1. Przed uruchomieniem chcemy zmodyfikować grupę bezpieczeństwa naszej instancji. Aby to zrobić, po prawej stronie sekcji „Grupy zabezpieczeń” kliknij „Edytuj grupy zabezpieczeń” Skonfiguruj nową grupę zabezpieczeń w następujący sposób. To w zasadzie konfiguruje zaporę sieciową Twojej instancji, udostępniając port 22 dla połączenia SSH i port 80 dla usług
  2. Kliknij ponownie „Przejrzyj i uruchom”. Teraz sprawdź, czy wszystkie parametry są ustawione. Po zakończeniu kliknij Uruchom
  3. Po kliknięciu pojawi się nowe okno, aby skonfigurować parę kluczy do połączenia ssh z instancją. Wybierz „Utwórz nową parę kluczy” i jako nazwę wpisz „ec2-road-monitoring”. Kliknij Pobierz parę kluczy. Niezwykle ważne jest, aby ten plik zgubił się lub (co gorsza) był przechowywany w niepewny sposób: nie będziesz mógł ponownie pobrać klucza. Po pobraniu klucza.pem instancja jest gotowa do uruchomienia

Krok 9: Uzyskaj dostęp do instancji EC2

Uzyskaj dostęp do swojej instancji EC2
Uzyskaj dostęp do swojej instancji EC2

Twoja nowa instancja EC2 znajduje się w chmurze AWS. Możesz się z nim połączyć za pomocą pobranego wcześniej pliku klucza (w tym samouczku zakładamy, że znasz podstawy ssh). Możesz pobrać adres IP instancji, wybierając go w panelu w sekcji „Opis” w następujący sposób: Możesz użyć zarówno swojego publicznego adresu IP, jak i publicznego DNS, to jest to samo. Z klientem ssh wpisz teraz polecenie:

ssh -i ec2-road-monitoring.pem ec2-user@TWÓJ-ADDR-IP-LUB-DNS

gdzie ec2-road-monitoring.pem to Twój klucz wygenerowany wcześniej.

Teraz przejdź do pobrania kodu po stronie serwera

git clone --recursive

Krok 10: Pobierz interfejs API Map Google

Pobierz interfejs API Map Google
Pobierz interfejs API Map Google

Prawie skończyliśmy. Teraz musimy skonfigurować API Google Maps na naszej stronie html, aby wyświetlić użytkownikowi mapę z punktami trasy:

  1. Zaloguj się na swoje konto Google i przejdź do
  2. Kliknij „Rozpocznij” po lewej stronie
  3. Wybierz „Mapy” w menu, a następnie kliknij Dalej
  4. Jako nazwę projektu wpisz „monitorowanie drogi” i kliknij Dalej
  5. Wprowadź dane rozliczeniowe i kliknij Kontynuuj
  6. Teraz Twój projekt jest gotowy, a my otrzymamy klucz API, klikając API i usługi -> Poświadczenia

Krok 11: Uruchom serwer

Uruchom serwer
Uruchom serwer

A tam jest twój klucz API. Ostatnią rzeczą, którą musisz zrobić, to przejść do data_visualization/anomalies_map.html i skopiować klucz na koniec pliku w ten sposób, zastępując „TWÓJ-KLUCZ-TUTAJ”

Teraz wszystko jest gotowe i gotowe! Aby uruchomić go w instancji EC2: „cd data-server” „python flask_app.py”

Wpisz w przeglądarce adres ip lub dns twojej instancji EC2, powinieneś zobaczyć mapę anomalii z fikcyjnymi danymi

Krok 12: Przeprowadź integrację HTTP w Things Network

Wykonaj integrację HTTP w sieci Things
Wykonaj integrację HTTP w sieci Things

Teraz, gdy mamy już całą infrastrukturę zaplecza i działa, możemy przeprowadzić integrację

  1. Utwórz nową aplikację i zarejestruj swoje urządzenie. Zakładamy podstawową znajomość TTN, jeśli nie, zapoznaj się z przewodnikiem szybkiego startu
  2. W menu aplikacji wybierz „Integracje”, a następnie „dodaj integrację”
  3. Wybierz integrację
  4. Wprowadź pola za obrazem i zastąp swoim adresem IP EC2 lub publicznym DNS

Krok 13: Przetwarzanie danych

Dla każdej krotki danych T pobranej z czujnika należy wykonać następujące czynności:

  1. Pobierz zestaw krotek, których współrzędne GPS znajdują się w lokalnym obszarze T. Obszar lokalny to wszystkie krotki, które znajdują się 100 metrów wokół T.
  2. Dla każdej najbliższej krotki N oblicz średnią kwadratową osi Z akcelerometru w N. W pseudokodzie: średnia = suma ([x. Z_accel ** 2 dla x w pobliżu]) / near.size
  3. Oblicz kwadratowe odchylenie standardowe. W pseudokodzie: std = suma ([(x. Z_accel ** 2 - średnia) ** 2 dla x w pobliżu])
  4. Dane wyjściowe w tym formacie: lat, long, Z_accel **2, mean, std

Aby obliczyć obszar lokalny, użyj odległości GPS w metrach. W C++:

#definiuj D2R (M_PI / 180.0)

#define EARTH_RAY 6371 double distance(double lat1, double long1, double lat2, double long2) { double dlong = (long2 - long1) * D2R; podwójny dlat = (lat2 - lat1) * D2R; double a = pow(sin(dlat/2.0), 2) + cos(lat1*D2R) * cos(lat2*D2R) * pow(sin(dlong/2.0), 2); podwójne c = 2 * atan2(sqrt(a), sqrt(1-a));

Teraz, korzystając z danych pośrednich wygenerowanych w poprzednim kroku, wykryj anomalie i wykonaj naiwną klasyfikację, używając tego wycięcia zastosowanego do każdej linii:

line = map(float, line.split(", "))

v = linia[2] średnia = linia[3] std = linia[4] if v (średnia + std*3): if v (średnia + std*2): if v (średnia + std): o.append([1, line[0], line[1]) else: o.append([2, line[0], line[1]) else: o.append([3, line[0], line[1])

Anomalie są klasyfikowane przy użyciu reguły 68–95–99,7

Teraz masz kolekcję w tym formacie [typ, długość, długość].

Znaczenie typu jest następujące:

  1. Niewielka anomalia, prawdopodobnie nieistotna
  2. Średnia anomalia
  3. Anomalia krytyczna

Krok 14: Wizualizacja

Wyobrażanie sobie
Wyobrażanie sobie

Aby zrozumieć i być może zmienić część wizualizacyjną, musimy nauczyć się korzystać z własnych znaczników, funkcji Google Maps API

Po pierwsze, mapa musi zostać zainicjowana w wywołaniu zwrotnym:

funkcja initMap() {

dane = zapytanieDane(); mapa = new google.maps. Map(document.getElementById('map'), { zoom: 15, center: {lat: data[0][1], lng: data[0][2]} }); Uwaga(); }

Określ nazwę tego wywołania zwrotnego w adresie URL (wstawiliśmy tutaj przed naszym kluczem API) w tagu HTML:

Znacznik można wstawić na mapę podczas tworzenia obiektu:

nowy google.maps. Marker({ pozycja: {lat: LATITUDE, lng: LONGITUDE}, mapa: mapa, ikona: “/sciezka/do/ikona.png” })

Możesz zobaczyć w kodzie, że dla każdej danych w zbiorze danych anomalii wstawiany jest znacznik (patrz funkcja uwaga()), a ikona jest oparta na klasie anomalii. Uruchamiając to w przeglądarce, możemy eksplorować mapę, na której anomalie można filtrować za pomocą pól wyboru, jak widać na obrazku.

Krok 15: Kredyty i linki zewnętrzne

Projekt ten został wykonany przez Giovanniego De Luca, Andrea Fioraldi i Pietro Spadaccino, studentów pierwszego roku studiów magisterskich na kierunku Inżynieria Informatyki na Uniwersytecie Sapienza w Rzymie.

  • Slajdy, których autorzy wykorzystali do zaprezentowania tego dowodu koncepcji:

    www.slideshare.net/PietroSpadaccino/road-m…

  • Repozytoria GitHub z całym kodem:

    github.com/roadteam

Zalecana: