Pular para conteúdo

Visão — Nós ROS 2

Nós prontos para rodar que envolvem os algoritmos e as câmeras de visão como executáveis ROS 2 (ros2 run nectar <node>.py). Cada um controla um ImageHandler internamente e publica em mensagens nectar_interfaces.

Veja também: Cameras · Algorithms · Vision overview.

Arquitetura

classDiagram
    class ArucoNode {
        -aruco Aruco
        -img_handler ImageHandler
        -pose_estime_pub Publisher
        +process_image(img)
        +cleanup()
    }

    class LineDetectionNode {
        -line_detectors Dict~str,LineDetector~
        -estimation_methods Dict~str,ILineEstimationMethod~
        -image_handler ImageHandler
        +process_image(img)
        +initialize_color_detector(color, color_space)
        +run()
        +cleanup()
    }

    class ColorCalibrationNode {
        -color_detector ColorDetector
        -img_handler ImageHandler
        -_process(img)
    }

    class CameraPublisherNode {
        -camera AbstractCam
        -image_handler ImageHandler
        -publisher Publisher
        +cleanup()
    }

    ArucoNode o-- Aruco
    ArucoNode o-- ImageHandler
    LineDetectionNode o-- LineDetector
    LineDetectionNode o-- ImageHandler
    ColorCalibrationNode o-- ColorDetector
    ColorCalibrationNode o-- ImageHandler
    CameraPublisherNode o-- ImageHandler

Nó de detecção ArUco

ros2 run nectar aruco_node.py --ros-args \
    -p image_source:=webcam -p marker_dict:=5 -p tag_size:=0.05
Parâmetro Tipo Padrão Descrição
image_source string webcam Fonte de câmera
marker_dict int 5 Dicionário ArUco (4, 5, 6, 7)
tag_size float 0.2 Tamanho do marcador em metros

Publica /aruco/pose_estimate (nectar_interfaces/ArucoTransforms).

Nó de detecção de linha

ros2 run nectar line_detection_node.py --ros-args \
    -p line_colors:="blue,red" -p method:=HoughLinesP \
    -p spaces:="hsv,lab" -p image_source:=webcam -p show_visualization:=true
Parâmetro Tipo Padrão Descrição
line_colors string teste Nomes de cor separados por vírgula, de color_calibration.json (por exemplo, blue,red). O padrão teste é um placeholder — defina nomes explícitos que existam no seu arquivo de calibração, como no exemplo acima.
method string HoughLinesP Método de estimação
spaces string hsv Espaços de cor separados por vírgula
image_source string webcam Fonte de câmera
show_visualization bool true Mostra a janela OpenCV
visualization_name string Line Detection Título da janela

Métodos: HoughLinesP, RotatedRect, FitEllipse, RansacLine, AdaptiveHoughLinesP. Por cor, publica /line_state/{color} (nectar_interfaces/LineInfo) e /line_detect/{color} (std_msgs/Bool).

Nó de calibração de cor

ros2 run nectar color_calibration_node.py --ros-args \
    -p image_source:=webcam -p color_space:=hsv -p flood_tolerance:=15

Calibração interativa HSV/LAB em uma única janela: clique com o botão esquerdo em uma região colorida para computar automaticamente os thresholds via flood fill, depois ajuste fino com as seis trackbars de canal. A visão empilhada mostra original | mask | result.

Parâmetro Tipo Padrão Descrição
image_source string webcam Fonte de câmera
color_space string hsv Espaço de cor inicial (hsv ou lab)
flood_tolerance int 15 Tolerância inicial de flood-fill para a amostragem por clique
Tecla Ação
clique esquerdo Amostra a região clicada (flood fill)
c Alterna HSV / LAB
s Salva (pede um nome de cor)
l Carrega uma cor nomeada
z Desfaz a última amostra
r Reseta
q Sai

As cores salvas são gravadas no algorithms/color/color_calibration.json compartilhado e carregadas via ColorDetector(mode="preset", color=<name>) e pelo nó de detecção de linha.

Nota: este nó exige uma GUI do OpenCV (mouse + trackbars).

Nó publisher de câmera

Publica qualquer fonte de CameraFactory como um tópico de imagem ROS 2. Selecione o driver com camera_source (webcam, realsense, oakd, c920, imx219, ros, ...) e defina os parâmetros específicos da fonte.

ros2 run nectar camera_publisher_node.py --ros-args \
    -p camera_source:=webcam -p device_index:=0 \
    -p width:=1280 -p height:=720 -p fps:=30 \
    -p use_compression:=true -p jpeg_quality:=80 -p threaded:=true
Parâmetro Tipo Padrão Descrição
camera_source string webcam Chave do driver de câmera passada para CameraFactory
device_index int 0 Índice do dispositivo USB/webcam
width / height int 640 / 480 Tamanho do frame
fps int 30 FPS alvo
use_compression bool true Publica imagens comprimidas em JPEG
jpeg_quality int 80 Qualidade do JPEG (0-100)
buffer_size int 2 Tamanho do buffer da câmera
threaded bool true Thread de captura em background

Publica image_raw/compressed (sensor_msgs/CompressedImage) ou image_raw (sensor_msgs/Image, quando a compressão está desabilitada).