Indholdsfortegnelse:

Vejovervågning: 15 trin
Vejovervågning: 15 trin

Video: Vejovervågning: 15 trin

Video: Vejovervågning: 15 trin
Video: 双轴房车从大理出发去往保山腾冲,一不留神又出了意外状况 2024, November
Anonim
Vejovervågning
Vejovervågning

I dag viser vi dig, hvordan vi opretter et overvågningssystem til vejanomalier baseret på accelerometre, LoRaWAN, Amazon Web Services og Google Cloud API.

Trin 1: Krav

  • DISCO-L072CZ-LRWAN1 bord
  • X-NUCLEO-IKS01A2 udvidelsesmodul (til accellerometer)
  • X-NUCLEO-GNSS1A1 (til lokalisering)
  • En AWS -konto
  • En Google Cloud Platform -konto

Trin 2: Opbygning og blinkning af sensorens firmware

Tilslut IKS01A2 og GNSS1A1 oven på brættet gennem GPIO -benene. Download firmwarekoden fra GitHub. Opret (hvis du ikke allerede har en) en konto på ARM Mbed, og importer koden i repoen på online kompilatoren. Indstil målplatformen til DISCO-L072CZ-LRWAN1 og gem projektet. Gå nu til The Things Network og opret en konto, hvis du ikke allerede har den. Opret et program, opret en ny enhed inde i applikationen, og indstil forbindelsestilstanden til OTAA. Tag fat i de relevante parametre for at udfylde følgende felter i mbed_app.json-filen: "lora.appskey", "lora.nwkskey", "lora.device-address".

Sensoren registrerer periodisk accelerometer- og GNSS -data og sender dem via LoRa -forbindelsen til den nærmeste gateway, som videresender dem til vores applikation på The Things Network. Det næste trin er at oprette en cloud -server og en HTTP -integration på TTN.

Trin 3: Opsætning af skyen

Opsætning af skyen
Opsætning af skyen

Nu er vi klar til at oprette den cloud -infrastruktur, der vil indsamle og aggregere dataene fra alle de indsatte boards. Denne infrastruktur er vist i nedenstående figur, og den er sammensat af:

  • Kinesis, til at håndtere den indgående datastrøm;
  • Lambda, for at filtrere og forbehandle dataene, før de gemmes;
  • S3, for at gemme alle data;
  • EC2, til at analysere data og være vært for vores front-end.

Trin 4: Konfigurer AWS Lambda

Opsæt AWS Lambda
Opsæt AWS Lambda

Vi vil illustrere de trin, der er nødvendige for at oprette denne infrastruktur, startende med Lambda.

  1. Log ind med din AWS -konto, og fra konsolens hovedside og gå til Lambda
  2. Klik på Opret funktion
  3. I den øverste del af siden skal den vælges Forfatter fra bunden. Udfyld derefter de andre felter som på billedet, og klik derefter på Opret funktion
  4. Nu hvor du har oprettet en AWS Lambda-funktion, skal du gå til https://github.com/roadteam/data-server og kopiere indholdet af aws_lambda.py-filen til editoren, som du finder anden halvdel af siden. Din Lambda -funktion er nu klar:)

Trin 5: Konfigurer AWS Kinesis Firehose -datastrøm

Opsæt AWS Kinesis Firehose -datastrøm
Opsæt AWS Kinesis Firehose -datastrøm
  1. Vend nu tilbage til AWS -konsolens hovedside, og gå til Services til Kinesis
  2. Nu er du på hovedsiden i Kinesis. Til højre på siden, under 'Kinesis Firehose -leveringsstrømme', skal du vælge 'Opret ny leveringsstrøm'
  3. I 'Leveringsstrømnavn' skriver du 'vejovervågnings-strøm'. Lad de andre felter stå som standard, og klik på næste
  4. Vælg nu Aktiveret under 'Transform source records with AWS Lambda', og som Lambda-funktion klikker du på den nyoprettede 'road-monitoring-lambda'. Bare rolig, hvis der dukker en advarsel om funktionstimeout op, da den handling, vi udfører, ikke er beregningsmæssigt dyr. Lad de andre felter stå som standard, og klik på næste
  5. Som destination vælges Amazon S3, og som S3 -destination vælges Opret ny. Som skovlnavn skal du indtaste 'vejovervågning-skovl' og derefter gå. Lad nu de andre felter stå som standard, og klik på Næste
  6. Du vil måske indstille bufferstørrelse til 1 MB og bufferinterval til 60 sekunder. Bufferen skylles til S3, når en af de to betingelser er opfyldt. Forlad ikke siden, se næste trin

Trin 6: Konfigurer IAM -rolle for Kinesis

Opsæt IAM -rolle for Kinesis
Opsæt IAM -rolle for Kinesis

Nu konfigurerer vi sikkerhedstilladelserne for Kinesis, da den skal kalde Lambda -funktionen til forbehandling, og derefter vil den skrive på S3

  1. Nederst på siden, hvor du er i 'IAM -rolle', skal du vælge 'Opret ny efter valg', oprette en ny IAM -rolle som på billedet og klikke på Tillad
  2. Nu er du tilbage til den forrige side, klik på næste. Nu vil du måske tjekke alle parametrene igen. Når du er færdig, skal du klikke på 'Opret leveringsstrøm'

Kinesis-Lambda-S3 rørledningen er i gang!

Trin 7: Konfigurer AWS EC2

Opsætning af AWS EC2
Opsætning af AWS EC2

Nu vil vi oprette en EC2 -forekomst med nogle API'er, der giver os mulighed for at skubbe og trække data fra AWS -skyen og også serveren, hvor vi kan hoste vores applikationsfrontend. I produktionsmiljøet vil du måske udgive API ved hjælp af den mere skalerbare AWS API Gateway.

  1. Gå til AW2 -konsolens hovedside til EC2 -service
  2. Klik på Launch Instance
  3. I den øverste søgelinje indsætter du denne kode: 'ami-08935252a36e25f85', det er identifikationskoden for den forudkonfigurerede virtuelle maskine, der skal bruges. Klik på Vælg til højre
  4. Vælg t2.micro i kolonnen 'Type', og klik på 'Gennemgå og start'. Start ikke forekomsten endnu, gå til næste trin

Trin 8: Konfigurer IAM -sikkerhedsrolle til EC2

Opsæt IAM -sikkerhedsrolle for EC2
Opsæt IAM -sikkerhedsrolle for EC2
  1. Inden lanceringen ønsker vi at ændre sikkerhedsgruppen for vores instans. For at gøre dette skal du yderst til højre i afsnittet ‘Sikkerhedsgrupper’ klikke på ‘Rediger sikkerhedsgrupper’ Opret en ny sikkerhedsgruppe som følger. Dette konfigurerer grundlæggende firewallen i din forekomst, der udsætter port 22 til SSH -forbindelse og port 80 til http -tjenester
  2. Klik igen 'Gennemgå og start'. Kontroller nu, at alle parametrene er indstillet. Klik på Start, når du er færdig
  3. Ved klik vises et nyt vindue for at konfigurere et nøglepar til ssh -forbindelse til forekomsten. Vælg 'Opret nyt nøglepar', og indtast 'ec2-road-monitoring' som navn. Klik på Download nøglepar. Det er ekstremt vigtigt, at denne fil går tabt eller (værre) er usikkert lagret: du vil ikke kunne downloade nøglen igen. Efter download af.pem -nøglen er forekomsten klar til at blive lanceret

Trin 9: Få adgang til din EC2 -instans

Få adgang til din EC2 -instans
Få adgang til din EC2 -instans

Din friske EC2 -forekomst er oppe i AWS -skyen. Du kan oprette forbindelse til den med nøglefilen, der blev downloadet før (for denne vejledning antager vi, at du kender det grundlæggende i ssh). Du kan hente forekomstens IP ved at vælge den i instrumentbrættet i afsnittet ‘Beskrivelse’ på følgende måde: Du kan bruge både din offentlige IP eller din offentlige DNS, det er det samme. Med en ssh -klient skal du nu indtaste kommandoen:

ssh -i ec2-road-monitoring.pem ec2-user@DIN-IP-ADDR-ELLER-DNS

hvor ec2-road-monitoring.pem er din nøgle genereret før.

Fortsæt nu med at trække koden på serversiden igennem

git-klon-rekursiv

Trin 10: Hent Google Maps API

Hent Google Maps API
Hent Google Maps API

Vi er næsten færdige. Nu skal vi konfigurere Google maps API i vores html -side for at vise kortet med waypoints til brugeren:

  1. Log ind på din Google-konto, og gå til
  2. Klik for at 'Kom godt i gang' til venstre på siden
  3. Vælg 'Kort' i menuen, og klik derefter på Fortsæt
  4. Som projektnavn indtastes 'vejovervågning' og klikker på Næste
  5. Indtast dine faktureringsoplysninger, og klik på Fortsæt
  6. Nu er dit projekt klar, og vi får API -nøglen ved at klikke på API'er og tjenester -> legitimationsoplysninger

Trin 11: Start server

Start server
Start server

Og der er det din API -nøgle. Den sidste ting, du skal gøre, er at gå til data_visualization/anomalies_map.html og kopiere din nøgle til slutningen af filen som sådan og erstatte 'YOUR-KEY-HERE'

