Πίνακας περιεχομένων:

Παρακολούθηση Δρόμου: 15 Βήματα
Παρακολούθηση Δρόμου: 15 Βήματα

Βίντεο: Παρακολούθηση Δρόμου: 15 Βήματα

Βίντεο: Παρακολούθηση Δρόμου: 15 Βήματα
Βίντεο: 15 Βήματα για να ανοίξεις ένα blog που βγάζει χρήματα (2023) 2024, Ιούλιος
Anonim
Παρακολούθηση δρόμου
Παρακολούθηση δρόμου

Σήμερα θα σας δείξουμε πώς δημιουργούμε ένα σύστημα παρακολούθησης ανωμαλιών δρόμου βασισμένο σε επιταχυνσιόμετρα, LoRaWAN, Amazon Web Services και Google Cloud API.

Βήμα 1: Απαιτήσεις

  • Πλακέτα DISCO-L072CZ-LRWAN1
  • Μονάδα επέκτασης X-NUCLEO-IKS01A2 (για το επιταχυνσιόμετρο)
  • X-NUCLEO-GNSS1A1 (για τον εντοπισμό)
  • Ένας λογαριασμός AWS
  • Λογαριασμός Google Cloud Platform

Βήμα 2: Δημιουργία και αναβοσβήνει το υλικολογισμικό του αισθητήρα

Συνδέστε τα IKS01A2 και GNSS1A1 στο πάνω μέρος της πλακέτας μέσω των ακίδων GPIO. Κατεβάστε τον κώδικα του υλικολογισμικού από το GitHub. Δημιουργήστε (αν δεν έχετε ήδη) έναν λογαριασμό στο ARM Mbed και εισαγάγετε τον κωδικό στο repo στον διαδικτυακό μεταγλωττιστή. Ορίστε την πλατφόρμα-στόχο στο DISCO-L072CZ-LRWAN1 και αποθηκεύστε το έργο. Τώρα κατευθυνθείτε στο The Things Network και δημιουργήστε έναν λογαριασμό αν δεν τον έχετε ήδη. Δημιουργήστε μια εφαρμογή, δημιουργήστε μια νέα συσκευή μέσα στην εφαρμογή και ορίστε τη λειτουργία σύνδεσης σε OTAA. Πιάστε τις κατάλληλες παραμέτρους για να συμπληρώσετε τα ακόλουθα πεδία στο αρχείο mbed_app.json: "lora.appskey", "lora.nwkskey", "lora.device-address".

Ο αισθητήρας θα καταγράφει περιοδικά δεδομένα επιταχυνσιόμετρου και GNSS και θα τα στέλνει μέσω της σύνδεσης LoRa στην πλησιέστερη πύλη, η οποία θα τα προωθήσει στην εφαρμογή μας στο The Things Network. Το επόμενο βήμα είναι να ρυθμίσετε έναν διακομιστή cloud και μια ενσωμάτωση HTTP στο TTN.

Βήμα 3: Ρύθμιση του σύννεφου

Ρύθμιση του σύννεφου
Ρύθμιση του σύννεφου

Τώρα είμαστε έτοιμοι να δημιουργήσουμε την υποδομή cloud που θα συλλέγει και θα συγκεντρώνει τα δεδομένα από όλους τους ανεπτυγμένους πίνακες. Αυτή η υποδομή φαίνεται στο παρακάτω σχήμα και αποτελείται από:

  • Kinesis, για τη διαχείριση της εισερχόμενης ροής δεδομένων.
  • Lambda, για να φιλτράρετε και να επεξεργαστείτε τα δεδομένα πριν τα αποθηκεύσετε.
  • S3, για να αποθηκεύσετε όλα τα δεδομένα.
  • EC2, για την ανάλυση δεδομένων και τη φιλοξενία του front-end μας.

Βήμα 4: Ρύθμιση του AWS Lambda

Ρύθμιση AWS Lambda
Ρύθμιση AWS Lambda

Θα παρουσιάσουμε τα απαραίτητα βήματα για τη δημιουργία αυτής της υποδομής, ξεκινώντας από τη Λάμδα.

  1. Συνδεθείτε με τον λογαριασμό σας AWS και από την κύρια σελίδα της κονσόλας και μεταβείτε στη Λάμδα
  2. Κάντε κλικ στο Δημιουργία συνάρτησης
  3. Στο επάνω μέρος της σελίδας θα πρέπει να επιλεγεί Συγγραφέας από το Scratch. Στη συνέχεια, συμπληρώστε τα άλλα πεδία όπως στην εικόνα και, στη συνέχεια, κάντε κλικ στην επιλογή Δημιουργία συνάρτησης
  4. Τώρα που δημιουργήσατε μια συνάρτηση AWS Lambda, μεταβείτε στη διεύθυνση https://github.com/roadteam/data-server και αντιγράψτε το περιεχόμενο του αρχείου aws_lambda.py στον επεξεργαστή που βρίσκετε στο δεύτερο μισό της σελίδας. Η λειτουργία Λάμδα είναι τώρα έτοιμη:)

Βήμα 5: Ρύθμιση ροής δεδομένων AWS Kinesis Firehose

Ρύθμιση ροής δεδομένων AWS Kinesis Firehose
Ρύθμιση ροής δεδομένων AWS Kinesis Firehose
  1. Επιστρέψτε τώρα στην κύρια σελίδα της κονσόλας AWS και μεταβείτε στις Υπηρεσίες στο Kinesis
  2. Τώρα βρίσκεστε στην κεντρική σελίδα του Kinesis. Στα δεξιά της σελίδας, στην ενότητα «Ροές παράδοσης Kinesis Firehose», επιλέξτε «Δημιουργία νέας ροής παράδοσης»
  3. Στο «Όνομα ροής παράδοσης» γράψτε «ροή παρακολούθησης-ροής». Αφήστε τα άλλα πεδία στην προεπιλογή και κάντε κλικ στο επόμενο
  4. Τώρα, στην ενότητα "Μετασχηματισμός εγγραφών πηγής με AWS Lambda", επιλέξτε Enabled (Ενεργοποίηση) και, ως λειτουργία Lambda, κάντε κλικ στο νεοδημιουργημένο "road-monitoring-lambda". Μην ανησυχείτε εάν εμφανιστεί μια προειδοποίηση σχετικά με το χρονικό όριο λειτουργίας, καθώς η λειτουργία που κάνουμε δεν είναι υπολογιστικά δαπανηρή. Αφήστε τα άλλα πεδία στην προεπιλογή και κάντε κλικ στο επόμενο
  5. Ως προορισμός επιλέξτε Amazon S3 και ως προορισμό S3 επιλέξτε Δημιουργία νέου. Ως όνομα κάδου εισάγετε το "road-monitoring-bucket" και μετά πηγαίνετε. Τώρα αφήστε τα άλλα πεδία στην προεπιλογή και κάντε κλικ στο Επόμενο
  6. Μπορεί να θέλετε να ορίσετε το μέγεθος Buffer σε 1MB και το διάστημα Buffer στα 60 δευτερόλεπτα. Το buffer θα ξεπλυθεί στο S3 όποτε πληρούται μία από τις δύο προϋποθέσεις. Μην φύγετε από τη σελίδα, δείτε το επόμενο βήμα

Βήμα 6: Ρύθμιση του ρόλου IAM για το Kinesis

Ρύθμιση του ρόλου IAM για το Kinesis
Ρύθμιση του ρόλου IAM για το Kinesis

Τώρα ρυθμίζουμε τα δικαιώματα ασφαλείας για το Kinesis, αφού πρέπει να καλέσει τη λειτουργία Lambda για προεπεξεργασία και στη συνέχεια θα γράψει στο S3

  1. Στο κάτω μέρος της σελίδας που βρίσκεστε σε «ρόλο IAM» επιλέξτε «Δημιουργία νέας επιλογής», δημιουργήστε έναν νέο ρόλο IAM όπως στην εικόνα και κάντε κλικ στο Allow
  2. Τώρα επιστρέφετε στην προηγούμενη σελίδα, κάντε κλικ στο επόμενο. Τώρα μπορεί να θέλετε να ελέγξετε ξανά όλες τις παραμέτρους. Όταν τελειώσετε, κάντε κλικ στο «Δημιουργία ροής παράδοσης»

Ο αγωγός Kinesis-Lambda-S3 είναι σε λειτουργία!

Βήμα 7: Ρύθμιση του AWS EC2

Ρύθμιση AWS EC2
Ρύθμιση AWS EC2

Τώρα θα δημιουργήσουμε ένα παράδειγμα EC2 με ορισμένα API που θα μας επιτρέψουν να πιέσουμε και να τραβήξουμε δεδομένα από το σύννεφο AWS και επίσης τον διακομιστή που θα φιλοξενήσει το frontend της εφαρμογής μας. Σε περιβάλλον παραγωγής, μπορεί να θέλετε να δημοσιεύσετε API χρησιμοποιώντας το πιο κλιμακούμενο AWS API Gateway.

  1. Από την κύρια σελίδα της κονσόλας AWS, μεταβείτε στην υπηρεσία EC2
  2. Κάντε κλικ στο Launch Instance
  3. Στην επάνω γραμμή αναζήτησης επικολλήστε αυτόν τον κωδικό: ‘ami-08935252a36e25f85’, αυτός είναι ο κωδικός αναγνώρισης της προκαθορισμένης εικονικής μηχανής για χρήση. Κάντε κλικ στην επιλογή Επιλογή στα δεξιά
  4. Επιλέξτε t2.micro από τη στήλη "Τύπος" και κάντε κλικ στην επιλογή "Έλεγχος και εκκίνηση". Μην ξεκινήσετε ακόμα την παρουσία, προχωρήστε στο επόμενο βήμα

Βήμα 8: Ρύθμιση του ρόλου ασφαλείας IAM για το EC2

Ρύθμιση του ρόλου ασφαλείας IAM για το EC2
Ρύθμιση του ρόλου ασφαλείας IAM για το EC2
  1. Πριν ξεκινήσουμε, θέλουμε να τροποποιήσουμε την ομάδα ασφαλείας της παρουσίας μας. Για να το κάνετε αυτό, στην άκρη δεξιά της ενότητας "Ομάδες ασφαλείας" κάντε κλικ στην επιλογή "Επεξεργασία ομάδων ασφαλείας" Δημιουργήστε μια νέα ομάδα ασφαλείας ως εξής. Αυτό βασικά ρυθμίζει το τείχος προστασίας της παρουσίας σας που εκθέτει τη θύρα 22 για σύνδεση SSH και τη θύρα 80 για τις υπηρεσίες
  2. Κάντε ξανά κλικ στην επιλογή "Επανεξέταση και εκκίνηση". Τώρα ελέγξτε ότι έχουν οριστεί όλες οι παράμετροι. Όταν τελειώσετε κάντε κλικ στο κουμπί Εκκίνηση
  3. Με κλικ, θα εμφανιστεί ένα νέο παράθυρο για να ρυθμίσετε ένα ζεύγος κλειδιών για σύνδεση ssh με την παρουσία. Επιλέξτε «Δημιουργία νέου ζεύγους κλειδιών» και ως όνομα πληκτρολογήστε «ec2-road-monitoring». Κάντε κλικ στην επιλογή Λήψη ζεύγους κλειδιών. Είναι εξαιρετικά σημαντικό αυτό το αρχείο να χαθεί ή (χειρότερα) να αποθηκευτεί με ασφάλεια: δεν θα μπορείτε να κατεβάσετε ξανά το κλειδί. Μετά τη λήψη του κλειδιού.pem η παρουσία είναι έτοιμη για εκκίνηση

Βήμα 9: Πρόσβαση στην παρουσία σας EC2

Πρόσβαση στην παρουσία σας EC2
Πρόσβαση στην παρουσία σας EC2

Η νέα σας παρουσίαση EC2 εμφανίζεται στο σύννεφο AWS. Μπορείτε να συνδεθείτε με το αρχείο κλειδιού που έχετε κατεβάσει πριν (για αυτό το σεμινάριο υποθέτουμε ότι γνωρίζετε τα βασικά του ssh). Μπορείτε να ανακτήσετε την IP της παρουσίας επιλέγοντάς την στον πίνακα ελέγχου στην ενότητα "Περιγραφή" ως εξής: Μπορείτε να χρησιμοποιήσετε τόσο τη δημόσια IP όσο και το δημόσιο DNS σας είναι το ίδιο. Με έναν πελάτη ssh τώρα εισάγετε την εντολή:

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

όπου το ec2-road-monitoring.pem είναι το κλειδί σας που δημιουργήθηκε πριν.

Τώρα συνεχίστε να τραβάτε τον κωδικό από την πλευρά του διακομιστή

git clone --recursive

Βήμα 10: Ανάκτηση API Χαρτών Google

Ανάκτηση API Χαρτών Google
Ανάκτηση API Χαρτών Google

Σχεδόν τελειώσαμε. Τώρα πρέπει να ρυθμίσουμε το API των χαρτών google στη σελίδα html για να εμφανιστεί ο χάρτης με τα σημεία πορείας στον χρήστη:

  1. Συνδεθείτε στον Λογαριασμό σας Google και μεταβείτε στη διεύθυνση
  2. Κάντε κλικ στο «Ξεκινήστε» στα αριστερά της σελίδας
  3. Επιλέξτε "Χάρτες" στο μενού και, στη συνέχεια, κάντε κλικ στο κουμπί Συνέχεια
  4. Ως όνομα έργου, πληκτρολογήστε «παρακολούθηση δρόμου» και κάντε κλικ στο Επόμενο
  5. Εισαγάγετε τα στοιχεία χρέωσής σας και κάντε κλικ στο κουμπί Συνέχεια
  6. Τώρα το έργο σας είναι έτοιμο και θα λάβουμε το κλειδί API κάνοντας κλικ στα API και υπηρεσίες -> Διαπιστευτήρια

Βήμα 11: Εκκίνηση διακομιστή

Εκκίνηση διακομιστή
Εκκίνηση διακομιστή

Και εκεί είναι το κλειδί API. Το τελευταίο πράγμα που πρέπει να κάνετε είναι να μεταβείτε στο data_visualization/anomalies_map.html και να αντιγράψετε το κλειδί σας στο τέλος του αρχείου, αντικαθιστώντας το «YOUR-KEY-HERE»

Τώρα όλα είναι έτοιμα και έτοιμα! Για να ξεκινήσει να εκτελείται στην παρουσίαση EC2: ‘cd data-server’ ‘python flask_app.py’

Εισαγάγετε στο πρόγραμμα περιήγησής σας τη διεύθυνση ip ή dns της παρουσίας σας EC2, θα πρέπει να δείτε τον χάρτη των ανωμαλιών με μερικά εικονικά δεδομένα

Βήμα 12: Εκτελέστε ενσωμάτωση HTTP στο Things Network

Εκτελέστε ενσωμάτωση HTTP στο Things Network
Εκτελέστε ενσωμάτωση HTTP στο Things Network

Τώρα που έχουμε όλη την υποδομή backend σε λειτουργία, μπορούμε να επεξεργαστούμε για να πραγματοποιήσουμε την ενσωμάτωση

  1. Δημιουργήστε μια νέα εφαρμογή και καταχωρήστε τη συσκευή σας. Υποθέτουμε βασικές γνώσεις TTN, αν όχι ανατρέξτε στον οδηγό γρήγορης εκκίνησης
  2. Στο μενού της εφαρμογής σας επιλέξτε «Ενσωματώσεις» και μετά «προσθήκη ενσωμάτωσης»
  3. Επιλέξτε ενσωμάτωση
  4. Εισαγάγετε τα πεδία που ακολουθούν την εικόνα και αντικαθιστάτε με το EC2 ip ή το δημόσιο DNS

Βήμα 13: Επεξεργασία δεδομένων

Για κάθε πλειάδα δεδομένων T που συλλέγονται από τον αισθητήρα πρέπει να εκτελέσετε τα ακόλουθα βήματα:

  1. Αποκτήστε το σύνολο των πλειάδων που έχουν συντεταγμένες GPS που πέφτουν στην περιοχή του Τ. Η τοπική περιοχή είναι όλες οι πλειάδες που βρίσκονται 100 μέτρα γύρω από το Τ.
  2. Για κάθε πλησιέστερη πλειάδα Ν υπολογίστε την τετραγωνική μέση τιμή του άξονα Z του επιταχυνσιόμετρου στο Ν. Σε ψευδοκώδικα: μέσο = άθροισμα ([x. Z_accel ** 2 για x σε κοντινό]) / κοντά στο μέγεθος
  3. Υπολογίστε την τετραγωνική τυπική απόκλιση. Σε ψευδοκώδικα: std = άθροισμα ([(x. Z_accel ** 2 - μέσο) ** 2 για x σε κοντινή απόσταση])
  4. Έξοδος σε αυτήν τη μορφή: lat, long, Z_accel ** 2, mean, std

Για να υπολογίσετε την τοπική περιοχή, χρησιμοποιήστε την απόσταση GPS σε μέτρα. Σε C ++:

#define D2R (M_PI / 180.0)

#define EARTH_RAY 6371 διπλή απόσταση (διπλό lat1, διπλό long1, διπλό lat2, διπλό long2) {διπλό dlong = (long2 - long1) * D2R; διπλό dlat = (lat2 - lat1) * D2R; διπλό a = pow (sin (dlat/2.0), 2) + cos (lat1 * D2R) * cos (lat2 * D2R) * pow (sin (dlong/2.0), 2); διπλό c = 2 * atan2 (sqrt (a), sqrt (1-a));

Τώρα, χρησιμοποιώντας τα ενδιάμεσα δεδομένα που δημιουργήθηκαν στο προηγούμενο βήμα, εντοπίστε τις ανωμαλίες και κάντε μια αφελή ταξινόμηση χρησιμοποιώντας αυτό το απόσπασμα που εφαρμόζεται σε κάθε γραμμή:

γραμμή = χάρτης (float, line.split (","))

v = γραμμή [2] μέση = γραμμή [3] std = γραμμή [4] εάν v (μέση τιμή + std*3): εάν v (μέσος όρος + std*2): εάν v (μέσος όρος + std): o.append ([1, γραμμή [0], γραμμή [1]) άλλο: o.append ([2, line [0], line [1]) else: o.append ([3, line [0], line [1])

Οι ανωμαλίες ταξινομούνται χρησιμοποιώντας τον κανόνα 68–95–99,7

Τώρα έχετε μια συλλογή με αυτήν τη μορφή [τύπος, lat, long].

Η σημασία του τύπου είναι η ακόλουθη:

  1. Μικρή ανωμαλία, μάλλον άσχετη
  2. Μεσαία ανωμαλία
  3. Κρίσιμη ανωμαλία

Βήμα 14: Οπτικοποίηση

Οραματισμός
Οραματισμός

Για να κατανοήσουμε και ίσως να αλλάξουμε το τμήμα απεικόνισης, πρέπει να μάθουμε πώς να χρησιμοποιούμε προσαρμοσμένους δείκτες, ένα χαρακτηριστικό του API των Χαρτών Google

Πρώτον, ο χάρτης πρέπει να προετοιμαστεί σε μια επανάκληση:

συνάρτηση initMap () {

data = queryData (); map = new google.maps. Map (document.getElementById ('map'), {zoom: 15, center: {lat: data [0] [1], lng: data [0] [2]}}); παρατήρηση(); }

Καθορίστε το όνομα αυτής της επανάκλησης στο url (εισαγάγαμε εδώ πριν από το κλειδί API) σε μια ετικέτα HTML:

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

Ένας δείκτης μπορεί να εισαχθεί στο χάρτη όταν δημιουργηθεί το αντικείμενο:

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

Μπορείτε να δείτε στον κώδικα ότι για κάθε δεδομένα στο σύνολο δεδομένων των ανωμαλιών εισάγεται ένας δείκτης (δείτε τη συνάρτηση παρατήρησης ()) και το εικονίδιο βασίζεται στην κλάση της ανωμαλίας. Όταν εκτελείται αυτό στο πρόγραμμα περιήγησης, μπορούμε να εξερευνήσουμε έναν χάρτη στον οποίο οι ανωμαλίες μπορούν να φιλτραριστούν χρησιμοποιώντας πλαίσια ελέγχου, όπως φαίνεται στην εικόνα.

Βήμα 15: Πιστώσεις και εξωτερικοί σύνδεσμοι

Αυτό το έργο έγινε από τους Giovanni De Luca, Andrea Fioraldi και Pietro Spadaccino, πρώτου έτους MSc in Engineering in Computer Science φοιτητές στο Πανεπιστήμιο Sapienza της Ρώμης.

  • Διαφάνειες που χρησιμοποίησαν οι συγγραφείς για να παρουσιάσουν αυτήν την απόδειξη της έννοιας:

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

  • GitHub repos με όλο τον κώδικα:

    github.com/roadteam

Συνιστάται: