본문으로 건너뛰기

ROS 2 — 로봇 / AGV 미들웨어

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

게이트웨이의 ROS2 드라이버는 ROS 2 표준 브릿지 rosbridge_suite (rosbridge_server) 의 JSON over WebSocket 엔드포인트에 접속해 토픽을 구독하는 실구현 드라이버 입니다. DDS 에 직접 붙지 않으므로 ROS 2 측에 rosbridge_server 만 띄우면 됩니다. 읽기 전용 입니다.


사전 준비 — rosbridge_server

ROS 2 측 (로봇 본체 또는 같은 네트워크의 PC) 에 표준 패키지 rosbridge_suite 를 설치·구동합니다.

# 예: ROS 2 Humble
sudo apt install ros-humble-rosbridge-suite
ros2 launch rosbridge_server rosbridge_websocket_launch.xml # 기본 ws 포트 9090

등록 폼 입력값

입력 칸무엇을 적나요예시
IP 주소rosbridge_server 호스트192.168.0.30
포트rosbridge WebSocket 포트9090 (ws 기본) / 9443 (wss 기본)
경로 (rosbridge)WebSocket endpoint 경로 — 옵션 path/ (기본)
TLS 사용false = ws / true = wss — 옵션 tlsfalse (기본)
쓰기 미지원

ROS 2 드라이버는 read 전용 입니다. 토픽 publish (예: /cmd_vel 이동 명령) 는 rosbridge advertise 가 필요해 지원하지 않습니다. 로봇 명령 송신은 별도 경로를 사용하세요.


태그의 PLC 주소 표기

주소는 <topic>:<field.dot.path>: 로 토픽과 필드 경로를 분리합니다 (ROS 토픽은 / 를 포함하고 : 는 없음).

표기의미
/temperature:datastd_msgs/Float64data 필드
/imu:orientation.zsensor_msgs/Imu 의 중첩 필드 (dot-path)
/scan:ranges.0배열 원소 — 숫자 세그먼트가 인덱스
/odom: 없으면 msg 전체 (JSON 문자열)
  • 리프 필드는 텍스트 값으로, object / array 는 JSON 문자열로 반환됩니다.
  • lazy subscribe — 토픽은 첫 read 시 1회 구독되고 이후 rosbridge 가 새 샘플을 push 합니다. 따라서 첫 값은 다음 수집 주기부터 들어옵니다.

데이터 형식 매칭

msg 필드데이터 형식
float 필드 (data, orientation.z …)Float / Double
int / enum 필드Integer
bool 필드Boolean
문자열 / msg 전체 (JSON)String

자주 쓰는 토픽 매핑 (참고)

주소의미권장 형식
/battery_state:percentage배터리 잔량 (sensor_msgs/BatteryState)Float
/odom:pose.pose.position.x로봇 위치 x (nav_msgs/Odometry)Float
/odom:twist.twist.linear.x전진 속도 (nav_msgs/Odometry)Float
/diagnostics진단 메시지 전체String (JSON)

/scan (LiDAR raw) 처럼 큰 메시지는 msg 전체 수집을 피하고 필요한 원소만 (예: /scan:ranges.0) 등록하세요.


자주 만나는 문제

증상가능한 원인해결
등록 직후 값이 비어 있음lazy subscribe — 첫 read 는 구독만 수행다음 수집 주기 (timecycle 1회) 까지 대기
연결 실패 (connect failed)rosbridge_server 미구동 / 포트 불일치ROS 2 측 rosbridge_server 구동 + 포트 (9090) 확인
wss 연결 실패TLS 설정 / 인증서tls=true 면 rosbridge 도 TLS 로 구동돼야 함 (wss 기본 포트 9443)
값이 갱신되다 멈춤WebSocket 끊김 — 드라이버는 즉시 미연결로 전환 (오래된 캐시 값을 계속 반환하지 않음)네트워크 / rosbridge 재기동 확인
토픽 이름은 맞는데 빈 값필드 dot-path 오타 (msg 에 없는 경로)ros2 topic echo <topic> 으로 msg 구조 확인 후 경로 수정

다른 통합 경로 (참고)

rosbridge 를 쓸 수 없는 환경에서는 다음 경로도 가능합니다.

상황대안
다수 로봇 + 클라우드 수집까지 필요MQTT bridge → Sparkplug B / MQTT 클라이언트
산업용 로봇 컨트롤러 (ABB / KUKA / UR)OPC UA Robotics Companion → OPC-UA