Перейти к содержанию
Скачать руководство PDF

Конфигурация

SmartCamera хранит настройки камер в YAML, настройки веб-приложения — в отдельном JSON, а записи, калибровочные сессии и данные моделей — в каталоге материалов. Эти файлы решают разные задачи: изменение списка камер не переносит архив, а смена папки материалов не меняет ROS-топики.

Где находится рабочий файл

При запуске через smartcamera пути задаёт CLI. По умолчанию:

Что хранится Путь
Настройки запуска CLI ~/.config/smartcamera/settings.json
Камеры ~/.local/share/smartcamera/data/config/cameras.yaml
Настройки веб-интерфейса ~/.local/share/smartcamera/data/config/web.json
Записи и данные моделей ~/.local/share/smartcamera/data/recordings/

Выбранные пути и режим запуска можно посмотреть командой:

smartcamera configure --show

Если при настройке задан другой каталог данных, YAML камер и настройки веб-интерфейса находятся в его подкаталоге config/. CLI передаёт эти пути приложению и создаёт пустую конфигурацию при первой настройке. В Docker используется тот же каталог данных на хосте.

При самостоятельном запуске через ros2 launch передавайте свой YAML через аргумент config_file. Без него launch использует файл из пакета smart_camera_config, который может содержать конфигурацию разработчика. Не запускайте второй экземпляр через ros2 launch одновременно с CLI.

Фактический путь доступен в настройках веб-панели и поле camera_config_path ответа GET /api/v1/settings. Для сохранения нужен доступ к файлу и его родительскому каталогу: запись выполняется через временный файл и атомарную замену. Скопированный путь к чужой калибровке или серийный номер из примера не становится действительным на другом компьютере.

Минимальный YAML

schema_version: 1
cameras: []

Пропущенные manager и web получают значения по умолчанию. Модели строгие: неизвестные поля отклоняются, поэтому опечатка не превращается в незаметно проигнорированную настройку.

Раздел и поле По умолчанию Допустимое значение / смысл
schema_version 1 Только версия 1
manager.open_timeout_ms 5000 100–60000 мс; ожидание открытия камеры
manager.reconnect_delay_ms 2000 100–60000 мс; задержка переподключения
manager.failure_threshold 5 1–1000; порог последовательных ошибок
web.grid_preview_fps 12 1–30; частота предпросмотра сетки
web.raw_preview_jpeg_quality 80 1–100; JPEG для просмотра raw-потока

Частота браузерного предпросмотра отличается от частоты захвата камеры и частоты обработки нейросетью. Уменьшение grid_preview_fps не меняет аппаратный профиль камеры.

Пример USB-камеры

Замените device реальным путём из /dev/v4l/by-id/, а разрешение, FPS и pixel_format — режимом, который показывает v4l2-ctl для этой камеры:

schema_version: 1
manager:
  open_timeout_ms: 5000
  reconnect_delay_ms: 2000
  failure_threshold: 5
web:
  grid_preview_fps: 12
  raw_preview_jpeg_quality: 80
cameras:
  - id: front
    display_name: Передняя камера
    enabled: true
    interface: v4l2
    device: /dev/v4l/by-id/usb-YOUR_CAMERA-video-index0
    topic: /smart_camera/front/image_raw
    frame_id: front_camera_optical_frame
    resolution: {width: 640, height: 480}
    fps: 30
    pixel_format: MJPG
    transport: compressed
    jpeg_quality: 85
    output_encoding: bgr8
    controls:
      auto_exposure: null
      exposure: null
      gain: null
      brightness: null
    calibration_file: null

null в controls означает «не менять значение драйвера». Это отличается от выключения автоматической экспозиции: для него задаётся auto_exposure: false. Набор доступных controls зависит от устройства. Значения экспозиции и усиления выбирайте по его диапазонам, а не переносите с другой модели камеры.

Общие поля камеры

Поле Назначение
id Уникальный идентификатор длиной 1–64; начинается с маленькой латинской буквы, далее буквы, цифры, _ и -
display_name Название в интерфейсе, 1–128 символов
enabled Включена ли камера; по умолчанию true
interface v4l2, realsense или ros; по умолчанию v4l2
device Обязательная непустая строка устройства или обозначения источника
topic Абсолютное ROS-имя без завершающего / и //
frame_id Непустое имя системы координат изображения
resolution width и height, каждое от 1 до 16384
fps Частота больше 0 и не выше 240; оборудование должно поддерживать выбранное значение
pixel_format auto, MJPG или YUYV; по умолчанию auto
transport raw или compressed; по умолчанию raw
jpeg_quality 1–100, по умолчанию 85
output_encoding bgr8, rgb8 или mono8; по умолчанию bgr8
calibration_file Путь к ROS calibration YAML либо null

Для аппаратной камеры с compressed фактический топик изображения — <topic>/compressed. Для внешнего источника interface: ros поле topic всегда содержит точное имя уже существующего топика, включая суффикс, если он есть. SmartCamera подписывается на него и не управляет внешним издателем. Пример такого источника:

schema_version: 1
cameras:
  - id: external
    display_name: Внешний ROS-поток
    interface: ros
    device: ros
    topic: /external/image/compressed
    frame_id: external_optical_frame
    resolution: {width: 640, height: 480}
    fps: 30
    transport: compressed

Конфигурация проверяет уникальность ID, топиков, V4L2-устройств и серийных номеров RealSense. Проверяются и эффективные топики: например, изображение одной камеры не должно пересекаться с camera_info другой. Отключённая запись остаётся частью конфигурации и тоже участвует в проверке уникальности.

RealSense и калибровка

Для interface: realsense обязателен serial. Поля color и depth описывают ширину, высоту и FPS потоков; у depth также есть topic и frame_id. Если color не задан, он получается из resolution и fps; пропущенный depth создаётся с тем же профилем. Реальную поддержку сочетания потоков проверяйте через discovery, особенно для L515.

pointcloud.enabled по умолчанию false. Для облака можно задать topic, frame_id и max_points (по умолчанию 150000, диапазон 1–2000000). depth_visualization задаёт только отображение: min_m по умолчанию 0.2, max_m 4.0, colormap — turbo, viridis, magma или gray. Максимальная дистанция должна быть больше минимальной. Цветной поток RealSense допускает bgr8 и rgb8.

calibration_file принимает абсолютный путь или адрес вида package://smart_camera_config/config/calibration/front.yaml. Для обычной камеры без калибровки фиктивный CameraInfo не создаётся; RealSense предоставляет заводские параметры. При применении результата монокалибровки приложение сохраняет первоначальную настройку в calibration_baseline. Не удаляйте исходный calibration YAML, если планируете вернуться к нему. Работа с профилями описана в руководстве по камерам.

Применение и конфликты изменений

Веб-панель сохраняет конфигурацию с текущей ревизией и применяет изменения через менеджеры. При неудачном открытии выполняется откат. HTTP-клиент передаёт If-Match, ROS-клиент — expected_revision; устаревшая ревизия требует повторного чтения. Это защищает от перезаписи изменений другого клиента.

Если YAML редактировался вручную, используйте действие перечитывания конфигурации в настройках приложения. Само сохранение файла редактором не равнозначно применению через API. Для интеграции см. HTTP API и ROS 2 управление.

Launch, настройки веб-сервера и материалы

Аргумент launch По умолчанию
config_file config/cameras.yaml установленного пакета
web_host 127.0.0.1
web_port 8000
recordings_dir ~/smart_camera_recordings
photo_sync_tolerance_ms 30 (веб-сервер принимает 0–30)
realsense_sdk_prefix ~/.local/librealsense-l515-2.50.0

JSON настроек находится в ~/.config/smart_camera_web/settings.json; путь можно изменить переменной SMART_CAMERA_WEB_SETTINGS_FILE. Он содержит recordings_directory и dashboard_refresh_seconds (1–300, по умолчанию 5). При наличии сохранённого JSON его каталог материалов используется вместо стартового значения recordings_dir в обычном запуске сервера.

В каталоге материалов находятся записи и подкаталоги calibrations, handeye, inference. Смена папки в настройках не переносит существующие файлы; службы калибровки и inference выбирают свои корни при старте. После изменения папки перезапустите приложение, чтобы все службы использовали новое расположение. Для резервной копии сохраняйте YAML камер, связанные calibration-файлы, JSON настроек и весь каталог материалов.

CLI автоматически задаёт SMART_CAMERA_INFERENCE_PYTHON: .venv-inference/bin/python внутри исходников для локального режима и /opt/inference/bin/python для Docker. При самостоятельном запуске порядок выбора: SMART_CAMERA_INFERENCE_PYTHON, затем существующий ~/.venvs/smart-camera-inference/bin/python, затем Python веб-сервера. Его окружение не заменяет YAML камер; подробности — в разделе моделей.