Съдържание:

Пътно наблюдение: 15 стъпки
Пътно наблюдение: 15 стъпки

Видео: Пътно наблюдение: 15 стъпки

Видео: Пътно наблюдение: 15 стъпки
Видео: Экзамен в DMV. 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 и импортирайте кода в репото на онлайн компилатора. Задайте целевата платформа на 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

Ще илюстрираме стъпките, необходими за създаване на тази инфраструктура, започвайки от Lambda.

  1. Влезте с вашия AWS акаунт и от главната страница на конзолата и отидете на Lambda
  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“изберете Enabled и като функция Lambda щракнете върху новосъздадения „road-monitoring-lambda“. Не се притеснявайте, ако се появи предупреждение за изчакване на функцията, тъй като операцията, която извършваме, не е скъпо изчисление. Оставете другите полета по подразбиране и щракнете върху напред
  5. Като дестинация изберете Amazon S3 и като S3 дестинация изберете Create New. Като име на кофа въведете ‘road-monitoring-bucket’ и след това отидете. Сега оставете другите полета по подразбиране и щракнете върху Напред
  6. Може да искате да зададете размер на буфера на 1 MB и буферен интервал на 60 секунди. Буферът ще се промива до S3, когато едно от двете условия е изпълнено. Не напускайте страницата, вижте следващата стъпка

Стъпка 6: Настройте ролята на IAM за кинеза

Настройте ролята на IAM за кинеза
Настройте ролята на IAM за кинеза

Сега настройваме разрешенията за сигурност за Kinesis, тъй като тя трябва да извика функцията Lambda за предварителна обработка и след това ще пише на S3

  1. В долната част на страницата, в която сте в „роля на IAM“, изберете „Създаване на нов по избор“, създайте нова роля на IAM, както е на снимката, и щракнете върху Разрешаване
  2. Сега се връщате към предишната страница, щракнете върху следващата. Сега може да искате да проверите отново всички параметри. Когато приключите, кликнете върху „Създаване на поток за доставка“

Тръбопроводът Kinesis-Lambda-S3 работи и работи!

Стъпка 7: Настройте AWS EC2

Настройте AWS EC2
Настройте AWS EC2

Сега ще настроим екземпляр EC2 с някои API, които ще ни позволят да избутваме и изтегляме данни от облака AWS, а също и от сървъра, където да хостваме интерфейса на нашето приложение. В производствената среда може да искате да публикувате API, като използвате по -мащабируемия AWS API шлюз.

  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-monitoring“. Щракнете върху Изтегляне на двойка ключове. Изключително важно е този файл да се загуби или (по -лошо) да се съхранява несигурно: няма да можете да изтеглите ключа отново. След като изтеглите ключа.pem, инстанцията е готова за стартиране

Стъпка 9: Достъп до вашия EC2 екземпляр

Достъп до вашия EC2 Instance
Достъп до вашия EC2 Instance

Вашият нов 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: Изтеглете API на Google Карти

Изтеглете API на Google Карти
Изтеглете API на Google Карти

Почти свършихме. Сега трябва да настроим API на google maps в нашата 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“

Въведете във вашия браузър ip или dns адреса на вашия EC2 екземпляр, трябва да видите картата на аномалиите с някои фиктивни данни

Стъпка 12: Извършете HTTP интеграция в мрежата Things

Извършете HTTP интеграция в мрежата Things
Извършете HTTP интеграция в мрежата Things

Сега, когато имаме цялата базирана инфраструктура и работи, можем да обработим, за да извършим HTTP интеграцията.

  1. Създайте ново приложение и регистрирайте устройството си. Ние приемаме основни познания за TTN, ако не се отнасяме към ръководството за бърз старт
  2. В менюто на приложението изберете „Интеграции“и след това „добавете интеграция“
  3. Изберете HTTP интеграция
  4. Въведете полетата след изображението и ги заменете с вашия EC2 ip или публичен DNS

Стъпка 13: Обработка на данни

За всеки набор от данни T, събрани от сензора, трябва да изпълните следните стъпки:

  1. Вземете набора от кортежи, които имат GPS координати, попадащи в локалната област на Т. Локалната област е всички кортежи, които са на 100 метра около T.
  2. За всеки най-близък кортеж N изчислете квадратната средна стойност на оста Z на акселерометъра в N. В псевдокод: средна стойност = сума ([x. Z_accel ** 2 за x в близост]) / near.size
  3. Изчислете квадратното стандартно отклонение. В псевдокод: std = сума ([(x. Z_accel ** 2 - средно) ** 2 за x в близост])
  4. Изход в този формат: lat, long, Z_accel ** 2, mean, std

За да изчислите местната област, използвайте GPS разстоянието в метри. В C ++:

#define 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] 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

Сега имате колекция с този формат [type, lat, long].

Значението на типа е следното:

  1. Лека аномалия, вероятно без значение
  2. Средна аномалия
  3. Критична аномалия

Стъпка 14: Визуализация

Визуализация
Визуализация

За да разберем и може би да променим частта за визуализация, трябва да се научим как да използваме персонализирани маркери, функция на API на Google Карти

Първо, картата трябва да бъде инициализирана при обратно повикване:

функция initMap () {

данни = queryData (); map = new google.maps. Map (document.getElementById ('map'), {zoom: 15, center: {lat: data [0] [1], lng: data [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 repos с целия код:

    github.com/roadteam

Препоръчано: