Isi kandungan:

Pemantauan Jalan Raya: 15 Langkah
Pemantauan Jalan Raya: 15 Langkah

Video: Pemantauan Jalan Raya: 15 Langkah

Video: Pemantauan Jalan Raya: 15 Langkah
Video: Brimob Tembak Jatuh Drone Liar di Acara Grebeg Syawal Yogyakarta 2024, Julai
Anonim
Pemantauan Jalan Raya
Pemantauan Jalan Raya

Hari ini kami akan menunjukkan kepada anda bagaimana kami mengatur sistem pemantauan anomali jalan berdasarkan akselerometer, LoRaWAN, Perkhidmatan Web Amazon dan Google Cloud API.

Langkah 1: Keperluan

  • Papan DISCO-L072CZ-LRWAN1
  • Modul pengembangan X-NUCLEO-IKS01A2 (untuk accellerometer)
  • X-NUCLEO-GNSS1A1 (untuk penyetempatan)
  • Akaun AWS
  • Akaun Google Cloud Platform

Langkah 2: Membangun dan Mengemaskan Firmware Sensor

Sambungkan IKS01A2 dan GNSS1A1 di atas papan melalui pin GPIO. Muat turun kod firmware dari GitHub. Buat (jika anda belum mempunyai) akaun di ARM Mbed dan import kod di repo pada penyusun dalam talian. Tetapkan platform sasaran ke DISCO-L072CZ-LRWAN1 dan simpan projek. Sekarang pergi ke The Things Network dan buat akaun jika anda belum memilikinya. Buat aplikasi, buat peranti baru di dalam aplikasi dan tetapkan mod sambungan ke OTAA. Dapatkan parameter yang sesuai untuk mengisi medan berikut dalam fail mbed_app.json: "lora.appskey", "lora.nwkskey", "lora.device-address".

Sensor akan merakam data accelerometer dan GNSS secara berkala dan menghantarnya melalui sambungan LoRa ke gerbang terdekat, yang akan meneruskannya ke aplikasi kami di The Things Network. Langkah seterusnya adalah menyediakan pelayan awan, dan integrasi HTTP di TTN.

Langkah 3: Menyiapkan Awan

Menyiapkan Awan
Menyiapkan Awan

Sekarang kami bersedia untuk menyiapkan infrastruktur awan yang akan mengumpulkan dan mengumpulkan data dari semua papan yang dikerahkan. Infrastruktur ini ditunjukkan dalam gambar di bawah dan disusun oleh:

  • Kinesis, untuk menangani aliran data masuk;
  • Lambda, untuk menyaring dan memproses data sebelum menyimpannya;
  • S3, untuk menyimpan semua data;
  • EC2, untuk menganalisis data dan menjadi tuan rumah front-end kami.

Langkah 4: Siapkan AWS Lambda

Sediakan AWS Lambda
Sediakan AWS Lambda

Kami akan menerangkan langkah-langkah yang diperlukan untuk menyiapkan infrastruktur ini, bermula dengan Lambda.

  1. Log masuk dengan akaun AWS anda, dan dari halaman utama konsol dan pergi ke Lambda
  2. Klik Buat Fungsi
  3. Di bahagian atas halaman hendaklah dipilih Pengarang dari Gores. Kemudian lengkapkan bidang lain seperti dalam gambar dan kemudian klik Buat Fungsi
  4. Sekarang setelah anda membuat fungsi AWS Lambda, pergi ke https://github.com/roadteam/data-server dan salin kandungan fail aws_lambda.py ke dalam editor yang anda dapati separuh kedua halaman. Fungsi Lambda anda kini siap:)

Langkah 5: Sediakan Aliran Data AWS Kinesis Firehose

Sediakan Aliran Data AWS Kinesis Firehose
Sediakan Aliran Data AWS Kinesis Firehose
  1. Kembali sekarang ke halaman utama konsol AWS, dan ke Perkhidmatan pergi ke Kinesis
  2. Sekarang anda berada di halaman utama Kinesis. Di sebelah kanan halaman, di bawah ‘Aliran penghantaran Kinesis Firehose’, pilih ‘Buat aliran penghantaran baru’
  3. Dalam ‘Nama aliran penghantaran’ tulis ‘aliran pemantauan jalan’. Biarkan medan lain menjadi lalai dan klik seterusnya
  4. Sekarang di bawah ‘Transform record records with AWS Lambda’ pilih Enabled, dan ketika fungsi Lambda klik pada ‘road-monitoring-lambda’ yang baru dibuat. Jangan bimbang jika amaran mengenai timeout fungsi muncul, kerana operasi yang kita lakukan tidak mahal. Biarkan medan lain menjadi lalai dan klik seterusnya
  5. Sebagai destinasi pilih Amazon S3, dan sebagai destinasi S3 pilih Buat Baru. Sebagai nama baldi masukkan 'jalan-pemantauan-baldi' dan kemudian pergi. Sekarang biarkan medan lain menjadi lalai dan klik Seterusnya
  6. Anda mungkin mahu menetapkan ukuran Buffer ke 1MB dan selang Buffer hingga 60 saat. Penyangga akan dialirkan ke S3 apabila salah satu daripada dua syarat itu dipenuhi. Jangan tinggalkan halaman, lihat langkah seterusnya

Langkah 6: Sediakan Peranan IAM untuk Kinesis

Sediakan Peranan IAM untuk Kinesis
Sediakan Peranan IAM untuk Kinesis

Sekarang kita menetapkan kebenaran keselamatan untuk Kinesis, kerana ia mesti memanggil fungsi Lambda untuk praprosesan dan kemudian akan menulis di S3

  1. Di bahagian bawah halaman yang anda berada dalam 'peranan IAM' pilih 'Buat baru pilih', buat peranan IAM baru seperti dalam gambar dan klik Benarkan
  2. Sekarang anda kembali ke halaman sebelumnya, klik seterusnya. Sekarang anda mungkin mahu memeriksa semula semua parameter. Setelah selesai klik pada ‘Buat Aliran Penghantaran’

Saluran paip Kinesis-Lambda-S3 sudah siap dan beroperasi!

Langkah 7: Sediakan AWS EC2

Sediakan AWS EC2
Sediakan AWS EC2

Sekarang kita akan menyediakan contoh EC2 dengan beberapa API yang akan memungkinkan kita untuk mendorong dan menarik data dari awan AWS dan juga pelayan tempat host depan aplikasi kita. Dalam persekitaran pengeluaran, anda mungkin ingin menerbitkan API menggunakan AWS API Gateway yang lebih berskala.

  1. Dari halaman utama konsol AWS, pergi ke perkhidmatan EC2
  2. Klik pada Launch Instance
  3. Di bar carian atas, tampalkan kod ini: ‘ami-08935252a36e25f85’, iaitu kod pengenal mesin maya yang telah dikonfigurasikan untuk digunakan. Klik Pilih di sebelah kanan
  4. Pilih t2.micro dari lajur ‘Type’ dan klik ‘Review and launch’. Jangan lancarkan contoh, pergi ke langkah seterusnya

Langkah 8: Sediakan Peranan Keselamatan IAM untuk EC2

Sediakan Peranan Keselamatan IAM untuk EC2
Sediakan Peranan Keselamatan IAM untuk EC2
  1. Sebelum melancarkan, kami ingin mengubah kumpulan keselamatan contoh kami. Untuk melakukan ini, di bahagian paling kanan bahagian ‘Kumpulan Keselamatan’ klik ‘Edit kumpulan keselamatan’ Siapkan kumpulan keselamatan baru seperti berikut. Ini pada dasarnya mengkonfigurasi firewall contoh anda yang memperlihatkan port 22 untuk sambungan SSH dan port 80 untuk perkhidmatan
  2. Klik sekali lagi ‘Semak dan Lancarkan’. Sekarang periksa bahawa semua parameter telah ditetapkan. Setelah selesai klik Lancarkan
  3. Pada klik tetingkap baru akan muncul untuk mengatur pasangan kunci untuk sambungan ssh ke instance. Pilih ‘Buat pasangan kunci baru’ dan sebagai nama masukkan ‘ec2-road-monitoring’. Klik Muat turun pasangan kunci. Sangat penting fail ini hilang atau (lebih teruk) disimpan dengan tidak selamat: anda tidak akan dapat memuat turun kunci lagi. Setelah memuat turun kunci.pem, instance siap dilancarkan

Langkah 9: Akses Instance EC2 Anda

Akses Instance EC2 Anda
Akses Instance EC2 Anda

Contoh EC2 baru anda muncul di awan AWS. Anda boleh menyambungnya dengan fail utama yang dimuat turun sebelumnya (untuk tutorial ini kami menganggap bahawa anda mengetahui asas-asas ssh). Anda boleh mengambil IP instance dengan memilihnya di papan pemuka di bahagian ‘Penerangan’ seperti berikut: Anda boleh menggunakan IP awam atau DNS awam anda sama. Dengan pelanggan ssh sekarang masukkan arahan:

ssh -i ec2-road-monitoring.pem ec2-user @ ANDA-IP-ADDR-ATAU-DNS

di mana ec2-road-monitoring.pem adalah kunci anda yang dihasilkan sebelumnya.

Sekarang teruskan kod sisi pelayan

git clone --recursive

Langkah 10: Dapatkan API Peta Google

Dapatkan API Peta Google
Dapatkan API Peta Google

Kami hampir selesai. Sekarang kita harus menyiapkan API peta google di halaman html kita untuk menampilkan peta dengan titik jalan kepada pengguna:

  1. Log masuk ke akaun Google anda dan pergi ke
  2. Klik untuk ‘Bermula’ di sebelah kiri halaman
  3. Pilih ‘Peta’ di menu dan kemudian klik teruskan
  4. Sebagai nama projek masukkan 'pemantauan jalan' dan klik Seterusnya
  5. Masukkan butiran pengebilan anda dan klik Teruskan
  6. Sekarang projek anda sudah siap dan kami akan mendapatkan kunci API dengan mengklik API & Perkhidmatan -> Kredensial

Langkah 11: Lancarkan Pelayan

Lancarkan Pelayan
Lancarkan Pelayan

Dan itulah kunci API anda. Perkara terakhir yang harus anda lakukan ialah pergi ke data_visualization / anomalies_map.html dan salin kunci anda ke akhir fail seperti itu, menggantikan 'KUNCI ANDA-DI SINI'

Sekarang semuanya sudah siap dan siap untuk digunakan! Untuk membuatnya mula dijalankan dalam contoh EC2: ‘cd data-server’’python flask_app.py’

Masukkan dalam penyemak imbas anda alamat ip atau dns contoh EC2 anda, anda akan melihat peta anomali dengan beberapa data palsu

Langkah 12: Lakukan Integrasi HTTP di Perkara Rangkaian

Lakukan Integrasi HTTP di Rangkaian Perkara
Lakukan Integrasi HTTP di Rangkaian Perkara

Sekarang kita telah menjalankan semua infrastruktur backend, kita dapat memproses untuk melakukan integrasi

  1. Buat aplikasi baru dan daftarkan peranti anda. Kami menganggap pengetahuan asas mengenai TTN, jika tidak merujuk kepada panduan memulakan cepat
  2. Dalam menu aplikasi anda pilih 'Integrasi' dan kemudian 'tambahkan integrasi'
  3. Pilih penyatuan
  4. Masukkan medan berikut gambar dan ganti dengan EC2 ip atau DNS awam anda

Langkah 13: Pemprosesan Data

Untuk setiap tuple data T yang dikumpulkan dari sensor, anda mesti melakukan langkah-langkah berikut:

  1. Dapatkan sekumpulan tupel yang mempunyai koordinat GPS yang jatuh di kawasan tempatan T. Kawasan setempat adalah semua tupel yang berada 100 meter di sekitar T.
  2. Untuk setiap tuple N terdekat, hitung min kuadrat bagi paksi pecutan Z di N. Dalam pseudokod: mean = sum ([x. Z_accel ** 2 untuk x in dekat]) / dekat.size
  3. Hitung sisihan piawai kuasa dua. Dalam pseudocode: std = sum ([(x. Z_accel ** 2 - mean) ** 2 untuk x in dekat])
  4. Keluaran dalam format ini: lat, long, Z_accel ** 2, mean, std

Untuk mengira kawasan setempat gunakan jarak GPS dalam meter. Dalam C ++:

#tentukan D2R (M_PI / 180.0)

#define EARTH_RAY 6371 jarak berganda (double lat1, double long1, double lat2, double long2) {double dlong = (long2 - long1) * D2R; dlat berganda = (lat2 - lat1) * D2R; double a = pow (sin (dlat / 2.0), 2) + cos (lat1 * D2R) * cos (lat2 * D2R) * pow (sin (dlong / 2.0), 2); berganda c = 2 * atan2 (sqrt (a), sqrt (1-a));

Sekarang, menggunakan data perantaraan yang dihasilkan pada langkah sebelumnya, mengesan anomali dan melakukan klasifikasi naif menggunakan potongan ini yang diterapkan pada setiap baris:

line = peta (terapung, line.split (","))

v = garis [2] min = garis [3] std = garis [4] jika v (min + std * 3): jika v (min + std * 2): jika v (min + std): o.lampirkan ([1, baris [0], baris [1]) lain-lain: o.append ([2, baris [0], baris [1]) lain-lain: o.append ([3, baris [0], garis [1])

Anomali dikelaskan menggunakan peraturan 68–95–99.7

Kini anda mempunyai koleksi dengan format ini [type, lat, long].

Makna jenisnya adalah seperti berikut:

  1. Anomali sedikit, mungkin tidak berkaitan
  2. Anomali sederhana
  3. Anomali kritikal

Langkah 14: Visualisasi

Visualisasi
Visualisasi

Untuk memahami dan mungkin mengubah bahagian visualisasi, kita mesti belajar bagaimana menggunakan penanda tersuai, ciri API Peta Google

Pertama, peta mesti dilancarkan dalam panggilan balik:

fungsi initMap () {

data = queryData (); map = google.maps. Map baru (document.getElementById ('map'), {zoom: 15, tengah: {lat: data [0] [1], lng: data [0] [2]}}); ucapan (); }

Tentukan nama panggilan balik ini di url (kami masukkan di sini sebelum kunci API kami) dalam tag HTML:

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

Penanda dapat dimasukkan ke dalam peta ketika objek dibuat:

google.maps. Marker baru ({kedudukan: {lat: LATITUDE, lng: LONGITUDE}, peta: peta, ikon: "/path/to/icon.png"})

Anda dapat melihat dalam kod bahawa untuk setiap data dalam set data anomali, penanda dimasukkan (lihat fungsi komentar ()) dan ikon berdasarkan kelas anomali. Ketika menjalankan ini ke penyemak imbas, kita dapat menjelajahi peta di mana anomali dapat disaring menggunakan kotak centang, seperti yang terlihat pada gambar.

Langkah 15: Kredit dan Pautan Luar

Projek ini dibuat oleh Giovanni De Luca, Andrea Fioraldi dan Pietro Spadaccino, MSc tahun pertama dalam bidang Kejuruteraan dalam pelajar Sains Komputer di Sapienza University of Rome.

  • Slaid yang digunakan penulis untuk menunjukkan bukti konsep ini:

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

  • Repositori GitHub dengan semua kod:

    github.com/roadteam

Disyorkan: