Камера

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

Инициализация

from clover2 import Clover2

drone = Clover2()
# или с именем ноды:
drone = Clover2("my_drone")

Clover2 — обертка над ROS 2 Node. При создании объекта Clover2 создается нода и запускается фоновый поток для работы ROS 2.

Получение кадра в формате NumPy-массива

Используйте get_image(), чтобы получить текущий кадр с камеры в виде NumPy-массива.

img = drone.camera.get_image()                      # main_camera, bgr8
img = drone.camera.get_image("main_camera", "rgb8") # с указанием камеры и encoding

Если не указать параметры, get_image() использует камеру main_camera и формат изображения bgr8. Вы можете указать другую камеру и формат изображения с помощью параметров camera_name и encoding.

Получение ROS Image

Если вам нужно работать с изображением непосредственно в ROS 2, используйте get_image_msg().

img_msg = drone.camera.get_image_msg()

Используйте этот вариант, если ваша программа работает с ROS 2 и вам не нужно сразу преобразовывать изображение в NumPy-массив.

Получение параметров калибровки камеры

Чтобы получить параметры калибровки камеры, используйте get_camera_info().

info = drone.camera.get_camera_info()
# info.width, info.height, info.k (матрица), info.d (дисторсия)

Пример: детекция QR-кода

В этом примере программа получает изображения с камеры и проверяет их на наличие QR-кода.

import cv2
from clover2 import Clover2

drone = Clover2()
detector = cv2.QRCodeDetector()

while True:
    img = drone.camera.get_image()
    data, bbox, _ = detector.detectAndDecode(img)
    if data:
        print(f"QR Code: {data}")
        break

cv2.QRCodeDetector() создает детектор QR-кодов из библиотеки OpenCV. В цикле while True программа постоянно получает кадры с камеры img = drone.camera.get_image(). Функция detectAndDecode() ищет QR-код на полученном изображении и пытается прочитать записанные в нем данные. После вывода данных команда break завершает цикл, и программа перестает получать новые кадры.