Taula de continguts:

Seguiment de carreteres: 15 passos
Seguiment de carreteres: 15 passos

Vídeo: Seguiment de carreteres: 15 passos

Vídeo: Seguiment de carreteres: 15 passos
Vídeo: Беслан. Помни / Beslan. Remember (english & español subs) 2024, Desembre
Anonim
Seguiment de carreteres
Seguiment de carreteres

Avui us mostrarem com configurem un sistema de control d’anomalies viàries basat en acceleròmetres, LoRaWAN, Amazon Web Services i Google Cloud API.

Pas 1: requisits

  • Tauler DISCO-L072CZ-LRWAN1
  • Mòdul d'expansió X-NUCLEO-IKS01A2 (per a l'acceleròmetre)
  • X-NUCLEO-GNSS1A1 (per a la localització)
  • Un compte AWS
  • Un compte de Google Cloud Platform

Pas 2: creació i intermitència del microprogramari del sensor

Connecteu l'IKS01A2 i GNSS1A1 a la part superior de la placa mitjançant els pins GPIO. Baixeu-vos el codi del firmware des de GitHub. Creeu (si encara no en teniu) un compte a ARM Mbed i importeu el codi a la reposició al compilador en línia. Establiu la plataforma de destinació a DISCO-L072CZ-LRWAN1 i deseu el projecte. Ara aneu a The Things Network i creeu un compte si encara no el teniu. Creeu una aplicació, creeu un dispositiu nou dins de l'aplicació i configureu el mode de connexió a OTAA. Agafeu els paràmetres adequats per omplir els camps següents al fitxer mbed_app.json: "lora.appskey", "lora.nwkskey", "lora.device-address".

El sensor enregistrarà periòdicament les dades de l’acceleròmetre i del GNSS i les enviarà a través de la connexió LoRa a la passarel·la més propera, que les reenviarà a la nostra aplicació de The Things Network. El següent pas és configurar un servidor al núvol i una integració HTTP a TTN.

Pas 3: Configuració del núvol

Configuració del núvol
Configuració del núvol

Ara estem preparats per configurar la infraestructura del núvol que recopilarà i agregarà les dades de totes les taules desplegades. Aquesta infraestructura es mostra a la figura següent i està composta per:

  • Kinesis, per gestionar el flux de dades entrants;
  • Lambda, per filtrar i preprocessar les dades abans d’emmagatzemar-les;
  • S3, per emmagatzemar totes les dades;
  • EC2, per analitzar dades i allotjar la nostra interfície.

Pas 4: configureu AWS Lambda

Configureu AWS Lambda
Configureu AWS Lambda

Il·lustrarem els passos necessaris per configurar aquesta infraestructura, començant per Lambda.

  1. Inicieu la sessió amb el vostre compte d'AWS i des de la pàgina principal de la consola i aneu a Lambda
  2. Feu clic a Crea una funció
  3. A la part superior de la pàgina s'hauria de seleccionar Autor des de Scratch. A continuació, completeu els altres camps com es mostra a la imatge i feu clic a Crea una funció
  4. Ara que heu creat una funció AWS Lambda, aneu a https://github.com/roadteam/data-server i copieu el contingut del fitxer aws_lambda.py a l'editor que trobareu a la segona meitat de la pàgina. La vostra funció Lambda ja està preparada:)

Pas 5: configureu el flux de dades AWS Kinesis Firehose

Configureu el flux de dades AWS Kinesis Firehose
Configureu el flux de dades AWS Kinesis Firehose
  1. Torneu ara a la pàgina principal de la consola AWS i, a Serveis, aneu a Kinesis
  2. Ara esteu a la pàgina principal de Kinesis. A la dreta de la pàgina, a "Fluxos de lliurament de Kinesis Firehose", seleccioneu "Crea un flux de lliurament nou"
  3. A "Nom del flux de lliurament", escriviu "road-monitoring-stream". Deixeu els altres camps per defecte i feu clic a Següent
  4. Ara, a "Transformar els registres d'origen amb AWS Lambda", seleccioneu Habilitat i, com a funció Lambda, feu clic a la nova versió "road-monitoring-lambda". No us preocupeu si apareix un avís sobre el temps d'espera de la funció, ja que l'operació que estem fent no és computacionalment cara. Deixeu els altres camps per defecte i feu clic a Següent
  5. Com a destinació, seleccioneu Amazon S3 i, com a destinació S3, seleccioneu Crea nou. Com a nom del dipòsit, introduïu "road-monitoring-bucket" i, a continuació, aneu. Ara deixeu els altres camps per defecte i feu clic a Següent
  6. És possible que vulgueu establir la mida de la memòria intermèdia a 1 MB i l’interval de memòria intermèdia a 60 segons. La memòria intermèdia es desplaçarà a S3 sempre que es compleixi una de les dues condicions. No sortiu de la pàgina, consulteu el següent pas

Pas 6: configureu la funció IAM per a Kinesis

Configureu la funció IAM per a Kinesis
Configureu la funció IAM per a Kinesis

Ara configurem els permisos de seguretat per a Kinesis, ja que ha de trucar a la funció Lambda per al preprocessament i després escriurà a S3

  1. A la part inferior de la pàgina que esteu a "Rol IAM", seleccioneu "Crea un nou de triar", creeu un nou rol IAM com a la imatge i feu clic a Permet
  2. Ara torneu a la pàgina anterior, feu clic a següent. Ara és possible que vulgueu comprovar tots els paràmetres. Quan hàgiu acabat, feu clic a "Crea un flux de lliurament"

El gasoducte Kinesis-Lambda-S3 ja està en marxa.

Pas 7: configureu AWS EC2

Configureu AWS EC2
Configureu AWS EC2

Ara configurarem una instància EC2 amb algunes API que ens permetran obtenir i extreure dades del núvol AWS i també del servidor on allotjar la nostra aplicació. A l'entorn de producció, és possible que vulgueu publicar l'API mitjançant la passarel·la d'API AWS més escalable.

  1. Des de la pàgina principal de la consola AWS, aneu al servei EC2
  2. Feu clic a Launch Instance
  3. A la barra de cerca superior, enganxeu aquest codi: "ami-08935252a36e25f85", que és el codi identificatiu de la màquina virtual preconfigurada que cal utilitzar. Feu clic a Selecciona a la dreta
  4. Seleccioneu t2.micro a la columna "Tipus" i feu clic a "Revisa i inicia". No inicieu la instància encara, aneu al pas següent

Pas 8: configureu el rol de seguretat IAM per a EC2

Configureu la funció de seguretat IAM per a EC2
Configureu la funció de seguretat IAM per a EC2
  1. Abans del llançament volem modificar el grup de seguretat de la nostra instància. Per fer-ho, a l'extrem dret de la secció "Grups de seguretat", feu clic a "Edita grups de seguretat". Configureu un grup de seguretat nou de la manera següent. Això bàsicament configura el tallafoc de la vostra instància exposant el port 22 per a la connexió SSH i el port 80 per als serveis
  2. Feu clic de nou a "Revisa i llança". Ara comproveu que tots els paràmetres estiguin configurats. Quan hàgiu acabat, feu clic a Inicia
  3. En fer clic, apareixerà una finestra nova per configurar un parell de claus per a la connexió ssh amb la instància. Seleccioneu "Crea un parell de claus nou" i, com a nom, introduïu "ec2-road-monitoring". Feu clic a Baixa el parell de claus. És extremadament important que aquest fitxer es perdi o (pitjor) s’emmagatzemi de manera insegura: no podreu tornar a baixar la clau. Un cop descarregada la clau.pem, la instància està a punt per iniciar-se

Pas 9: accediu a la vostra instància EC2

Accediu a la vostra instància EC2
Accediu a la vostra instància EC2

La vostra nova instància EC2 es troba al núvol AWS. Podeu connectar-vos-hi amb el fitxer de claus descarregat abans (per a aquest tutorial suposem que coneixeu els conceptes bàsics de ssh). Podeu recuperar la IP de la instància seleccionant-la al tauler de la secció "Descripció" de la següent manera: Podeu utilitzar tant la vostra IP pública com el vostre DNS públic. Amb un client ssh, ara introduïu l'ordre:

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

on ec2-road-monitoring.pem és la vostra clau generada abans.

Ara procediu a treure el codi del servidor

git clone --recursive

Pas 10: recupereu l'API de Google Maps

Recupereu l'API de Google Maps
Recupereu l'API de Google Maps

Quasi hem acabat. Ara hem de configurar l'API de google maps a la nostra pàgina html per mostrar el mapa amb els punts de ruta a l'usuari:

  1. Inicieu la sessió al vostre compte de Google i aneu a
  2. Feu clic a "Comença" a l'esquerra de la pàgina
  3. Seleccioneu "Mapes" al menú i feu clic a continua
  4. Com a nom del projecte, introduïu "road-monitoring" i feu clic a Següent
  5. Introduïu les dades de facturació i feu clic a Continua
  6. Ara el vostre projecte està a punt i obtindrem la clau API fent clic a API i serveis -> Credencials

Pas 11: llançament del servidor

Inicia el servidor
Inicia el servidor

I aquí està la vostra clau API. L'últim que heu de fer és anar a data_visualization / anomalies_map.html i copiar la vostra clau al final del fitxer així, substituint "LA VOSTRA-CLAU-AQUÍ"

Ara tot està preparat i llest per començar! Per fer-ho, s'executa a la instància EC2: "cd data-server" "python flask_app.py"

Introduïu al vostre navegador l’adreça ip o dns de la vostra instància EC2, hauríeu de veure el mapa d’anomalies amb algunes dades falses.

Pas 12: realitzeu la integració HTTP a la xarxa de coses

Realitzeu la integració HTTP a la xarxa de coses
Realitzeu la integració HTTP a la xarxa de coses

Ara que tenim tota la infraestructura de backend en funcionament, podem processar per realitzar la integració

  1. Creeu una aplicació nova i registreu el vostre dispositiu. Assumim els coneixements bàsics de TTN, si no es refereix a la guia d'inici ràpid
  2. Al menú de l'aplicació, seleccioneu "Integracions" i, a continuació, "afegeix integració"
  3. Seleccioneu la integració
  4. Introduïu els camps següents a la imatge i substituïts pel vostre IP EC2 o DNS públic

Pas 13: Processament de dades

Per a cada tupla de dades T recollides del sensor, heu de realitzar els passos següents:

  1. Obteniu el conjunt de tuples que tenen coordenades GPS a la zona local de T. L’àrea local són totes les tuples que es troben a 100 metres al voltant de T.
  2. Per a cada tupla N més propera, calculeu la mitjana quadrada de l’eix Z de l’acceleròmetre en N. En pseudocodi: mitjana = suma ([x. Z_accel ** 2 per a x a prop]) / near.size
  3. Calculeu la desviació estàndard quadrada. En pseudocodi: std = suma ([(x. Z_accel ** 2 - mitjana) ** 2 per a x a prop])
  4. Sortida en aquest format: lat, long, Z_accel ** 2, mean, std

Per calcular l'àrea local, utilitzeu la distància GPS en metres. A C ++:

#define D2R (M_PI / 180.0)

#define EARTH_RAY 6371 doble distància (doble lat1, doble llarg1, doble lat2, doble llarg2) {doble dlong = (llarg2 - llarg1) * D2R; doble dlat = (lat2 - lat1) * D2R; doble a = pow (sin (dlat / 2.0), 2) + cos (lat1 * D2R) * cos (lat2 * D2R) * pow (sin (dlong / 2.0), 2); doble c = 2 * atan2 (sqrt (a), sqrt (1-a));

Ara, utilitzant les dades intermèdies generades al pas anterior, detecteu les anomalies i feu una classificació ingènua mitjançant aquest retall aplicat a cada línia:

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

v = línia [2] mitjana = línia [3] std = línia [4] si v (mitjana + std * 3): si v (mitjana + std * 2): si v (mitjana + std): o.append ([1, línia [0], línia [1]) else: o.append ([2, line [0], line [1]) else: o.append ([3, line [0], line [1])

Les anomalies es classifiquen mitjançant la regla 68-95-99.7

Ara teniu una col·lecció amb aquest format [tipus, lat, llarg].

El significat del tipus és el següent:

  1. Lleugera anomalia, probablement irrellevant
  2. Anomalia mitjana
  3. Anomalia crítica

Pas 14: visualització

Visualització
Visualització

Per entendre i potser canviar la part de visualització, hem d'aprendre a utilitzar marcadors personalitzats, una funció de l'API de Google Maps

En primer lloc, cal iniciar el mapa en una devolució de trucada:

funció initMap () {

dades = queryData (); map = new google.maps. Map (document.getElementById ('map'), {zoom: 15, centre: {lat: data [0] [1], lng: data [0] [2]}}); remarca (); }

Especifiqueu el nom d'aquesta devolució de trucada a l'URL (hem inserit aquí abans de la nostra clau API) en una etiqueta HTML:

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

Es pot inserir un marcador al mapa quan es crea l'objecte:

google.maps. Marker nou ({position: {lat: LATITUDE, lng: LONGITUDE}, mapa: mapa, icona: “/path/to/icon.png”})

Podeu veure al codi que per a cada dada del conjunt de dades de les anomalies s’insereix un marcador (vegeu la funció de comentari ()) i que la icona es basa en la classe de l’anomalia. En executar-ho al navegador, podem explorar un mapa en què es poden filtrar les anomalies mitjançant caselles de selecció, tal com es veu a la imatge.

Pas 15: Crèdits i enllaços externs

Aquest projecte va ser realitzat per Giovanni De Luca, Andrea Fioraldi i Pietro Spadaccino, estudiants de primer curs de màster en Enginyeria en Informàtica a la Universitat Sapienza de Roma.

  • Diapositives dels autors que presentaven aquesta prova de concepte:

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

  • GitHub repos amb tot el codi:

    github.com/roadteam

Recomanat: