Talaan ng mga Nilalaman:

Pagsubaybay sa Daan: 15 Hakbang
Pagsubaybay sa Daan: 15 Hakbang

Video: Pagsubaybay sa Daan: 15 Hakbang

Video: Pagsubaybay sa Daan: 15 Hakbang
Video: Himno #15 “KUNG SA KABUHAYA’Y NAGIGIYAGIS” (piano cover) 2024, Hulyo
Anonim
Pagsubaybay sa Daan
Pagsubaybay sa Daan

Ipapakita namin sa iyo ngayon kung paano kami nag-set up ng isang sistema ng pagsubaybay sa mga anomalya sa kalsada batay sa mga accelerometers, LoRaWAN, Amazon Web Services at Google Cloud API.

Hakbang 1: Mga Kinakailangan

  • DISCO-L072CZ-LRWAN1 board
  • X-NUCLEO-IKS01A2 module ng pagpapalawak (para sa accellerometer)
  • X-NUCLEO-GNSS1A1 (para sa lokalisasyon)
  • Isang AWS account
  • Isang Google Cloud Platform account

Hakbang 2: Pagbuo at Pag-flashing ng Firmware ng Sensor

Ikonekta ang IKS01A2 at GNSS1A1 sa tuktok ng board sa pamamagitan ng mga GPIO pin. I-download ang code ng firmware mula sa GitHub. Lumikha (kung wala ka pa) isang account sa ARM Mbed at i-import ang code sa repo sa online compiler. Itakda ang target na platform sa DISCO-L072CZ-LRWAN1 at i-save ang proyekto. Tumungo ngayon sa The Things Network at lumikha ng isang account kung wala mo ito. Lumikha ng isang application, lumikha ng isang bagong aparato sa loob ng application at itakda ang mode ng koneksyon sa OTAA. Grab ang naaangkop na mga parameter upang punan ang mga sumusunod na patlang sa mbed_app.json file: "lora.appskey", "lora.nwkskey", "lora.device-address".

Pana-record ng sensor nang pansamantala ang data ng accelerometer at GNSS at ipadala ang mga ito sa pamamagitan ng koneksyon ng LoRa sa pinakamalapit na gateway, na ipapasa ang mga ito sa aming application sa The Things Network. Ang susunod na hakbang ay upang mag-set up ng isang cloud server, at isang pagsasama sa HTTP sa TTN.

Hakbang 3: Pag-set up ng Cloud

Pag-set up ng Cloud
Pag-set up ng Cloud

Handa na kami ngayon upang i-set up ang ulap na imprastraktura na mangolekta at pagsasama-sama ng data mula sa lahat ng mga naka-deploy na board. Ang imprastrakturang ito ay ipinapakita sa pigura sa ibaba at ito ay binubuo ng:

  • Kinesis, upang hawakan ang papasok na data stream;
  • Lambda, upang salain at preprocess ang data bago itago ito;
  • S3, upang maiimbak ang lahat ng data;
  • EC2, upang pag-aralan ang data at i-host ang aming front-end.

Hakbang 4: I-set up ang AWS Lambda

I-set up ang AWS Lambda
I-set up ang AWS Lambda

Ilalarawan namin ang mga hakbang na kinakailangan upang mai-set up ang imprastrakturang ito, na nagsisimula sa Lambda.

  1. Mag-login gamit ang iyong AWS account, at mula sa pangunahing pahina ng console at pumunta sa Lambda
  2. Mag-click sa Lumikha ng Pag-andar
  3. Sa itaas na bahagi ng pahina dapat itong mapili May-akda mula sa Scratch. Pagkatapos ay kumpletuhin ang iba pang mga patlang tulad ng sa larawan at pagkatapos ay i-click ang Lumikha ng Pag-andar
  4. Ngayon na nakalikha ka ng isang pagpapaandar sa AWS Lambda, pumunta sa https://github.com/roadteam/data-server at kopyahin ang nilalaman ng aws_lambda.py file sa editor na mahahanap mo ang ikalawang kalahati ng pahina. Ang iyong pag-andar ng Lambda ay handa na:)

Hakbang 5: I-set up ang AWS Kinesis Firehose Data Stream

I-set up ang AWS Kinesis Firehose Data Stream
I-set up ang AWS Kinesis Firehose Data Stream
  1. Bumalik ngayon sa pangunahing pahina ng AWS console, at sa Mga Serbisyo pumunta sa Kinesis
  2. Ngayon ay nasa pangunahing pahina ka ng Kinesis. Sa kanan ng pahina, sa ilalim ng 'Kinesis Firehose delivery stream', piliin ang 'Lumikha ng bagong stream ng paghahatid'
  3. Sa 'Pangalan ng stream ng paghahatid' isulat ang 'road-monitoring-stream'. Iwanan ang iba pang mga patlang upang mag-default at mag-click sa susunod
  4. Sa ilalim ngayon ng 'Pagbabago ng mga record ng mapagkukunan gamit ang AWS Lambda' piliin ang Pinagana, at bilang pag-andar ng Lambda mag-click sa bagong nilikha na 'road-monitoring-lambda'. Huwag mag-alala kung ang isang babala tungkol sa pag-andar ng timeout ay nag-pop up, dahil ang pagpapatakbo na ginagawa namin ay hindi computationally mahal. Iwanan ang iba pang mga patlang upang mag-default at mag-click sa susunod
  5. Bilang patutunguhan piliin ang Amazon S3, at bilang patutunguhan ng S3 piliin ang Lumikha ng Bago. Tulad ng pangalan ng bucket ipasok ang 'road-monitoring-bucket' at pagkatapos ay pumunta. Iwanan ngayon ang iba pang mga patlang upang mag-default at i-click ang Susunod
  6. Maaaring gusto mong itakda ang laki ng Buffer sa 1MB at agwat ng Buffer sa 60 segundo. Ang buffer ay ipapamula sa S3 tuwing ang isa sa dalawang kundisyon ay nasiyahan. Huwag iwanan ang pahina, tingnan ang susunod na hakbang

Hakbang 6: I-set up ang IAM Role para sa Kinesis

I-set up ang IAM Role para sa Kinesis
I-set up ang IAM Role para sa Kinesis

Ngayon ay na-set up namin ang mga pahintulot sa seguridad para sa Kinesis, dahil dapat itong tumawag sa pagpapaandar ng Lambda para sa preprocessing at pagkatapos ay magsusulat ito sa S3

  1. Sa ilalim ng pahina na ikaw ay nasa 'papel na IAM' piliin ang 'Lumikha ng bago ng pumili', lumikha ng isang bagong papel na IAM tulad ng sa larawan at i-click ang Payagan
  2. Ngayon ay bumalik ka sa nakaraang pahina, mag-click sa susunod. Ngayon baka gusto mong i-double check ang lahat ng mga parameter. Kapag tapos na mag-click sa 'Lumikha ng Pag-stream ng Paghatid'

Tumatakbo na ang pipines ng Kinesis-Lambda-S3!

Hakbang 7: I-set up ang AWS EC2

I-set up ang AWS EC2
I-set up ang AWS EC2

Ngayon ay magse-set up kami ng isang halimbawa ng EC2 na may ilang mga API na magpapahintulot sa amin na itulak at hilahin ang data mula sa cloud ng AWS at pati na rin ang server kung saan i-host ang aming application na frontend. Sa kapaligiran sa produksyon, baka gusto mong i-publish ang API gamit ang mas nasusukat na AWS API Gateway.

  1. Mula sa pangunahing pahina ng AWS console, pumunta sa serbisyo ng EC2
  2. Mag-click sa Instance ng Paglunsad
  3. Sa itaas na bar ng paghahanap i-paste ang code na ito: 'ami-08935252a36e25f85', iyon ang magkatulad na code ng na-configure na virtual machine na gagamitin. I-click ang Piliin sa kanan
  4. Piliin ang t2.micro mula sa hanay na 'Uri' at i-click ang 'Suriin at ilunsad'. Huwag ilunsad ang halimbawa, pumunta sa susunod na hakbang

Hakbang 8: I-set up ang IAM Security Role para sa EC2

I-set up ang IAM Security Role para sa EC2
I-set up ang IAM Security Role para sa EC2
  1. Bago ilunsad nais naming baguhin ang pangkat ng seguridad ng aming halimbawa. Upang magawa ito, sa dulong kanan ng seksyon na 'Mga Pangkat ng Seguridad' i-click ang 'I-edit ang mga pangkat ng seguridad' Mag-set up ng isang bagong pangkat ng seguridad tulad ng sumusunod. Karaniwang ini-configure nito ang firewall ng iyong halimbawa na inilalantad ang port 22 para sa koneksyon ng SSH at port 80 para sa mga serbisyong
  2. I-click muli ang 'Suriin at Ilunsad'. Ngayon suriin na ang lahat ng mga parameter ay nakatakda. Kapag tapos na i-click ang Ilunsad
  3. Sa pag-click ang isang bagong window ay pop up upang mag-set up ng isang pangunahing pares para sa koneksyon ssh sa halimbawa. Piliin ang 'Lumikha ng bagong key pares' at bilang pangalan ipasok ang 'ec2-road-monitoring'. I-click ang I-download ang pares ng key. Napakahalaga na ang file na ito ay mawala o (mas masahol pa) ay hindi ligtas na nakaimbak: hindi mo ma-download muli ang susi. Kapag na-download ang.pem key ang halimbawa ay handa nang ilunsad

Hakbang 9: I-access ang iyong EC2 Instance

I-access ang iyong EC2 Instance
I-access ang iyong EC2 Instance

Ang iyong sariwang halimbawa ng EC2 ay nasa AWS cloud. Maaari kang kumonekta dito gamit ang key file na na-download bago (para sa tutorial na ito ipinapalagay namin na alam mo ang mga pangunahing kaalaman sa ssh). Maaari mong makuha ang IP ng halimbawa sa pamamagitan ng pagpili nito sa dashboard sa seksyong 'Paglalarawan' tulad ng sumusunod: Maaari mong gamitin ang pareho ng iyong pampublikong IP o ang iyong pampublikong DNS pareho ito. Gamit ang isang ssh client ngayon ipasok ang utos:

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

kung saan ang ec2-road-monitoring.pem ang iyong susi na nabuo dati.

Ngayon magpatuloy upang hilahin ang server-side code

git clone --recursive

Hakbang 10: Kunin ang Google Maps API

Kunin ang Google Maps API
Kunin ang Google Maps API

Halos tapos na tayo. Ngayon kailangan naming i-set up ang google maps API sa aming pahina ng html upang maipakita ang mapa kasama ang mga pointpoint sa gumagamit:

  1. Mag-login sa iyong Google account at pumunta sa
  2. Mag-click upang 'Magsimula' sa kaliwa ng pahina
  3. Piliin ang 'Mga Mapa' sa menu at pagkatapos ay i-click ang magpatuloy
  4. Tulad ng pangalan ng proyekto ipasok ang 'pagsubaybay sa kalsada' at i-click ang Susunod
  5. Ipasok ang iyong mga detalye sa pagsingil at i-click ang Magpatuloy
  6. Ngayon handa na ang iyong proyekto at kukuha kami ng susi ng API sa pamamagitan ng pag-click sa mga API at Serbisyo -> Mga Kredensyal

Hakbang 11: Ilunsad ang Server

Ilunsad ang Server
Ilunsad ang Server

At narito ang iyong API key. Ang huling bagay na kailangan mong gawin ay pumunta sa data_visualization / anomalies_map.html at kopyahin ang iyong susi sa dulo ng file tulad nito, palitan ang 'IYONG-KEY-DITO'

Ngayon ang lahat ay naka-set at handa nang umalis! Upang masimulan itong isagawa sa halimbawa ng EC2: 'cd data-server' 'python flask_app.py'

Ipasok sa iyong browser ang ip o dns address ng iyong halimbawa ng EC2, dapat mong makita ang mga anomalya na mapa na may ilang dummy data

Hakbang 12: Magsagawa ng Pagsasama ng HTTP sa Network ng Mga bagay

Magsagawa ng Pagsasama ng HTTP sa Network ng Mga bagay
Magsagawa ng Pagsasama ng HTTP sa Network ng Mga bagay

Ngayong mayroon na tayong lahat ng backend na imprastraktura na tumatakbo at tumatakbo maaari naming iproseso upang maisagawa ang pagsasama-sama ng

  1. Lumikha ng isang bagong application at irehistro ang iyong aparato. Ipinapalagay namin ang pangunahing kaalaman sa TTN, kung hindi sumangguni sa mabilis na gabay sa pagsisimula
  2. Sa iyong menu ng aplikasyon piliin ang 'Mga Pagsasama' at pagkatapos ay 'idagdag ang pagsasama'
  3. Piliin ang pagsasama sa
  4. Ipasok ang mga patlang na sumusunod sa imahe at palitan ng iyong EC2 ip o pampublikong DNS

Hakbang 13: Pagpoproseso ng Data

Para sa bawat tuple ng data na nakolekta mula sa sensor dapat mong gawin ang mga sumusunod na hakbang:

  1. Kunin ang hanay ng mga tuple na may mga coordinate ng GPS na bumabagsak sa lokal na lugar ng T. Ang lokal na lugar ay ang lahat ng mga tuple na 100 metro sa paligid ng T.
  2. Para sa bawat pinakamalapit na tuple N ipunan ang square mean ng accelerometer Z-axis sa N. Sa pseudocode: mean = sum ([x. Z_accel ** 2 para x sa malapit]) / malapit.size
  3. Kalkulahin ang parisukat na karaniwang paglihis. Sa pseudocode: std = sum ([(x. Z_accel ** 2 - ibig sabihin) ** 2 para sa x sa malapit])
  4. Output sa format na ito: lat, haba, Z_accel ** 2, ibig sabihin, std

Upang makalkula ang lokal na lugar gamitin ang distansya ng GPS sa metro. Sa C ++:

# tukuyin ang D2R (M_PI / 180.0)

#define EARTH_RAY 6371 doble ang distansya (dobleng lat1, dobleng long1, dobleng lat2, doble haba2) {doble dlong = (long2 - long1) * D2R; dobleng 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));

Ngayon, gamit ang intermediate data na nabuo sa nakaraang hakbang, tuklasin ang mga anomalya at gumawa ng isang walang muwang na pag-uuri gamit ang snipped na inilapat sa bawat linya:

linya = mapa (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, linya [0], linya [1]) iba pa: o.append ([2, linya [0], linya [1]) iba pa: o.append ([3, linya [0], linya [1])

Ang mga anomalya ay nauuri gamit ang panuntunang 68–95–99.7 https://en.wikipedia.org/wiki/68%E2%80%9395 %E2%80…

Ngayon mayroon kang isang koleksyon kasama ang format na ito [uri, lat, haba].

Ang uri ng kahulugan ay ang mga sumusunod:

  1. Bahagyang anomalya, marahil ay hindi nauugnay
  2. Katamtamang anomalya
  3. Kritikal na anomalya

Hakbang 14: Pagpapakita

Pagpapakita
Pagpapakita

Upang maunawaan at maaaring baguhin ang bahagi ng visualization dapat nating malaman kung paano gamitin ang mga pasadyang marker, isang tampok ng Google Maps API

Una, ang mapa ay dapat na initilizated sa isang callback:

pagpapaandar initMap () {

data = queryData (); mapa = bagong google.maps. Map (document.getElementById ('mapa'), {zoom: 15, center: {lat: data [0] [1], lng: data [0] [2]}}); pangungusap (); }

Tukuyin ang pangalan ng callback na ito sa url (ipinasok namin dito bago ang aming key ng API) sa isang HTML tag:

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

Ang isang marker ay maaaring ipasok sa mapa kapag ang bagay ay nilikha:

bagong google.maps. Marker ({posisyon: {lat: LATITUDE, lng: LONGITUDE}, mapa: mapa, icon: "/path/to/icon.png"})

Maaari mong makita sa code na para sa bawat data sa dataset ng mga anomalya isang marker ang naipasok (tingnan ang pagpapaandar ng ()) at ang icon ay batay sa klase ng anomalya. Kapag pinatakbo ito sa browser maaari naming galugarin ang isang mapa kung saan maaaring i-filter ang mga anomalya gamit ang mga checkbox, tulad ng nakikita sa larawan.

Hakbang 15: Mga Kredito at Panlabas na Link

Ang proyektong ito ay ginawa nina Giovanni De Luca, Andrea Fioraldi at Pietro Spadaccino, unang taong MSc sa Engineering sa mga mag-aaral ng Computer Science sa Sapienza University of Rome.

  • Ang mga slide ay ginamit ng mga may-akda upang ipakita ang katibayan ng konsepto na ito:

    www.sl Browseare.net/PietroSpadaccino/road-m…

  • Ang mga reposito ng GitHub kasama ang lahat ng code:

    github.com/roadteam

Inirerekumendang: