Cuprins:

Monitorizare rutieră: 15 pași
Monitorizare rutieră: 15 pași

Video: Monitorizare rutieră: 15 pași

Video: Monitorizare rutieră: 15 pași
Video: Testarea constă în rezolvarea unui CHESTIONAR: 15 întrebări cu 13 corecte, din Legislația Rutieră! 2024, Iulie
Anonim
Monitorizarea drumurilor
Monitorizarea drumurilor

Astăzi vă vom arăta cum am creat un sistem de monitorizare a anomaliilor rutiere bazat pe accelerometre, LoRaWAN, Amazon Web Services și Google Cloud API.

Pasul 1: Cerințe

  • Placă DISCO-L072CZ-LRWAN1
  • Modul de expansiune X-NUCLEO-IKS01A2 (pentru accellerometru)
  • X-NUCLEO-GNSS1A1 (pentru localizare)
  • Un cont AWS
  • Un cont Google Cloud Platform

Pasul 2: Construirea și intermiterea firmware-ului senzorului

Conectați IKS01A2 și GNSS1A1 pe partea de sus a plăcii prin pinii GPIO. Descărcați codul firmware-ului de pe GitHub. Creați (dacă nu aveți deja) un cont pe ARM Mbed și importați codul în repo pe compilatorul online. Setați platforma țintă la DISCO-L072CZ-LRWAN1 și salvați proiectul. Acum accesați The Things Network și creați-vă un cont dacă nu îl aveți deja. Creați o aplicație, creați un dispozitiv nou în interiorul aplicației și setați modul de conectare la OTAA. Prindeți parametrii corespunzători pentru a completa următoarele câmpuri din fișierul mbed_app.json: "lora.appskey", "lora.nwkskey", "lora.device-address".

Senzorul va înregistra periodic accelerometrul și datele GNSS și le va trimite prin conexiunea LoRa la cel mai apropiat gateway, care le va redirecționa către aplicația noastră din The Things Network. Următorul pas este să configurați un server cloud și o integrare HTTP pe TTN.

Pasul 3: Configurarea Cloud

Configurarea Cloud
Configurarea Cloud

Acum suntem gata să configurăm infrastructura cloud care va colecta și agrega datele de pe toate plăcile implementate. Această infrastructură este prezentată în figura de mai jos și este compusă din:

  • Kinesis, pentru a gestiona fluxul de date primite;
  • Lambda, pentru a filtra și preprocesa datele înainte de a le stoca;
  • S3, pentru a stoca toate datele;
  • EC2, pentru a analiza date și pentru a găzdui front-end-ul nostru.

Pasul 4: Configurați AWS Lambda

Configurați AWS Lambda
Configurați AWS Lambda

Vom ilustra pașii necesari pentru configurarea acestei infrastructuri, începând cu Lambda.

  1. Conectați-vă cu contul dvs. AWS și din pagina principală a consolei și accesați Lambda
  2. Faceți clic pe Creare funcție
  3. În partea superioară a paginii ar trebui să fie selectat Autor din Scratch. Apoi completați celelalte câmpuri ca în imagine și apoi faceți clic pe Creare funcție
  4. Acum că ați creat o funcție AWS Lambda, accesați https://github.com/roadteam/data-server și copiați conținutul fișierului aws_lambda.py în editorul pe care îl găsiți a doua jumătate a paginii. Funcția dvs. Lambda este acum gata:)

Pasul 5: Configurați fluxul de date AWS Kinesis Firehose

Configurați fluxul de date AWS Kinesis Firehose
Configurați fluxul de date AWS Kinesis Firehose
  1. Reveniți acum la pagina principală a consolei AWS, iar în Servicii accesați Kinesis
  2. Acum vă aflați în pagina principală a Kinesis. În partea dreaptă a paginii, sub „Fluxuri de livrare Kinesis Firehose”, selectați „Creați un flux de livrare nou”
  3. În „Numele fluxului de livrare” scrieți „flux-monitorizare-drum”. Lăsați celelalte câmpuri implicite și faceți clic pe următor
  4. Acum, în „Transformare înregistrări sursă cu AWS Lambda”, selectați Activat și, ca funcție Lambda, faceți clic pe noua creație „road-monitoring-lambda”. Nu vă faceți griji dacă apare un avertisment cu privire la expirarea funcției, deoarece operația pe care o facem nu este costisitoare din punct de vedere al calculului. Lăsați celelalte câmpuri implicite și faceți clic pe următor
  5. Ca destinație selectați Amazon S3 și ca destinație S3 selectați Creare nouă. Pe măsură ce numele cupei introduceți „road-monitoring-bucket” și apoi mergeți. Acum lăsați celelalte câmpuri implicite și faceți clic pe Următorul
  6. Poate doriți să setați dimensiunea bufferului la 1 MB și intervalul Buffer la 60 de secunde. Tamponul va fi spălat la S3 ori de câte ori una dintre cele două condiții este îndeplinită. Nu părăsiți pagina, consultați pasul următor

Pasul 6: Configurați rolul IAM pentru Kinesis

Configurați rolul IAM pentru Kinesis
Configurați rolul IAM pentru Kinesis

Acum configurăm permisiunile de securitate pentru Kinesis, deoarece trebuie să apeleze funcția Lambda pentru preprocesare și apoi va scrie pe S3

  1. În partea de jos a paginii în care vă aflați în „Rol IAM”, selectați „Creați un nou de alegere”, creați un rol IAM nou ca în imagine și faceți clic pe Permiteți
  2. Acum ați revenit la pagina anterioară, faceți clic pe următorul. Acum vă recomandăm să verificați din nou toți parametrii. La final, faceți clic pe „Creați un flux de livrare”

Conducta Kinesis-Lambda-S3 este în funcțiune!

Pasul 7: Configurați AWS EC2

Configurați AWS EC2
Configurați AWS EC2

Acum vom configura o instanță EC2 cu câteva API-uri care ne vor permite să împingem și să extragem date din cloud AWS și, de asemenea, de pe serverul unde să găzduim frontendul aplicației noastre. În mediul de producție, poate doriți să publicați API utilizând AWS API Gateway mai scalabil.

  1. Din pagina principală a consolei AWS, accesați serviciul EC2
  2. Faceți clic pe Lansare instanță
  3. În bara de căutare superioară, lipiți acest cod: „ami-08935252a36e25f85”, adică codul identificativ al mașinii virtuale preconfigurate de utilizat. Faceți clic pe Selectați din dreapta
  4. Selectați t2.micro din coloana „Tip” și faceți clic pe „Examinați și lansați”. Nu lansați încă instanța, treceți la pasul următor

Pasul 8: Configurați rolul de securitate IAM pentru EC2

Configurați rolul de securitate IAM pentru EC2
Configurați rolul de securitate IAM pentru EC2
  1. Înainte de lansare, dorim să modificăm grupul de securitate al instanței noastre. Pentru a face acest lucru, în extrema dreaptă a secțiunii „Grupuri de securitate” faceți clic pe „Editați grupuri de securitate” Configurați un nou grup de securitate după cum urmează. Aceasta configurează practic firewall-ul instanței dvs. expunând portul 22 pentru conexiunea SSH și portul 80 pentru serviciile
  2. Faceți din nou clic pe „Examinați și lansați”. Acum verificați dacă toți parametrii sunt setați. Când ați terminat, faceți clic pe Lansare
  3. La clic, se va deschide o fereastră nouă pentru a configura o pereche de chei pentru conexiunea ssh la instanță. Selectați „Creați o nouă pereche de chei” și ca nume introduceți „ec2-road-monitoring”. Faceți clic pe Descărcați perechea de chei. Este extrem de important ca acest fișier să se piardă sau (mai rău) să fie stocat nesigur: nu veți putea descărca cheia din nou. Odată descărcată cheia.pem, instanța este gata de lansare

Pasul 9: Accesați instanța dvs. EC2

Accesați instanța dvs. EC2
Accesați instanța dvs. EC2

Instanța dvs. nouă EC2 este în cloud AWS. Vă puteți conecta la acesta cu fișierul cheie descărcat anterior (pentru acest tutorial presupunem că știți elementele de bază ale ssh). Puteți recupera IP-ul instanței selectându-l în tabloul de bord din secțiunea „Descriere” după cum urmează: Puteți utiliza atât IP-ul dvs. public, cât și DNS-ul dvs. public este același. Cu un client ssh acum introduceți comanda:

ssh -i ec2-road-monitoring.pem ec2-user @ YOUR-IP-ADDR-OR-DNS

unde ec2-road-monitoring.pem este cheia dvs. generată anterior.

Acum procedați la extragerea codului de pe server

git clone --recursive

Pasul 10: preluați API-ul Google Maps

Preluarea API-ului Google Maps
Preluarea API-ului Google Maps

Aproape am terminat. Acum trebuie să configurăm API-ul google maps în pagina noastră html pentru a afișa harta cu punctele de trecere către utilizator:

  1. Conectați-vă la contul dvs. Google și accesați
  2. Faceți clic pentru „Începeți” din partea stângă a paginii
  3. Selectați „Hărți” din meniu și apoi faceți clic pe continua
  4. Pe măsură ce numele proiectului introduceți „road-monitoring” și faceți clic pe Next
  5. Introduceți detaliile de facturare și faceți clic pe Continuare
  6. Acum proiectul dvs. este gata și vom obține cheia API făcând clic pe API-uri și servicii -> acreditări

Pasul 11: Lansați serverul

Lansați serverul
Lansați serverul

Și acolo este cheia dvs. API. Ultimul lucru pe care trebuie să-l faceți este să accesați data_visualization / anomalies_map.html și să copiați cheia la sfârșitul fișierului așa, înlocuind „TEA-CHEIA-AICI”

Acum totul este pregătit și gata de plecare! Pentru a începe să se execute în instanța EC2: „cd data-server” „python flask_app.py”

Introduceți în browser adresa IP sau DNS a instanței dvs. EC2, ar trebui să vedeți harta anomaliilor cu câteva date fictive

Pasul 12: Efectuați integrarea HTTP în rețeaua de lucruri

Efectuați integrarea HTTP în rețeaua de lucruri
Efectuați integrarea HTTP în rețeaua de lucruri

Acum, că avem toată infrastructura backend în funcțiune, putem procesa pentru a realiza integrarea

  1. Creați o aplicație nouă și înregistrați-vă dispozitivul. Ne asumăm cunoștințele de bază despre TTN, dacă nu, consultăm ghidul de pornire rapidă
  2. În meniul aplicației selectați „Integrări” și apoi „adăugați integrare”
  3. Selectați integrarea
  4. Introduceți câmpurile care urmează imaginii și le înlocuiesc cu IP-ul EC2 sau DNS public

Pasul 13: Prelucrarea datelor

Pentru fiecare tuplu de date T colectate de la senzor trebuie să efectuați următorii pași:

  1. Obțineți setul de tupluri care au coordonatele GPS care se încadrează în zona locală a T. Zona locală este toate tuplurile care se află la 100 de metri în jurul T.
  2. Pentru fiecare cel mai apropiat tuplu N calculați media pătrată a accelerometrului axa Z în N. În pseudocod: medie = sumă ([x. Z_accel ** 2 pentru x în near]) / near.size
  3. Calculați abaterea standard pătrată. În pseudocod: std = sum ([(x. Z_accel ** 2 - medie) ** 2 pentru x în aproape])
  4. Ieșire în acest format: lat, long, Z_accel ** 2, medie, std

Pentru a calcula zona locală, utilizați distanța GPS în metri. În C ++:

#define D2R (M_PI / 180.0)

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

Acum, folosind datele intermediare generate în pasul anterior, detectați anomaliile și faceți o clasificare naivă folosind acest fragment aplicat fiecărei linii:

line = hartă (float, line.split (","))

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

Anomaliile sunt clasificate folosind regula 68-95-99.7

Acum aveți o colecție cu acest format [tip, lat, lung].

Înțelesul tipului este următorul:

  1. O ușoară anomalie, probabil irelevantă
  2. Anomalie medie
  3. Anomalie critică

Pasul 14: Vizualizare

Vizualizare
Vizualizare

Pentru a înțelege și poate modifica partea de vizualizare, trebuie să învățăm cum să folosim markeri personalizați, o caracteristică a API-ului Google Maps

În primul rând, harta trebuie inițiată într-un apel invers:

funcția initMap () {

date = queryData (); map = new google.maps. Map (document.getElementById ('hartă'), {zoom: 15, centru: {lat: data [0] [1], lng: data [0] [2]}}); Observație(); }

Specificați numele acestui apel invers în adresa URL (am inserat aici înainte de cheia API) într-o etichetă HTML:

script async defer src = "https://maps.googleapis.com/maps/api/js?key=[KEY]&callback=initMap"

Un marker poate fi inserat pe hartă atunci când obiectul este creat:

google.maps. Marker nou ({poziție: {lat: LATITUDE, lng: LONGITUDE}, hartă: hartă, pictogramă: „/path/to/icon.png”})

Puteți vedea în cod că pentru fiecare dată din setul de date al anomaliilor este inserat un marker (a se vedea funcția de observație ()) și pictograma se bazează pe clasa anomaliei. Când rulăm acest lucru în browser, putem explora o hartă în care anomaliile pot fi filtrate folosind casete de selectare, așa cum se vede în imagine.

Pasul 15: Credite și linkuri externe

Acest proiect a fost realizat de Giovanni De Luca, Andrea Fioraldi și Pietro Spadaccino, studenți în anul I master în Inginerie în Informatică la Universitatea Sapienza din Roma.

  • Diapozitive pe care autorii le-au folosit pentru a prezenta această dovadă a conceptului:

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

  • GitHub repos cu tot codul:

    github.com/roadteam

Recomandat: