विषयसूची:

सड़क निगरानी: 15 कदम
सड़क निगरानी: 15 कदम

वीडियो: सड़क निगरानी: 15 कदम

वीडियो: सड़क निगरानी: 15 कदम
वीडियो: पुलिस वाली को वर्दी की गर्मी दिखाना महंगा पड़ गया | When Common Man Fight For Justice 2024, जुलाई
Anonim
सड़क निगरानी
सड़क निगरानी

आज हम आपको दिखाएंगे कि कैसे हम एक्सेलेरोमीटर, लोरावन, अमेज़ॅन वेब सर्विसेज और Google क्लाउड एपीआई पर आधारित सड़क विसंगतियों की निगरानी प्रणाली स्थापित करते हैं।

चरण 1: आवश्यकताएँ

  • डिस्को-एल०७२सीजेड-एलआरडब्ल्यूएएन१ बोर्ड
  • X-NUCLEO-IKS01A2 विस्तार मॉड्यूल (एक्सेलेरोमीटर के लिए)
  • X-NUCLEO-GNSS1A1 (स्थानीयकरण के लिए)
  • एक एडब्ल्यूएस खाता
  • एक Google क्लाउड प्लेटफ़ॉर्म खाता

चरण 2: सेंसर के फ़र्मवेयर को बनाना और चमकाना

GPIO पिन के माध्यम से बोर्ड के शीर्ष पर IKS01A2 और GNSS1A1 को कनेक्ट करें। फर्मवेयर का कोड GitHub से डाउनलोड करें। एआरएम एमबेड पर एक खाता बनाएं (यदि आपके पास पहले से एक नहीं है) और ऑनलाइन कंपाइलर पर रेपो में कोड आयात करें। लक्ष्य प्लेटफॉर्म को DISCO-L072CZ-LRWAN1 पर सेट करें और प्रोजेक्ट को सेव करें। अब द थिंग्स नेटवर्क पर जाएं और यदि आपके पास पहले से खाता नहीं है तो एक खाता बनाएं। एक एप्लिकेशन बनाएं, एप्लिकेशन के अंदर एक नया डिवाइस बनाएं और कनेक्शन मोड को OTAA पर सेट करें। mbed_app.json फ़ाइल में निम्न फ़ील्ड भरने के लिए उपयुक्त पैरामीटर प्राप्त करें: "lora.appskey", "lora.nwkskey", "lora.device-address"।

सेंसर समय-समय पर एक्सेलेरोमीटर और जीएनएसएस डेटा रिकॉर्ड करेगा और उन्हें लोरा कनेक्शन के माध्यम से निकटतम गेटवे पर भेजेगा, जो उन्हें द थिंग्स नेटवर्क पर हमारे एप्लिकेशन को अग्रेषित करेगा। अगला कदम एक क्लाउड सर्वर और टीटीएन पर एक HTTP एकीकरण स्थापित करना है।

चरण 3: क्लाउड सेट करना

बादल की स्थापना
बादल की स्थापना

अब हम क्लाउड इन्फ्रास्ट्रक्चर स्थापित करने के लिए तैयार हैं जो सभी तैनात बोर्डों से डेटा एकत्र और एकत्र करेगा। यह बुनियादी ढांचा नीचे दिए गए चित्र में दिखाया गया है और इसकी रचना की गई है:

  • आने वाली डेटा स्ट्रीम को संभालने के लिए किनेसिस;
  • लैम्ब्डा, डेटा को स्टोर करने से पहले फ़िल्टर और प्रीप्रोसेस करने के लिए;
  • S3, सभी डेटा स्टोर करने के लिए;
  • EC2, डेटा का विश्लेषण करने और हमारे फ्रंट-एंड को होस्ट करने के लिए।

चरण 4: एडब्ल्यूएस लैम्ब्डा सेट करें

एडब्ल्यूएस लैम्ब्डा सेट करें
एडब्ल्यूएस लैम्ब्डा सेट करें

हम लैम्ब्डा से शुरू करके, इस बुनियादी ढांचे को स्थापित करने के लिए आवश्यक कदमों का वर्णन करेंगे।

  1. अपने एडब्ल्यूएस खाते से लॉगिन करें, और कंसोल मुख्य पृष्ठ से और लैम्ब्डा पर जाएं
  2. क्रिएट फंक्शन पर क्लिक करें
  3. पृष्ठ के ऊपरी भाग में इसे स्क्रैच से लेखक चुना जाना चाहिए। फिर अन्य क्षेत्रों को चित्र के रूप में पूरा करें और फिर फंक्शन बनाएं पर क्लिक करें
  4. अब जब आपने AWS लैम्ब्डा फ़ंक्शन बना लिया है, तो https://github.com/roadteam/data-server पर जाएं और aws_lambda.py फ़ाइल की सामग्री को उस संपादक में कॉपी करें जो आपको पृष्ठ का दूसरा भाग मिलता है। आपका लैम्ब्डा फंक्शन अब तैयार है:)

चरण 5: एडब्ल्यूएस किनेसिस फायरहोज डेटा स्ट्रीम सेट करें

AWS Kinesis Firehose डेटा स्ट्रीम सेट करें
AWS Kinesis Firehose डेटा स्ट्रीम सेट करें
  1. अब AWS कंसोल के मुख्य पृष्ठ पर लौटें, और सेवाओं में Kinesis पर जाएँ
  2. अब आप Kinesis के मुख्य पृष्ठ में हैं। पृष्ठ के दाईं ओर, 'किनेसिस फायरहोज डिलीवरी स्ट्रीम' के तहत, 'नई डिलीवरी स्ट्रीम बनाएं' चुनें
  3. 'डिलीवरी स्ट्रीम नाम' में 'रोड-मॉनिटरिंग-स्ट्रीम' लिखें। अन्य फ़ील्ड को डिफ़ॉल्ट पर छोड़ दें और अगला क्लिक करें
  4. अब 'एडब्ल्यूएस लैम्ब्डा के साथ ट्रांसफॉर्म सोर्स रिकॉर्ड्स' के तहत सक्षम का चयन करें, और लैम्ब्डा फ़ंक्शन के रूप में नए बनाए गए 'रोड-मॉनिटरिंग-लैम्ब्डा' पर क्लिक करें। यदि फ़ंक्शन टाइमआउट के बारे में चेतावनी दिखाई देती है, तो चिंता न करें, क्योंकि हम जो ऑपरेशन कर रहे हैं वह कम्प्यूटेशनल रूप से महंगा नहीं है। अन्य फ़ील्ड को डिफ़ॉल्ट पर छोड़ दें और अगला क्लिक करें
  5. गंतव्य के रूप में Amazon S3 चुनें, और S3 गंतव्य के रूप में Create New चुनें। जैसे बकेट नेम 'रोड-मॉनिटरिंग-बकेट' दर्ज करें और फिर जाएं। अब अन्य फ़ील्ड को डिफ़ॉल्ट पर छोड़ दें और अगला क्लिक करें
  6. आप बफ़र आकार को 1MB और बफ़र अंतराल को 60 सेकंड पर सेट करना चाह सकते हैं। जब भी दो में से कोई एक शर्त पूरी होती है तो बफर को S3 में प्रवाहित कर दिया जाएगा। पेज न छोड़ें, अगला चरण देखें

चरण 6: Kinesis के लिए IAM भूमिका सेट करें

Kinesis के लिए IAM भूमिका सेट करें
Kinesis के लिए IAM भूमिका सेट करें

अब हम Kinesis के लिए सुरक्षा अनुमतियाँ सेट करते हैं, क्योंकि इसे लैम्ब्डा फ़ंक्शन को प्रीप्रोसेसिंग के लिए कॉल करना होगा और फिर यह S3 पर लिखेगा

  1. पृष्ठ के निचले भाग में आप 'IAM भूमिका' में हैं 'चुनें का नया बनाएँ' चुनें, चित्र के अनुसार एक नई IAM भूमिका बनाएँ और अनुमति दें पर क्लिक करें
  2. अब आप पिछले पेज पर वापस आ गए हैं, अगला क्लिक करें। अब आप सभी मापदंडों को दोबारा जांचना चाह सकते हैं। समाप्त होने पर 'डिलीवरी स्ट्रीम बनाएं' पर क्लिक करें

Kinesis-Lambda-S3 पाइपलाइन ऊपर और चल रही है!

चरण 7: AWS EC2 सेट करें

AWS EC2 सेट करें
AWS EC2 सेट करें

अब हम कुछ एपीआई के साथ एक ईसी 2 इंस्टेंस स्थापित करेंगे जो हमें एडब्ल्यूएस क्लाउड से डेटा को पुश और खींचने की अनुमति देगा और सर्वर जहां हमारे एप्लिकेशन फ्रंटएंड को होस्ट करना है। उत्पादन के माहौल में, आप अधिक स्केलेबल एडब्ल्यूएस एपीआई गेटवे का उपयोग करके एपीआई प्रकाशित करना चाह सकते हैं।

  1. AWS कंसोल के मुख्य पृष्ठ से, EC2 सेवा पर जाएँ
  2. लॉन्च इंस्टेंस पर क्लिक करें
  3. ऊपरी खोज बार में इस कोड को पेस्ट करें: 'ami-08935252a36e25f85', जो उपयोग करने के लिए पूर्व-कॉन्फ़िगर वर्चुअल मशीन का पहचान कोड है। दाईं ओर चुनें पर क्लिक करें
  4. 'टाइप' कॉलम से t2.micro चुनें और 'रिव्यू एंड लॉन्च' पर क्लिक करें। इंस्टेंस को अभी तक लॉन्च न करें, अगले चरण पर जाएं

चरण 8: EC2 के लिए IAM सुरक्षा भूमिका सेट करें

EC2 के लिए IAM सुरक्षा भूमिका सेट करें
EC2 के लिए IAM सुरक्षा भूमिका सेट करें
  1. लॉन्च करने से पहले हम अपने इंस्टेंस के सुरक्षा समूह को संशोधित करना चाहते हैं। ऐसा करने के लिए, 'सुरक्षा समूह' अनुभाग के दाईं ओर 'सुरक्षा समूह संपादित करें' पर क्लिक करें, एक नया सुरक्षा समूह निम्नानुसार सेट करें। यह मूल रूप से एसएसएच कनेक्शन के लिए पोर्ट 22 और http सेवाओं के लिए पोर्ट 80 को उजागर करने वाले आपके इंस्टेंस के फ़ायरवॉल को कॉन्फ़िगर करता है
  2. फिर से 'समीक्षा करें और लॉन्च करें' पर क्लिक करें। अब जांचें कि सभी पैरामीटर सेट हैं। समाप्त होने पर लॉन्च पर क्लिक करें
  3. क्लिक करने पर उदाहरण के लिए ssh कनेक्शन के लिए एक प्रमुख जोड़ी सेट करने के लिए एक नई विंडो पॉप अप होगी। 'नई कुंजी जोड़ी बनाएं' चुनें और नाम के रूप में 'ec2-road-monitoring' दर्ज करें। कुंजी जोड़ी डाउनलोड करें पर क्लिक करें। यह अत्यंत महत्वपूर्ण है कि यह फ़ाइल खो जाए या (बदतर) असुरक्षित रूप से संग्रहीत हो: आप फिर से कुंजी डाउनलोड नहीं कर पाएंगे। एक बार.pem कुंजी डाउनलोड करने के बाद इंस्टेंस लॉन्च होने के लिए तैयार है

चरण 9: अपने ईसी2 इंस्टेंस तक पहुंचें

अपने ईसी2 इंस्टेंस तक पहुंचें
अपने ईसी2 इंस्टेंस तक पहुंचें

आपका ताज़ा EC2 उदाहरण AWS क्लाउड में है। आप इसे पहले डाउनलोड की गई कुंजी फ़ाइल से कनेक्ट कर सकते हैं (इस ट्यूटोरियल के लिए हम मानते हैं कि आप ssh की मूल बातें जानते हैं)। आप इंस्टेंस के आईपी को 'विवरण' अनुभाग में डैशबोर्ड में चुनकर पुनः प्राप्त कर सकते हैं: आप अपने सार्वजनिक आईपी या अपने सार्वजनिक डीएनएस दोनों का उपयोग कर सकते हैं। एक ssh क्लाइंट के साथ अब कमांड दर्ज करें:

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

जहां ec2-road-monitoring.pem आपकी कुंजी पहले जेनरेट की गई है।

अब सर्वर-साइड कोड के माध्यम से खींचने के लिए आगे बढ़ें

git क्लोन --recursive

चरण 10: Google मानचित्र API पुनर्प्राप्त करें

Google मानचित्र API पुनर्प्राप्त करें
Google मानचित्र API पुनर्प्राप्त करें

हम लगभग कर चुके हैं। अब हमें अपने एचटीएमएल पेज में गूगल मैप्स एपीआई को सेट करना होगा ताकि यूजर को वेपॉइंट के साथ मैप प्रदर्शित किया जा सके:

  1. अपने Google खाते में लॉगिन करें और https://cloud.google.com/maps-platform/ पर जाएं
  2. पृष्ठ के बाईं ओर 'आरंभ करें' पर क्लिक करें
  3. मेनू में 'मैप्स' चुनें और फिर जारी रखें पर क्लिक करें
  4. परियोजना के नाम के रूप में 'सड़क-निगरानी' दर्ज करें और अगला क्लिक करें
  5. अपना बिलिंग विवरण दर्ज करें और जारी रखें पर क्लिक करें
  6. अब आपका प्रोजेक्ट तैयार है और हम एपीआई और सर्विसेज -> क्रेडेंशियल्स पर क्लिक करके एपीआई कुंजी प्राप्त करने जा रहे हैं

चरण 11: सर्वर लॉन्च करें

सर्वर लॉन्च करें
सर्वर लॉन्च करें

और वहां यह आपकी एपीआई कुंजी है। आखिरी चीज जो आपको करनी है वह है data_visualization/anomalies_map.html पर जाना और 'Your-KEY-HERE' को प्रतिस्थापित करते हुए अपनी कुंजी को फ़ाइल के अंत में कॉपी करना है।

अब सब तैयार है और जाने के लिए तैयार है! इसे ईसी2 इंस्टेंस में निष्पादित करने के लिए: 'सीडी डेटा-सर्वर' 'पायथन फ्लास्क_एप.पी'

अपने ब्राउज़र में अपने ईसी 2 इंस्टेंस का आईपी या डीएनएस पता दर्ज करें, आपको कुछ डमी डेटा के साथ विसंगतियों का नक्शा देखना चाहिए

चरण 12: थिंग्स नेटवर्क पर HTTP एकीकरण करें

थिंग्स नेटवर्क पर HTTP इंटीग्रेशन निष्पादित करें
थिंग्स नेटवर्क पर HTTP इंटीग्रेशन निष्पादित करें

अब जब हमारे पास सभी बैकएंड इंफ्रास्ट्रक्चर तैयार हैं और चल रहे हैं तो हम HTTP इंटीग्रेशन को करने के लिए प्रोसेस कर सकते हैं।

  1. एक नया एप्लिकेशन बनाएं और अपना डिवाइस पंजीकृत करें। हम टीटीएन के बुनियादी ज्ञान को मानते हैं, यदि त्वरित प्रारंभ मार्गदर्शिका का संदर्भ नहीं लेते हैं
  2. अपने एप्लिकेशन मेनू में 'एकीकरण' चुनें और फिर 'एकीकरण जोड़ें' चुनें
  3. HTTP एकीकरण का चयन करें
  4. छवि के बाद फ़ील्ड दर्ज करें और अपने ईसी 2 आईपी या सार्वजनिक डीएनएस के साथ बदलें

चरण 13: डाटा प्रोसेसिंग

सेंसर से एकत्र किए गए डेटा T के प्रत्येक टपल के लिए आपको निम्न चरणों का पालन करना होगा:

  1. T के स्थानीय क्षेत्र में आने वाले GPS निर्देशांक वाले tuples का सेट प्राप्त करें। स्थानीय क्षेत्र सभी tuples हैं जो T के आसपास 100 मीटर हैं।
  2. प्रत्येक निकटतम टपल एन के लिए एन में एक्सेलेरोमीटर जेड-अक्ष के वर्ग माध्य की गणना करें। स्यूडोकोड में: माध्य = योग ([x. Z_accel ** 2 के लिए x में निकट]) / निकट। आकार
  3. वर्ग मानक विचलन की गणना करें। स्यूडोकोड में: एसटीडी = योग ([(x. Z_accel ** 2 - माध्य) ** 2 x के लिए निकट में])
  4. इस प्रारूप में आउटपुट: lat, long, Z_accel **2, माध्य, std

स्थानीय क्षेत्र की गणना करने के लिए मीटर में जीपीएस दूरी का उपयोग करें। सी ++ में:

#परिभाषित डी२आर (एम_पीआई / १८०.०)

#define EARTH_RAY 6371 डबल डिस्टेंस(डबल लैट1, डबल लॉन्ग1, डबल लैट2, डबल लॉन्ग2) { डबल डलोंग = (लॉन्ग2 - लॉन्ग1) * D2R; डबल dlat = (lat2 - lat1) * D2R; डबल ए = पाउ (sin(dlat/2.0), 2) + cos(lat1*D2R) * cos(lat2*D2R) * pow(sin(dlong/2.0), 2); डबल सी = 2 * atan2 (वर्ग (ए), वर्ग (1-ए));

अब, पिछले चरण में उत्पन्न मध्यवर्ती डेटा का उपयोग करते हुए, विसंगतियों का पता लगाएं और प्रत्येक पंक्ति पर लागू इस स्निप का उपयोग करके एक भोला वर्गीकरण करें:

लाइन = नक्शा (फ्लोट, लाइन। स्प्लिट ("", "))

v = रेखा [२] माध्य = रेखा [३] एसटीडी = रेखा [४] यदि v (मतलब + एसटीडी * ३): यदि v (मतलब + एसटीडी * २): यदि v (मतलब + एसटीडी): o. संलग्न करें ([१, लाइन [०], लाइन [1]) और: ओ.एपेंड ([२, लाइन [०], लाइन [१]) और: ओ.एपेंड ([३, लाइन [०], लाइन [1])

विसंगतियों को 68–95–99.7 नियम

अब आपके पास इस प्रारूप के साथ एक संग्रह है [प्रकार, अक्षांश, लंबा]।

प्रकार का अर्थ निम्नलिखित है:

  1. थोड़ी सी विसंगति, शायद अप्रासंगिक
  2. मध्यम विसंगति
  3. गंभीर विसंगति

चरण 14: विज़ुअलाइज़ेशन

VISUALIZATION
VISUALIZATION

विज़ुअलाइज़ेशन भाग को समझने और शायद बदलने के लिए हमें सीखना चाहिए कि कस्टम मार्करों का उपयोग कैसे करें, Google मैप्स एपीआई की एक विशेषता

सबसे पहले, मानचित्र को कॉलबैक में प्रारंभ किया जाना चाहिए:

फ़ंक्शन initMap () {

डेटा = क्वेरीडेटा (); नक्शा = नया google.maps. Map (दस्तावेज़.getElementById ('नक्शा'), {ज़ूम: १५, केंद्र: {lat: डेटा [०] [1], lng: डेटा [०] [२]}}); टिप्पणी(); }

एचटीएमएल टैग में यूआरएल में इस कॉलबैक का नाम निर्दिष्ट करें (हमने अपनी एपीआई कुंजी से पहले यहां डाला था):

जब वस्तु बनाई जाती है तो मानचित्र में एक मार्कर डाला जा सकता है:

new google.maps. Marker({ position: {lat: LATITUDE, lng: LONGITUDE}, map: map, icon: "/path/to/icon.png" })

आप कोड में देख सकते हैं कि विसंगतियों के डेटासेट में प्रत्येक डेटा के लिए एक मार्कर डाला गया है (टिप्पणी () फ़ंक्शन देखें) और आइकन विसंगति के वर्ग पर आधारित है। ब्राउज़र में इसे चलाते समय हम एक मानचित्र का पता लगा सकते हैं जिसमें चेकबॉक्स का उपयोग करके विसंगतियों को फ़िल्टर किया जा सकता है, जैसा कि चित्र में देखा गया है।

चरण 15: क्रेडिट और बाहरी लिंक

यह परियोजना रोम के सैपिएन्ज़ा विश्वविद्यालय में कंप्यूटर विज्ञान के छात्रों में इंजीनियरिंग में प्रथम वर्ष के एमएससी, जियोवानी डी लुका, एंड्रिया फियोराल्डी और पिएत्रो स्पैडासिनो द्वारा बनाई गई थी।

  • इस अवधारणा के प्रमाण को प्रस्तुत करने के लिए लेखकों ने स्लाइड का उपयोग किया:

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

  • सभी कोड के साथ GitHub रेपो:

    github.com/roadteam

सिफारिश की: