Skip to content

Архітектура/Інтеграція камери PX4

Ця тема надає короткий огляд того, як підтримується камера PX4 реалізована.

INFO

Дивіться Камера для отримання інформації щодо використання камер.

Загальний огляд

PX4 інтегрується з трьома типами камер:

Всі ці камери повинні реагувати на команди MAVLink, отримані через MAVLink або знайдені в місіях (конкретний протокол залежить від камери).

Використана широка архітектура описана нижче.

PX4 не має конкретної обробки для MAVLink камер, які підтримують Протокол камери v2, крім переемітації елементів камери в місіях як команди

Очікується, що земні станції будуть спілкуватися з цими камерами безпосередньо, щоб надсилати команди. PX4 повинен бути налаштований для маршрутизації трафіку MAVLink між камерою та земними станціями за необхідності.

INFO

Модулі camera_trigger, camera_capture та camera_feedback не використовуються з цією камерою.

Камери, підключені за допомогою FC

Камери, підключені до виходів контролера польоту, потребують PX4 для активації виходів для запуску камери, і можуть потребувати PX4 для виявлення, коли пін захоплення камери був спрацьований камерним гарячим черевиком (для покращення часу реєстрації захопленої камери).

Ця робота виконується трьома компонентами PX4: camera_trigger driver, camera_capture driver, модуль camera-feedback (../modules/modules_system.md#camera-feedback).

camera_trigger підписується на тему VehicleCommand та відстежує оновлення в команди, які він підтримує. Ці оновлення відбуваються, коли отримано команду через MAVLink або коли елемент камери досягнутий у місії.

Команди увімкнення та вимкнення спрацьовують, а також налаштовують спрацьовування за часовими та відстаневими інтервалами. Водій відстежує ці інтервали, і коли це потрібно, спрацьовують виходи. Водій публікує тему CameraTrigger (з полем feedback, встановленим на false), що спричиняє відсилання повідомлення MAVLink CAMERA_TRIGGER.

Драйвер camera_capture, якщо він увімкнений, слідкує за підключенням камери та, спрацьовуючи, оприлюднює тему CameraTrigger (з полем feedback, встановленим на true), що також спричиняє відсилання повідомлення MAVLink CAMERA_TRIGGER.

Модуль 'camera_feedback' відстежує оновлення теми CameraTrigger, та публікує тему CameraCapture для оновлення CameraTrigger від або camera_trigger, або camera_capture. Інформація, яка використовується, залежить від того, чи увімкнений пін захоплення камери, і значення поля CameraTrigger.feedback. Ця тема CameraCapture реєструється і може бути використана для отримання часу знімку.

MAVLink камери, які підтримують старіший Camera Protocol v1 інтегруються так само, як і Камери, що підключаються через FC.

camera_trigger підписується на тему VehicleCommand та відстежує оновлення в команди, які він підтримує. Це відбувається, коли команда надходить через MAVLink або коли елемент камери знаходиться в місіях.

Команди дозволяють увімкнути та вимкнути спрацьовування, а також налаштувати спрацювання за часовими та відстаневими інтервалами. Водій відслідковує ці інтервали, але з "MAVLink backend" не потрібно фактично спрацьовувати будь-які виводи (оскільки команди переадресовуються на камеру). Коли камера спрацьовує, водій публікує тему CameraTrigger (з полем feedback, встановленим на false), що спричиняє відсилання повідомлення MAVLink CAMERA_TRIGGER. Модуль camera_feedback повинен, а потім записати відповідну тему CameraCapture.

Команди камери у місіях

PX4 повторно видає пункти камери, знайдені в місіях, як команди MAVLink для всіх підтримуваних [Протоколів камери v2] (https://mavlink.io/en/services/camera.html) та [Протоколів камери v1] (https://mavlink.io/en/services/camera.html). Системний ідентифікатор випущених команд співпадає з ідентифікатором автопілота. Ідентифікатор компоненту команд може відрізнятися, але зазвичай вони надсилаються на MAV_COMP_ID_CAMERA (100) або MAV_COMP_ID_ALL (дивіться документацію камери для того, який ID використовується у кожному випадку).

Команди випромінюються незалежно від того, чи є підключена камера будь-якого типу, за умови наявності каналу MAVLink для випромінювання.

INFO

Загалом PX4 повторно видає всі команди місій, які можуть бути використані зовнішніми компонентами MAVLink, такими як джимбалі. Команди для точок маршруту та умовної поведінки не випускаються.

Розділи нижче висвітлюють цікаві частини кодової бази

Команди, підтримувані у місіях

Команди, підтримувані в місіях, включаючи команди камери, показані в цих методах:

Потік для повторної відправки команд камери, знайденої у місіях

  • void Mission::setActiveMissionItems()
    • Предмети місії виконуються, коли вони активовані.
    • issue_command(_mission_item) викликається в кінці цього, щоб відправити поточну непунктову команду
      • MissionBlock::видача_команди(const mission_item_s &item)
        • Створює команду для місії транспортного засобу, а потім викликає publish_vehicle_cmd для публікації її (_navigator->publish_vehicle_cmd(&vcmd);)
          • void Navigator::publish_vehicle_cmd(vehicle_command_s *vcmd)
            • Для деяких команд камери це встановлює ідентифікатор компонента на ідентифікатор компонента камери (vcmd->target_component = 100; // MAV_COMP_ID_CAMERA)
            • Усі інші просто публікуються під стандартний компонент ID.
            • Тема UORB VehicleCommand публікується.

Код потоку MAVLink відстежує зміни у темі VehicleCommand та публікує їх через MAVLink. Команда MAVLink надсилається незалежно від того, чи є камера камерою MAVLink, чи підключена до контролера польоту.

Драйвер camera_trigger, якщо включений, також контролює зміни для VehicleCommand. Якщо він налаштований з внутрішнім інтерфейсом для камери, підключеної до вихідних сигналів контролера польоту, він відповідним чином активує ці вихідні сигнали.

Журналювання

Теми CameraCapture реєструються при оновленні CameraTrigger. Введений тема буде залежати від того, чи увімкнений пін захоплення камери.

Зверніть увагу, що події захоплення камери не реєструються, коли використовується камери MAVLink, що підтримують протокол камери v2, оскільки відповідні події спрацювання тригера не генеруються в межах PX4.

Дивіться також