สารบัญ:

การตรวจสอบถนน: 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 ดาวน์โหลดรหัสเฟิร์มแวร์จาก 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: การตั้งค่า Cloud

การตั้งค่าคลาวด์
การตั้งค่าคลาวด์

ตอนนี้เราพร้อมที่จะตั้งค่าโครงสร้างพื้นฐานระบบคลาวด์ที่จะรวบรวมและรวบรวมข้อมูลจากกระดานที่ใช้งานทั้งหมด โครงสร้างพื้นฐานนี้แสดงในรูปด้านล่างและประกอบด้วย:

  • Kinesis เพื่อจัดการกับกระแสข้อมูลที่เข้ามา
  • แลมบ์ดา เพื่อกรองและประมวลผลข้อมูลล่วงหน้าก่อนจัดเก็บ
  • S3 เพื่อเก็บข้อมูลทั้งหมด
  • EC2 เพื่อวิเคราะห์ข้อมูลและโฮสต์ส่วนหน้าของเรา

ขั้นตอนที่ 4: ตั้งค่า AWS Lambda

ตั้งค่า AWS Lambda
ตั้งค่า AWS Lambda

เราจะอธิบายขั้นตอนที่จำเป็นในการตั้งค่าโครงสร้างพื้นฐานนี้ โดยเริ่มจาก Lambda

  1. เข้าสู่ระบบด้วยบัญชี AWS ของคุณและจากหน้าหลักของคอนโซลแล้วไปที่ Lambda
  2. คลิกที่สร้างฟังก์ชัน
  3. ในส่วนบนของหน้าควรเลือก Author จาก Scratch จากนั้นกรอกข้อมูลในช่องอื่นๆ ตามภาพ แล้วคลิก Create Function
  4. เมื่อคุณได้สร้างฟังก์ชัน AWS Lambda แล้ว ให้ไปที่ https://github.com/roadteam/data-server และคัดลอกเนื้อหาของไฟล์ aws_lambda.py ลงในตัวแก้ไขที่คุณพบในครึ่งหลังของหน้า ฟังก์ชัน Lambda ของคุณพร้อมแล้ว:)

ขั้นตอนที่ 5: ตั้งค่า AWS Kinesis Firehose Data Stream

ตั้งค่าสตรีมข้อมูล AWS Kinesis Firehose
ตั้งค่าสตรีมข้อมูล AWS Kinesis Firehose
  1. กลับไปที่หน้าหลักของคอนโซล AWS และไปที่บริการไปที่ Kinesis
  2. ตอนนี้คุณอยู่ในหน้าหลักของ Kinesis แล้ว ที่ด้านขวาของหน้า ใต้ 'Kinesis Firehose delivery streams' ให้เลือก 'Create new delivery stream'
  3. ใน 'ชื่อสตรีมการจัดส่ง' ให้เขียน 'การตรวจสอบถนน - สตรีม' ปล่อยให้ฟิลด์อื่นเป็นค่าเริ่มต้นและคลิกถัดไป
  4. ตอนนี้ภายใต้ 'แปลงระเบียนต้นทางด้วย AWS Lambda' ให้เลือกเปิดใช้งาน และเมื่อฟังก์ชัน Lambda คลิกที่ 'การตรวจสอบถนน-แลมบ์ดา' ที่สร้างขึ้นใหม่ ไม่ต้องกังวลหากคำเตือนเกี่ยวกับการหมดเวลาของฟังก์ชันปรากฏขึ้น เนื่องจากการดำเนินการที่เราทำอยู่นั้นไม่แพงในการคำนวณ ปล่อยให้ฟิลด์อื่นเป็นค่าเริ่มต้นและคลิกถัดไป
  5. เมื่อปลายทางเลือก Amazon S3 และสำหรับปลายทาง S3 ให้เลือกสร้างใหม่ ตามชื่อที่ฝากข้อมูล ให้ป้อน 'road-monitoring-bucket' แล้วไป ตอนนี้ปล่อยให้ฟิลด์อื่นเป็นค่าเริ่มต้นแล้วคลิกถัดไป
  6. คุณอาจต้องการตั้งค่าขนาดบัฟเฟอร์เป็น 1MB และช่วงเวลาบัฟเฟอร์เป็น 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 Cloud และเซิร์ฟเวอร์ที่จะโฮสต์ส่วนหน้าของแอปพลิเคชันของเรา ในสภาพแวดล้อมการใช้งานจริง คุณอาจต้องการเผยแพร่ API โดยใช้ AWS API Gateway ที่ปรับขนาดได้มากขึ้น

  1. จากหน้าหลักของคอนโซล AWS ให้ไปที่บริการ EC2
  2. คลิกที่เปิดตัวอินสแตนซ์
  3. ในแถบค้นหาด้านบน ให้วางรหัสนี้: 'ami-08935252a36e25f85' ซึ่งเป็นรหัสประจำตัวของเครื่องเสมือนที่กำหนดค่าไว้ล่วงหน้าเพื่อใช้ คลิกเลือกทางด้านขวา
  4. เลือก t2.micro จากคอลัมน์ "ประเภท" แล้วคลิก "ตรวจสอบและเปิดใช้" อย่าเพิ่งเปิดอินสแตนซ์ ไปที่ขั้นตอนถัดไป

ขั้นตอนที่ 8: ตั้งค่า IAM Security Role สำหรับ EC2

ตั้งค่าบทบาทความปลอดภัย IAM สำหรับ EC2
ตั้งค่าบทบาทความปลอดภัย IAM สำหรับ EC2
  1. ก่อนเปิดตัว เราต้องการแก้ไขกลุ่มความปลอดภัยของอินสแตนซ์ของเรา ในการดำเนินการนี้ ที่ด้านขวาสุดของส่วน 'กลุ่มความปลอดภัย' ให้คลิก 'แก้ไขกลุ่มความปลอดภัย' ตั้งค่ากลุ่มความปลอดภัยใหม่ดังนี้ โดยทั่วไปจะกำหนดค่าไฟร์วอลล์ของอินสแตนซ์ของคุณที่เปิดเผยพอร์ต 22 สำหรับการเชื่อมต่อ SSH และพอร์ต 80 สำหรับบริการ
  2. คลิกอีกครั้ง 'ตรวจสอบและเปิดใช้' ตอนนี้ตรวจสอบว่ามีการตั้งค่าพารามิเตอร์ทั้งหมดแล้ว เมื่อเสร็จแล้วให้คลิก Launch
  3. เมื่อคลิก หน้าต่างใหม่จะปรากฏขึ้นเพื่อตั้งค่าคู่คีย์สำหรับการเชื่อมต่อ ssh กับอินสแตนซ์ เลือก 'สร้างคู่คีย์ใหม่' และป้อนชื่อ 'ec2-road-monitoring' คลิกดาวน์โหลดคู่คีย์ เป็นสิ่งสำคัญอย่างยิ่งที่ไฟล์นี้จะสูญหายหรือ (ที่แย่กว่านั้น) ถูกเก็บไว้อย่างไม่ปลอดภัย: คุณจะไม่สามารถดาวน์โหลดคีย์ได้อีก เมื่อดาวน์โหลดคีย์.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 --recursive

ขั้นตอนที่ 10: ดึง Google Maps API

เรียก Google Maps API
เรียก Google Maps API

เราเกือบเสร็จแล้ว ตอนนี้ เราต้องตั้งค่า google maps API ในหน้า html ของเรา เพื่อแสดงแผนที่พร้อม waypoints ให้ผู้ใช้เห็น:

  1. ลงชื่อเข้าใช้บัญชี Google ของคุณและไปที่
  2. คลิกเพื่อ 'เริ่มต้น' ทางด้านซ้ายของหน้า
  3. เลือก 'แผนที่' ในเมนูแล้วคลิกดำเนินการต่อ
  4. เมื่อชื่อโครงการป้อน 'การตรวจสอบถนน' แล้วคลิกถัดไป
  5. ป้อนรายละเอียดการเรียกเก็บเงินของคุณแล้วคลิกดำเนินการต่อ
  6. ตอนนี้โปรเจ็กต์ของคุณพร้อมแล้ว และเรากำลังจะรับคีย์ API โดยคลิกไปที่ APIs & Services -> Credentials

ขั้นตอนที่ 11: เปิดเซิร์ฟเวอร์

เปิดเซิร์ฟเวอร์
เปิดเซิร์ฟเวอร์

และนั่นคือคีย์ API ของคุณ สิ่งสุดท้ายที่คุณต้องทำคือไปที่ data_visualization/anomalies_map.html และคัดลอกคีย์ของคุณไปที่ท้ายไฟล์โดยแทนที่ "YOUR-KEY-HERE"

ตอนนี้ทุกอย่างพร้อมและพร้อมที่จะไป! เพื่อให้เริ่มดำเนินการในอินสแตนซ์ EC2: 'cd data-server' 'python flask_app.py'

ป้อนที่อยู่ IP หรือ DNS ของอินสแตนซ์ EC2 ในเบราว์เซอร์ของคุณ คุณควรเห็นแผนที่ความผิดปกติพร้อมข้อมูลจำลอง

ขั้นตอนที่ 12: ดำเนินการรวม HTTP บนเครือข่ายของสิ่งต่าง ๆ

ทำการรวม HTTP บนเครือข่าย Things
ทำการรวม HTTP บนเครือข่าย Things

ตอนนี้เรามีโครงสร้างพื้นฐานแบ็กเอนด์ทั้งหมดและทำงานแล้ว เราสามารถดำเนินการเพื่อดำเนินการรวม HTTP ได้

  1. สร้างแอปพลิเคชันใหม่และลงทะเบียนอุปกรณ์ของคุณ เราถือว่าความรู้พื้นฐานเกี่ยวกับ TTN หากไม่อ้างอิงจากคู่มือการเริ่มต้นฉบับย่อ
  2. ในเมนูแอปพลิเคชันของคุณ ให้เลือก 'การผสานการทำงาน' แล้ว 'เพิ่มการรวม'
  3. เลือกการรวม
  4. ป้อนฟิลด์ตามหลังรูปภาพและแทนที่ด้วย EC2 ip หรือ DNS สาธารณะของคุณ

ขั้นตอนที่ 13: การประมวลผลข้อมูล

สำหรับแต่ละทูเพิลของข้อมูล T ที่รวบรวมจากเซ็นเซอร์ คุณต้องทำตามขั้นตอนต่อไปนี้:

  1. รับชุดของ tuples ที่มีพิกัด GPS ตกในพื้นที่ท้องถิ่นของ T. พื้นที่ในพื้นที่คือ tuples ทั้งหมดที่ 100 เมตรรอบ T.
  2. สำหรับแต่ละทูเพิลที่ใกล้ที่สุด N คำนวณค่าเฉลี่ยกำลังสองของมาตรความเร่งในแกน Z ใน N ในโค้ดเทียม: ค่าเฉลี่ย = ผลรวม ([x. Z_accel ** 2 สำหรับ x ใกล้]) / ใกล้ขนาด
  3. คำนวณค่าเบี่ยงเบนมาตรฐานกำลังสอง ใน pseudocode: std = sum ([(x. Z_accel ** 2 - หมายถึง) ** 2 สำหรับ x ใกล้])
  4. เอาต์พุตในรูปแบบนี้: lat, long, Z_accel **2, mean, std

ในการคำนวณพื้นที่ให้ใช้ระยะทาง GPS เป็นเมตร ใน C ++:

#define D2R (M_PI / 180.0)

#define EARTH_RAY 6371 ระยะทางสองเท่า (ดับเบิล lat1, double long1, double lat2, double long2) { double dlong = (long2 - long1) * D2R; ดับเบิล 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(ลอย, line.split(", "))

v = line[2] หมายถึง = line[3] std = line[4] ถ้า v (mean + std*3): ถ้า v (mean + std*2): ถ้า v (mean + std): o.append([1, line[0], line[1]) else: o.append([2, line[0], line[1]) อื่น: o.append([3, line[0], line[1])

ความผิดปกติถูกจำแนกโดยใช้กฎ 68–95–99.7

ตอนนี้คุณมีคอลเล็กชันที่มีรูปแบบนี้แล้ว [type, lat, long]

ความหมายประเภทมีดังต่อไปนี้:

  1. ความผิดปกติเล็กน้อยอาจไม่เกี่ยวข้อง
  2. ความผิดปกติปานกลาง
  3. ความผิดปกติที่สำคัญ

ขั้นตอนที่ 14: การสร้างภาพ

การสร้างภาพ
การสร้างภาพ

เพื่อให้เข้าใจและอาจเปลี่ยนส่วนการแสดงภาพ เราต้องเรียนรู้วิธีใช้เครื่องหมายที่กำหนดเอง ซึ่งเป็นคุณลักษณะของ Google Maps API

ประการแรก แผนที่จะต้องเริ่มต้นในการโทรกลับ:

ฟังก์ชัน initMap() {

ข้อมูล = แบบสอบถามข้อมูล (); map = new google.maps. Map(document.getElementById('map'), { ซูม: 15, กึ่งกลาง: {lat: data[0][1], lng: data[0][2]} }); สังเกต(); }

ระบุชื่อของการโทรกลับนี้ใน url (เราใส่ที่นี่ก่อนคีย์ API ของเรา) ในแท็ก HTML:

สามารถแทรกเครื่องหมายลงในแผนที่เมื่อสร้างวัตถุ:

google.maps. Marker ใหม่ ({ ตำแหน่ง: {lat: LATITUDE, lng: LONGITUDE} แผนที่: แผนที่ ไอคอน: “/path/to/icon.png” })

คุณสามารถดูได้ในโค้ดที่แทรกเครื่องหมายสำหรับแต่ละข้อมูลในชุดข้อมูลของความผิดปกติ (ดูฟังก์ชันหมายเหตุ ()) และไอคอนจะขึ้นอยู่กับคลาสของความผิดปกติ เมื่อเรียกใช้สิ่งนี้ในเบราว์เซอร์ เราสามารถสำรวจแผนที่ซึ่งสามารถกรองสิ่งผิดปกติได้โดยใช้ช่องทำเครื่องหมาย ดังที่เห็นในภาพ

ขั้นตอนที่ 15: เครดิตและลิงค์ภายนอก

โครงการนี้จัดทำโดย Giovanni De Luca, Andrea Fioraldi และ Pietro Spadaccino นักศึกษาปริญญาโทสาขาวิศวกรรมศาสตร์สาขาวิทยาการคอมพิวเตอร์ปีแรกแห่งมหาวิทยาลัย Sapienza แห่งกรุงโรม

  • สไลด์ที่ผู้เขียนใช้เพื่อนำเสนอการพิสูจน์แนวคิดนี้:

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

  • GitHub repos พร้อมรหัสทั้งหมด:

    github.com/roadteam

แนะนำ: