İçindekiler:

Yol İzleme: 15 Adım
Yol İzleme: 15 Adım

Video: Yol İzleme: 15 Adım

Video: Yol İzleme: 15 Adım
Video: Yol Arkadaşım 15. Bölüm - FULL BÖLÜM 2024, Kasım
Anonim
Yol İzleme
Yol İzleme

Bugün size ivmeölçerler, LoRaWAN, Amazon Web Services ve Google Cloud API'ye dayalı bir yol anormallikleri izleme sistemini nasıl kurduğumuzu göstereceğiz.

Adım 1: Gereksinimler

  • DISCO-L072CZ-LRWAN1 kartı
  • X-NUCLEO-IKS01A2 genişletme modülü (ivmeölçer için)
  • X-NUCLEO-GNSS1A1 (yerelleştirme için)
  • Bir AWS hesabı
  • Bir Google Cloud Platform hesabı

2. Adım: Sensörün Ürün Yazılımını Oluşturma ve Yanıp Sönme

IKS01A2 ve GNSS1A1'i GPIO pinleri aracılığıyla kartın üstüne bağlayın. Firmware kodunu GitHub'dan indirin. ARM Mbed'de (zaten yoksa) bir hesap oluşturun ve kodu çevrimiçi derleyicideki depoya aktarın. Hedef platformu DISCO-L072CZ-LRWAN1 olarak ayarlayın ve projeyi kaydedin. Şimdi The Things Network'e gidin ve henüz sahip değilseniz bir hesap oluşturun. Bir uygulama oluşturun, uygulama içinde yeni bir cihaz oluşturun ve bağlantı modunu OTAA olarak ayarlayın. mbed_app.json dosyasındaki şu alanları doldurmak için uygun parametreleri alın: "lora.appskey", "lora.nwkskey", "lora.device-address".

Sensör, ivmeölçer ve GNSS verilerini periyodik olarak kaydedecek ve bunları LoRa bağlantısı aracılığıyla en yakın ağ geçidine gönderecek ve bu da onları The Things Network'teki uygulamamıza iletecektir. Bir sonraki adım, bir bulut sunucusu ve TTN üzerinde bir HTTP entegrasyonu kurmaktır.

3. Adım: Bulutu Kurma

Bulutu Kurmak
Bulutu Kurmak

Artık dağıtılan tüm panolardan verileri toplayacak ve toplayacak bulut altyapısını kurmaya hazırız. Bu altyapı aşağıdaki şekilde gösterilmiştir ve aşağıdakilerden oluşur:

  • Kinesis, gelen veri akışını işlemek için;
  • Lambda, verileri depolamadan önce filtrelemek ve önceden işlemek için;
  • S3, tüm verileri saklamak için;
  • EC2, verileri analiz etmek ve ön uçumuzu barındırmak için.

4. Adım: AWS Lambda'yı Kurun

AWS Lambda'yı Kurma
AWS Lambda'yı Kurma

Lambda'dan başlayarak bu altyapıyı kurmak için gerekli adımları göstereceğiz.

  1. AWS hesabınızla ve konsol ana sayfasından giriş yapın ve Lambda'ya gidin
  2. İşlev Oluştur'a tıklayın
  3. Sayfanın üst kısmında Sıfırdan Yazar seçilmelidir. Daha sonra resimdeki gibi diğer alanları doldurun ve Create Function'a tıklayın.
  4. Artık bir AWS Lambda işlevi oluşturduğunuza göre, https://github.com/roadteam/data-server adresine gidin ve aws_lambda.py dosyasının içeriğini sayfanın ikinci yarısını bulduğunuz düzenleyiciye kopyalayın. Lambda işleviniz artık hazır:)

5. Adım: AWS Kinesis Firehose Veri Akışını Kurun

AWS Kinesis Firehose Veri Akışını Ayarlayın
AWS Kinesis Firehose Veri Akışını Ayarlayın
  1. Şimdi AWS konsolu ana sayfasına dönün ve Hizmetler'e Kinesis'e gidin
  2. Artık Kinesis'in ana sayfasındasınız. Sayfanın sağ tarafında, 'Kinesis Firehose teslimat akışları' altında, 'Yeni teslimat akışı oluştur'u seçin
  3. "Teslim akışı adı" alanına "yol izleme akışı" yazın. Diğer alanları varsayılan olarak bırakın ve ileri'ye tıklayın
  4. Şimdi 'AWS Lambda ile kaynak kayıtlarını dönüştürün' altında Etkin'i seçin ve Lambda işlevi olarak yeni oluşturulan 'yol izleme-lambda'ya tıklayın. Yaptığımız işlem hesaplama açısından pahalı olmadığı için işlev zaman aşımı ile ilgili bir uyarı çıkarsa endişelenmeyin. Diğer alanları varsayılan olarak bırakın ve ileri'ye tıklayın
  5. Hedef olarak Amazon S3'ü ve S3 hedefi olarak Yeni Oluştur'u seçin. Kova adı olarak 'yol izleme-kova' girin ve ardından gidin. Şimdi diğer alanları varsayılan olarak bırakın ve İleri'ye tıklayın.
  6. Arabellek boyutunu 1MB ve Tampon aralığını 60 saniye olarak ayarlamak isteyebilirsiniz. İki koşuldan biri sağlandığında arabellek S3'e boşaltılacaktır. Sayfadan ayrılmayın, sonraki adıma bakın

6. Adım: Kinesis için IAM Rolünü Ayarlayın

Kinesis için IAM Rolünü Ayarlama
Kinesis için IAM Rolünü Ayarlama

Şimdi Kinesis için güvenlik izinlerini ayarladık, çünkü ön işleme için Lambda işlevini çağırması gerekir ve ardından S3'e yazacaktır.

  1. IAM rolünde olduğunuz sayfanın en altında 'Create new of select'i seçin, resimdeki gibi yeni bir IAM rolü oluşturun ve Allow'a tıklayın.
  2. Şimdi bir önceki sayfaya döndünüz, ileriyi tıklayın. Şimdi tüm parametreleri iki kez kontrol etmek isteyebilirsiniz. Bitirdiğinizde 'Teslimat Akışı Oluştur'a tıklayın

Kinesis-Lambda-S3 boru hattı çalışıyor ve çalışıyor!

7. Adım: AWS EC2'yi kurun

AWS EC2'yi kurun
AWS EC2'yi kurun

Şimdi, AWS bulutundan ve ayrıca uygulama ön uçumuzu barındıracağımız sunucudan veri göndermemize ve çekmemize izin verecek bazı API'lerle bir EC2 örneği kuracağız. Üretim ortamında, daha ölçeklenebilir AWS API Gateway kullanarak API yayınlamak isteyebilirsiniz.

  1. AWS konsolu ana sayfasından EC2 hizmetine gidin
  2. Örneği Başlat'a tıklayın
  3. Üst arama çubuğuna şu kodu yapıştırın: 'ami-08935252a36e25f85', bu, kullanılacak önceden yapılandırılmış sanal makinenin tanımlayıcı kodudur. Sağdaki Seç'i tıklayın
  4. "Tür" sütunundan t2.micro'yu seçin ve "İncele ve başlat"ı tıklayın. Örneği henüz başlatmayın, sonraki adıma geçin

8. Adım: EC2 için IAM Güvenlik Rolünü Ayarlayın

EC2 için IAM Güvenlik Rolünü Ayarlama
EC2 için IAM Güvenlik Rolünü Ayarlama
  1. Başlatmadan önce örneğimizin güvenlik grubunu değiştirmek istiyoruz. Bunu yapmak için, 'Güvenlik Grupları' bölümünün en sağında 'Güvenlik gruplarını düzenle'yi tıklayın. Aşağıdaki gibi yeni bir güvenlik grubu oluşturun. Bu, temel olarak, sunucunuzun güvenlik duvarını, SSH bağlantısı için 22 numaralı bağlantı noktasını ve http hizmetleri için 80 numaralı bağlantı noktasını ortaya çıkaran yapılandırır.
  2. Tekrar 'İncele ve Başlat'ı tıklayın. Şimdi tüm parametrelerin ayarlandığını kontrol edin. Bitirdiğinizde Başlat'a tıklayın
  3. Tıklandığında, örneğe ssh bağlantısı için bir anahtar çifti kurmak üzere yeni bir pencere açılacaktır. "Yeni anahtar çifti oluştur"u seçin ve ad olarak "ec2-yol izleme" yazın. Anahtar çiftini indir'i tıklayın. Bu dosyanın kaybolması veya (daha kötüsü) güvenli olmayan bir şekilde saklanması son derece önemlidir: anahtarı tekrar indiremezsiniz..pem anahtarını indirdikten sonra, örnek başlatılmaya hazırdır

9. Adım: EC2 Bulut Sunucunuza Erişin

EC2 Bulut Sunucunuza Erişin
EC2 Bulut Sunucunuza Erişin

Yeni EC2 bulut sunucunuz AWS bulutunda hazır. Daha önce indirilen anahtar dosyası ile ona bağlanabilirsiniz (bu eğitim için ssh'nin temellerini bildiğinizi varsayıyoruz). 'Açıklama' bölümündeki gösterge tablosunda aşağıdaki gibi seçerek örneğin IP'sini alabilirsiniz: Hem genel IP'nizi hem de genel DNS'nizi kullanabilirsiniz, aynıdır. Bir ssh istemcisi ile şimdi şu komutu girin:

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

ec2-road-monitoring.pem daha önce oluşturulmuş anahtarınızdır.

Şimdi sunucu tarafı kodunu çekmeye devam edin

git klon -- özyinelemeli

Adım 10: Google Haritalar API'sini Alın

Google Haritalar API'sini Alın
Google Haritalar API'sini Alın

Neredeyse tamamız. Şimdi kullanıcıya yol noktaları ile haritayı görüntülemek için html sayfamızda google maps API'sini kurmamız gerekiyor:

  1. Google hesabınıza giriş yapın ve https://cloud.google.com/maps-platform/ adresine gidin.
  2. Sayfanın solundaki 'Başlayın' için tıklayın
  3. Menüden 'Haritalar'ı seçin ve ardından devam et'i tıklayın.
  4. Proje adı olarak 'yol izleme' girin ve İleri'ye tıklayın
  5. Fatura ayrıntılarınızı girin ve Devam'ı tıklayın.
  6. Artık projeniz hazır ve API'ler ve Hizmetler -> Kimlik Bilgileri'ne tıklayarak API anahtarını alacağız.

Adım 11: Sunucuyu Başlatın

Sunucuyu Başlat
Sunucuyu Başlat

Ve işte API anahtarınız. Yapmanız gereken son şey data_visualization/anomalies_map.html adresine gitmek ve anahtarınızı dosyanın sonuna bu şekilde kopyalamak, 'SİZİN-ANAHTARINIZ-BURADA' ifadesini kullanmaktır.

Şimdi her şey ayarlandı ve gitmeye hazır! EC2 örneğinde yürütülmesini sağlamak için: "cd data-server" "python flask_app.py"

EC2 bulut sunucunuzun ip veya dns adresini tarayıcınıza girin, bazı sahte verilerle anormallikler haritasını görmelisiniz

Adım 12: Things Ağında HTTP Entegrasyonunu Gerçekleştirin

Things Ağında HTTP Entegrasyonu Gerçekleştirin
Things Ağında HTTP Entegrasyonu Gerçekleştirin

Artık tüm arka uç altyapısı hazır ve çalışır durumda olduğuna göre, HTTP entegrasyonunu gerçekleştirmek için işleyebiliriz.

  1. Yeni bir uygulama oluşturun ve cihazınızı kaydedin. Hızlı başlangıç kılavuzuna bakmazsanız, temel TTN bilgisine sahip olduğumuzu varsayıyoruz.
  2. Uygulama menünüzde "Entegrasyonlar"ı ve ardından "entegrasyon ekle"yi seçin.
  3. HTTP entegrasyonunu seçin
  4. Resmi takip eden alanları girin ve EC2 ip veya genel DNS ile değiştirin

Adım 13: Veri İşleme

Sensörden toplanan her T veri grubu için aşağıdaki adımları gerçekleştirmelisiniz:

  1. T'nin yerel alanına düşen GPS koordinatlarına sahip demetler kümesini alın. Yerel alan, T'nin 100 metre çevresindeki tüm demetlerdir.
  2. Her en yakın grup N için, ivmeölçer Z ekseninin kare ortalamasını N cinsinden hesaplayın. Sözde kodda: ortalama = toplam ([x. Z_accel ** yakındaki x için]) / yakın.size
  3. Kare standart sapmayı hesaplayın. Sözde kodda: std = toplam ([(x. Z_accel ** 2 - ortalama) ** 2 yakındaki x için])
  4. Bu biçimde çıktı: lat, long, Z_accel **2, ortalama, std

Yerel alanı hesaplamak için metre cinsinden GPS mesafesini kullanın. C++'da:

#define D2R (M_PI / 180.0)

#define EARTH_RAY 6371 çift mesafe(çift lat1, çift uzun1, çift lat2, çift uzun2) { çift uzun = (uzun2 - uzun1) * D2R; çift dlat = (lat2 - lat1) * D2R; double a = pow(sin(dlat/2.0), 2) + cos(lat1*D2R) * cos(lat2*D2R) * pow(sin(uzun/2.0), 2); çift c = 2 * atan2(sqrt(a), sqrt(1-a));

Şimdi, önceki adımda oluşturulan ara verileri kullanarak, anormallikleri tespit edin ve her satıra uygulanan bu alıntıyı kullanarak saf bir sınıflandırma yapın:

line = map(float, line.split(", "))

v = satır[2] ortalama = satır[3] std = satır[4] ise v (ortalama + standart*3): if v (ortalama + standart*2): if v (ortalama + standart): o.append([1, satır[0], satır[1]) başka: o.append([2, satır[0], satır[1]) başka: o.append([3, satır[0], satır[1])

Anormallikler 68–95–99.7 kuralı kullanılarak sınıflandırılır

Artık [type, lat, long] biçiminde bir koleksiyonunuz var.

Tip anlamı şudur:

  1. Hafif anormallik, muhtemelen alakasız
  2. orta anomali
  3. kritik anomali

Adım 14: Görselleştirme

görselleştirme
görselleştirme

Görselleştirme bölümünü anlamak ve belki de değiştirmek için, Google Haritalar API'sinin bir özelliği olan özel işaretçileri nasıl kullanacağımızı öğrenmeliyiz

İlk olarak, harita bir geri aramada başlatılmalıdır:

function initMap() {

veri = sorguData(); map = new google.maps. Map(document.getElementById('map'), { zoom: 15, center: {lat: data[0][1], lng: data[0][2]} }); açıklama(); }

Bu geri aramanın adını url'de (buraya API anahtarımızdan önce ekledik) bir HTML etiketinde belirtin:

Nesne oluşturulduğunda haritaya bir işaretleyici eklenebilir:

yeni google.maps. Marker({ konum: {lat: LATITUDE, lng: LONGITUDE}, harita: harita, simge: “/path/to/icon.png” })

Kodda, anormalliklerin veri kümesindeki her bir veri için bir işaretçinin eklendiğini (açıklama() işlevine bakın) ve simgenin anomalinin sınıfını temel aldığını görebilirsiniz. Bunu tarayıcıda çalıştırırken, resimde görüldüğü gibi, onay kutuları kullanılarak anormalliklerin filtrelenebileceği bir harita keşfedebiliriz.

Adım 15: Krediler ve Dış Bağlantılar

Bu proje Giovanni De Luca, Andrea Fioraldi ve Pietro Spadaccino, Roma Sapienza Üniversitesi'nde Bilgisayar Bilimleri Mühendisliği alanında birinci sınıf yüksek lisans öğrencileri tarafından yapılmıştır.

  • Yazarların bu kavram kanıtını sunmak için kullandıkları slaytlar:

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

  • Tüm kodu içeren GitHub depoları:

    github.com/roadteam

Önerilen: