فهرست مطالب:

نظارت بر راه: 15 مرحله
نظارت بر راه: 15 مرحله

تصویری: نظارت بر راه: 15 مرحله

تصویری: نظارت بر راه: 15 مرحله
تصویری: صفر تا صد نظارت ساختمان | قسمت بیست و ششم | پشت بند دیوار برشی 2024, جولای
Anonim
نظارت بر راه ها
نظارت بر راه ها

امروز ما به شما نشان می دهیم که چگونه یک سیستم مانیتورینگ ناهنجاری های جاده ای را بر اساس شتاب سنج ، LoRaWAN ، خدمات وب آمازون و Google Cloud API راه اندازی کرده ایم.

مرحله 1: الزامات

  • برد DISCO-L072CZ-LRWAN1
  • ماژول توسعه X-NUCLEO-IKS01A2 (برای شتاب سنج)
  • X-NUCLEO-GNSS1A1 (برای محلی سازی)
  • یک حساب AWS
  • یک حساب Google Cloud Platform

مرحله 2: ساخت و فلش کردن سیستم عامل سنسور

IKS01A2 و GNSS1A1 را در بالای برد از طریق پین های GPIO وصل کنید. کد سیستم عامل را از GitHub بارگیری کنید. در ARM Mbed یک حساب (اگر قبلاً ندارید) ایجاد کنید و کد را در repo در کامپایلر آنلاین وارد کنید. پلت فرم هدف را روی DISCO-L072CZ-LRWAN1 تنظیم کنید و پروژه را ذخیره کنید. حالا به The Things Network بروید و اگر قبلاً حساب کاربری ندارید ، ایجاد کنید. یک برنامه ایجاد کنید ، یک دستگاه جدید در داخل برنامه ایجاد کنید و حالت اتصال را روی OTAA تنظیم کنید. پارامترهای مناسب را برای پر کردن فیلدهای زیر در پرونده mbed_app.json بگیرید: "lora.appskey" ، "lora.nwkskey" ، "lora.device-address".

سنسور به صورت دوره ای شتاب سنج و داده های GNSS را ضبط کرده و از طریق اتصال LoRa به نزدیکترین دروازه ارسال می کند ، که آنها را به برنامه ما در The Things Network ارسال می کند. مرحله بعدی راه اندازی سرور ابری و یکپارچه سازی HTTP در TTN است.

مرحله 3: راه اندازی ابر

راه اندازی ابر
راه اندازی ابر

اکنون ما آماده ایجاد زیرساخت ابری هستیم که داده ها را از همه تخته های مستقر جمع آوری و جمع آوری می کند. این زیرساخت در شکل زیر نشان داده شده است و شامل موارد زیر است:

  • Kinesis ، برای رسیدگی به جریان داده های ورودی ؛
  • Lambda ، برای فیلتر کردن و پیش پردازش داده ها قبل از ذخیره آنها ؛
  • S3 ، برای ذخیره همه داده ها ؛
  • EC2 ، برای تجزیه و تحلیل داده ها و میزبانی بخش جلویی ما.

مرحله 4: AWS Lambda را راه اندازی کنید

AWS Lambda را راه اندازی کنید
AWS Lambda را راه اندازی کنید

ما مراحل لازم برای راه اندازی این زیرساخت را با لامبدا شروع می کنیم.

  1. با حساب AWS خود وارد شوید ، و از صفحه اصلی کنسول و به Lambda بروید
  2. بر روی ایجاد عملکرد کلیک کنید
  3. در قسمت بالای صفحه باید Author from Scratch انتخاب شود. سپس سایر فیلدها را مانند تصویر تکمیل کرده و سپس روی ایجاد عملکرد کلیک کنید
  4. اکنون که یک تابع AWS Lambda ایجاد کرده اید ، به https://github.com/roadteam/data-server بروید و محتوای فایل aws_lambda.py را در ویرایشگری که نیمه دوم صفحه را پیدا کرده اید کپی کنید. عملکرد لامبدا شما آماده است:)

مرحله 5: جریان داده AWS Kinesis Firehose را تنظیم کنید

جریان داده AWS Kinesis Firehose را راه اندازی کنید
جریان داده AWS Kinesis Firehose را راه اندازی کنید
  1. اکنون به صفحه اصلی کنسول AWS بازگردید و به Services به Kinesis بروید
  2. اکنون شما در صفحه اصلی Kinesis هستید. در سمت راست صفحه ، تحت "جریانهای تحویل Kinesis Firehose" ، "ایجاد جریان تحویل جدید" را انتخاب کنید
  3. در "نام جریان تحویل" ، "جاده-نظارت-جریان" را بنویسید. سایر فیلدها را به حالت پیش فرض رها کرده و روی next کلیک کنید
  4. اکنون در بخش "Transform source records with AWS Lambda" Enabled را انتخاب کنید و به عنوان تابع Lambda روی "road-monitoring-lambda" ایجاد شده کلیک کنید. نگران نباشید اگر هشداری در مورد زمان پایان عملکرد ظاهر شود ، زیرا عملیاتی که ما انجام می دهیم از نظر محاسباتی گران نیستند. سایر فیلدها را به صورت پیش فرض رها کرده و روی next کلیک کنید
  5. به عنوان مقصد Amazon S3 و به عنوان مقصد S3 Create New را انتخاب کنید. به عنوان نام سطل ، وارد 'road-monitoring-سطل' شده و سپس بروید. اکنون سایر فیلدها را به حالت پیش فرض رها کرده و روی Next کلیک کنید
  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 و همچنین سروری که میزبانی برنامه اصلی خود را در آن میزبانی می کنیم فشار دهیم. در محیط تولید ، ممکن است بخواهید API را با استفاده از مقیاس پذیرتر AWS API Gateway منتشر کنید.

  1. از صفحه اصلی کنسول AWS ، به سرویس EC2 بروید
  2. بر روی Launch Instance کلیک کنید
  3. در نوار جستجوی بالا این کد را وارد کنید: 'ami-08935252a36e25f85' ، که کد شناسایی ماشین مجازی از پیش تنظیم شده برای استفاده است. روی Select در سمت راست کلیک کنید
  4. از ستون "Type" t2.micro را انتخاب کرده و روی "بررسی و راه اندازی" کلیک کنید. هنوز نمونه را راه اندازی نکنید ، به مرحله بعدی بروید

مرحله 8: تنظیم نقش امنیتی IAM برای EC2

تنظیم نقش امنیتی IAM برای EC2
تنظیم نقش امنیتی IAM برای EC2
  1. قبل از راه اندازی ، می خواهیم گروه امنیتی نمونه خود را تغییر دهیم. برای انجام این کار ، در سمت راست قسمت "گروه های امنیتی" روی "ویرایش گروه های امنیتی" کلیک کنید. یک گروه امنیتی جدید را به شرح زیر تنظیم کنید. این اساساً فایروال نمونه شما را پیکربندی می کند که پورت 22 را برای اتصال SSH و پورت 80 را برای خدمات http نشان می دهد.
  2. دوباره روی "بررسی و راه اندازی" کلیک کنید. حالا بررسی کنید که همه پارامترها تنظیم شده باشند. پس از اتمام ، روی راه اندازی کلیک کنید
  3. با کلیک روی پنجره جدیدی ظاهر می شود تا یک جفت کلید برای اتصال ssh به نمونه تنظیم شود. "ایجاد جفت کلید جدید" را انتخاب کنید و به عنوان نام "ec2-road-monitoring" را وارد کنید. روی بارگیری کلید جفت کلیک کنید. بسیار مهم است که این فایل گم شود یا (بدتر) به طور ناامن ذخیره شود: شما نمی توانید دوباره کلید را بارگیری کنید. پس از بارگیری کلید.pem ، نمونه آماده راه اندازی است

مرحله 9: به نمونه EC2 خود دسترسی پیدا کنید

به نمونه EC2 خود دسترسی پیدا کنید
به نمونه EC2 خود دسترسی پیدا کنید

نمونه EC2 جدید شما در ابر AWS قرار دارد. می توانید با فایل اصلی بارگیری شده قبلی به آن متصل شوید (برای این آموزش فرض می کنیم که اصول ssh را می دانید). می توانید IP نمونه را با انتخاب آن در داشبورد در بخش "شرح" به شرح زیر بازیابی کنید: می توانید از IP عمومی یا DNS عمومی خود یکسان استفاده کنید. اکنون با یک ssh client دستور زیر را وارد کنید:

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

جایی که ec2-road-monitoring.pem کلید شما است که قبلاً تولید شده است.

اکنون به کشیدن کد سمت سرور ادامه دهید

git clone-بازگشتی

مرحله 10: بازیابی API Google Maps

بازیابی Google Maps API
بازیابی Google Maps API

ما تقریبا تمام شده ایم اکنون باید API نقشه های google را در صفحه html خود تنظیم کنیم تا نقشه را با نقاط مسیر به کاربر نمایش دهیم:

  1. به حساب Google خود وارد شوید و به https://cloud.google.com/maps-platform/ بروید
  2. روی "شروع به کار" در سمت چپ صفحه کلیک کنید
  3. در منو "Maps" را انتخاب کرده و سپس روی ادامه کلیک کنید
  4. به عنوان نام پروژه ، "road-monitoring" را وارد کرده و روی Next کلیک کنید
  5. جزئیات صورتحساب خود را وارد کرده و روی ادامه کلیک کنید
  6. اکنون پروژه شما آماده است و ما با کلیک روی API ها و خدمات -> اعتبارنامه کلید API را دریافت می کنیم

مرحله 11: راه اندازی سرور

راه اندازی سرور
راه اندازی سرور

و در آنجا کلید API شما است. آخرین کاری که باید انجام دهید این است که به data_visualization/anomalies_map.html بروید و کلید خود را در انتهای فایل کپی کنید و جایگزین "YOUR-KEY-HERE" در اینجا شوید.

اکنون همه چیز آماده است و آماده شروع! برای شروع اجرای آن در نمونه EC2: ‘cd data-server’ ‘python flask_app.py’

آدرس IP یا dns نمونه EC2 خود را در مرورگر خود وارد کنید ، باید نقشه ناهنجاری ها با برخی داده های ساختگی را مشاهده کنید

مرحله 12: ادغام HTTP را در شبکه Things انجام دهید

HTTP Integration را در Things Network انجام دهید
HTTP Integration را در Things Network انجام دهید

اکنون که همه زیرساخت های پشتیبان راه اندازی شده است ، می توانیم ادغام HTTP را انجام دهیم.

  1. یک برنامه جدید ایجاد کنید و دستگاه خود را ثبت کنید. ما دانش اساسی TTN را فرض می کنیم ، اگر به راهنمای شروع سریع مراجعه نکنید
  2. در منوی برنامه خود ، "Integrations" و سپس "add integration" را انتخاب کنید.
  3. ادغام HTTP را انتخاب کنید
  4. فیلدهای زیر تصویر را وارد کرده و IP2 EC2 یا DNS عمومی خود را جایگزین کنید

مرحله 13: پردازش داده ها

برای هر تعداد داده T جمع آوری شده از سنسور ، باید مراحل زیر را انجام دهید:

  1. مجموعه ای از چندتایی که دارای مختصات GPS هستند در ناحیه محلی T. دریافت کنید. منطقه محلی همه چندتایی هایی است که 100 متر در اطراف T قرار دارند.
  2. برای هر یک از نزدیک ترین تعداد N ، میانگین مربع محور Z شتاب سنج را در N. در شبه کد: میانگین = مجموع ([x. Z_accel ** 2 برای x در نزدیکی]) / near.size
  3. انحراف معیار مربع را محاسبه کنید. در شبه کد: std = sum ([(x. Z_accel ** 2 - mean) ** 2 برای x در نزدیکی])
  4. خروجی در این قالب: lat ، long ، Z_accel ** 2 ، mean ، std

برای محاسبه ناحیه محلی از فاصله GPS بر حسب متر استفاده کنید. در زبان C ++:

#تعریف D2R (M_PI / 180.0)

#EARTH_RAY 6371 دو فاصله (دو lat1 ، دو long1 ، دو lat2 ، double long2) {double dlong = (long2 - long1) * D2R ؛ Double dlat = (lat2 - lat1) * D2R ؛ double 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)) ؛

اکنون ، با استفاده از داده های میانی تولید شده در مرحله قبل ، ناهنجاری ها را تشخیص داده و با استفاده از این قطعه بندی شده برای هر خط ، طبقه بندی ساده ای انجام دهید:

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

v = خط [2] میانگین = خط [3] std = خط [4] اگر v (میانگین + std*3): اگر v (میانگین + std*2): اگر v (میانگین + std): o.append ([1 ، خط [0] ، خط [1]) دیگری: o.append ([2 ، خط [0] ، خط [1]) دیگر: o.append ([3 ، خط [0] ، خط [1])

ناهنجاری ها با استفاده از قانون 68-95-99.7 طبقه بندی می شوند

اکنون مجموعه ای با این قالب دارید [نوع ، lat ، long].

معنی نوع به شرح زیر است:

  1. کمی ناهنجاری ، احتمالاً بی ربط
  2. ناهنجاری متوسط
  3. ناهنجاری بحرانی

مرحله 14: تجسم

تجسم
تجسم

برای درک و شاید تغییر بخش تجسم ، باید نحوه استفاده از نشانگرهای سفارشی را بیاموزیم ، یکی از ویژگی های API Google Maps

در مرحله اول ، نقشه باید در پاسخ به تماس تنظیم شود:

تابع initMap () {

data = queryData ()؛ map = new google.maps. Map (document.getElementById ('map') ، {zoom: 15، center: {lat: data [0] [1]، lng: data [0] [2]}})؛ اظهار نظر ()؛ }

نام این فراخوانی را در آدرس اینترنتی (که ما قبل از کلید 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: اعتبارات و پیوندهای خارجی

این پروژه توسط Giovanni De Luca ، Andrea Fioraldi و Pietro Spadaccino ، سال اول کارشناسی ارشد مهندسی در دانشجویان علوم کامپیوتر در دانشگاه ساپینزا رم ، ساخته شد.

  • اسلایدهایی که نویسندگان برای ارائه این اثبات مفهوم استفاده کردند:

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

  • مخزن GitHub با تمام کد:

    github.com/roadteam

توصیه شده: