Mündəricat:

Yol Monitorinqi: 15 addım
Yol Monitorinqi: 15 addım

Video: Yol Monitorinqi: 15 addım

Video: Yol Monitorinqi: 15 addım
Video: Yol Nişanları - Yol Hərəkəti Qaydaları (2022) Azərbaycan Respublikası Yol Nişanları 2024, Noyabr
Anonim
Yol Monitorinqi
Yol Monitorinqi

Bu gün sizə akselerometrlərə, LoRaWAN, Amazon Web Services və Google Cloud API -yə əsaslanan yol anomaliyalarına nəzarət sistemini necə qurduğumuzu göstərəcəyik.

Addım 1: Tələblər

  • DISCO-L072CZ-LRWAN1 lövhəsi
  • X-NUCLEO-IKS01A2 genişləndirmə modulu (Accellerometer üçün)
  • X-NUCLEO-GNSS1A1 (lokalizasiya üçün)
  • AWS hesabı
  • Google Cloud Platform hesabı

Addım 2: Sensor Firmware -nin qurulması və yanması

IKS01A2 və GNSS1A1 -i lövhənin üstünə GPIO pinləri vasitəsi ilə qoşun. Firmware kodunu GitHub -dan yükləyin. ARM Mbed -də bir hesab yaradın (əgər onsuz da yoxdursa) və kodu onlayn tərtibçidəki depodakı idxal edin. Hədəf platformasını DISCO-L072CZ-LRWAN1 olaraq təyin edin və layihəni qeyd edin. İndi Şeylər Şəbəkəsinə gedin və hesabınız yoxdursa hesab yaradın. Tətbiq yaradın, tətbiq daxilində yeni bir cihaz yaradın və əlaqə rejimini OTAA olaraq təyin edin. Mbed_app.json faylında aşağıdakı sahələri doldurmaq üçün uyğun parametrləri tutun: "lora.appskey", "lora.nwkskey", "lora.device-address".

Sensor vaxtaşırı akselerometr və GNSS məlumatlarını qeydə alacaq və LoRa bağlantısı vasitəsi ilə Things Network üzərindəki tətbiqimizə göndərəcək ən yaxın şlüzə göndərəcək. Növbəti addım bir bulud serveri və TTN -də HTTP inteqrasiyası qurmaqdır.

Addım 3: Buludun qurulması

Buludun qurulması
Buludun qurulması

İndi bütün yerləşdirilmiş lövhələrdən məlumatları toplayacaq və birləşdirəcək bulud infrastrukturunu qurmağa hazırıq. Bu infrastruktur aşağıdakı şəkildə göstərilmişdir və aşağıdakılardan ibarətdir:

  • Kinesis, daxil olan məlumat axını idarə etmək;
  • Lambda, məlumatları saxlamadan əvvəl süzmək və əvvəlcədən işləmək;
  • S3, bütün məlumatları saxlamaq üçün;
  • EC2, məlumatları təhlil etmək və ön ucumuzu yerləşdirmək.

Addım 4: AWS Lambda qurun

AWS Lambda qurun
AWS Lambda qurun

Lambda ilə başlayaraq bu infrastrukturun qurulması üçün lazım olan addımları təsvir edəcəyik.

  1. AWS hesabınızla daxil olun və konsolun ana səhifəsindən Lambda'ya gedin
  2. Funksiya Yarat düyməsini vurun
  3. Səhifənin yuxarı hissəsində Scratch -dən Müəllif seçilməlidir. Sonra şəkildəki kimi digər sahələri doldurun və sonra Funksiya Yarat düyməsini basın
  4. AWS Lambda funksiyasını yaratdığınız üçün https://github.com/roadteam/data-server ünvanına daxil olun və aws_lambda.py faylının məzmununu səhifənin ikinci yarısında tapdığınız redaktora kopyalayın. Lambda funksiyanız artıq hazırdır:)

Addım 5: AWS Kinesis Firehose Data Stream qurun

AWS Kinesis Firehose Məlumat Axını qurun
AWS Kinesis Firehose Məlumat Axını qurun
  1. İndi AWS konsolunun ana səhifəsinə qayıdın və Xidmətlərə Kinesis -ə gedin
  2. İndi Kinesisin əsas səhifəsindəsiniz. Səhifənin sağında, 'Kinesis Firehose çatdırılma axınları' altında 'Yeni çatdırılma axını yarat' seçin.
  3. 'Çatdırılma axını adı' na 'yol izləmə-axın' yazın. Digər sahələri standart olaraq buraxın və sonrakı düyməni basın
  4. İndi 'AWS Lambda ilə mənbə qeydlərini çevirin' altında Aktiv et seçin və Lambda funksiyası olaraq yeni yaradılmış 'yol izləmə-lambda' düyməsini basın. Fəaliyyət zaman aşımı ilə bağlı bir xəbərdarlıq görünsə narahat olmayın, çünki etdiyimiz əməliyyat hesablama baxımından bahalı deyil. Digər sahələri standart olaraq buraxın və sonrakı düyməni basın
  5. Təyinat olaraq Amazon S3 və S3 təyinat olaraq Yeni Yarat seçin. Kovanın adı olaraq 'yol izləmə-çömçə' daxil edin və sonra gedin. İndi digər sahələri standart olaraq buraxın və İrəli düyməsini basın
  6. Tampon ölçüsünü 1MB və Tampon aralığını 60 saniyəyə təyin etmək istəyə bilərsiniz. İki şərtdən biri yerinə yetirildikdə tampon S3 -ə yuyulacaq. Səhifəni tərk etməyin, növbəti addıma baxın

Addım 6: Kinesis üçün IAM Rolunu qurun

Kinesis üçün IAM Rolunu qurun
Kinesis üçün IAM Rolunu qurun

İndi Kinesis üçün təhlükəsizlik icazələrini qururuq, çünki əvvəlcədən işləmək üçün Lambda funksiyasını çağırmalı və sonra S3 -də yazacaqdır.

  1. 'IAM rolu' nda olduğunuz səhifənin altındakı 'Yeni seçim yarat' seçin, şəkildəki kimi yeni bir IAM rolu yaradın və İcazə ver düyməsini basın.
  2. İndi əvvəlki səhifəyə qayıdırsınız, Sonrakı düyməsini basın. İndi bütün parametrləri yenidən yoxlamaq istəyə bilərsiniz. Bitirdikdən sonra 'Çatdırılma axını yaradın' düyməsini basın.

Kinesis-Lambda-S3 boru kəməri işə düşür!

Addım 7: AWS EC2 qurun

AWS EC2 qurun
AWS EC2 qurun

İndi AWS buludundan və tətbiqimizin ön hissəsini yerləşdirəcəyimiz serverdən məlumatları çəkməyimizə imkan verən bəzi API -lərlə bir EC2 nümunəsi quracağıq. İstehsal mühitində daha geniş miqyaslı AWS API Gateway istifadə edərək API dərc etmək istəyə bilərsiniz.

  1. AWS konsolunun əsas səhifəsindən EC2 xidmətinə keçin
  2. Instance Başlat düyməsini basın
  3. Üst axtarış çubuğuna bu kodu yapışdırın: 'ami-08935252a36e25f85', istifadə etmək üçün əvvəlcədən qurulmuş virtual maşının eyniləşdirici kodudur. Sağdakı Seç düyməsini basın
  4. 'Type' sütunundan t2.micro seçin və 'Review and launch' düyməsini basın. Nümunəni hələ başlamayın, növbəti addıma keçin

Addım 8: EC2 üçün IAM Təhlükəsizlik Rolunu qurun

EC2 üçün IAM Təhlükəsizlik Rolunu qurun
EC2 üçün IAM Təhlükəsizlik Rolunu qurun
  1. Başlamazdan əvvəl nümunəmizin təhlükəsizlik qrupunu dəyişdirmək istəyirik. Bunu etmək üçün 'Təhlükəsizlik Qrupları' bölməsinin sağ kənarındakı 'Təhlükəsizlik qruplarını redaktə et' düyməsini basın Aşağıdakı kimi yeni bir təhlükəsizlik qrupu yaradın. Bu, əsasən SSH bağlantısı üçün 22 portunu və http xidmətləri üçün 80 portunu açan nümunənizin təhlükəsizlik divarını konfiqurasiya edir
  2. Yenidən "Gözdən keçir və Başlat" düyməsini basın. İndi bütün parametrlərin təyin olunduğunu yoxlayın. Bitirdikdə Başlat düyməsini basın
  3. Tıkladıqda, nümunəyə ssh bağlantısı üçün açar cüt qurmaq üçün yeni bir pəncərə açılacaqdır. 'Yeni açar cütü yarad' seçin və ad olaraq 'ec2-yol izləmə' daxil edin. Yükləmə düyməsini basın. Bu faylın itirilməsi və ya (daha pis) etibarsız bir şəkildə saxlanılması son dərəcə vacibdir: açarı bir daha yükləyə bilməyəcəksiniz.. Pem düyməsini yüklədikdən sonra nümunə işə salınmağa hazırdır

Addım 9: EC2 instansiyanıza daxil olun

EC2 instansiyanıza daxil olun
EC2 instansiyanıza daxil olun

Yeni EC2 nümunəniz AWS buludundadır. Daha əvvəl yüklənmiş açar faylı ilə ona qoşula bilərsiniz (bu dərs üçün ssh -in əsaslarını bildiyinizi güman edirik). Nümunənin IP'sini 'Təsvir' bölməsindəki tablosundan seçərək aşağıdakı kimi əldə edə bilərsiniz: Həm ümumi IP'nizi, həm də ümumi DNS -ni eyni şəkildə istifadə edə bilərsiniz. Bir ssh müştəri ilə əmri daxil edin:

ssh -i ec2-road-monitoring.pem ec2-user@SİZİN-IP-ADDR-OR-DNS

ec2-road-monitoring.pem daha əvvəl yaradılan açarınızdır.

İndi server tərəfindəki kodu çəkməyə davam edin

git clone-təkrarlanan

Addım 10: Google Maps API -ni əldə edin

Google Xəritə API -ni əldə edin
Google Xəritə API -ni əldə edin

Demək olar ki, bitmişik. İndi xəritəni istifadəçi üçün yol nöqtələri ilə göstərmək üçün html səhifəmizdə Google Maps API qurmalıyıq:

  1. Google hesabınıza daxil olun və https://cloud.google.com/maps-platform/ ünvanına daxil olun.
  2. Səhifənin solundakı 'Başlayın' düyməsini basın
  3. Menyuda 'Xəritələr' seçin və sonra davam et düyməsini basın
  4. Layihə adı olaraq 'yol izləmə' daxil edin və Sonrakı düyməsini basın
  5. Faktura məlumatlarınızı daxil edin və Davam et düyməsini basın
  6. İndi layihəniz hazırdır və API -lər və Xidmətlər -> Etimadnaməni tıklayaraq API açarını əldə edəcəyik

Addım 11: Serveri işə salın

Serveri işə salın
Serveri işə salın

Və burada API açarınız var. Etməyiniz lazım olan son şey, data_visualization/anomalies_map.html ünvanına getmək və açarınızı 'SİZİN KEY-BURADA' əvəz etməklə faylın sonuna kopyalamaqdır.

İndi hər şey hazırdır və getməyə hazırdır! EC2 nümunəsində icra olunmasını təmin etmək üçün: 'cd data-server' 'python flask_app.py'

Brauzerinizə EC2 nümunənizin ip və ya dns ünvanını daxil edin, bəzi saxta məlumatlarla anomaliyalar xəritəsini görməlisiniz.

Addım 12: Şeylər Şəbəkəsinə HTTP İnteqrasiyasını həyata keçirin

Şeylər Şəbəkəsində HTTP İnteqrasiyasını həyata keçirin
Şeylər Şəbəkəsində HTTP İnteqrasiyasını həyata keçirin

İndi bütün arxa plan infrastrukturu işə düşdüyünə görə HTTP inteqrasiyasını həyata keçirə bilərik.

  1. Yeni bir tətbiq yaradın və cihazınızı qeyd edin. TTN haqqında əsas biliklərə sahibik, əgər sürətli başlanğıc təlimatına müraciət etməsəniz
  2. Tətbiq menyusunda 'İnteqrasiyalar' və sonra 'inteqrasiya əlavə et' seçin
  3. HTTP inteqrasiyasını seçin
  4. Şəkli izləyən və EC2 ip və ya ümumi DNS ilə əvəz edən sahələri daxil edin

Addım 13: Məlumatların İşlənməsi

Sensordan toplanan hər bir T məlumat dəsti üçün aşağıdakı addımları yerinə yetirməlisiniz:

  1. T lokal bölgəsinə düşən GPS koordinatları olan tuplar dəstini alın. Yerli ərazi, T ətrafında 100 metr olan bütün tuplardır.
  2. Hər bir ən yaxın N qrupu üçün, N-dəki akselerometr Z oxunun kvadrat ortalamasını hesablayın. Psevdokodda: orta = cəm ([x. Z_accel ** 2 x-in yaxınlığında]) / yaxın.size
  3. Kvadrat standart sapmanı hesablayın. Pseudocode -da: std = sum ([(x. Z_accel ** 2 - orta) ** 2 üçün x yaxınlığında))
  4. Bu formatda çıxış: lat, long, Z_accel ** 2, mean, std

Yerli ərazini hesablamaq üçün GPS məsafəsini metrlərlə istifadə edin. C ++ dilində:

#D2R (M_PI / 180.0) təyin edin

#define EARTH_RAY 6371 ikiqat məsafə (cüt lat1, ikiqat uzun1, ikiqat lat2, ikiqat uzun2) {cüt dlong = (uzun2 - uzun1) * D2R; cüt dlat = (lat2 - lat1) * D2R; ikiqat a = pow (sin (dlat/2.0), 2) + cos (lat1 * D2R) * cos (lat2 * D2R) * pow (sin (dlong/2.0), 2); ikiqat c = 2 * atan2 (sqrt (a), sqrt (1-a));

İndi, əvvəlki addımda yaranan ara məlumatlardan istifadə edərək, anomaliyaları aşkar edin və hər sətrə tətbiq olunan bu kəsilmiş istifadə edərək sadəlövh bir təsnifat aparın:

xətt = xəritə (float, line.split (","))

v = xətt [2] orta = xətt [3] std = xətt [4] əgər v (ortalama + std*3): əgər v (orta + std*2): əgər v (orta + std) olarsa: o. əlavə et ([1, sətir [0], xətt [1]) başqa: o. əlavə et ([2, sətir [0], sətir [1]) başqa: o. əlavə et ([3, sətir [0], xətt [1])

Anomaliyalar https://en.wikipedia.org/wiki/68%E2%80%9395%E2%80… 68-95-99.7 qaydası ilə təsnif edilir.

İndi bu formatda [type, lat, long] bir kolleksiyanız var.

Tipin mənası belədir:

  1. Yüngül bir anomaliya, yəqin ki, əlaqəsizdir
  2. Orta anomaliya
  3. Kritik anomaliya

Addım 14: Vizualizasiya

Vizualizasiya
Vizualizasiya

Vizualizasiya hissəsini başa düşmək və ya dəyişdirmək üçün Google Maps API -nin xüsusi markerlərindən istifadə etməyi öyrənməliyik

Birincisi, xəritə geri çağırışda başlanmalıdır:

initMap () {funksiyası

data = queryData (); xəritə = yeni google.maps. Map (document.getElementById ('xəritə'), {zoom: 15, mərkəz: {lat: data [0] [1], lng: data [0] [2]}}); qeyd (); }

Bu etiketin adını url -də (API açarımızdan əvvəl daxil etdik) HTML etiketində göstərin:

async gecikdirmə təxirə salınması src = "https://maps.googleapis.com/maps/api/js?key=[AÇILAR&callback=initMap"

Obyekt yaradıldıqda xəritəyə bir marker daxil edilə bilər:

yeni google.maps. Marker ({mövqe: {lat: LATITUDE, lng: LONGITUDE}, xəritə: xəritə, nişan: "/path/to/icon.png"})

Kodda anomaliyaların verilənlər bazasındakı hər bir məlumat üçün bir markerin daxil olduğunu görə bilərsiniz (remark () funksiyasına baxın) və simvol anomaliyanın sinifinə əsaslanır. Bunu brauzerdə işləyərkən, şəkildəki kimi yoxlama qutularından istifadə edərək anomaliyaların süzülməsi mümkün olan bir xəritəni araşdıra bilərik.

Addım 15: Kreditlər və Xarici Əlaqələr

Bu layihə Giovanni De Luca, Andrea Fioraldi və Pietro Spadaccino, Roma Sapienza Universitetində Kompüter Elmləri Mühəndisliyi üzrə birinci kurs tələbələri tərəfindən hazırlanmışdır.

  • Müəlliflər bu anlayışın sübutunu təqdim etmək üçün istifadə etdikləri slaydlar:

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

  • Bütün kodu olan GitHub depoları:

    github.com/roadteam

Tövsiyə: