Daftar Isi:

Pemantauan Jalan: 15 Langkah
Pemantauan Jalan: 15 Langkah

Video: Pemantauan Jalan: 15 Langkah

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

Hari ini kami akan menunjukkan cara kami menyiapkan sistem pemantauan anomali jalan berdasarkan akselerometer, LoRaWAN, Amazon Web Services, dan Google Cloud API.

Langkah 1: Persyaratan

  • Papan DISCO-L072CZ-LRWAN1
  • Modul ekspansi X-NUCLEO-IKS01A2 (untuk akselerometer)
  • X-NUCLEO-GNSS1A1 (untuk lokalisasi)
  • Akun AWS
  • Akun Google Cloud Platform

Langkah 2: Membangun dan Mem-flash Firmware Sensor

Hubungkan IKS01A2 dan GNSS1A1 di atas papan melalui pin GPIO. Unduh kode firmware dari GitHub. Buat (jika Anda belum memilikinya) akun di ARM Mbed dan impor kode di repo di kompiler online. Atur platform target ke DISCO-L072CZ-LRWAN1 dan simpan proyek. Sekarang buka The Things Network dan buat akun jika Anda belum memilikinya. Buat aplikasi, buat perangkat baru di dalam aplikasi dan atur mode koneksi ke OTAA. Ambil parameter yang sesuai untuk mengisi bidang berikut di file mbed_app.json: "lora.appskey", "lora.nwkskey", "lora.device-address".

Sensor akan merekam data akselerometer dan GNSS secara berkala dan mengirimkannya melalui koneksi LoRa ke gateway terdekat, yang akan meneruskannya ke aplikasi kita di The Things Network. Langkah selanjutnya adalah menyiapkan server cloud, dan integrasi HTTP di TTN.

Langkah 3: Menyiapkan Cloud

Menyiapkan Awan
Menyiapkan Awan

Sekarang kami siap untuk menyiapkan infrastruktur cloud yang akan mengumpulkan dan menggabungkan data dari semua papan yang digunakan. Infrastruktur ini ditunjukkan pada gambar di bawah ini dan disusun oleh:

  • Kinesis, untuk menangani aliran data yang masuk;
  • Lambda, untuk memfilter dan memproses data terlebih dahulu sebelum menyimpannya;
  • S3, untuk menyimpan semua data;
  • EC2, untuk menganalisis data dan menjadi host front-end kami.

Langkah 4: Siapkan AWS Lambda

Siapkan AWS Lambda
Siapkan AWS Lambda

Kami akan mengilustrasikan langkah-langkah yang diperlukan untuk menyiapkan infrastruktur ini, dimulai dengan Lambda.

  1. Masuk dengan akun AWS Anda, dan dari halaman utama konsol dan buka Lambda
  2. Klik Buat Fungsi
  3. Di bagian atas halaman harus dipilih Penulis dari Awal. Kemudian lengkapi kolom lainnya seperti pada gambar lalu klik Create Function
  4. Sekarang setelah Anda membuat fungsi AWS Lambda, buka https://github.com/roadteam/data-server dan salin konten file aws_lambda.py ke editor yang Anda temukan di paruh kedua halaman. Fungsi Lambda Anda sekarang siap:)

Langkah 5: Siapkan Aliran Data AWS Kinesis Firehose

Siapkan Aliran Data Firehose AWS Kinesis
Siapkan Aliran Data Firehose AWS Kinesis
  1. Kembali sekarang ke halaman utama konsol AWS, dan ke Layanan, buka Kinesis
  2. Sekarang Anda berada di halaman utama Kinesis. Di sebelah kanan halaman, di bawah 'Aliran pengiriman Kinesis Firehose', pilih 'Buat aliran pengiriman baru'
  3. Di 'Nama aliran pengiriman' tulis 'aliran pemantauan jalan'. Biarkan bidang lain ke default dan klik berikutnya
  4. Sekarang di bawah 'Transform source records with AWS Lambda' pilih Enabled, dan sebagai fungsi Lambda klik pada 'road-monitoring-lambda' yang baru dibuat. Jangan khawatir jika peringatan tentang batas waktu fungsi muncul, karena operasi yang kita lakukan tidak mahal secara komputasi. Biarkan bidang lain ke default dan klik berikutnya
  5. Sebagai tujuan pilih Amazon S3, dan sebagai tujuan S3 pilih Buat Baru. Sebagai nama bucket masukkan 'road-monitoring-bucket' dan kemudian pergi. Sekarang biarkan bidang lain ke default dan klik Berikutnya
  6. Anda mungkin ingin mengatur ukuran Buffer menjadi 1MB dan interval Buffer menjadi 60 detik. Buffer akan di-flush ke S3 setiap kali salah satu dari dua kondisi terpenuhi. Jangan tinggalkan halaman, lihat langkah selanjutnya

Langkah 6: Siapkan Peran IAM untuk Kinesis

Mengatur Peran IAM untuk Kinesis
Mengatur Peran IAM untuk Kinesis

Sekarang kami mengatur izin keamanan untuk Kinesis, karena itu harus memanggil fungsi Lambda untuk pra-pemrosesan dan kemudian akan menulis di S3

  1. Di bagian bawah halaman tempat Anda berada di 'peran IAM' pilih 'Buat pilihan baru', buat peran IAM baru seperti pada gambar dan klik Izinkan
  2. Sekarang anda kembali ke halaman sebelumnya, klik next. Sekarang Anda mungkin ingin memeriksa ulang semua parameter. Setelah selesai klik 'Buat Aliran Pengiriman'

Pipeline Kinesis-Lambda-S3 aktif dan berjalan!

Langkah 7: Siapkan AWS EC2

Siapkan AWS EC2
Siapkan AWS EC2

Sekarang kita akan menyiapkan instans EC2 dengan beberapa API yang memungkinkan kita untuk mendorong dan menarik data dari AWS cloud dan juga server tempat menghosting frontend aplikasi kita. Di lingkungan produksi, Anda mungkin ingin memublikasikan API menggunakan AWS API Gateway yang lebih skalabel.

  1. Dari halaman utama konsol AWS, buka layanan EC2
  2. Klik pada Peluncuran Instance
  3. Di bilah pencarian atas rekatkan kode ini: 'ami-08935252a36e25f85', itu adalah kode pengenal mesin virtual yang telah dikonfigurasi sebelumnya untuk digunakan. Klik Pilih di sebelah kanan
  4. Pilih t2.micro dari kolom 'Jenis' dan klik 'Tinjau dan luncurkan'. Jangan luncurkan instance, lanjutkan ke langkah berikutnya

Langkah 8: Siapkan Peran Keamanan IAM untuk EC2

Menyiapkan Peran Keamanan IAM untuk EC2
Menyiapkan Peran Keamanan IAM untuk EC2
  1. Sebelum meluncurkan, kami ingin memodifikasi grup keamanan instance kami. Untuk melakukan ini, di ujung kanan bagian 'Grup Keamanan' klik 'Edit grup keamanan' Siapkan grup keamanan baru sebagai berikut. Ini pada dasarnya mengonfigurasi firewall instance Anda yang mengekspos port 22 untuk koneksi SSH dan port 80 untuk layanan
  2. Klik lagi 'Tinjau dan Luncurkan'. Sekarang periksa apakah semua parameter sudah diatur. Setelah selesai klik Luncurkan
  3. Saat klik, jendela baru akan muncul untuk menyiapkan pasangan kunci untuk koneksi ssh ke instance. Pilih 'Buat pasangan kunci baru' dan sebagai nama masukkan 'ec2-road-monitoring'. Klik Unduh pasangan kunci. Sangat penting bahwa file ini hilang atau (lebih buruk) disimpan dengan tidak aman: Anda tidak akan dapat mengunduh kunci lagi. Setelah mengunduh kunci.pem, instance siap diluncurkan

Langkah 9: Akses Instans EC2 Anda

Akses Instans EC2 Anda
Akses Instans EC2 Anda

Instans EC2 baru Anda tersedia di cloud AWS. Anda dapat menghubungkannya dengan file kunci yang diunduh sebelumnya (untuk tutorial ini kami berasumsi bahwa Anda mengetahui dasar-dasar ssh). Anda dapat mengambil IP instance dengan memilihnya di dasbor di bagian 'Deskripsi' sebagai berikut: Anda dapat menggunakan IP publik atau DNS publik Anda sama. Dengan klien ssh sekarang masukkan perintah:

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

di mana ec2-road-monitoring.pem adalah kunci Anda yang dibuat sebelumnya.

Sekarang lanjutkan untuk menarik kode sisi server melalui

git clone --recursive

Langkah 10: Ambil Google Maps API

Ambil Google Maps API
Ambil Google Maps API

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

  1. Masuk ke akun Google Anda dan buka
  2. Klik untuk 'Memulai' di sebelah kiri halaman
  3. Pilih 'Peta' di menu lalu klik lanjutkan
  4. Sebagai nama proyek, masukkan 'pemantauan jalan' dan klik Berikutnya
  5. Masukkan detail tagihan Anda dan klik Lanjutkan
  6. Sekarang proyek Anda sudah siap dan kami akan mendapatkan kunci API dengan mengklik API & Layanan -> Kredensial

Langkah 11: Luncurkan Server

Luncurkan Server
Luncurkan Server

Dan itu dia kunci API Anda. Hal terakhir yang harus Anda lakukan adalah pergi ke data_visualization/anomalies_map.html dan salin kunci Anda ke akhir file seperti itu, ganti dengan 'KUNCI-KAU-DI SINI'

Sekarang semuanya sudah siap dan siap untuk pergi! Untuk membuatnya mulai dijalankan di instance EC2: 'cd data-server' 'python flask_app.py'

Masukkan di browser Anda alamat ip atau dns instance EC2 Anda, Anda akan melihat peta anomali dengan beberapa data dummy

Langkah 12: Lakukan Integrasi HTTP di Jaringan Hal

Lakukan Integrasi HTTP di Jaringan Things
Lakukan Integrasi HTTP di Jaringan Things

Sekarang kami memiliki semua infrastruktur backend dan berjalan, kami dapat memproses untuk melakukan integrasi

  1. Buat aplikasi baru dan daftarkan perangkat Anda. Kami mengasumsikan pengetahuan dasar TTN, jika tidak merujuk ke panduan memulai cepat
  2. Di menu aplikasi Anda pilih 'Integrasi' dan kemudian 'tambahkan integrasi'
  3. Pilih integrasi
  4. Masukkan bidang yang mengikuti gambar dan ganti dengan ip EC2 atau DNS publik Anda

Langkah 13: Pemrosesan Data

Untuk setiap tuple data T yang dikumpulkan dari sensor, Anda harus melakukan langkah-langkah berikut:

  1. Dapatkan kumpulan tupel yang memiliki koordinat GPS yang jatuh di area lokal T. Area lokal adalah semua tupel yang berada 100 meter di sekitar T.
  2. Untuk setiap tupel terdekat N, hitung rata-rata kuadrat dari akselerometer sumbu Z di N. Dalam kodesemu: mean = sum ([x. Z_accel ** 2 for x in near]) / near.size
  3. Hitung simpangan baku kuadrat. Dalam pseudocode: std = sum ([(x. Z_accel ** 2 - mean) ** 2 untuk x di dekat])
  4. Output dalam format ini: lat, long, Z_accel **2, mean, std

Untuk menghitung area lokal menggunakan jarak GPS dalam meter. Dalam C++:

#define D2R (M_PI / 180.0)

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

Sekarang, dengan menggunakan data perantara yang dihasilkan pada langkah sebelumnya, deteksi anomali dan lakukan klasifikasi naif menggunakan potongan yang diterapkan pada setiap baris:

garis = peta(mengambang, garis.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, baris[0], baris[1]) lain: o.append([2, baris[0], baris[1]) lain: o.append([3, baris[0], baris[1])

Anomali diklasifikasikan menggunakan aturan 68–95–99.7

Sekarang Anda memiliki koleksi dengan format ini [type, lat, long].

Arti dari jenis adalah sebagai berikut:

  1. Sedikit anomali, mungkin tidak relevan
  2. Anomali sedang
  3. Anomali kritis

Langkah 14: Visualisasi

Visualisasi
Visualisasi

Untuk memahami dan mungkin mengubah bagian visualisasi, kita harus mempelajari cara menggunakan penanda khusus, fitur Google Maps API

Pertama, peta harus diinisialisasi dalam panggilan balik:

fungsi initMap() {

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

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

Penanda dapat dimasukkan ke dalam peta saat objek dibuat:

google.maps. Marker baru ({ posisi: {lat: LATITUDE, lng: LONGITUDE}, peta: peta, ikon: “/path/ke/icon.png” })

Anda dapat melihat dalam kode bahwa untuk setiap data dalam kumpulan data anomali, penanda disisipkan (lihat fungsi komentar()) dan ikon didasarkan pada kelas anomali. Saat menjalankan ini ke browser, kita dapat menjelajahi peta di mana anomali dapat difilter menggunakan kotak centang, seperti yang terlihat pada gambar.

Langkah 15: Kredit dan Tautan Eksternal

Proyek ini dibuat oleh Giovanni De Luca, Andrea Fioraldi dan Pietro Spadaccino, tahun pertama MSc dalam mahasiswa Teknik dalam Ilmu Komputer di Universitas Sapienza Roma.

  • Slide yang digunakan penulis untuk menyajikan bukti konsep ini:

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

  • Repo GitHub dengan semua kode:

    github.com/roadteam

Direkomendasikan: