/noisemap

The project for MUF-Labs hackathon

Primary LanguageHTML

Описание проекта

Данный проект получил свое начало во время создание приложения Walkstreets. Стояла задача дешево и сердито эффективно получать картину распространения шума в городе, чтобы обогащать пешеходный граф "бонусами" за тишину местности. Тогда мы нашли в просторах интернета великолепную идею Лукаса Мартинелли, от которой мы получили вдохновение.

В данном проекте мы развили методику Лукаса.

Во-первых, мы изменили подход к расчету буферов распространения шума до 65, 55 и 45 децибел. Сначала мы просто воспользовались формулой распространения шума из точки(источника). Затем мы усовершенствовали формулу, добавив туда изменения радиуса распространения шума в зависимости от плотности застройки. Мы также автоматизировали процесс создания полигонов шума, что, безусловно, помогло более эффективно оценивать правдоподобность результатов и вносить изменения.

Во-вторых, мы добавили возможность пользователям сделать данные более реальными. Очевидно, что процесс сбора данных о шумовом загрязенении в городе является дорогостоящим и трудоемким процессом. Поэтому мы разработали технологию внедрения реальных данных в данную модель шума при помощи специальных датчиков, которая включает алгоритм распознавания типа источника шума и нахождение в пространственном окружении объекта, создавшего его. Далее будет представлено, как можно создать свою карту шума, собрать собственный датчик и усовершенствовать картину в сторону большего правдоподобия.

Как создать свою карту шума?

Создание карты шума начинается с извлечения данных OSM из overpass-turbo. Мы предлагаем Вам воспользоваться нашим запросом, пример которого находится в /noise-constructor/overpass_query.txt. Вы можете написать свой запрос или модифицировать наш, однако может возникнуть необходимость внести изменения в файл /noise-constructor/tags.csv, в котором находятся оценки уровня шума в точке для разных классов объектов OSM. Выгрузку необходимо сделать в формате .geojson. Затем, файл необходимо назвать export.geojson и поместить в папку /noise-constructor. Также необходимо выгрузить геометрию домов для области, в которой Вы собираетесь создать карту шума. Для этого вы можете воспользоваться overpass-turbo или другими источниками данных OSM. Данные должны быть в виде полигонов .geojson помещены в папку /noise-constructor. Файл должен называться houses.geojson.

1.После этого необходимо запустить скрипт overpass_data_processing.py, который обработает выгруженные данные.

cd .../noisemap/noise-constructor

python overpass_data_processing.py

2.Далее необходимо запустить скрипт, который создаст сетку полигонов, которая будет необходима для расчетов плотности застройки и эффективной работы с геометрией позже.

python make_density_grid.py

3.После этого необходимо выполнить скрипт, который непосредственно создаст полигоны с геометрией распространения шума. Время работы скрипта напрямую зависит от объема данных, выгруженных из overpass-turbo. После этого в директории появится файл dissolved.geojson, который будет использоваться для визуализации.

python noise_mapping.py

4.Из корневой директории проекта необходимо поднять локальный http-сервер командой(вместо порт поставьте любой свободный порт(например, 8000)):

cd .../noisemap

python -m SimpleHTTPServer [port]

5.Далее необходимо открыть файл demo.html, на котором, в случае успешного выполнения всех предыдущих шагов будет созданнная Вами карта шума.

Если Вы визуализируете карту территории, которая не находится в Москве, то вам необходимо изменить географическую UTM проекцию c EPSG:32637 на соответствующую Вашей территории в файлах make_density_grid.py,noise_mapping.py,process_data_from_sensor.py.

Как создать свой датчик?

Комплектация

Итак, для датчика нам понадобятся Orange Pi Zero ( на самом деле можно выбирать любое устройство из линейки, но во время испытаний эта модель не вызвала никаких нареканий), высокочувствительный микрофон ( желательно микрофоны для систем наружного видеонаблюдения, т.к. они обладают достаточной чувствительностью, подавлением внутренних шумов усилителя и дальностью), в нашем случае отечественный микрофон линейки Шорох ( главное чтобы он был без АРУ), а именно шорох-11.

Питание

Так как мы собираемся вести стационарные замеры до 16 часов, нужен аккумулятор с достаточной емкостью. Если в среднем orange pi потребляет от 400-800 мА ( хотя в документации и рекомендуется брать блоки питания на 3А) нам понадобится power bank на 10 000 мА и желательно с выходом на 2А. Опять же, это если вы собираетесь писать все 16 часов и если потребляемый ток будет в среднем около 600 мА. Так как большинство нужных нам микрофонов питаются от 7 до 12 В, то нужно предусмотреть отдельно питание для микрофона. Стоит отметить что микрофон будет работать и с 5 В, но будет присутствовать некий потолок по амплитуде.

Есть 3 варианта:

  1. С 5 вольтового выхода Orange Pi через повышающий DC-DC преобразователь и при наличии мультиметра установить нужное питание. Питать через li-ion аккумуляторы, для возможности подзарядки последних. Можно подключить последовательно два аккумулятора на 3.7 вольта и емкостью от 1000-2100 мА, что хватит на долго, т.к. потребляемый ток микрофона будет от 10-30 мА, или 1 такой аккумулятор и повышающий DC-DC преобразователем.
  2. Вариант питать через крону, но ее емкости не хватит и на 1 день.
  3. Остается только купить провода мама-мама, набор для пайки, если такой не имеется и все.

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

Охлаждение

Т.к. orange pi сильно греется, надо будет купить радиаторы (есть специально для семейства pi) и желательно кулер 40х40 желательно на 5 В. Так же нам нужен корпус. Здесь уже полет для вашей фантазии. Можно купить готовые корпуса для orange pi, можно купить любую другую достаточно плотную коробку нужного размера. Лично я вообще брал распаячную коробку из Леруа Мерлен, т.к. на ней есть углубление, в которое можно засунуть болт и потом крепить датчик с помощью хомута на любой столб. Крепление устройства это тоже полет для вашей фантазии.

Прошивка OrangePi

В интернетах есть миллион различных гайдов как это сделать. Лично я пользовался этим, там довольно подробно и доступно все описано что нужно делать:

Там вам понадобятся пункты установка и настройка. В пункте настройки вам нужно только обновить систему и настроить часовой пояс, все остальное не нужно.

Далее нужно поставить тулзы для Python, на котором работает наш скрипт по записи. Запускайте каждую сточку по отдельности для мониторинга возможных ошибок.

sudo apt-get install python-pip python-dev

Далее ставим библиотечки для работы нашего скрипта.

sudo pip install requests

sudo pip install setuptools

sudo apt-get install libffi-dev

sudo pip install cffi

sudo pip install sounddevice

Далее создаем папку /urbica в /home и закидываем с помощью WinSCP(scp для Linux и Mac) папку /python-sound в папку /home/urbica. Сама папка python-sound будет отдельно в архиве. Настройка готова. Далее нужно собрать все вместе: Image1 Или Image2

Все что остается это собрать все в коробку, подать питание и в консоли через ssh написать:

сd /home/urbica/python-sound

python sound-sender.py

Профит! Ваш датчик пишет записи с частотой в 1 минуту и складывает записи в папку /home/urbica/python-sound/records/.

Как правильно повесить датчик?

Не кладите датчик под березку. Не оставляйте его там на три дня.

  1. Найдите на карте место, на котором вы сможете получить максимально репрезентативные данные : где есть звуковая доминанта, где достаточно места от экранирующих поверхностей, куда есть круглосуточный свободный доступ.
  2. При установке датчика учтите, что он должен быть помещен на достаточное расстояние не только от экранирующих поверхностей и конструкций близлежащих сооружений, но и от земли. ГОСТ 53187-2008 рекомендует соблюдать 4-х или полутораметровое удаление.
  3. Учтите, что нужно сориентировать датчик так, чтобы он был направлен в сторону звуковой доминанты или наиболее интересующего вас объекта. В случае отсутствие такого — в сторону наименьшего количества отражающих поверхностей.
  4. Не стоит забывать и о естественных факторах, влияющих на запись шума. Например, датчик стоит располагать в отдалении от деревьев, местностей с повышенной скоростью ветра и тд.
  5. Датчик, по крайне мере, в нашей конфигурации, не обладает значительными влаго- и водонепроницаемыми свойствами, поэтому необходимо или эти свойства обеспечить путем модификации или крепить датчик с использованием механизма быстрого демонтажа (как в нашем случае). К тому же, простое крепление датчика упростит его установку в условиях неблагоприятных погодных и других условий.

Как актуализировать модель шума при помощи собранных данных?

Значит, Вы классный(-ая), и собрали датчик, а потом еще и собрали данные при помощи него. Мир любит таких, как Вы!^^ Осталось только актуализировать Вашу карту шума при помощи Вашего полевого исследования.

Вам необходимо выгрузить папку /records с данными, собранными Вашим датчиком и положить ее в папку /noise-constructor.

К сожалению, наш датчик еще не умеет определять свою локацию, поэтому Вам придется руками прописать координаты места, где датчик собирал данные, в формате долгота,широта в файле location.txt. Данный файл нужно положить в папку /noise-constructor/records.

Затем, Вам необходимо запустить скрипт process_data_from_sensor.py:

cd .../noisemap/noise-constructor

python process_data_from_sensor.py

В папке /records появится файл new_tags.csv, в котором будут находиться новые оценки уровня шума в точке для разных объектов OSM. Теперь Вы можете заменить tags.csv в папке /noise-constructor на new_tags.csv, переименовав послений в tags.csv и повторить шаги построения карты шума, чтобы получить новую карту распространения шума.