Tabla de contenido:

Monitoreo vial: 15 pasos
Monitoreo vial: 15 pasos

Video: Monitoreo vial: 15 pasos

Video: Monitoreo vial: 15 pasos
Video: #NadaEsPorAccidente - Campaña de seguridad vial 2024, Mes de julio
Anonim
Monitoreo de carreteras
Monitoreo de carreteras

Hoy le mostraremos cómo configuramos un sistema de monitoreo de anomalías en las carreteras basado en acelerómetros, LoRaWAN, Amazon Web Services y Google Cloud API.

Paso 1: requisitos

  • Placa DISCO-L072CZ-LRWAN1
  • Módulo de expansión X-NUCLEO-IKS01A2 (para el acelerómetro)
  • X-NUCLEO-GNSS1A1 (para localización)
  • Una cuenta de AWS
  • Una cuenta de Google Cloud Platform

Paso 2: creación y actualización del firmware del sensor

Conecte el IKS01A2 y GNSS1A1 en la parte superior de la placa a través de los pines GPIO. Descargue el código del firmware de GitHub. Cree (si aún no tiene una) una cuenta en ARM Mbed e importe el código en el repositorio en el compilador en línea. Configure la plataforma de destino en DISCO-L072CZ-LRWAN1 y guarde el proyecto. Ahora diríjase a The Things Network y cree una cuenta si aún no la tiene. Cree una aplicación, cree un nuevo dispositivo dentro de la aplicación y configure el modo de conexión en OTAA. Tome los parámetros apropiados para completar los siguientes campos en el archivo mbed_app.json: "lora.appskey", "lora.nwkskey", "lora.device-address".

El sensor registrará periódicamente los datos del acelerómetro y GNSS y los enviará a través de la conexión LoRa a la puerta de enlace más cercana, que los reenviará a nuestra aplicación en The Things Network. El siguiente paso es configurar un servidor en la nube y una integración HTTP en TTN.

Paso 3: configurar la nube

Configurar la nube
Configurar la nube

Ahora estamos listos para configurar la infraestructura en la nube que recopilará y agregará los datos de todas las placas implementadas. Esta infraestructura se muestra en la siguiente figura y está compuesta por:

  • Kinesis, para manejar el flujo de datos entrantes;
  • Lambda, para filtrar y preprocesar los datos antes de almacenarlos;
  • S3, para almacenar todos los datos;
  • EC2, para analizar datos y alojar nuestro front-end.

Paso 4: configurar AWS Lambda

Configurar AWS Lambda
Configurar AWS Lambda

Ilustraremos los pasos necesarios para configurar esta infraestructura, comenzando con Lambda.

  1. Inicie sesión con su cuenta de AWS y desde la página principal de la consola y vaya a Lambda
  2. Haga clic en Crear función
  3. En la parte superior de la página se debe seleccionar Autor desde cero. Luego complete los otros campos como en la imagen y luego haga clic en Crear función
  4. Ahora que ha creado una función de AWS Lambda, vaya a https://github.com/roadteam/data-server y copie el contenido del archivo aws_lambda.py en el editor que se encuentra en la segunda mitad de la página. Su función Lambda ya está lista:)

Paso 5: configurar el flujo de datos de AWS Kinesis Firehose

Configurar el flujo de datos de AWS Kinesis Firehose
Configurar el flujo de datos de AWS Kinesis Firehose
  1. Regrese ahora a la página principal de la consola de AWS y, a Servicios, vaya a Kinesis.
  2. Ahora estás en la página principal de Kinesis. A la derecha de la página, en "Flujos de entrega de Kinesis Firehose", seleccione "Crear un flujo de entrega nuevo".
  3. En "Nombre de la transmisión de entrega", escriba "road-monitoring-stream". Deje los otros campos por defecto y haga clic en siguiente
  4. Ahora, en "Transformar registros de origen con AWS Lambda", seleccione Activado y, como función Lambda, haga clic en el "road-monitoring-lambda" recién creado. No se preocupe si aparece una advertencia sobre el tiempo de espera de la función, ya que la operación que estamos haciendo no es computacionalmente costosa. Deje los otros campos por defecto y haga clic en siguiente
  5. Como destino, seleccione Amazon S3 y como destino S3 seleccione Crear nuevo. Como nombre del depósito, ingrese "road-monitoring-bucket" y luego vaya. Ahora deje los otros campos por defecto y haga clic en Siguiente
  6. Es posible que desee establecer el tamaño del búfer en 1 MB y el intervalo del búfer en 60 segundos. El búfer se vaciará a S3 siempre que se cumpla una de las dos condiciones. No abandone la página, consulte el siguiente paso

Paso 6: configurar la función de IAM para Kinesis

Configurar el rol de IAM para Kinesis
Configurar el rol de IAM para Kinesis

Ahora configuramos los permisos de seguridad para Kinesis, ya que debe llamar a la función Lambda para el preprocesamiento y luego escribirá en S3

  1. En la parte inferior de la página en la que se encuentra en "función de IAM", seleccione "Crear nuevo o elija", cree una nueva función de IAM como se muestra en la imagen y haga clic en Permitir.
  2. Ahora ha vuelto a la página anterior, haga clic en siguiente. Ahora es posible que desee volver a verificar todos los parámetros. Cuando termine, haga clic en "Crear flujo de entrega".

¡La canalización Kinesis-Lambda-S3 está en funcionamiento!

Paso 7: configurar AWS EC2

Configurar AWS EC2
Configurar AWS EC2

Ahora configuraremos una instancia EC2 con algunas API que nos permitirán empujar y extraer datos de la nube de AWS y también del servidor donde alojar la interfaz de nuestra aplicación. En el entorno de producción, es posible que desee publicar la API utilizando AWS API Gateway, que es más escalable.

  1. Desde la página principal de la consola de AWS, vaya al servicio EC2
  2. Haga clic en Iniciar instancia
  3. En la barra de búsqueda superior pegue este código: "ami-08935252a36e25f85", que es el código identificativo de la máquina virtual preconfigurada que se utilizará. Haga clic en Seleccionar a la derecha
  4. Seleccione t2.micro en la columna "Tipo" y haga clic en "Revisar e iniciar". No inicie la instancia todavía, vaya al siguiente paso

Paso 8: configurar el rol de seguridad de IAM para EC2

Configurar el rol de seguridad de IAM para EC2
Configurar el rol de seguridad de IAM para EC2
  1. Antes de lanzar queremos modificar el grupo de seguridad de nuestra instancia. Para hacer esto, en el extremo derecho de la sección "Grupos de seguridad", haga clic en "Editar grupos de seguridad". Configure un nuevo grupo de seguridad de la siguiente manera. Básicamente, esto configura el firewall de su instancia exponiendo el puerto 22 para la conexión SSH y el puerto 80 para los servicios
  2. Vuelva a hacer clic en "Revisar y lanzar". Ahora verifique que todos los parámetros estén configurados. Cuando termine, haga clic en Iniciar
  3. Al hacer clic, aparecerá una nueva ventana para configurar un par de claves para la conexión ssh a la instancia. Seleccione "Crear nuevo par de claves" y, como nombre, introduzca "ec2-road-monitoring". Haga clic en Descargar par de claves. Es extremadamente importante que este archivo se pierda o (peor) se almacene de forma insegura: no podrá volver a descargar la clave. Una vez descargada la clave.pem, la instancia está lista para ser lanzada

Paso 9: Acceda a su instancia EC2

Acceda a su instancia EC2
Acceda a su instancia EC2

Su nueva instancia EC2 está en la nube de AWS. Puede conectarse a él con el archivo de clave descargado antes (para este tutorial asumimos que conoce los conceptos básicos de ssh). Puede recuperar la IP de la instancia seleccionándola en el panel de control en la sección "Descripción" de la siguiente manera: Puede usar tanto su IP pública como su DNS público, es lo mismo. Con un cliente ssh ahora ingrese el comando:

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

donde ec2-road-monitoring.pem es su clave generada antes.

Ahora proceda a extraer el código del lado del servidor

git clone --recursive

Paso 10: recuperar la API de Google Maps

Recuperar la API de Google Maps
Recuperar la API de Google Maps

Ya casi hemos terminado. Ahora tenemos que configurar la API de Google Maps en nuestra página html para mostrar el mapa con los puntos de referencia al usuario:

  1. Inicie sesión en su cuenta de Google y vaya a
  2. Haga clic en "Comenzar" a la izquierda de la página.
  3. Seleccione "Mapas" en el menú y luego haga clic en continuar.
  4. Como nombre del proyecto, ingrese "monitoreo de carreteras" y haga clic en Siguiente
  5. Ingrese sus detalles de facturación y haga clic en Continuar
  6. Ahora su proyecto está listo y obtendremos la clave API haciendo clic en API y servicios -> Credenciales

Paso 11: Inicie el servidor

Lanzamiento del servidor
Lanzamiento del servidor

Y ahí está tu clave API. Lo último que tienes que hacer es ir a data_visualization / anomalies_map.html y copiar tu clave al final del archivo así, sustituyendo "YOUR-KEY-HERE"

¡Ahora todo está listo y listo para funcionar! Para que comience a ejecutarse en la instancia EC2: "cd data-server" "python flask_app.py"

Ingrese en su navegador la dirección ip o dns de su instancia EC2, debería ver el mapa de anomalías con algunos datos ficticios

Paso 12: Realice la integración HTTP en la red de Things

Realice la integración HTTP en la red de Things
Realice la integración HTTP en la red de Things

Ahora que tenemos toda la infraestructura de backend en funcionamiento, podemos procesar para realizar la integración

  1. Cree una nueva aplicación y registre su dispositivo. Asumimos conocimientos básicos de TTN, si no, consulte la guía de inicio rápido
  2. En el menú de su aplicación, seleccione "Integraciones" y luego "agregar integración"
  3. Seleccione la integración
  4. Ingrese los campos que siguen a la imagen y reemplácelos con su IP de EC2 o DNS público

Paso 13: procesamiento de datos

Para cada tupla de datos T recopilados del sensor, debe realizar los siguientes pasos:

  1. Obtenga el conjunto de tuplas que tienen coordenadas GPS que caen en el área local de T. El área local son todas las tuplas que están a 100 metros alrededor de T.
  2. Para cada tupla N más cercana, calcule la media cuadrada del eje Z del acelerómetro en N. En pseudocódigo: mean = sum ([x. Z_accel ** 2 for x in near]) / near.size
  3. Calcule la desviación estándar al cuadrado. En pseudocódigo: std = sum ([(x. Z_accel ** 2 - mean) ** 2 for x in near])
  4. Salida en este formato: lat, long, Z_accel ** 2, mean, std

Para calcular el área local, use la distancia GPS en metros. En C ++:

#define D2R (M_PI / 180.0)

#define EARTH_RAY 6371 doble distancia (doble lat1, doble long1, doble lat2, doble long2) {double dlong = (long2 - long1) * 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 (raíz cuadrada (a), raíz cuadrada (1-a));

Ahora, usando los datos intermedios generados en el paso anterior, detecta las anomalías y haz una clasificación ingenua usando este recorte aplicado a cada línea:

línea = mapa (float, line.split (","))

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

Las anomalías se clasifican utilizando la regla 68–95–99.7

Ahora tienes una colección con este formato [tipo, lat, largo].

El significado del tipo es el siguiente:

  1. Ligera anomalía, probablemente irrelevante
  2. Anomalía media
  3. Anomalía crítica

Paso 14: Visualización

Visualización
Visualización

Para comprender y tal vez cambiar la parte de visualización, debemos aprender a usar marcadores personalizados, una función de la API de Google Maps

En primer lugar, el mapa debe iniciarse en una devolución de llamada:

function initMap () {

datos = queryData (); map = new google.maps. Map (document.getElementById ('map'), {zoom: 15, center: {lat: data [0] [1], lng: data [0] [2]}}); observación(); }

Especifique el nombre de esta devolución de llamada en la URL (que insertamos aquí antes de nuestra clave API) en una etiqueta HTML:

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

Se puede insertar un marcador en el mapa cuando se crea el objeto:

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

Puede ver en el código que para cada dato en el conjunto de datos de las anomalías se inserta un marcador (ver la función comentario ()) y el icono se basa en la clase de la anomalía. Al ejecutar esto en el navegador, podemos explorar un mapa en el que se pueden filtrar las anomalías usando casillas de verificación, como se ve en la imagen.

Paso 15: Créditos y enlaces externos

Este proyecto fue realizado por Giovanni De Luca, Andrea Fioraldi y Pietro Spadaccino, estudiantes de primer año de Maestría en Ingeniería en Ciencias de la Computación en la Universidad Sapienza de Roma.

  • Diapositivas que los autores utilizaron para presentar esta prueba de concepto:

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

  • Repositorios de GitHub con todo el código:

    github.com/roadteam

Recomendado: