Как стать автором
Обновить

Автономный робот для обследования нефтяного месторождения: новые решения

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров578

В апреле 2025 года на базе НИТУ «МИСИС» прошёл второй этап хакатона «Кубок РТК: Нефтяное месторождение». Наша команда misis_robo_club снова приняла участие с автономным роботом для инспекции нефтепромысла, но на этот раз с существенно доработанным решением. Опираясь на опыт первого этапа (в марте 2025 в Архангельске), мы улучшили как аппаратную, так и программную части системы, чтобы робот работал надёжнее и эффективнее в полевых условиях. Суть соревнования оставалась той же: робот должен полностью автономно проехать по полигону, собрать данные с оборудования, распознать утечки нефти и посторонние объекты, а также считать специальные QR-коды.

О втором этапе хакатона в МИСиС

Организатором соревнований традиционно выступил ГНЦ РФ ЦНИИ РТК. Второй этап длился два дня и проводился на полигоне, практически идентичном предыдущему – это уменьшенная модель нефтедобывающего участка с теми же ключевыми элементами. На площадке были размещены макеты устьевой арматуры скважин (оборудованных манометрами и метками), резервуары-нефтехранилища, гаражное строение, песчаный карьер с техникой и элементы окружения (деревья, макет пруда и т.д.). По размеченному маршруту (черная линия на полу) робот должен был проехать от старта до финиша, останавливаясь у каждой скважины для выполнения набора задач технического зрения. Формат испытаний сохранился: у команд было две попытки, чтобы показать максимальный результат, выполняя проверки оборудования и обнаружение аномалий в реальном времени. Небольшие корректировки в полигоне все же присутствовали – организаторы слегка изменили расположение объектов и условий освещения, добавив нам новых вызовов в отладке алгоритмов.

“Поломка оборудования — не причина сдаваться, а возможность сделать систему ещё лучше.” — таков был наш девиз после трудностей первого этапа.

Улучшения и доработки решения

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

  • Отказ от Jetson Nano. Ещё в Архангельске бортовой модуль NVIDIA Jetson Nano неожиданно вышел из строя, поэтому ко второму этапу мы решили полностью от него отказаться. Все вычисления (нейросети и обработка изображений) теперь выполнялись на альтернативной встроенной системе на борту робота. Нам пришлось оптимизировать код и использовать облегчённые модели, чтобы уверенно запускать алгоритмы без GPU. Несмотря на снижение доступных вычислительных ресурсов, правильная оптимизация позволила сохранить работоспособность решения в реальном времени.

  • Стабильное обнаружение утечек нефти. Модель YOLOv8, отвечавшая за детекцию признаков разлива нефти, была переобучена на расширенном датасете и тщательно оттестирована. В первой части хакатона наш алгоритм иногда путал тёмные пятна или тени с утечками, что приводило к ложным срабатываниям или пропускам. Теперь же обновлённая нейросеть работает значительно стабильнее: мы добавили в тренировочный набор новые фотографии с полигона и синтетические изображения утечек, чтобы модель лучше различала ложные и истинные цели. В результате детекция утечки нефти стала надёжной, без пропущенных инцидентов на трассе.

  • Полное распознавание манометров. Ещё одной задачей было улучшить чтение аналоговых манометров (датчиков давления). Ранее наш алгоритм на OpenCV справлялся не со всеми углами обзора или освещением, иногда давая погрешность. Мы доработали этот модуль: откалибровали обработку изображения под новые условия освещения, добавили предварительное выравнивание и фильтрацию изображения, а также расширили набор эталонных шаблонов стрелки. Теперь распознавание показаний давления стало практически безошибочным на всех скважинах. Робот уверенно считывал угол поворота стрелки манометра и переводил его в цифровое значение давления, даже если манометр находился под неудобным углом или в тени.

  • Веб-интерфейс Runs Navigator. Ещё одной новинкой стал внутренний веб-интерфейс для анализа работы алгоритмов, разработанный Георгием Бондарем. Через Runs Navigator команда могла после заезда просмотреть все объекты, распознанные роботом, с привязкой к кадрам и координатам, и оценить спорные моменты с судьями. Интерфейс позволяет фильтровать detections по их типу (утечка, корова, манометр и т.д.) и уровню уверенности модели, что удобно для быстрой оценки качества работы нейросетей. Более того, в интерфейсе реализован режим формирования датасета: мы можем выбирать интересующие кадры и автоматически сохранять вырезки изображений объектов для последующей разметки. Этот инструмент открыл возможность быстро создавать дополнительные датасеты, в том числе синтетические (например, накладывая отметки утечки на разные фоны), для дообучения наших моделей. Runs Navigator значительно ускорил цикл улучшения алгоритмов — от сбора данных до тренировки нейросети.

Веб-интерфейс Runs Navigator, позволяющий просматривать детекции после пробного заезда
Веб-интерфейс Runs Navigator, позволяющий просматривать детекции после пробного заезда
# Загрузка логов и фильтрация по меткам
df = load_log("detections_log.txt")
selected_label_filter = st.selectbox("Фильтр по объекту:", ["Все"] + sorted(df['label'].unique()))

if selected_label_filter != "Все":
    df = df[df['label'] == selected_label_filter]

# Отображение картинок с confidence
for idx, row in df.iterrows():
    img_path = row['detected_image_path']
    confidence = row.get('confidence', 0)
    st.image(img_path, caption=f"{row['label']} ({confidence:.2f})", use_column_width=True)

Работа в команде

Наш состав остался прежним, и роли участников сохранились с первого этапа:

  • Георгий Бондарь — капитан команды. Отвечал за общую архитектуру решения и интеграцию всех модулей. В этот раз помимо навигации и связи компонентов, Георгий разработал веб-интерфейс Runs Navigator, облегчивший анализ данных.

  • Андрей Рейтлингер — инженер мехатроники. Занимался навигацией и движением робота: подключение и настройка датчика линии Octoliner.

  • Кристина Егорова — разработчик алгоритмов по компьютерному зрению. Улучшала алгоритмы обработки изображений: собирала и размечала данные, обучала модели YOLOv8 для детекции утечек и объектов, а также отвечала за программное считывание показаний манометров и распознавание QR-кодов с помощью OpenCV.

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

Обработка изображений и навигация 2.0

Во втором этапе все основные алгоритмы технического зрения остались локальными и выполнялись прямо на борту робота (без обращения к удалённым серверам). Как и ранее, камера непрерывно подавала видеопоток, который анализировался двумя моделями YOLOv8 параллельно: одна искала утечку нефти, другая — различные объекты окружения (животных, специальные метки и т.д.). Благодаря дообучению на новых данных точность детекции заметно возросла. Одновременно с этим классические методы OpenCV отвечали за точечные задачи: так, улучшенный фильтр и алгоритм на базе Hough Transform выделяли стрелку манометра на циферблате, после чего программа вычисляла угол и соответствующее давление.

Навигация осталась линейной: робот следовал по черной линии, используя Octoliner, и останавливался в нужных местах. Однако во второй части мы оптимизировали обмен между модулями зрения и движения. Теперь, как только нейросети и OpenCV подтверждали, что все нужные объекты у текущей скважины найдены и распознаны, роботу передавался сигнал продолжать движение.

Пример кода: ниже приведён фрагмент на Python, демонстрирующий упрощённый процесс обнаружения объектов с помощью дообученной модели YOLOv8 и фильтрации результатов по порогу уверенности:

from ultralytics import YOLO

# Загрузка обновлённой модели детекции утечек нефти
model = YOLO('leak_detector_v2.pt')
frame = cv2.imread('frame.jpg')  # пример кадра с камеры

# Выполнение предсказания нейросети на одном кадре
results = model.predict(source=frame, conf=0.5)

# Обработка результатов: выводим все обнаруженные объекты с их вероятностями
for result in results:
    for box in result.boxes:
        cls_id = int(box.cls[0])          # идентификатор класса объекта
        conf = float(box.conf[0])         # уверенность распознавания
        x1, y1, x2, y2 = map(int, box.xyxy[0])  # координаты bounding box
        if conf >= 0.5:  # фильтрация по порогу уверенности 50%
            print(f"Найден объект класса {cls_id} с вероятностью {conf:.2f} в координатах {x1},{y1},{x2},{y2}")

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

Тестирование на полигоне и результаты

В первый день этапа в МИСиС мы активно тестировали обновлённого робота на настоящем полигоне. При настройке выяснилось, что освещение в зале отличается от условий в Архангельске – потребовалось подкорректировать параметры камеры и чувствительность алгоритмов, особенно для детекции утечек (например, перенастроить пороги бинаризации картинки, чтобы уверенно отличать тёмное пятно нефти от тени на новом покрытии пола).

Во время отладки особое внимание уделили проверке чтения манометров. Мы снова наклеили наш тренировочный циферблат на один из манометров и вручную вращали стрелку, наблюдая, как изменяются вычисленные программой значения давления. Это помогло убедиться, что при разных углах и световых условиях алгоритм стабильно распознаёт положение стрелки. Параллельно мы прогнали несколько пробных заездов по всему маршруту, используя Runs Navigator для разметки пропущенных детекций – так удалось оперативно дополнить данные и переобучить модели прямо между днями соревнований.

Во второй день прошли финальные заезды команд. Наш робот в первой же попытке проехал весь маршрут до финиша без сбоев. Все 6 из 6 манометров были успешно считаны, QR-коды распознаны, макет коровы своевременно обнаружен. Главное – на этот раз нейросеть не пропустила ни одной утечки нефти: каждая условная разлившаяся лужица была корректно определена, и робот зафиксировал все инциденты. Доработки себя оправдали: мы получили максимальные 500 из 500 баллов за выполнение задания.

Важность и перспективы

Второй этап подтвердил: гибкость и постоянное улучшение — ключ к успеху в робототехнике. Несмотря на поломку оборудования, мы не только восстановили систему, но и усилили её. Робот справился со всеми задачами, а созданные нами инструменты, включая Runs Navigator, пригодятся и в будущих проектах.

Наш опыт показал, что автономные системы с ИИ уже сегодня способны приносить реальную пользу промышленности. А слаженная команда и вера в идею — главное, что движет прогресс. Вперёд — к новым задачам и победам!

Теги:
Хабы:
0
Комментарии1

Публикации

Ближайшие события