Nu er alt klar og klar til at gå! For at få det til at starte udførelse i EC2-forekomsten: 'cd-dataserver' 'python flask_app.py'

Indtast i din browser ip- eller dns -adressen på din EC2 -forekomst, du bør se anomalier -kortet med nogle dummy -data

Trin 12: Udfør HTTP -integration på Things -netværket

Udfør HTTP -integration på Things -netværket
Udfør HTTP -integration på Things -netværket

Nu hvor vi har hele backend -infrastrukturen i gang, kan vi behandle for at udføre HTTP -integrationen.

  1. Opret en ny applikation, og registrer din enhed. Vi forudsætter grundlæggende viden om TTN, hvis ikke henvises til hurtigstartguiden
  2. Vælg 'Integrationer' i din applikationsmenu og derefter 'tilføj integration'
  3. Vælg HTTP -integration
  4. Indtast felterne efter billedet og erstat med din EC2 ip eller offentlige DNS

Trin 13: Databehandling

For hver tuppel data T, der indsamles fra sensoren, skal du udføre følgende trin:

  1. Få det sæt tupler, der har GPS -koordinater, der falder i lokalområdet i T. Lokalområdet er alle de tupler, der er 100 meter omkring T.
  2. For hver nærmeste tuple N beregnes kvadratgennemsnittet af accelerometerets Z-akse i N. I pseudokode: middelværdi = sum ([x. Z_accel ** 2 for x i nær]) / nær.størrelse
  3. Beregn den kvadrerede standardafvigelse. I pseudokode: std = sum ([(x. Z_accel ** 2 - middelværdi) ** 2 for x i nær])
  4. Output i dette format: lat, long, Z_accel ** 2, mean, std

Brug GPS -afstanden i meter til at beregne lokalområdet. I C ++:

#define D2R (M_PI / 180.0)

#define EARTH_RAY 6371 dobbelt afstand (dobbelt lat1, dobbelt lang1, dobbelt lat2, dobbelt lang2) {dobbelt dlong = (lang2 - lang1) * D2R; dobbelt dlat = (lat2 - lat1) * D2R; dobbelt a = pow (sin (dlat/2.0), 2) + cos (lat1 * D2R) * cos (lat2 * D2R) * pow (sin (dlong/2.0), 2); dobbelt c = 2 * atan2 (sqrt (a), sqrt (1-a));

Nu, ved hjælp af de mellemliggende data, der blev genereret i det foregående trin, registrerer du anomalierne og laver en naiv klassificering ved hjælp af denne snippet, der anvendes på hver linje:

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

v = linje [2] middel = linje [3] std = linje [4] hvis v (middelværdi + std*3): hvis v (middelværdi + std*2): hvis v (middelværdi + std): o. tilføj ([1, linje [0], linje [1]) else: o.append ([2, linje [0], linje [1]) else: o.append ([3, linje [0], linje [1])

Anomalierne klassificeres ved hjælp af 68–95–99.7 -reglen

Nu har du en samling med dette format [type, lat, lang].

Typebetydningen er følgende:

  1. Lidt anomali, sandsynligvis irrelevant
  2. Medium anomali
  3. Kritisk anomali

Trin 14: Visualisering

Visualisering
Visualisering

For at forstå og måske ændre visualiseringsdelen skal vi lære at bruge tilpassede markører, en funktion i Google Maps API

For det første skal kortet initieres i et tilbagekald:

funktion initMap () {

data = queryData (); map = nyt google.maps. Map (document.getElementById ('map'), {zoom: 15, center: {lat: data [0] [1], lng: data [0] [2]}}); bemærkning(); }

Angiv navnet på denne tilbagekaldelse i url'en (vi indsatte her før vores API -nøgle) i et HTML -tag:

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

En markør kan indsættes i kortet, når objektet oprettes:

nyt google.maps. Marker ({position: {lat: LATITUDE, lng: LONGITUDE}, map: map, ikon: “/path/to/icon.png”})

Du kan se i koden, at der for hver data i datasættet for anomalierne indsættes en markør (se funktionen bemærkning ()), og ikonet er baseret på anomaliens klasse. Når vi kører dette ind i browseren, kan vi udforske et kort, hvor uregelmæssigheder kan filtreres ved hjælp af afkrydsningsfelter, som det ses på billedet.

Trin 15: Kreditter og eksterne links

Dette projekt blev lavet af Giovanni De Luca, Andrea Fioraldi og Pietro Spadaccino, første års kandidat i ingeniørvidenskab i datalogistuderende ved Sapienza University of Rome.

  • Dias, forfatterne plejede at præsentere dette bevis på koncept:

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

  • GitHub repos med hele koden:

    github.com/roadteam

Anbefalede: