Позиционирование в помещении с помощью нейросети по сигналу Wi-Fi. Интерактивная карта склада в 1С с показом позиции

09.08.18

Разработка - Инструментарий разработчика

Данная публикация содержит в себе редактор и интерактивную карту склада или иного помещения, на которой в реальном времени отображается позиция устройства, координаты которого вычисляются по уровням сигнала нескольких роутеров Wi-Fi. В статье и приложенным к ней разработкам предлагаются инструменты и методика для реализации вычисления точной геопозиции внутри помещений с помощью нейронной сети. Конфигурация написана на релизе 1С:Предприятие 8.3.12.1412, клиентское приложение имеет минимальный уровень совместимости SDK -16.

Скачать файлы

Наименование Файл Версия Размер
Демо база с обработкой "Карта склада"
.dt 268,13Kb
22
.dt 268,13Kb 22 Скачать
apk-файл
.apk 1,22Mb
15
.apk 1,22Mb 15 Скачать

Интерактивная карта

Прежде чем приступать к позиционированию нужно обеспечить визуализацию. Карта должна быть не просто растровой картинкой, на ней должны быть объекты (стеллажи и т.д.). Это нужно для постоянной подстройки точности позиционирования по данным от WMS-системы. Значит нужен визуальный редактор по типу векторного который свяжет объекты WMS-системы с планом помещения.

Для создания такого редактора использовал внешнюю компоненту NativeDraw из публикации //infostart.ru/public/378415/

С ней очень удобно работать, но вот только я не нашел как получить координаты мыши относительно Холста. Доступны общие координаты на экране, но холст занимает часть экрана. Поэтому пришлось немного поколхозить – т.к. мне нужны координаты точки на холсте то перед началом работы с редактором обработка просит провести калибровку. Нужно указать координаты левого верхнего и правого нижнего угла (тут имеется ввиду углы прямоугольника, обведенные черной рамкой). Предполагается что работа с картой будет проводиться при окне 1С раскрытом на полный экран, т.е. коодинаты холста не будут смещаться никогда, иначе позиция мыши относительно холста будет неверной.  Тогда можно провести повторную калибровку и для этого есть кнопка «Сбросить калибровку». В целом это единственное затруднение. Может его можно обойти по другому и кто то подскажет как?

Работа с картой построена на добавлении 3х видов объектов: ячеек (имеются ввиду стеллажи вид сверху), меток и просто текстовых надписей. При добавлении ячейки можно задать количество ячеек, размер на карте, направление в котром они будут отрисованы и нумероваться. При добавлении текста и меток указывается текст. Когда добавляется объект – происходит добавление строки в таблицу объектов (справа) а потом отрисовка на карте. Можно работать с объектом через таблицу – например поменять координаты X и Y и тогда объект сдвинется. Или удалить объект, например ячейку в центре ряда.

Также чтобы не рисовать схему на чистом листе удобно «подложить» реальную фотку плана склада. Для этого используется кнопка «Установить фон карты»

В таблице есть галка «отправить на ТСД» и «Название ТСД». Это выбор мест на карте которые будут отпрвлены на клиент, а название – как оно будет отображаться на ТСД на первичном обучении. Оно заполняется по умолчанию и его можно подредактировать чтобы оператору было понятнее. Когда есть эта пометка на карте такие объекты выделяются красным. Кстати тут подумалось что из этого получился бы неплохой «морской бой» т.к. ячейки с красным выделением очень похожи на «ранен»))

В целом получается что все объекты карты просто хранятся в таблице и их можно в любой момент отредактировать. В базу они записываются в Хранилище значений и потом из него достаются. Как в векторных редакторах.

 

Получился редактор, который можно еще развить и использовать в различных целях. Если кому то не интересно позиционирование, но он хочет например визуализировать лог перемещений кладовщика по ячейкам то достаточно передавать в «лог координат» координаты ячеек. Перемещение можно изобразить в виде многоугольника. В текущем редакторе текущее положение отображается в виде зеленого кружочка.

 

Позиционирование

Для позиционирования используется принцип измерения уровня сигнала от роутеров Wi-Fi расположенных в разных разнесенных точках помещения. В текущей реализации мне было достаточно 3х роутеров. Повысится ли точность измерения если добавить еще роутеров – возможно да.

Самое интересное начинается при обработке этой информации. Как я выяснил для подобного позиционирования используется 2 принципа: 1) триангуляция (такой метод использует Cisco) 2)метод паттернов – запоминание состояния сигналов во всех точках. Мне было интересно предложить и испробовать свой метод.

Сначала нужно пояснить особенности задачи:

1-я особенность заключается в том, что на складе постоянно меняется заполняемость стеллажей это влияет на уровень сигнала. Так, коробки с чем то металлическим являются препятствием и сильно ослабляют сигнал. А завтра их уберут и уровень сигнала в той же точке будет совсем другим. Но нам то надо показать на карте то же самое место...

2-я особенность заключается в том что мы постоянно получаем точные данные от WMS о сканировании ячеек. А ячейки привязаны к конкретным координатам. Т.е. мы постоянно получаем точные данные для корректировки. Как видно 2я особенность позволяет бороться с 1й и это существенно влияет на методику.  Если делать систему без учета этой особенности то она будет не очень достоверной.

Сначала я хотел сделать триангуляцию с постоянной корректировкой данных от сканирования ячеек. Но потом подумал «это же очень похоже на обучение с подкреплением» и решил проверить как поведет себя простейший перцептрон из моего же поста с обработкой этих данных.

 

Для того чтобы иметь возможность постоянно снимать данные с ТСД, параллельно работая в другой программе я сделал нативного клиента для андроид устройств, который имеет свой web-сервер для приема запросов от 1С (используется NanoHTTPD https://github.com/NanoHttpd/nanohttpd) Подобная технология «очень тонкий клиент на Android+ обмен HTTP запросами» очень хорошо себя показала как замена связки RDP+1C. Ну и возможностей у нативного приложения конечно несравнимо больше чем у 1С мобильной платформы. Данное решение можно рассматривать как пример такого рода взаимодействия на котром можно строить другие решения, тот же WMS-клиент или клиент для службы доставки.

Для работы надо установить приложение на устройство (скачав apk-файл из статьи или из маркета). При первом запуске надо зайти в настройки и отсканировать 3 сети которые будут передавать сигнал. Можно и вручную SSID забить. Далее включить сервер в приложении и в принципе все. Приложение может быть перекрыто но сервер все равно работает.В приложении в настройках надо указать адрес сервиса как показано на картинке.

Со стороны 1С также публикуется веб сервис для приема запросов (в процессе обучения).

В 1С в константе надо указать адрес сервиса приложения без "http://":

 

Первичное обучение. Нужно выделить объекты по которым надо получить координаты. И нажать кнопку «Запустить первичное обучение на ТСД». На ТСД появится такой диалог.

Далее надо переходить (ногами) к точкам указанным на экране и отправлять данные в 1С нажимая на кнопку. В результате в 1С данные будут записаны в регистр «Лог координат» с пометкой «Первичное обучение». Собственно это и есть данные для обучения. После того как точки кончатся на клиенте всплывет тост о том что обучение закончится. В 1С надо нажать кнопку «Обучить сеть в 1-й раз». После этого можно включать показ координат и пользоваться картой.

Переобучение. В процессе работы в 1С поступают данные о сканировании ячеек, это значит что терминал находится рядом с этой ячейкой и эти координаты можно считать эталоном. Такие данные записываются в «Лог координат» с заполненным полем «Адрес» . Вместе с этим записывается уровень сигнала с роутеров. По этим данным можно периодически переобучать сеть. Для переобучения в тестовой базе есть кнопка «Переобучить сеть»

Ну и собственно результат. Нажав на кнопку «Включить показ положения» запускается обработчик ожидания который периодически посылает запрос клиенту, получает данные о сигнале, отправляет в 1С, 1С это пропускает через нейросеть которая выдает координаты X и Y на карте и рисуется зеленый кружок.

 

Области применения

 

  • Как API для приложения клиентов в торговых центрах для того, чтобы покупатели могли ориентироваться в ТЦ/магазинах. Например мебельных, строительных – там где большая территория
  • Размещение товара в торговом зале/складе по принципу «товаровед поставил метку – отправил задание – исполнителю высветилось место назначения/маршрут»
  • Складские территории с сложной топологией для облегчения ориентирования
  • Как технология для автоматизированных складов

 

Итоги

Я специально не стал писать о том какая сеть используется, сколько скрытых слоев и нейронов и т.д. Это все достаточно индивидуально и может быть настроено в обработке под конкретное помещение. Также можно использовать другие архитектуры или другие мат. методы, можно пользоваться сервисами Azur например или кому что нравится. Как показали отзывы к моей статье про нейросети в сообществе есть люди отлично разбирающиеся в вопросе. Единственное что можно порекомендовать – точки для обучения должны охватывать в том числе границы объекта – т.е. если это комната  то померить в 4й углах и где нибудь в центре.

 В результате испытаний была достигнута неплохая точность и стабильность. Надо заметить что позиционирование хорошо работает когда сигнал каждого из роутеров изменяется в широком диапазоне - т.е. они удалены на достаточное расстояние и равноудалены друг от друга. В целом результаты котрые выдает сеть получаются адекватными. Я не могу написать точность в метрах или сантиметрах, т.к. моя методика не оперирует данными в этой размерности. Нейросеть оперирует пикселями на экране и величиной dBm. Магия нейросети как раз позволяет не разбираясь в методах триангуляции, не имея карты с физическими размерами и оперируя такими абстрактными вещами как dBm и пиксели на картинке построить между ними зависимость. На данной технической инфраструктуре можно построить и другие  методы обработки данных в т.ч. и классическую триангуляцию.

позиционирование по Wi-Fi нейросети карта склада план помещения геопозиционирование нейронная сеть

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 руб.

02.09.2020    119906    656    389    

701

Infostart PrintWizard

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 руб.

06.10.2023    7007    20    6    

37

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 руб.

10.11.2023    3242    10    1    

31

SALE! 30%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 2520 руб.

14.01.2013    177340    1070    0    

846

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99202    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    17909    6    8    

38

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    27945    3    10    

14

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23486    15    15    

31
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. nyam-nyam 09.08.18 10:48 Сейчас в теме
Никак не могу придумать зачем это может понадобиться на практике., хотя если ещё калькулятор калорий прикрутить и запись треков с показом на карте...
ivorontsov; kild; +2 Ответить
2. neikist 09.08.18 10:53 Сейчас в теме
(1) В смысле? Как раз для ориентирования по складу. Ну или для ремонтников поиск конкретного оборудования в цехах. И еще куча вариантов.
SergeyTerentyev; +1 Ответить
5. nyam-nyam 09.08.18 11:29 Сейчас в теме
(2)На сколько я понял, поиск идёт некого терминала, который считывает коды со стелажей и товара. Так что поиск нужен будет только в случае если терминал где-то оставит сотрудник. Оборудование в цехах - ну если только сломанного робота беглеца искать, остальное оборудование либо стационарное, либо тот же терминал, у которого есть хозяин.. :)
6. neikist 09.08.18 11:40 Сейчас в теме
(5) Угу, стационарное, а как это стационарное оборудование найти если помещение 100x50 метров, и станков сотни? Я скорее говорю не про применимость конкретного решения, а про концепт определения координат внутри помещений по косвенным признакам.
8. nyam-nyam 09.08.18 11:44 Сейчас в теме
(6)Концепт хорош, спору нет. Интересно узнать что сподвигло автора на разработку кроме академического интереса.
10. informa1555 2605 09.08.18 11:52 Сейчас в теме
(8) Хотелка заказчика. Чисто эксперимент получится или нет. Такая организация склада сырья что адреса конечно есть но ориентироваться в "вон та куча песка" или "вон тот брус" сложновато
19. wertep 23 21.12.18 10:32 Сейчас в теме
(10) Слишком академическая, много если должно быть выполнено.
На практике решается более надежным способом "разметкой пола" и "навесными знаками". Вот так например.
3. informa1555 2605 09.08.18 11:11 Сейчас в теме
(1) Когда то я занимался теплицами и очень не хватало этого. Сейчас я занимаюсь проектом с большими территориями с наземным хранением и это необходимо. Ну а глобально, если в процессе наработается хорошая точность, то это шаг к автоматизированным складам с небольшими затратами - ну знаете где людей нет, вкалывают роботы)) Ну это так, мечты. Разработкой позиционирования занимаются многие, как я писал Cisco, Нокия занималась да много кто. Это вроде как нужная штука.
EvgenURNN; +1 Ответить
4. neikist 09.08.18 11:19 Сейчас в теме
(3) Не думали еще дополнительно для большей точности механизмы инерциальной навигации прикрутить?
9. informa1555 2605 09.08.18 11:47 Сейчас в теме
(4) Честно говоря даже не знал про такое. Если можно скиньте ссылки?
11. neikist 09.08.18 11:56 Сейчас в теме
(9) к сожалению несмотря на широту кругозора - он у меня в стиле "слышал о многом, но краем уха")) Так что все мои знания ограничиваются тем что есть такой способ навигации, и он когда то даже использовался на практике, причем как бы не на механике сделали отображение на бумажной карте текущее. (и вроде как иногда и сейчас используется)
12. nyam-nyam 09.08.18 12:50 Сейчас в теме
(4) Инерциальная навигация в данном случае не подходит - нет акселерометра и гироскопа чтобы вычислять ускорение и угловые скорости. Но если мониторинг идёт постоянно, то можно ещё сделать проверки "скачков", чтобы не было как в навигаторах в центре Москвы - то ты едешь по Тверской, то бах - и в Шереметьево.
7. nyam-nyam 09.08.18 11:41 Сейчас в теме
(3)Если можно по подробнее о теплицах - что там на WiFi и требует позиционирования? Про большие территории - опять же отслеживать перемещение сотрудников по их терминалам? Чтобы не спали в тихих уголках? :) Скорее актуально для поиска несанкционированных WiFi устройств.
13. zakiap 11.08.18 13:42 Сейчас в теме
Прикрути создание карты покрытия WiFi сигнала, чтобы в живую можно видеть уровень сигнала WIFI в виде закрашиваемых зон по складу, будет более актуально для контроля устойчивого покрытия
informa1555; +1 Ответить
14. informa1555 2605 11.08.18 14:29 Сейчас в теме
(13) Отличная идея! Так и сделаю
15. nafa 657 15.08.18 09:34 Сейчас в теме
Идея замечательная. Но все же про точность хотелось бы подробнее. Вы пишете что расчет идет в пиксеклях, но Вы же знаете размер картинки и соответствнно можете перевести его на метры ?
informa1555; +1 Ответить
16. informa1555 2605 15.08.18 10:38 Сейчас в теме
(15) Да я пробовал так. При 1 пикселе =11 см примерно, разбег по 1 оси от 0 до 7-8 пикселей примерно. Основная масса примерно в +/-5-6 пикселей попадает. Опять же при условии что стеллажи нарисованы точно там где они есть+сканируют адрес с примерно одинакового расстояния (контроль производится при сканировании адресов) Думаю что точность можно увеличить экспериментируя с сетью.
17. nafa 657 15.08.18 14:48 Сейчас в теме
Очень хороший показатель.
18. CheBurator 3119 28.08.18 17:35 Сейчас в теме
20. papami 55 05.01.19 09:54 Сейчас в теме
Дмитрий, а какое минимальное количество точек порекомендуете для первоначального обучения?

Кстати, публикация в топе 5 при запросе в Google "позиционирование в помещении"
21. informa1555 2605 05.01.19 10:32 Сейчас в теме
(20) Мне кажется для прямоугольного помещения - минимально 5 точек - по углам и в центре.
Кстати, публикация в топе 5 при запросе в Google "позиционирование в помещении"
- наверное мало материалов по этой теме
22. papami 55 05.01.19 18:48 Сейчас в теме
Думаю, что неправильно сформулировал вопрос. Я про набор данных. Обычно же сотнями-тысячами измеряются количество примеров для обучения. Ну если теорию читать.
Возможно, получится развернуть что-то подобное, только на Bluetooth LE.
23. informa1555 2605 05.01.19 19:23 Сейчас в теме
(22) Сотни тысячи? Это если не вычислять зависимости( чем занимается сеть) а тупо снимать паттерн в каждой точке . Тогда да в каждой точке надо будет померить 3 сигнала (ну или сколько там роутеров), запихнуть в таблицу а потом когда надо определить местоположение типа найти максимально похожий (с минимальными дельтами т.е.) набор значений. Тогда да. Я так понимаю Cisco так делает. Кстати на моей инфраструктуре вы легко можете воспроизвести и этот метод.Но тогда придется побегать по помещению. Альтернатива - триангуляция. Там есть формулы. Но я ленивый человек и не хочу курить формулы, потом еще вносить в них корректирующие коэффициенты (помехи, и расположение роутеров), поэтому аппроксимация возлагается на нейросетку. Насколько я знаю такого метода никто больше не использует, видимо его придумал я)) Но ничего сверхестественного тут нет - это та же триангуляция только вместо формул - аппроксимация на нейросети. Вот и все.
24. papami 55 05.01.19 19:44 Сейчас в теме
Я экспериментировал с OpenCV - дрессировал на поиск одной конкретной игрушки в кадре - набирал несколько сотен снимков, чтобы работало. Но там задача другая конечно. Еще был какой-то пример с классификацией цветков по размерам чего-то там из Тензор Флоу - там тоже много было примеров. А вот подобное еще не пробовал. Но вопрос позиционирования нейросеткой затронут в каком-то видео Майкрософта на ютуб (смотрел давно, надо будет поискать). И об этом много публикаций в англоязычном интернете. Как правило в PDF сразу - как научный труд).
25. gudun_ku 62 14.03.19 13:18 Сейчас в теме
Хорошая тема, непонятно только зачем использовать именно нейросеть, если конкретно есть измерение уровня сигнала от трех источников, которое может быть сведено к решению уравнения множественной регрессии?
26. informa1555 2605 14.03.19 14:29 Сейчас в теме
(25) Спасибо. Ну я шел наугад, использовал первое что попалось под руку. Можно и множественную регрессию, да - инфраструктура же есть, алгоритм в 1Ске прикрутить можно любой.
27. boss_kuz 106 29.05.21 07:33 Сейчас в теме
Я тоже думал о таком "подходе" для позиционирование терминала на складе. Но я только в начале пути. Не хотели бы вы поделиться кодом клиентского приложения ? Можно за деньги.
28. informa1555 2605 29.05.21 08:13 Сейчас в теме
(27) Я сейчас понял страшную вещь - я похоже потерял исходник)))) Но там все пишется на 1 страницу кода. Я имею ввиду сам код получения уровня сигнала с роутеров это - несколько строчек. Остальное - обвязка.
29. boss_kuz 106 29.05.21 10:11 Сейчас в теме
Может поможете? На ставите на истинный путь. Хочется с, экономить время. Предыдущее предложение в силе.
30. informa1555 2605 29.05.21 10:44 Сейчас в теме
(29) Гуглится же легко:
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);

// Level of a Scan Result
List<ScanResult> wifiList = wifiManager.getScanResults();
for (ScanResult scanResult : wifiList) {
  int level = WifiManager.calculateSignalLevel(scanResult.level, 5);
  System.out.println("Level is " + level + " out of 5");
}

// Level of current connection
int rssi = wifiManager.getConnectionInfo().getRssi();
int level = WifiManager.calculateSignalLevel(rssi, 5);
System.out.println("Level is " + level + " out of 5");
Показать
31. пользователь 09.11.22 13:51
Сообщение было скрыто модератором.
...
Оставьте свое сообщение