본문으로 건너뛰기

ROS 2 (로봇 미들웨어) 드라이버

개요

ROS 2 (Robot Operating System 2) 는 모바일 로봇 / AGV / 협동 로봇 / 드론 분야의 표준 미들웨어로, DDS (Data Distribution Service, RTPS over UDP/TCP) 위에서 publish / subscribe / service / action 를 제공합니다. 토픽 (예: /odom, /scan, /battery_state) 을 구독하여 로봇 상태를 모니터링합니다.

항목
opc_typeROS2
구현 클래스plantpulse.driver.protocol.ros2.ROS2Driver
라이브러리rosbridge_suite (JSON over WebSocket, 자체 클라이언트)
read✅ 토픽 구독 — <topic>:<field.dot.path>
write⛔ 미지원 (읽기 전용)
보안DDS-Security / SROS2 (벤더별)
현재 상태: rosbridge 실구현 (2026-07)

ROS2 는 rosbridge_server 에 WebSocket 으로 접속해 토픽을 구독하는 실구현입니다. 등록 방법·주소 계약은 연결 유형 — ROS 2 가 정본이며, 아래는 대안 운영 방법 의 bridge 패턴 중 하나를 사용하세요.


왜 native 구현이 어려운가

ROS 2 의 자바 클라이언트인 rcljava 는 순수 자바 라이브러리가 아니라 C++ 코어 (rcl, rmw) + JNI 바인딩 구조입니다.

의존 요소설명배포 영향
rcl (C)ROS 2 client library 코어플랫폼별 .so / .dll 필요
rmw middleware실제 DDS 구현 추상화어떤 DDS 를 쓸지 빌드시 결정
rmw_cyclonedds_cppEclipse CycloneDDS 백엔드native lib + license (EPL/EDL)
rmw_fastrtps_cppeProsima Fast DDS 백엔드native lib + license (Apache 2.0)
ROS 2 distro 의존Humble / Iron / Jazzy / Rolling 매 LTS 마다 ABI 다름게이트웨이 OS 버전과 매칭 필요
JNI bridgercljava 자체자바 메모리 모델과 DDS thread pool 충돌 위험

따라서 PlantPulse Edge 처럼 다양한 OS / 아키텍처 (x86-64 Linux, ARM64 Linux, Windows Server) 에서 동작해야 하는 자바 애플리케이션이 native ROS 2 클라이언트를 직접 임베드하는 것은 배포 / 라이브러리 충돌 / 버전 매칭 면에서 매우 비용이 큽니다.


대안 운영 방법

ROS 2 진영은 외부 시스템 통합용으로 bridge 노드를 표준화해 두었습니다. PlantPulse 는 bridge 의 출력 인터페이스를 받기만 하면 됩니다.

옵션 1. rosbridge_server (WebSocket / REST)

ROS 2 측에 rosbridge_suite 를 띄우면 JSON over WebSocket / HTTP 로 토픽 구독이 가능합니다.

사용할 PlantPulse 드라이버페이지
HTTP (REST polling 또는 WebSocket bridge)HTTP

옵션 2. MQTT bridge

ros2-mqtt-bridge 등의 bridge 로 ROS 2 토픽을 MQTT 토픽으로 변환합니다.

사용할 PlantPulse 진입로페이지
Sparkplug B 입력Sparkplug B

옵션 3. OPC UA Robotics Companion Specification

OPC Foundation + VDMA 가 표준화한 OPC UA Robotics Companion Spec 을 지원하는 로봇 컨트롤러 (예: ABB OmniCore, KUKA KR C5, Universal Robots PolyScope X) 가 늘고 있습니다. 이 경우 ROS 2 자체가 아니라 컨트롤러의 OPC UA 서버에 직접 접속할 수 있습니다.

사용할 PlantPulse 드라이버페이지
OPCUAOPC-UA

어떤 옵션을 골라야 하나

상황권장
자체 개발 ROS 2 시스템 (모바일 AGV 등)rosbridge_server + HTTP 드라이버
다수 로봇 + 클라우드 수집까지 필요MQTT bridge → Sparkplug B
산업용 로봇 컨트롤러 (ABB / KUKA / UR)OPC UA Robotics Companion → OPCUA 드라이버
단순 상태 텔레메트리 1~2 토픽rosbridge_server REST polling

추후 native 구현 시 고려 사항

옵션의존성난이도
rcljava 임베드rcl + rmw + DDS 의 native .so / .dll매우 상
ROS 2 Java 클라이언트 (jros2client 등 fork)비공식, 유지보수 약함
자체 RTPS 파서 (UDP 멀티캐스트)RTPS 스펙 직접 구현매우 상
결론

PlantPulse Edge 의 단일 jar 배포 모델 안에서 native ROS 2 클라이언트를 임베드할 계획은 없습니다. 공식 권장 통합 경로는 rosbridge_server (HTTP) 또는 OPC UA Robotics Companion (OPCUA) 입니다.


stub 등록 (테스트 전용)

curl -X POST http://<edge-host>/api/v1/opc \
-H "Content-Type: application/json" \
-d '{
"opc_id": "OPC_ROS2_STUB",
"opc_type": "ROS2",
"opc_name": "ROS 2 stub",
"opc_agent_ip": "192.168.0.0",
"opc_agent_port": "0",
"site_id": "SITE_00001",
"auto_collect": false,
"timecycle": 5000,
"tag_list": []
}'