Оглавление:

Мониторинг дороги: 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 и импортируйте код в репозиторий онлайн-компилятора. Установите целевую платформу на DISCO-L072CZ-LRWAN1 и сохраните проект. Теперь перейдите в Сеть вещей и создайте учетную запись, если у вас ее еще нет. Создайте приложение, создайте новое устройство внутри приложения и установите режим подключения OTAA. Возьмите соответствующие параметры для заполнения следующих полей в файле mbed_app.json: «lora.appskey», «lora.nwkskey», «lora.device-address».

Датчик будет периодически записывать данные акселерометра и GNSS и отправлять их через соединение LoRa на ближайший шлюз, который пересылает их в наше приложение в The Things Network. Следующим шагом является настройка облачного сервера и интеграции HTTP в TTN.

Шаг 3. Настройка облака

Настройка облака
Настройка облака

Теперь мы готовы настроить облачную инфраструктуру, которая будет собирать и агрегировать данные со всех развернутых плат. Эта инфраструктура показана на рисунке ниже и состоит из:

  • Kinesis для обработки входящего потока данных;
  • Лямбда для фильтрации и предварительной обработки данных перед их сохранением;
  • 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 и в Services перейдите в Kinesis.
  2. Теперь вы на главной странице Kinesis. В правой части страницы в разделе «Потоки доставки Kinesis Firehose» выберите «Создать новый поток доставки».
  3. В поле «Название потока доставки» напишите «road-monitoring-stream». В остальных полях оставьте значения по умолчанию и нажмите «Далее».
  4. Теперь в разделе «Преобразование исходных записей с помощью AWS Lambda» выберите «Включено», а в качестве функции Lambda щелкните только что созданный «road-monitoring-lambda». Не беспокойтесь, если появится предупреждение о тайм-ауте функции, поскольку выполняемая нами операция не требует больших вычислительных затрат. В остальных полях оставьте значения по умолчанию и нажмите «Далее».
  5. В качестве назначения выберите Amazon S3, а в качестве назначения S3 выберите «Создать». В качестве названия ведра введите "road-monitoring-bucket" и затем продолжайте. Теперь оставьте остальные поля по умолчанию и нажмите Далее.
  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. Нажмите "Запустить экземпляр".
  3. В верхней строке поиска вставьте этот код: «ami-08935252a36e25f85», это идентификационный код предварительно настроенной виртуальной машины, которую нужно использовать. Нажмите Выбрать справа
  4. Выберите t2.micro в столбце «Тип» и нажмите «Просмотреть и запустить». Пока не запускайте инстанс, переходите к следующему шагу

Шаг 8. Настройте роль безопасности IAM для EC2

Настройка роли безопасности IAM для EC2
Настройка роли безопасности IAM для EC2
  1. Перед запуском мы хотим изменить группу безопасности нашего экземпляра. Для этого в правом углу раздела «Группы безопасности» нажмите «Изменить группы безопасности». Настройте новую группу безопасности следующим образом. Это в основном настраивает брандмауэр вашего экземпляра, открывая порт 22 для соединения SSH и порт 80 для служб
  2. Снова нажмите «Обзор и запуск». Теперь проверьте, что все параметры установлены. Когда закончите, нажмите Запустить
  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 @ ВАШ-IP-АДРЕС-ИЛИ-DNS

где ec2-road-monitoring.pem - ваш ключ, сгенерированный ранее.

Теперь приступим к вытаскиванию серверного кода через

git clone - рекурсивный

Шаг 10. Получите API Карт Google

Получить API Карт Google
Получить API Карт Google

Мы почти закончили. Теперь нам нужно настроить API карт Google на нашей html-странице, чтобы отображать карту с путевыми точками для пользователя:

  1. Войдите в свою учетную запись Google и перейдите на страницу
  2. Нажмите "Начать" в левой части страницы.
  3. Выберите в меню «Карты» и нажмите «Продолжить».
  4. В качестве названия проекта введите «road-monitoring» и нажмите «Далее».
  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

Теперь, когда у нас есть вся бэкэнд-инфраструктура, мы можем приступить к выполнению интеграции

  1. Создайте новое приложение и зарегистрируйте свое устройство. Мы предполагаем базовые знания TTN, если не обращаться к краткому руководству по началу работы.
  2. В меню приложения выберите «Интеграции», а затем «Добавить интеграцию».
  3. Выберите интеграцию
  4. Введите поля, следующие за изображением и заменив их IP-адресом EC2 или общедоступным DNS.

Шаг 13: обработка данных

Для каждого набора данных T, собранных с датчика, вы должны выполнить следующие шаги:

  1. Получите набор кортежей, координаты GPS которых попадают в локальную область T. Локальная область - это все кортежи, которые находятся на 100 метров вокруг T.
  2. Для каждого ближайшего кортежа N вычислить среднее квадратическое значение оси Z акселерометра в N. В псевдокоде: mean = sum ([x. Z_accel ** 2 for x in near]) / near.size
  3. Вычислите квадрат стандартного отклонения. В псевдокоде: 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 двойное расстояние (двойная лат1, двойная долгая1, двойная лат2, двойная длинная2) {двойная длина = (длинная2 - длинная1) * 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 (float, line.split (","))

v = line [2] mean = line [3] std = line [4] if v (mean + std * 3): if v (mean + std * 2): if v (mean + std): o.append ([1, строка [0], строка [1]) else: o.append ([2, строка [0], строка [1]) else: o.append ([3, строка [0], строка [1])

Аномалии классифицируются с использованием правила 68–95–99.7

Теперь у вас есть коллекция с таким форматом [тип, широта, долгота].

Значение типа следующее:

  1. Незначительная аномалия, вероятно, несущественная
  2. Средняя аномалия
  3. Критическая аномалия

Шаг 14: Визуализация

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

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

Во-первых, карта должна быть инициализирована в обратном вызове:

function 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 visible&callback=initMap"

Маркер можно вставить на карту при создании объекта:

новый 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

Рекомендуемые: