Spisu treści:
- Krok 1: Wymagania
- Krok 2: Budowanie i flashowanie oprogramowania układowego czujnika
- Krok 3: Konfiguracja chmury
- Krok 4: Skonfiguruj AWS Lambda
- Krok 5: Skonfiguruj strumień danych AWS Kinesis Firehose
- Krok 6: Skonfiguruj rolę uprawnień dla Kinesis
- Krok 7: Skonfiguruj AWS EC2
- Krok 8: Skonfiguruj rolę zabezpieczeń uprawnień dla EC2
- Krok 9: Uzyskaj dostęp do instancji EC2
- Krok 10: Pobierz interfejs API Map Google
- Krok 11: Uruchom serwer
- Krok 12: Przeprowadź integrację HTTP w Things Network
- Krok 13: Przetwarzanie danych
- Krok 14: Wizualizacja
- Krok 15: Kredyty i linki zewnętrzne
Wideo: Monitorowanie drogi: 15 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:30
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
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
Zilustrujemy kroki niezbędne do skonfigurowania tej infrastruktury, zaczynając od Lambdy.
- Zaloguj się na swoje konto AWS, a następnie ze strony głównej konsoli i przejdź do Lambda
- Kliknij Utwórz funkcję
- 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ę
- 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
- Wróć teraz do strony głównej konsoli AWS, a następnie do Usługi przejdź do Kinesis
- Teraz jesteś na stronie głównej Kinesis. Po prawej stronie, w sekcji „Strumień dostarczania Kinesis Firehose” wybierz „Utwórz nowy strumień dostarczania”
- W polu „Nazwa strumienia dostawy” wpisz „strumień monitorowania dróg”. Pozostałe pola pozostaw domyślne i kliknij Dalej
- 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
- 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
- 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
Teraz ustawiamy uprawnienia bezpieczeństwa dla Kinesis, ponieważ musi wywołać funkcję Lambda do wstępnego przetwarzania, a następnie zapisze na S3
- 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
- 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
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.
- Ze strony głównej konsoli AWS przejdź do usługi EC2
- Kliknij Uruchom instancję
- W górnym pasku wyszukiwania wklej ten kod: „ami-08935252a36e25f85”, czyli kod identyfikacyjny prekonfigurowanej maszyny wirtualnej do użycia. Kliknij Wybierz po prawej stronie
- 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
- 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
- Kliknij ponownie „Przejrzyj i uruchom”. Teraz sprawdź, czy wszystkie parametry są ustawione. Po zakończeniu kliknij Uruchom
- 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
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
Prawie skończyliśmy. Teraz musimy skonfigurować API Google Maps na naszej stronie html, aby wyświetlić użytkownikowi mapę z punktami trasy:
- Zaloguj się na swoje konto Google i przejdź do
- Kliknij „Rozpocznij” po lewej stronie
- Wybierz „Mapy” w menu, a następnie kliknij Dalej
- Jako nazwę projektu wpisz „monitorowanie drogi” i kliknij Dalej
- Wprowadź dane rozliczeniowe i kliknij Kontynuuj
- Teraz Twój projekt jest gotowy, a my otrzymamy klucz API, klikając API i usługi -> Poświadczenia
Krok 11: 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
Teraz, gdy mamy już całą infrastrukturę zaplecza i działa, możemy przeprowadzić integrację
- Utwórz nową aplikację i zarejestruj swoje urządzenie. Zakładamy podstawową znajomość TTN, jeśli nie, zapoznaj się z przewodnikiem szybkiego startu
- W menu aplikacji wybierz „Integracje”, a następnie „dodaj integrację”
- Wybierz integrację
- 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:
- 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.
- 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
- Oblicz kwadratowe odchylenie standardowe. W pseudokodzie: std = suma ([(x. Z_accel ** 2 - średnia) ** 2 dla x w pobliżu])
- 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:
- Niewielka anomalia, prawdopodobnie nieistotna
- Średnia anomalia
- Anomalia krytyczna
Krok 14: Wizualizacja
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:
Ubidots + ESP32- Predykcyjne monitorowanie maszyny: 10 kroków
Ubidots + ESP32- Predictive Machine Monitoring: Predykcyjna analiza wibracji maszyny i temperatury poprzez tworzenie zdarzeń pocztowych i rejestrowanie wibracji w arkuszu Google za pomocą Ubidots.Predictive Maintenance and Machine Health Monitoring Powstanie nowej technologii, tj. Internetu rzeczy, ciężkich in
Arduino, monitorowanie otwierania drzwi przez Gmaila: 6 kroków
Arduino, monitorowanie otwierania drzwi przez Gmaila: W tym samouczku pokażę, jak wykryć zdarzenie otwarcia drzwi i wysłać powiadomienie przez Gmaila za pomocą Arduino Uno. Jeśli jesteś początkującym, możesz dowiedzieć się o Wi-Fi i czujniku w Arduino - WiFi i Arduino - samouczki dotyczące czujnika drzwi
Monitorowanie pralki/suszarki do ubrań za pomocą ESP8266 i czujnika przyspieszenia: 6 kroków
Monitorowanie pralki/suszarki do ubrań za pomocą ESP8266 i czujnika przyspieszenia: Pralka/suszarka do ubrań znajduje się w piwnicy, a ty z reguły wkładasz do niej stos ubrań, a następnie zajmujesz się inną pracą w domu. Przeoczysz ubranie, które zostało przemoczone i pochłaniające w piwnicy na twojej maszynie
Monitorowanie temperatury i wilgotności za pomocą NODE MCU i BLYNK: 5 kroków
Monitorowanie temperatury i wilgotności za pomocą NODE MCU I BLYNK: Cześć GuysW tej instrukcji nauczmy się, jak uzyskać temperaturę i wilgotność atmosfery za pomocą czujnika temperatury i wilgotności DHT11 za pomocą aplikacji Node MCU i BLYNK
Znajdowanie drogi z GPS: 9 kroków
Odnajdywanie drogi z GPS: Szybkie ćwiczenie w zrozumieniu i zastosowaniu danych GPSWymagany czas: 2 godzinyKoszt: 75–150 USDDla producentów wprowadzenie wysokiej jakości danych geoprzestrzennych do projektów elektronicznych stało się dość tanie. A w ciągu ostatnich kilku lat GPS (Global Positionin