
В горнодобывающей промышленности точный учёт рейсов карьерных самосвалов — ключевой фактор управления производительностью. Традиционные системы диспетчеризации (DISPATCH от Modular Mining, Wenco, российская «Карьер») опираются на GPS-зоны: система фиксирует въезд самосвала в зону экскаватора или пункта разгрузки и по факту пересечения геозон формирует рейс. Однако этот подход не улавливает аномалии внутри цикла — простои, заторы, сбои датчиков, затянувшиеся обеды — и не позволяет классифицировать тип рейса по его «форме».
Альтернативный подход реализован в системе «Симуляция и детекция рейсов» — серверно-клиентском приложении (Go + React + PostgreSQL), которое распознаёт рейсы в реальном времени путём шаблонной векторизации телеметрических данных скорости и веса. Вместо привязки к координатам система строит вектор из скользящего окна телеметрии и сравнивает его с заранее сохранёнными эталонными шаблонами через меру сходства (косинусное сходство или нормы L1/L2). Когда степень совпадения превышает порог — рейс считается обнаруженным.
Данная статья детально разбирает архитектуру, алгоритмическую основу и инженерные решения этого подхода, сопоставляя его с миров��й практикой детекции рабочих циклов тяжёлой техники.
Контекст проблемы: фазовая модель рейса самосвала
Рабочий цикл карьерного самосвала — это строго последовательная цепочка технологических операций, повторяющаяся десятки раз за смену:
Фаза | Скорость | Вес | Типичная длительность |
|---|---|---|---|
Погрузка | ≤ Vmin (≈0.5 км/ч) | Линейно нарастает от 0 до M | ~120 сек |
Транспортировка (гружёный) | Vmin…Vmax (до 40 км/ч) | Mmin…Mmax (~90–100 т) + шум | ~300 сек |
Разгрузка | Падает до Vmin | Падает от M до 0 | ~60 сек |
Возврат (порожний) | Vmin…Vmax | ≈ Mпорожний (≈1 т) + шум | ~240 сек |
Эти данные заложены в генератор симуляционного потока приложения. Каждая фаза характеризуется характерным «профилем» пары скорость–вес: при погрузке скорость минимальна, а вес растёт; при транспортировке скорость высокая, вес стабильный; при разгрузке оба параметра падают. Этот двумерный профиль рейса — главный сигнал для распознавания.
В реальных условиях на профиль накладывается шум от неровности дороги, вибрации подвески и погрешностей датчиков. Система моделирует это через три параметра: шум скорости (±0.5 км/ч), шум веса (±1 т), шум веса при погрузке из-за амортизаторов (±2 т). Дополнительно, длительность каждой фазы может отклоняться от эталона на настраиваемый процент.
Архитектура системы
Стек и структура
Система построена на стеке Go 1.22+ / Gin / pgx на бэкенде и React / ECharts / WebSocket на фронтенде, с PostgreSQL в качестве хранилища. Архитектура разделена на модули с чёткими зонами ответственности:
cmd/server/ → Точка входа internal/ ├── config/ → Конфигурация (env + Viper) ├── db/ → Миграции, подключение ├── domain/ → Модели домена ├── repository/ → Доступ к БД ├── service/ │ ├── generator/ → Генератор данных по фазам + шум │ ├── queue/ → Потокобезопасная очередь данных │ ├── vector/ → Векторизация и нормализация │ └── recognition/→ Скользящее окно + сравнение ├── api/ → HTTP handlers + WebSocket hub └── worker/ → Фоновые воркеры web/ → React SPA
Потоки данных
Архитектура организует три конвейерных потока, связанных через каналы Go (goroutines + channels):
Генерация. Сервис
generatorв отдельной горутине по таймеру (каждые R секунд, по умолчанию 10) вычисляет скорость и вес по текущей фазе рейса, накладывает гауссов/равномерный шум и отправляет точку в канал.Очередь. Сервис
queueчитает из канала, буферизует (последние P минут), отдаёт данные подписчикам WebSocket и в сервис распознавания. Буфер ограничен по времени — это sliding buffer, из которого удаляются устаревшие точки.Распознавание. Сервис
recognitionнакапливает скользящее окно (размер определяется шаблонами), строит вектор, нормализует, сравнивает с шаблонами из БД. При совпадении ≥ порога — рейс найден, сохраняется в PostgreSQL, событие уходит по WebSocket.
Транспортный уровень
Система использует REST API для управления (старт/стоп генерации, настройки, CRUD шаблонов и рейсов) и WebSocket для стриминга данных в реальном времени. Через WebSocket клиент получает два типа сообщений:
point— новая точка телеметрии (timestamp, speed, weight, phase)trip_found— событие обнаружения рейса (UUID, интервал, шаблон, процент совпадения)
Ядро алгоритма: шаблонная векторизация
Принцип работы
Центральная идея системы — представление отрезка телеметрии (скорость + вес за период) в виде единого числового вектора и сравнение этого вектора с эталонными шаблонами через метрику сходства. Этот подход близок к тому, что в литературе по анализу временных рядов называется template matching или vector-based similarity search.
Алгоритм работает по следующей схеме:
Сбор шаблона. Оператор на странице «История» выделяет участок телеметрии, характерный для определённого типа рейса (например, «нормальный рейс», «затор у экскаватора», «рейс с перекуром»). Система сохраняет массивы скоростей и весов этого участка, вычисляет из них нормализованный вектор и сохраняет в таблицу
trip_template_vectors.Скользящее окно (sliding window). При поступлении каждой новой точки телеметрии система поддерживает буфер последних N значений скорости и M значений веса, где N и M определяются размерами шаблонов (от меньшего к большему). Окно сдвигается с каждой новой точкой — это классическая техника sliding window, широко применяемая в потоковой обработке данных.
Векторизация. Содержимое окна конкатенируется в один вектор: например, 100 значений скорости + 95 значений веса = 195 компонент. Каждый компонент нормализуется в процентах (0..1 или 0..100).
Сравнение. Нормализованный вектор текущего окна сравнивается со всеми шаблонами через косинусное сходство (или норму L1/L2). Если лучшее совпадение ≥ порога (по умолчанию 85%) — рейс считается обнаруженным.
Дедупликация. После обнаружения рейса устанавливается «период охлаждения» (
cooldown_after_trip_sec) — новый рейс не может начаться раньше конца предыдущего плюс это число секунд. Рейсы не пересекаются по интервалам в любом случае.
Косинусное сходство: почему оно подходит
Косинусное сходство измеряет угол между двумя векторами, игнорируя их абсолютную длину. Формула:

Для предварительно нормализованных векторов (что делает система) это сводится к простому скалярному произведению. Это даёт три ключевых преимущества для задачи детекции рейсов:
Инвариантность к масштабу. Если абсолютные значения скорости/веса сместились (другой самосвал, другая загрузка), но «форма» профиля та же — сходство останется высоким.
Вычислительная эффективность. Скалярное произведение двух векторов из ~200 компонент — наносекунды, что критично для реального времени.
Интерпретируемость. Результат от 0 до 100% — понятная метрика для диспетчера.
В академической литературе отмечается, что для задач сравнения формы временных рядов косинусное сходство и евклидово расстояние тесно связаны и оба эффективны. При этом для задач, где важна именно форма сигнала (а не абсолютные значения), косинусное сходство предпочтительнее.
Сравнение с альтернативными подходами
Метод | Инвариантность к сдвигу по времени | Вычислительная сложность | Интерпретируемость | Реальное время |
|---|---|---|---|---|
Косинусное сходство + sliding window (данная система) | Нет (фиксированное окно) | O(n·k), n — шаблоны, k — размер вектора | Высокая (% совпадения) | Да |
DTW (Dynamic Time Warping) | Да | O(n·m²), m — длина серии | Средняя | Ограниченно |
Bi-LSTM + Random Forest | Да | Высокая (обучение) | Низкая (чёрный ящик) | Ограниченно |
GPS-зоны | Не применимо | O(1) | Высокая | Да |
GMM-кластеризация | Частично | Средняя | Средняя | Частично |
Подход, выбранный в системе, занимает уникальную нишу: он проще и быстрее DTW, не требует обучения модели (в отличие от нейросетевых методов), но при этом способен различать разные типы рейсов — чего не может GPS-зонирование.
Система шаблонов: от «нормального рейса» до аномалий
Одно из ключевых инженерных решений — библиотека шаблонов, покрывающая не только штатные, но и нештатные ситуации. В системе сохранено 19 шаблонов, которые можно классифицировать:
Штатные шаблоны
«Основной» (серия 1–6) — эталонный нормальный рейс с небольшими вариациями. Совпадения с этими шаблонами показывают 93–97%.
«Запасной» — альтернативный маршрут с другим профилем скоростей.
Шаблоны с отклонениями
«Затор у экскаватора» — характерный паттерн: длительная стоянка с нулевой скоростью и нарастающим весом (медленная загрузка в очереди).
«Рывок» — резкие ускорения/торможения в транспортной фазе.
«Перекур» / «Обед груженым» / «Долгий обед» / «Заправка и обед» — остановки посреди цикла с характерными паузами в скоростном профиле.
Аварийные шаблоны
«Сбой датчиков подвески» — аномальный шум в весовых данных при нормальной скорости.
«Ошибка при погрузке» — прерванная загрузка с характерным «зубчатым» профилем веса.
«Ремонт» / «Ремонт груженным» — длительный простой с сохранением или без груза.
«Аномалия» — неклассифицируемые отклонения.
Такой подход по сути реализует кодификацию экспертного знания диспетчеров и машинистов в машиночитаемые шаблоны. Это ближе к концепции «шейплетов» (shapelets) в анализе временных рядов — характерных подпоследовательностей, которые определяют принадлежность к классу.
Интерфейс и рабочие процессы
Страница «Симуляция»
Центральная страница оператора, объединяющая управление, мониторинг и аналитику:
Управление: кнопки Старт/Стоп/Очистить с подтверждающими модальными окнами; чекбокс включения распознавания; индикатор статуса с анимацией.
График реального времени: ECharts-график скорости и веса за последние 30/60/90/120 минут с ползунком масштаба. Опциональная подсветка анализируемого sliding window.
Блок «Анализ»: количество загруженных шаблонов, накопленных точек, вычислен ли вектор, время расчёта (мс), лучшее совпадение с указанием шаблона и процента, список сравнений по всем шаблонам.
Таблица рейсов: последние обнаруженные рейсы (по WebSocket) с начальным/конечным временем, порогом, процентом совпадения и именем шаблона.


Страница «История»
Инструмент для ретроспективного анализа и создания новых шаблонов:
Выбор временного интервала и загрузка исторических данных.
График с прямоугольниками найденных рейсов (подпись: имя шаблона или «не найден»).
Форма сохранения выделенного участка как нового шаблона.
Перерасчёт рейсов — пересчёт обнаруженных рейсов за период с новыми шаблонами или порогами (фоновый процесс с прогрессом).



Страница «Шаблоны»
Управление библиотекой шаблонов: поиск по имени и длительности, просмотр графиков скоростей/весов шаблона, редактирование (обрезка диапазона ползунком), удаление.



Математическая модель распознавания
Формализация

Дополнительные фильтры
Система поддерживает проверку «у оси»: рейс сохраняется только если в начале и конце скользящего окна скорость и вес не превышают заданных порогов (рекомендуется 5 км/ч и 15–20 т). Это отсекает ложные срабатывания, когда самосвал находится посреди транспортировки.
Преимущества подхода
По сравнению с GPS-зонированием
GPS-системы определяют рейс по факту пересечения геозон — погрузочной и разгрузочной. Это надёжно для учёта количества рейсов, но не позволяет:
Классифицировать тип рейса (нормальный vs. с аномалией).
Работать без GPS (внутри тоннелей, при потере сигнала).
Детектировать сбои оборудования по характеру телеметрии.
Векторная шаблонная детекция работает исключительно по телеметрии скорости и веса — данным, которые доступны от бортовых датчиков (тензометрия подвески, одометр) даже без спутниковой навигации.
По сравнению с нейросетевыми методами
Исследования показывают, что Bi-LSTM с отбором признаков (RFFS) достигает точности 91.75% на задаче распознавания рабочих циклов LHD-машин. Однако эти методы требуют:
Большого размеченного датасета (тысячи циклов с метками фаз).
Длительного обучения и подбора гиперпараметров.
Значительных вычислительных ресурсов для инференса.
Шаблонный подход требует лишь одного размеченного примера каждого типа рейса и работает в реальном времени на обычном сервере. Обнаруженные рейсы в системе показывают совпадения 88–97%, что сопоставимо с нейросетевыми методами.
По сравнению с DTW
Dynamic Time Warping — «золотой стандарт» для сравнения временных рядов разной длины и с временными сдвигами. Но его квадратичная сложность (O(n·m)) делает его плохо пригодным для потоковой обработки. Система решает проблему иначе: нормализация к фиксированному размеру вектора и прямое скалярное произведение, что даёт линейную сложность.
Ограничения и перспективы развития
Текущие ограничения
Фиксированное окно. Система не поддерживает DTW-подобное «растяжение» во времени. Если реальный рейс длится значительно дольше или короче шаблона, совпадение упадёт. Частично это решается наличием нескольких шаблонов разной длительности.
Два канала данных. Используются только скорость и вес. Добавление давления масла, оборотов двигателя, температуры и других параметров CAN-шины могло бы повысить точность.
Отсутствие адаптивности. Шаблоны статичны; система не обучается на новых данных автоматически. Для добавления нового типа рейса требуется ручная разметка.
Направления развития
Автокластеризация обнаруженных рейсов для выявления новых паттернов без ручной разметки (GMM, DBSCAN).
Мультимасштабное окно — параллельное сравнение с окнами разного размера для устойчивости к вариациям длительности.
Интеграция с GPS-данными — гибрид: первичная детекция по телеметрии, подтверждение по геозонам.
Edge-computing — вынос алгоритма на бортовой контроллер самосвала для автономной работы без связи с сервером.
Позиционирование в отрасли
Традиционные промышленные системы (DISPATCH, Wenco, российская «Карьер», «АвтоГРАФ») решают задачу учёта рейсов через GPS-геозоны и датчики загрузки. Академическое сообщество предлагает нейросетевые подходы (Bi-LSTM, GMM+MLP) с высокой точностью, но сложным внедрением. Исследование в области потоковой обработки GPS-данных самосвалов на платформе Flink достигло пропускной способности 25 000–66 000 записей/сек для идентификации состояний движения.
Рассмотренная система занимает промежуточную нишу: она проще нейросетей, информативнее GPS-зон и работает в реальном времени. Подход шаблонной векторизации особенно ценен тем, что позволяет кодифицировать экспертное знание диспетчеров в форме конкретных шаблонов — каждый из которых описывает не просто «рейс», а конкретную производственную ситуацию.
Заключение
Подход к детекции рейсов карьерных самосвалов через шаблонную векторизацию телеметрии — практичное инженерное решение, балансирующее между простотой и функциональностью. Его ключевые принципы:
Фазовая модель рейса (погрузка → транспортировка → разгрузка → возврат) создаёт характерный двумерный профиль скорость–вес.
Скользящее окно обеспечивает потоковую обработку телеметрии без хранения полной истории.
Нормализованная конкатенация скоростных и весовых данных в единый вектор позволяет унифицировать сравнение.
Косинусное сходство даёт быструю, масштабо-инвариантную и интерпретируемую метрику совпадения.
Библиотека шаблонов кодифицирует экспертное знание, позволяя различать не только штатные рейсы, но и аномалии, простои, сбои оборудования.
Реализация на стеке Go + React + PostgreSQL + WebSocket обеспечивает производительность, достаточную для обработки потока в реальном времени, с визуализацией и управлением через веб-интерфейс. Подход применим как в составе полноценной АСУ ГТК, так и как автономный модуль аналитики для отдельного самосвала или группы машин.
