Taula de continguts:
- Pas 1: requisits
- Pas 2: creació i intermitència del microprogramari del sensor
- Pas 3: Configuració del núvol
- Pas 4: configureu AWS Lambda
- Pas 5: configureu el flux de dades AWS Kinesis Firehose
- Pas 6: configureu la funció IAM per a Kinesis
- Pas 7: configureu AWS EC2
- Pas 8: configureu el rol de seguretat IAM per a EC2
- Pas 9: accediu a la vostra instància EC2
- Pas 10: recupereu l'API de Google Maps
- Pas 11: llançament del servidor
- Pas 12: realitzeu la integració HTTP a la xarxa de coses
- Pas 13: Processament de dades
- Pas 14: visualització
- Pas 15: Crèdits i enllaços externs
Vídeo: Seguiment de carreteres: 15 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:14
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
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
Il·lustrarem els passos necessaris per configurar aquesta infraestructura, començant per Lambda.
- Inicieu la sessió amb el vostre compte d'AWS i des de la pàgina principal de la consola i aneu a Lambda
- Feu clic a Crea una funció
- 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ó
- 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
- Torneu ara a la pàgina principal de la consola AWS i, a Serveis, aneu a Kinesis
- 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"
- A "Nom del flux de lliurament", escriviu "road-monitoring-stream". Deixeu els altres camps per defecte i feu clic a Següent
- 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
- 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
- É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
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
- 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
- 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
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.
- Des de la pàgina principal de la consola AWS, aneu al servei EC2
- Feu clic a Launch Instance
- 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
- 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
- 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
- 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
- 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
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
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:
- Inicieu la sessió al vostre compte de Google i aneu a
- Feu clic a "Comença" a l'esquerra de la pàgina
- Seleccioneu "Mapes" al menú i feu clic a continua
- Com a nom del projecte, introduïu "road-monitoring" i feu clic a Següent
- Introduïu les dades de facturació i feu clic a Continua
- 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
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
Ara que tenim tota la infraestructura de backend en funcionament, podem processar per realitzar la integració
- 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
- Al menú de l'aplicació, seleccioneu "Integracions" i, a continuació, "afegeix integració"
- Seleccioneu la integració
- 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:
- 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.
- 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
- Calculeu la desviació estàndard quadrada. En pseudocodi: std = suma ([(x. Z_accel ** 2 - mitjana) ** 2 per a x a prop])
- 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:
- Lleugera anomalia, probablement irrellevant
- Anomalia mitjana
- Anomalia crítica
Pas 14: 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:
Termòstat Nest, seguiment d’ocupació: 12 passos
Termòstat Nest, seguiment d’ocupació: fins fa poc, IFTTT gestionava la meva automatització de refrigeració domèstica que feia servir el meu termòstat Nest mitjançant els “primers que arribava a casa” de Life360; i " últim a sortir de casa " desencadenants. Va ser fantàstic perquè podia afegir membres de la família al meu Li
Arduino - Robot de solució de laberint (MicroMouse) Robot de seguiment de paret: 6 passos (amb imatges)
Arduino | Maze Solving Robot (MicroMouse) Wall Following Robot: Benvingut sóc Isaac i aquest és el meu primer robot "Striker v1.0". Aquest robot va ser dissenyat per resoldre un simple laberint. A la competició vam tenir dos laberints i el robot els va poder identificar. Qualsevol altre canvi al laberint pot requerir un canvi en el
Semarang de construccions de carreteres lleugeres: 8 passos
Semarang de construccions de carreteres lleugeres: projecte escolar Com a projecte escolar per a la Universitat de Ciències Aplicades de Rotterdam, vam haver de trobar una solució tant per a l’augment del nivell de l’aigua com per a la subsidència del terreny a Semarang, Indonèsia. Els següents productes es fabriquen durant aquesta p
Seguiment i seguiment de botigues petites: 9 passos (amb imatges)
Track & trace per a botigues petites: es tracta d’un sistema dissenyat per a petites botigues que se suposa que es munta en bicicletes elèctriques o patinets electrònics per a lliuraments a curt abast, per exemple, una fleca que vulgui lliurar pastes. Què significa Track and Trace? Track and trace és un sistema utilitzat per ca
Kits de cotxes de seguiment de robots intel·ligents de bricolatge Seguiment fotosensible del cotxe: 7 passos
Kits de cotxes de seguiment de robots intel·ligents de bricolatge Seguiment del cotxe fotosensible: dissenyat per SINONING ROBOT Podeu comprar amb el robot de seguiment El xip LM393 compara els dos fotoresistors, quan hi ha un LED de fotoresistència lateral en BLANC, el costat del motor s'aturarà immediatament, l'altre costat del motor girar, de manera que