Тепловизионная камера

Вы можете подключить тепловизионную камеру к Raspberry Pi 5 на квадрокоптере и использовать полученные с нее данные для построения теплового изображения и определения температуры в отдельных точках кадра.

Принцип работы

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

Используемый тепловизионный модуль имеет разрешение 256x192 пикселей и возвращает 2 кадра: обработанное тепловое изображение и матрицу температур.

Данные в ROS2

Драйвер clover2_thermal разделяет полученный от камеры кадр на тепловое изображение и матрицу температур. При стандартных настройках они публикуются в два топика с типом сообщения sensor_msgs/msg/Image:

Топик

Кодировка (encoding)

Содержимое

/thermal_camera/image_viz

mono8

Обработанное тепловое изображение в оттенках серого. Каждый пиксель содержит значение яркости от 0 до 255.

/thermal_camera/temperature

32FC1

Матрица температур. Каждый пиксель содержит температуру в градусах Цельсия в виде 32-битного числа с плавающей точкой.

Оба изображения имеют размер 256×192 пикселя. Пикселю теплового изображения соответствует элемент матрицы температур с теми же координатами. image_viz используется для просмотра изображения; температуру нужно брать из temperature.

Сборка и установка модуля

Тепловизионную камеру можно установить на квадрокоптер двумя способами.

Способ №1 (фронтальный):

  1. Установите тепловизионную камеру в предусмотренное крепление для модуля камеры.

    Установка тепловизионной камеры в маунт для установки на защиту

    Установка тепловизионной камеры в крепление

  2. Закрепите крепление с установленной камерой на дугах защиты, как показано на рисунке.

    Установка тепловизионной камеры на карбоновые лучи защиты

    Установка тепловизионной камеры на карбоновые дуги защиты

  3. Подсоедините USB-кабель из комплекта к камере.

  4. Вставьте второй конец USB-кабеля в свободный USB-разъем Raspberry Pi 5.

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

Способ №2 (горизонтальный):

  1. Установите тепловизионную камеру в предусмотренное крепление для модуля камеры.

    Установка тепловизионной камеры в маунт для установки в горизонтальное положение

    Установка тепловизионной камеры в крепление

  2. С помощью винтов М3х8 закрепите крепление на нижней деке, как показано на рисунке.

    Установка камеры на нижнюю деку

    Установка тепловизионной камеры на нижнюю деку

  3. Подсоедините USB-кабель из комплекта к камере.

  4. Вставьте второй конец USB-кабеля в свободный USB-разъем Raspberry Pi 5.

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

Настройка

Запуск через clover2-settings

Чтобы включить тепловизионную камеру в Клевер необходимо открыть настройки:

Запустите узел следующей командой:

clover2-settings

Выберите группу additional_sensors, как показано на рисунке 5.

Выбор группы additional_sensors в clover2-settings

Рисунок 5 — Выбор группы additional_sensors в clover2-settings

В группе additional_sensors выберите настройку thermal_camera (см. рисунок 6) и включите её, установив значение true.

Выбор настройки thermal_camera

Рисунок 6 — Выбор пункта thermal_camera

Для сохранения изменений нажмите ctrl+S. Появится уведомление о сохранении, как показано на рисунке 7.

Сохранение настройки тепловизионной камеры

Рисунок 7 — Сохранение настройки тепловизионной камеры

Затем несколько раз нажмите esc чтоб выйти из приложения. Перезапустите сервис clover2:

sudo systemctl restart clover2

После успешного запуска драйвер будет публиковать кадры в топики /thermal_camera/image_viz и /thermal_camera/temperature.

Использование

В Python матрицу температур удобно получать через клиент Clover2:

from clover2 import Clover2

drone = Clover2()
temperature = drone.thermal_camera.get_temperature()

# Матрица NumPy имеет форму (192, 256), индексы задаются в порядке [y, x].
print(f"Температура в центре кадра: {temperature[96, 128]:.2f} °C")

Начало координат пикселей находится в левом верхнем углу: x увеличивается вправо, y — вниз. Метод get_temperature() возвращает последнюю полученную матрицу NumPy. При первом обращении он ожидает данные до 5 секунд и вызывает TimeoutError, если они не поступили. Для получения исходного ROS-сообщения используйте drone.thermal_camera.get_temperature_msg().