본문으로 건너뛰기
버전: 3.4.x

노드 구성과 데이터 흐름

노드 구성

처음 보는 사람이 실행 흐름을 따라가기 쉽도록, 누가 어떤 입력을 받아 어떤 출력을 내는지를 기준으로 정리합니다.

노드주 역할주요 입력주요 출력/동작
cobiz_bridge_node디바이스 등록/갱신 + 트랙/액션 정보 구성config.yaml (videos, audios, speaker, lidar, topics, actions, control)/device_info publish
manager_node/device_info를 기준으로 child 노드 자동 실행/재시작/device_info subscribe, config.yamlvideo_node, topic_node, audio_node, speaker_node, lidar_node, sensor_node, occupancy_grid_node, control_node, health_check_node, request_manager 프로세스 관리
health_check_node서버 이벤트 수신/필터링서버 websocket (TASK_REGISTERED, TASK_ABORTED)/task_event publish
request_manager플러그인 상태 보고를 중앙 HTTP로 전달/task_state subscribePOST {COBIZ_API_ADDRESS}/api/tasks/{task_id}/{task_type}
video_nodeRTSP/UVC 비디오 소스 인코딩 후 전송type=rtsp/uvc, source, format, width, height, fpswebsocket 전송 (H.265/H.264/VP9)
topic_nodeROS 이미지 토픽 인코딩 후 전송source, format, width, height, fps, message_typewebsocket 전송 + 진단 로그
audio_nodeALSA/Pulse/RTSP 오디오 소스 Opus 인코딩 전송type=alsa/pulse/rtsp, source, format, sample_rate, channelswebsocket 전송
speaker_node서버 Opus 수신 후 스피커 출력websocket 오디오 스트림, type, source, rate, channelsALSA/Pulse 재생
lidar_nodePointCloud2 압축 전송topic (sensor_msgs/PointCloud2)Draco 압축 payload websocket 전송
sensor_node임의 ROS 토픽 직렬화 전송topic, topic_type(선택)websocket 전송
occupancy_grid_nodeOccupancyGrid 전송 특화topic (nav_msgs/OccupancyGrid)PNG + 메타데이터 전송
control_node원격 제어 입력을 Joy 토픽으로 브리지websocket 제어 메시지sensor_msgs/Joy publish

manager_node가 트랙 타입별로 실행하는 노드

  • VIDEO 트랙
    • videos[].type == topic이면 topic_node
    • 그 외 rtsp, uvcvideo_node
  • AUDIO 트랙: audio_node
  • SPEAKER 트랙: speaker_node
  • LIDAR 트랙: lidar_node
  • CONTROL 트랙: control_node
  • MAP 트랙: occupancy_grid_node
  • TOPIC, BATTERY, ODOMETRY, TRAJECTORY 트랙: sensor_node

핵심 데이터 흐름

Core 흐름

cobiz_bridge_node/device_infomanager_node → child nodes

이 경로는 단말이 자신이 가진 센서, 미디어, 제어 capability를 정리하고, 이에 맞는 실행 노드를 자동 기동하는 흐름입니다.

Task 상태 흐름

health_check_node/task_event → plugin → /task_staterequest_manager → Server API

이 경로는 플러그인 표준 경로입니다. 플러그인은 /task_event를 받아 도메인 로직을 실행하고, 결과를 /task_state로 publish 합니다. 실제 서버 API 호출은 request_manager가 담당합니다.

운영 관점에서의 역할 분리

  • cobiz_bridge_node: 디바이스 등록과 capability 선언의 시작점
  • manager_node: 노드 생명주기 오케스트레이터
  • health_check_node: 서버 이벤트를 ROS 2 내부 이벤트로 변환하는 어댑터
  • 플러그인: Task 도메인 로직 수행
  • request_manager: 서버 보고 표준화 및 외부 HTTP 경계 담당

이 구조 덕분에 플러그인은 네트워크 구현이 아니라 작업 수행 결과와 상태 전이에 집중할 수 있습니다.