Სარჩევი:

გზის მონიტორინგი: 15 ნაბიჯი
გზის მონიტორინგი: 15 ნაბიჯი

ვიდეო: გზის მონიტორინგი: 15 ნაბიჯი

ვიდეო: გზის მონიტორინგი: 15 ნაბიჯი
ვიდეო: კახი კალაძე დატროლეს 😀🤣🤣 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 ქინძისთავების საშუალებით. ჩამოტვირთეთ firmware კოდი GitHub– დან. შექმენით (თუ ჯერ არ გაქვთ) ანგარიში ARM Mbed– ზე და შეიტანეთ კოდი რეპოში ონლაინ შემდგენელზე. დააყენეთ სამიზნე პლატფორმა DISCO-L072CZ-LRWAN1 და შეინახეთ პროექტი. ახლა გადადით Things Network– ში და შექმენით ანგარიში, თუ ის უკვე არ გაქვთ. შექმენით აპლიკაცია, შექმენით ახალი მოწყობილობა პროგრამის შიგნით და დააყენეთ კავშირის რეჟიმი OTAA. აიღეთ შესაბამისი პარამეტრები, რომ შეავსოთ mbed_app.json ფაილში შემდეგი ველები: "lora.appskey", "lora.nwkskey", "lora.device-address".

სენსორი პერიოდულად ჩაწერს აქსელერომეტრს და GNSS მონაცემებს და აგზავნის მათ LoRa კავშირის საშუალებით უახლოეს კარიბჭესთან, რომელიც გადაუგზავნის მათ ჩვენს აპლიკაციას Things Network– ზე. შემდეგი ნაბიჯი არის ღრუბლოვანი სერვერის დაყენება და HTTP ინტეგრაცია TTN– ზე.

ნაბიჯი 3: ღრუბლის დაყენება

ღრუბლის დაყენება
ღრუბლის დაყენება

ახლა ჩვენ მზად ვართ შევქმნათ ღრუბლოვანი ინფრასტრუქტურა, რომელიც შეაგროვებს და გააერთიანებს მონაცემებს ყველა განლაგებული დაფებიდან. ეს ინფრასტრუქტურა ნაჩვენებია ქვემოთ მოცემულ ფიგურაში და იგი შედგება:

  • Kinesis, გაუმკლავდეს შემომავალი მონაცემთა ნაკადს;
  • ლამბდა, მონაცემების გაფილტვრა და წინასწარი დამუშავება მის შესანახად;
  • S3, ყველა მონაცემის შესანახად;
  • EC2, მონაცემების გასაანალიზებლად და ჩვენი ფრონტ-ენდის მასპინძლობისთვის.

ნაბიჯი 4: დააყენეთ AWS Lambda

დააყენეთ AWS Lambda
დააყენეთ AWS Lambda

ჩვენ განვმარტავთ იმ ნაბიჯებს, რომლებიც აუცილებელია ინფრასტრუქტურის შესაქმნელად, დაწყებული ლამბდადან.

  1. შედით თქვენი AWS ანგარიშით და კონსოლის მთავარი გვერდიდან და გადადით ლამბდაზე
  2. დააწკაპუნეთ ფუნქციის შექმნაზე
  3. გვერდის ზედა ნაწილში უნდა შეირჩეს ავტორი ნაკაწრიდან. შემდეგ შეავსეთ სხვა ველები, როგორც სურათზე და შემდეგ დააწკაპუნეთ ფუნქციის შექმნაზე
  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- სთან ერთად" აირჩიეთ ჩართული და როგორც ლამბდას ფუნქცია დააწკაპუნეთ ახლად შექმნილ "საგზაო მონიტორინგ-ლამბდაზე". არ ინერვიულოთ, თუ გამოჩნდება გაფრთხილება ფუნქციის დროის ამოწურვის შესახებ, რადგან ოპერაცია, რომელსაც ჩვენ ვაკეთებთ, არ არის გამოთვლილად ძვირი. დატოვე სხვა ველები ნაგულისხმევად და დააწკაპუნე შემდეგზე
  5. დანიშნულების ადგილად შეარჩიეთ Amazon S3 და S3 დანიშნულების ადგილად შეარჩიეთ ახალი. როგორც ვედრო სახელი, შეიყვანეთ "გზის მონიტორინგი-ვედრო" და შემდეგ წადით. ახლა დატოვეთ სხვა ველები ნაგულისხმევად და დააწკაპუნეთ შემდეგი
  6. შეიძლება დაგჭირდეთ ბუფერის ზომის დაყენება 1 მბ -ზე და ბუფერული ინტერვალი 60 წამზე. ბუფერული იქნება ჩამორეცხილი S3 როდესაც ორი პირობა ერთ დაკმაყოფილებულია. არ დატოვოთ გვერდი, იხილეთ შემდეგი ნაბიჯი

ნაბიჯი 6: შექმენით IAM როლი Kinesis– ისთვის

შექმენით IAM როლი Kinesis– ისთვის
შექმენით IAM როლი Kinesis– ისთვის

ახლა ჩვენ დავაყენეთ უსაფრთხოების ნებართვები Kinesis– ისთვის, რადგან მან უნდა გამოიძახოს Lambda ფუნქცია წინასწარი დამუშავებისთვის და შემდეგ ის დაწერს S3– ზე

  1. გვერდის ბოლოში, როდესაც თქვენ იმყოფებით "IAM როლში", აირჩიეთ "შექმენით ახალი არჩევანი", შექმენით ახალი IAM როლი, როგორც სურათზე და დააჭირეთ ნებადართვას
  2. ახლა თქვენ დაბრუნდით წინა გვერდზე, დააწკაპუნეთ შემდეგზე. ახლა შეიძლება დაგჭირდეთ ყველა პარამეტრის ორმაგი შემოწმება. დასრულების შემდეგ დააჭირეთ ღილაკს "შექმენით მიწოდების ნაკადი"

Kinesis-Lambda-S3 მილსადენი ამოქმედდა!

ნაბიჯი 7: დააყენეთ AWS EC2

დააყენეთ AWS EC2
დააყენეთ AWS EC2

ახლა ჩვენ შევქმნით EC2 მაგალითს რამდენიმე API– ით, რომელიც მოგვცემს საშუალებას, გადავიტანოთ მონაცემები AWS ღრუბლიდან და ასევე სერვერიდან, სადაც უნდა განვათავსოთ ჩვენი პროგრამის frontend. წარმოების გარემოში, შეიძლება დაგჭირდეთ გამოაქვეყნოთ API უფრო მასშტაბური AWS API Gateway გამოყენებით.

  1. AWS კონსოლის მთავარი გვერდიდან გადადით EC2 სერვისზე
  2. დააწკაპუნეთ ინსტანციის გაშვებაზე
  3. ზედა საძიებო ზოლში ჩასვით ეს კოდი: 'ami-08935252a36e25f85', ეს არის წინასწარ კონფიგურირებული ვირტუალური მანქანის გამოსაყენებელი კოდი. დააწკაპუნეთ აირჩიეთ მარჯვნივ
  4. აირჩიეთ t2.micro "ტიპი" სვეტიდან და დააჭირეთ "მიმოხილვა და გაშვება". ჯერ არ გაუშვათ მაგალითი, გადადით შემდეგ საფეხურზე

ნაბიჯი 8: შექმენით IAM უსაფრთხოების როლი EC2– ისთვის

შექმენით IAM უსაფრთხოების როლი EC2– ისთვის
შექმენით IAM უსაფრთხოების როლი EC2– ისთვის
  1. დაწყებამდე ჩვენ გვინდა შეცვალოთ ჩვენი ინსტანციის უსაფრთხოების ჯგუფი. ამისათვის, განყოფილებაში "უსაფრთხოების ჯგუფები" უკიდურეს მარჯვნივ დააწკაპუნეთ "უსაფრთხოების ჯგუფების რედაქტირება" შექმენით ახალი უსაფრთხოების ჯგუფი შემდეგნაირად. ეს ძირითადად ახდენს თქვენი ინსტანციის ბუხრის კონფიგურაციას, რომელიც გამოავლენს პორტს 22 SSH კავშირისთვის და 80 პორტს http სერვისებისთვის.
  2. კვლავ დააწკაპუნეთ "მიმოხილვა და გაშვება". ახლა შეამოწმეთ რომ ყველა პარამეტრი დაყენებულია. დასრულების შემდეგ დააჭირეთ გაშვებას
  3. დაწკაპუნებით გამოჩნდება ახალი ფანჯარა, რომელიც შექმნის გასაღების წყვილს ssh კავშირის მაგალითზე. აირჩიეთ "შექმენით ახალი გასაღების წყვილი" და სახელის სახით შეიყვანეთ "ec2-road-მონიტორინგი". დააწკაპუნეთ ღილაკების ჩამოტვირთვა წყვილზე. უაღრესად მნიშვნელოვანია, რომ ეს ფაილი დაიკარგოს ან (უარესი) იყოს დაუცველად შენახული: თქვენ ვეღარ შეძლებთ გასაღების გადმოტვირთვას. გადმოტვირთვის შემდეგ.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-რეკურსიული

ნაბიჯი 10: მიიღეთ Google Maps API

მიიღეთ Google Maps API
მიიღეთ Google Maps API

ჩვენ თითქმის დავასრულეთ. ახლა ჩვენ უნდა შევქმნათ google maps API ჩვენს 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"

თქვენს ბრაუზერში შეიყვანეთ თქვენი EC2 ინსტანციის ip ან dns მისამართი, თქვენ უნდა ნახოთ ანომალიების რუკა რამოდენიმე საცდელი მონაცემებით

ნაბიჯი 12: შეასრულეთ HTTP ინტეგრაცია ნივთების ქსელში

შეასრულეთ HTTP ინტეგრაცია ნივთების ქსელში
შეასრულეთ HTTP ინტეგრაცია ნივთების ქსელში

ახლა, როდესაც ჩვენ გვაქვს შემქმნელი ყველა ინფრასტრუქტურა, შეგვიძლია დავამუშაოთ HTTP ინტეგრაციის შესასრულებლად.

  1. შექმენით ახალი პროგრამა და დაარეგისტრირეთ თქვენი მოწყობილობა. ჩვენ ვივარაუდებთ TTN– ის ძირითად ცოდნას, თუ არ მივმართავთ სწრაფი დაწყების სახელმძღვანელოს
  2. განაცხადის მენიუში აირჩიეთ "ინტეგრაცია" და შემდეგ "დაამატეთ ინტეგრაცია"
  3. აირჩიეთ HTTP ინტეგრაცია
  4. შეიყვანეთ ველები სურათის შემდეგ და შეცვალეთ თქვენი EC2 ip ან საჯარო DNS

ნაბიჯი 13: მონაცემთა დამუშავება

სენსორიდან შეგროვებული T მონაცემების სიმრავლეზე თქვენ უნდა შეასრულოთ შემდეგი ნაბიჯები:

  1. მიიღეთ ტუპლეტების ნაკრები, რომლებსაც აქვთ GPS კოორდინატები, რომლებიც ეცემა T. ადგილობრივ არეალში.
  2. თითოეული უახლოესი tuple N- ისთვის გამოთვალეთ ამაჩქარებლის Z- ღერძის კვადრატული საშუალო N.- ში ფსევდოკოდი: საშუალო = ჯამი ([x. Z_accel ** 2 x x in near]) / near.size
  3. გამოთვალეთ კვადრატული სტანდარტული გადახრა. ფსევდოკოდში: std = თანხა ([(x. Z_accel ** 2 - საშუალო) ** 2 x უახლოესში])
  4. გამომავალი ამ ფორმატში: lat, long, Z_accel ** 2, mean, std

ადგილობრივი ტერიტორიის გამოსათვლელად გამოიყენეთ GPS მანძილი მეტრებში. C ++ - ში:

#განსაზღვრეთ D2R (M_PI / 180.0)

#განსაზღვრეთ 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] სტდ = ხაზი [4] თუ v (საშუალო + სტადიო*3): თუ v (საშუალო + სტადიო*2): თუ v (საშუალო + სტადიონი): ო. დამატება ([1, ხაზი [0], სტრიქონი [1]) სხვა: o.append ([2, line [0], line [1]) else: o.append ([3, line [0], line [1])

ანომალიები კლასიფიცირდება 68–95–99.7 წესის გამოყენებით

ახლა თქვენ გაქვთ ამ ფორმატის კოლექცია [ტიპი, ლათ, გრძელი].

ტიპის მნიშვნელობა შემდეგია:

  1. უმნიშვნელო ანომალია, ალბათ შეუსაბამო
  2. საშუალო ანომალია
  3. კრიტიკული ანომალია

ნაბიჯი 14: ვიზუალიზაცია

ვიზუალიზაცია
ვიზუალიზაცია

ვიზუალიზაციის ნაწილის გასაგებად და შესაძლოა შესაცვლელად, ჩვენ უნდა ვისწავლოთ როგორ გამოვიყენოთ მორგებული მარკერები, Google Maps API- ის ფუნქცია

უპირველეს ყოვლისა, რუქა უნდა იყოს ინიციალიზებული უკუკავშირში:

ფუნქცია initMap () {

მონაცემები = queryData (); რუკა = ახალი google.maps. Map (document.getElementById ('რუკა'), {მასშტაბირება: 15, ცენტრი: {lat: data [0] [1], lng: მონაცემები [0] [2]}}); შენიშვნა (); }

მიუთითეთ ამ გამოძახების სახელი url– ში (ჩვენ აქ ჩადეთ ჩვენი API გასაღების წინ) HTML ტეგში:

სკრიპტი async defer src = "https://maps.googleapis.com/maps/api/js?key= [KEY]&callback=initMap"

ობიექტის შექმნისას მარკერის ჩასმა შესაძლებელია რუკაზე:

ახალი google.maps. Marker ({პოზიცია: {lat: LATITUDE, lng: LONGITUDE}, რუკა: რუკა, ხატი: “/path/to/icon.png”})

კოდში შეგიძლიათ ნახოთ, რომ ანომალიების მონაცემთა ნაკრების თითოეული მონაცემისთვის მარკერია ჩასმული (იხ. შენიშვნა () ფუნქცია) და ხატი ემყარება ანომალიის კლასს. ბრაუზერში გაშვებისას ჩვენ შეგვიძლია ვიპოვოთ რუკა, რომელშიც ანომალიების გაფილტვრა შესაძლებელია ჩამრთველების გამოყენებით, როგორც ეს სურათზე ჩანს.

ნაბიჯი 15: კრედიტები და გარე ბმულები

ეს პროექტი გააკეთეს ჯოვანი დე ლუკამ, ანდრეა ფიოარლდიმ და პიეტრო სპადაჩინომ, რომის საპიენცას უნივერსიტეტში კომპიუტერული მეცნიერებების ინჟინერიის მაგისტრის პირველი წელი.

  • სლაიდები, რომლებიც ავტორებმა გამოიყენეს ამ კონცეფციის დასამტკიცებლად:

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

  • GitHub ავრცელებს ყველა კოდს:

    github.com/roadteam

გირჩევთ: