ROS 2 Humble rqt Plugins 정리 #3


1. ROS 2 Humble rqt 기본 플러그인 전체 목록

ros-humble-rqt-common-plugins 메타패키지는 여러 rqt 플러그인 패키지를 한 번에 설치해 주는 묶음입니다. 해당 메타패키지에는 rqt_action, rqt_bag, rqt_console, rqt_graph, rqt_image_view, rqt_msg, rqt_plot, rqt_publisher, rqt_reconfigure, rqt_service_caller, rqt_shell, rqt_srv, rqt_topic 등이 포함됩니다.

대표 메뉴 구조는 다음과 같이 이해하면 됩니다.

                         메뉴                                          분류                                                            플러그인역할

ActionsAction Type Browser액션 타입 확인
ConfigurationDynamic Reconfigure노드 파라미터 확인/수정
IntrospectionNode Graph노드-토픽 연결 그래프 확인
LoggingConsoleROS 로그 확인/필터링
LoggingBagrosbag 데이터 확인/재생
Miscellaneous ToolsPython ConsolePython 인터랙티브 콘솔
Miscellaneous ToolsShell터미널 셸
Robot ToolsController Managerros2_control 컨트롤러 상태 확인/관리
Robot ToolsDiagnostics Viewer로봇 진단 상태 확인
Robot ToolsJoint trajectory controller로봇팔 조인트 궤적 테스트
Robot ToolsMotion builder로봇 동작 프리셋 생성/관리
Robot ToolsMoveit! MonitorMoveIt 상태 모니터링
Robot ToolsRobot Steering/cmd_vel 기반 모바일 로봇 수동 조작
Robot ToolsRuntime Monitordiagnostics 실시간 모니터링
ServicesService Caller서비스 호출
ServicesService Type Browser서비스 타입 구조 확인
TopicsMessage Publisher토픽 메시지 발행
TopicsMessage Type Browser메시지 타입 구조 확인
TopicsTopic Monitor토픽 상태 확인
VisualizationImage View이미지 토픽 보기
VisualizationPlot숫자 토픽 그래프 표시

위 표를 조금 더 쉽게 풀어서 말하면 다음과 같습니다.

Actions              → 오래 걸리는 작업 구조 확인
Configuration        → 노드 설정값 확인/수정
Introspection        → ROS 2 시스템 연결 구조 확인
Logging              → 로그와 기록 데이터 확인
Miscellaneous Tools  → Python 콘솔, 셸 같은 보조 도구
Robot Tools          → 실제 로봇 제어기, 진단, 조작 관련 도구
Services             → 서비스 구조 확인 및 호출
Topics               → 토픽 구조 확인, 상태 확인, 메시지 발행
Visualization        → 이미지와 숫자 데이터를 시각적으로 확인

즉, rqt 플러그인은 크게 다음 목적별로 나눌 수 있습니다.

                           목적                                                                    사용하는 플러그인

ROS 2 구조 파악Node Graph, Topic Monitor
메시지/서비스/액션 타입 확인Message Type Browser, Service Type Browser, Action Type Browser
직접 테스트 명령 보내기Message Publisher, Service Caller, Robot Steering
로그와 오류 확인Console, Diagnostics Viewer, Runtime Monitor
센서 데이터 확인Image View, Plot
로봇 제어기 확인Controller Manager, Joint trajectory controller
MoveIt/로봇팔 확인Moveit! Monitor, Motion builder
기록 데이터 분석Bag

2. Actions → Action Type Browser

2.1 개념 설명

메뉴 위치:

Plugins → Actions → Action Type Browser

Action Type Browser는 ROS 2에 설치된 Action 타입 구조를 확인하는 플러그인입니다.

ROS 2에서 Action은 오래 걸리는 작업에 사용합니다.

대표 예시는 다음과 같습니다.

로봇팔 목표 자세 이동
모바일 로봇 내비게이션 목표점 이동
드론 이륙
드론 착륙
그리퍼 열기/닫기
장시간 스캔 작업

Action은 시간이 걸리는 작업을 처리합니다.

Goal 요청
Feedback 반복 수신
Result 최종 수신

Action은 보통 세 부분으로 구성됩니다.

                  구성                                의미                                       예시

Goal목표값목표 위치, 목표 자세, 이동 명령
Feedback진행 상태현재 진행률, 현재 위치, 남은 거리
Result최종 결과성공 여부, 최종 위치, 오류 코드

예를 들어 내비게이션 Action이라면 다음처럼 생각할 수 있습니다.

Goal:
  목표 위치로 이동해라.

Feedback:
  현재 목표까지 2.3m 남았다.
  현재 목표까지 1.5m 남았다.
  현재 목표까지 0.5m 남았다.

Result:
  목표 지점 도착 성공.

2.2 CLI로 Action 타입 확인하기

설치된 action 타입 목록을 확인합니다.

ros2 interface list | grep action

특정 action 타입 구조를 확인합니다.

예:

ros2 interface show action_tutorials_interfaces/action/Fibonacci

Navigation2를 설치했다면 다음과 같은 타입도 볼 수 있습니다.

ros2 interface show nav2_msgs/action/NavigateToPose

MoveIt을 사용하는 환경이라면 다음 계열 Action을 확인할 수도 있습니다.

ros2 interface list | grep moveit

3.3 rqt에서 실행

rqt

메뉴 선택

Plugins → Actions → Action Type Browser

왼쪽 또는 상단 목록에서 Action 타입 선택

예:

action_tutorials_interfaces/action/Fibonacci
nav2_msgs/action/NavigateToPose
control_msgs/action/FollowJointTrajectory

 ‘+’ 아이콘을 클릭하고 화살표를 눌러 확장하면 액션의 내용을 확인할 수 있습니다.

Goal, Feedback, Result 구조 확인

예를 들어 control_msgs/action/FollowJointTrajectory는 로봇팔이나 조인트 컨트롤러에서 자주 나오는 Action 타입입니다.

Action Type Browser는 Action을 실행하는 도구가 아닙니다.
Action 메시지 구조를 보는 설명서 뷰어입니다.

2.4 사용

다음 상황에서 사용합니다.

Action client 코드를 작성하기 전
MoveIt Action 구조를 확인할 때
Nav2 NavigateToPose 구조를 확인할 때
FollowJointTrajectory Goal 필드를 확인할 때
드론 이륙/착륙 Action 인터페이스를 설계할 때

예를 들어 로봇팔을 제어할 때 FollowJointTrajectory Action을 보냅니다. 이때 Goal 안에 어떤 필드를 넣어야 하는지 모르면 코드를 작성할 수 없습니다. Action Type Browser로 먼저 구조를 확인한 뒤 코드를 작성하면 삽질이 줄어듭니다.

Action Type Browser = Action 메시지 설계도 확인 도구

3. Miscellaneous Tools → Python Console

3.1 개념 설명

메뉴 위치:

Plugins → Miscellaneous Tools → Python Console

Python Console은 rqt 안에서 Python 코드를 바로 실행할 수 있는 인터랙티브 콘솔입니다.

복잡한 프로그램을 개발하는 용도라기보다는, 간단한 Python 테스트를 빠르게 해보는 용도입니다.

예:

1 + 1
import math
math.sin(3.14)
import rclpy

3.2 사용

다음 상황에서 유용합니다.

간단한 Python 계산 확인
ROS 2 Python 모듈 import 확인
메시지 타입 import 가능 여부 확인
문자열 처리 테스트
수식 테스트
토픽 값 계산식 검증

예를 들어 로봇 제어에서 각도를 radian으로 바꿔야 할 때가 많습니다.

import math
degree = 90
radian = degree * math.pi / 180.0
radian

결과:

1.57079632679

ROS 2 Python 라이브러리도 확인합니다.

import rclpy

메시지 타입 import도 확인합니다.

from geometry_msgs.msg import Twist
msg = Twist()
msg.linear.x = 0.2
msg.angular.z = 0.5
msg

3.3 주의할 점

Python Console은 노드 개발용 IDE가 아닙니다.

다음 작업은 일반 코드 편집기와 터미널에서 하는 것이 좋습니다.

ROS 2 노드 본격 개발
launch 파일 실행
장시간 실행 노드 테스트
복잡한 패키지 빌드
멀티스레드 테스트

4. Miscellaneous Tools → Shell

4.1 개념 설명

메뉴 위치:

Plugins → Miscellaneous Tools → Shell

Shell은 rqt 안에서 터미널 명령을 실행할 수 있는 플러그인입니다.

일반 터미널을 완전히 대체하는 용도는 아닙니다. rqt 화면 안에서 간단한 ROS 2 명령을 확인할 때 편합니다.

4.2 실습 명령어

rqt 실행:

rqt

메뉴:

Plugins → Miscellaneous Tools → Shell

Shell 창에서 다음 명령어를 입력합니다.

ros2 node list
ros2 topic list
ros2 service list
ros2 action list
ros2 interface list | grep Twist

4.3 언제 쓰는가?

다음 작업에 좋습니다.

노드 목록 빠르게 확인
토픽 목록 빠르게 확인
서비스 목록 확인
액션 목록 확인
환경변수 확인
간단한 echo 테스트

예:

echo $ROS_DOMAIN_ID
printenv | grep ROS

4.4 일반 터미널을 써야 하는 경우

다음 작업은 rqt Shell보다 일반 터미널이 낫습니다.

colcon build
ros2 launch 장시간 실행
tmux 작업
PX4 SITL 실행
Gazebo 실행
대용량 로그 출력
권한이 필요한 장치 설정

5. Services → Service Type Browser

5.1 개념 설명

메뉴 위치:

Plugins → Services → Service Type Browser

Service Type Browser는 ROS 2 서비스 타입 구조를 확인하는 플러그인입니다.

ROS 2 Service는 요청과 응답 구조입니다.

Client → Request → Server
Client ← Response ← Server

서비스 타입은 두 부분으로 나뉩니다.

Request
---
Response

예:

example_interfaces/srv/AddTwoInts

구조:

int64 a
int64 b
---
int64 sum

위에서 — 위쪽은 요청이고, 아래쪽은 응답입니다.

5.2 CLI로 서비스 타입 확인하기

서비스 목록 확인:

ros2 service list

특정 서비스 타입 확인:

ros2 service type /clear

서비스 구조 확인:

ros2 interface show std_srvs/srv/Empty

turtlesim의 spawn 서비스 구조 확인:

ros2 interface show turtlesim/srv/Spawn

출력 예:

float32 x
float32 y
float32 theta
string name
---
string name

의미:

Request:
  x, y, theta, name을 보내면

Response:
  생성된 turtle 이름을 돌려준다.

5.3 rqt 실습

터미널 1:

ros2 run turtlesim turtlesim_node

터미널 2:

rqt

메뉴:

Plugins → Services → Service Type Browser

서비스 타입을 선택합니다.

예:

std_srvs/srv/Empty
turtlesim/srv/Spawn
turtlesim/srv/SetPen
turtlesim/srv/TeleportAbsolute

각 서비스의 Request와 Response 구조를 확인합니다.

5.4 자주 보는 서비스 예시

                                                    서비스                                                                                    타입용도

std_srvs/srv/Empty입력/출력 없이 명령만 수행
std_srvs/srv/SetBooltrue/false 설정
example_interfaces/srv/AddTwoInts두 정수 더하기 예제
turtlesim/srv/Spawnturtle 생성
turtlesim/srv/SetPenturtle 펜 색상 설정
turtlesim/srv/TeleportAbsoluteturtle 위치 이동

5.5 실무 사용 예

서비스는 로봇 시스템에서 다음 상황에 자주 사용합니다.

모터 enable/disable
그리퍼 열기/닫기
맵 저장
센서 calibration 시작
로봇 상태 초기화
미션 시작/정지
파라미터 저장
시뮬레이터 reset

Service Type Browser는 서비스 클라이언트 코드를 작성하기 전에 반드시 확인하면 좋습니다.

예를 들어 turtlebot3의 서비스가 있다고 가정합니다.

/turtlebot3_msgs

먼저 타입 확인:

ros2 service type /turtlebot3_msgs

그다음 구조 확인:

ros2 interface show 패키지명/srv/서비스타입

rqt에서는 이 과정을 GUI로 볼 수 있습니다.

6. Topics → Message Type Browser

6.1 개념 설명

메뉴 위치:

Plugins → Topics → Message Type Browser

Message Type Browser는 ROS 2 메시지 타입 구조를 확인하는 플러그인입니다. rqt_msg는 사용 가능한 ROS message type을 확인하는 GUI 플러그인으로 설명됩니다.

ROS 2 토픽은 반드시 메시지 타입을 가집니다.

예:

/std_msgs/msg/String
/geometry_msgs/msg/Twist
/sensor_msgs/msg/Image
/sensor_msgs/msg/Imu
/nav_msgs/msg/Odometry
/trajectory_msgs/msg/JointTrajectory

토픽 이름만 알아서는 부족합니다. 메시지 내부 구조를 알아야 코드를 작성할 수 있습니다.

6.2 CLI로 메시지 타입 확인하기

토픽 목록:

ros2 topic list

토픽 타입 확인:

ros2 topic info /turtle1/cmd_vel

메시지 구조 확인:

ros2 interface show geometry_msgs/msg/Twist

출력:

Vector3 linear
Vector3 angular

Vector3 구조 확인:

ros2 interface show geometry_msgs/msg/Vector3

출력:

float64 x
float64 y
float64 z

즉 Twist는 내부적으로 다음 구조입니다.

linear:
  x
  y
  z

angular:
  x
  y
  z

모바일 로봇에서는 보통 다음만 씁니다.

linear.x
angular.z

6.3 rqt 실습

rqt 실행:

rqt

메뉴:

Plugins → Topics → Message Type Browser

다음 메시지를 찾아봅니다.

std_msgs/msg/String
geometry_msgs/msg/Twist
sensor_msgs/msg/Image
sensor_msgs/msg/Imu
nav_msgs/msg/Odometry
trajectory_msgs/msg/JointTrajectory

각 메시지의 필드 구조를 확인합니다.

6.4 주요 메시지 타입 설명

std_msgs/msg/String

가장 단순한 문자열 메시지입니다.

string data

예:

ros2 topic pub /hello std_msgs/msg/String "{data: 'hello ros2'}"

geometry_msgs/msg/Twist

속도 명령에 자주 사용합니다.

Vector3 linear
Vector3 angular

모바일 로봇 예:

linear.x = 전진 속도
angular.z = 회전 속도

sensor_msgs/msg/Image

카메라 이미지 메시지입니다.

대표 필드:

height
width
encoding
data
step

Image View에서 볼 수 있습니다. rqt_image_view는 image_transport를 사용해 이미지를 표시하는 GUI 플러그인입니다.

sensor_msgs/msg/Imu

IMU 센서 메시지입니다.

대표 필드:

orientation
angular_velocity
linear_acceleration

드론, 모바일 로봇, 자세 추정에서 매우 중요합니다.

nav_msgs/msg/Odometry

로봇 위치와 속도 추정값입니다.

대표 필드:

pose
twist

모바일 로봇 위치 추정, SLAM, Navigation2에서 많이 사용합니다.

trajectory_msgs/msg/JointTrajectory

로봇팔 조인트 궤적 메시지입니다.

대표 필드:

joint_names
points

points 안에는 위치, 속도, 가속도, 시간이 들어갑니다.

6.5 실무 사용 예

Message Type Browser는 다음 상황에서 씁니다.

토픽 publisher 코드 작성 전
subscriber callback 작성 전
ros2 topic pub 명령 작성 전
rqt_plot에 넣을 필드 확인
Image View에서 볼 이미지 타입 확인
로봇팔 trajectory 구조 확인
Odometry 구조 확인

예를 들어 rqt_plot에 odometry x 위치를 넣으려면 메시지 구조를 알아야 합니다.

/odom/pose/pose/position/x

이 경로는 nav_msgs/msg/Odometry 구조를 알아야 찾을 수 있습니다.

7. Visualization → Image View

7.1 개념 설명

메뉴 위치:

Plugins → Visualization → Image View

Image View는 ROS 2 이미지 토픽을 화면에 보여주는 플러그인입니다.

공식 문서 기준으로 rqt_image_view는 image_transport를 사용해 이미지를 표시하는 GUI 플러그인입니다.

주로 다음 타입의 토픽을 봅니다.

sensor_msgs/msg/Image
sensor_msgs/msg/CompressedImage

대표 토픽 이름:

/camera/image_raw
/camera/color/image_raw
/camera/depth/image_raw
/image

7.2 왜 필요한가?

카메라 토픽은 터미널로 보면 의미가 없습니다.

ros2 topic echo /camera/image_raw

이렇게 보면 숫자 배열이 엄청나게 나옵니다.

data: [123, 42, 55, 98, ...]

사람이 볼 수 없습니다.

그래서 이미지 토픽은 Image View로 봐야 합니다.

7.3 USB 카메라 실습 예시

카메라 패키지는 환경마다 다를 수 있습니다. 예를 들어 v4l2_camera를 사용할 수 있습니다.

설치:

sudo apt install ros-humble-v4l2-camera

카메라 실행:

ros2 run v4l2_camera v4l2_camera_node

토픽 확인:

ros2 topic list

예상 토픽:

/image_raw
/camera_info

rqt 실행:

rqt

메뉴:

Plugins → Visualization → Image View

상단 토픽 선택:

/image_raw

이미지가 보이면 정상입니다.

7.4 Gazebo 카메라 실습 예시

Gazebo 또는 Ignition/Gazebo Sim에서 카메라 플러그인을 사용하면 다음 토픽이 나올 수 있습니다.

/camera/image_raw

확인:

ros2 topic list | grep image

타입 확인:

ros2 topic info /camera/image_raw

Image View에서 해당 토픽을 선택합니다.

7.5 OpenCV 처리 결과 확인

비전 노드를 만들 때 원본 이미지와 처리 결과 이미지를 따로 발행하면 디버깅이 편합니다.

예:

/camera/image_raw
/edge_image
/detected_image
/segmentation_image

Image View에서 /detected_image를 선택하면 객체 검출 결과가 제대로 그려졌는지 확인할 수 있습니다.

7.6 자주 발생하는 문제

토픽이 목록에 안 보임

확인:

ros2 topic list
ros2 topic info /camera/image_raw

이미지가 안 뜸

확인:

ros2 topic hz /camera/image_raw

토픽이 실제로 발행 중인지 확인합니다.

encoding 문제

이미지 메시지의 encoding이 잘못되면 표시가 안 될 수 있습니다.

확인:

ros2 topic echo /camera/image_raw --once

대표 encoding:

rgb8
bgr8
mono8
16UC1
32FC1

압축 이미지 문제

일부 환경에서는 압축 이미지 transport 플러그인이 필요할 수 있습니다.

sudo apt install ros-humble-image-transport-plugins

7.7 실무 사용 예

USB 카메라 영상 확인
Depth 카메라 영상 확인
드론 하방 카메라 확인
객체 인식 결과 확인
라인 트레이싱 결과 확인
AprilTag 검출 결과 확인
SLAM용 카메라 입력 확인

8. Visualization → Plot

8.1 개념 설명

메뉴 위치:

Plugins → Visualization → Plot

Plot은 숫자 데이터를 시간 그래프로 보여주는 플러그인입니다.

공식 문서 기준으로 rqt_plot은 숫자 값을 2D plot으로 시각화하는 GUI 플러그인입니다.

로봇 개발에서는 숫자 데이터가 계속 변합니다.

예:

IMU 각속도
로봇 위치
모터 속도
배터리 전압
PID 오차
드론 고도
엔코더 값
온도

이런 값은 터미널로 보는 것보다 그래프로 보는 것이 훨씬 좋습니다.

8.2 rqt_plot에 넣는 토픽 경로

rqt_plot은 숫자 필드 경로를 입력합니다.

예:

/turtle1/pose/x
/turtle1/pose/y
/turtle1/pose/theta

Odometry 예:

/odom/pose/pose/position/x
/odom/pose/pose/position/y
/odom/twist/twist/linear/x

IMU 예:

/imu/data/angular_velocity/x
/imu/data/angular_velocity/y
/imu/data/angular_velocity/z

배터리 예:

/battery_state/voltage
/battery_state/current
/battery_state/percentage

8.3 turtlesim 실습

터미널 1:

ros2 run turtlesim turtlesim_node

터미널 2:

ros2 run turtlesim turtle_teleop_key

터미널 3:

rqt

메뉴:

Plugins → Visualization → Plot

Plot 입력창에 다음을 추가합니다.

/turtle1/pose/x

추가:

/turtle1/pose/y

추가:

/turtle1/pose/theta

키보드로 거북이를 움직이면 x, y, theta 값이 실시간 그래프로 표시됩니다.

8.4 메시지 구조 확인과 연결하기

rqt_plot에 필드를 넣으려면 메시지 구조를 알아야 합니다.

먼저 토픽 타입 확인:

ros2 topic info /turtle1/pose

출력 예:

Type: turtlesim/msg/Pose

구조 확인:

ros2 interface show turtlesim/msg/Pose

출력 예:

float32 x
float32 y
float32 theta
float32 linear_velocity
float32 angular_velocity

그래서 rqt_plot에 다음을 넣을 수 있습니다.

/turtle1/pose/x
/turtle1/pose/y
/turtle1/pose/theta
/turtle1/pose/linear_velocity
/turtle1/pose/angular_velocity

8.5 IMU 실습 예시

IMU 토픽이 있다고 가정합니다.

ros2 topic list | grep imu

예:

/imu/data

타입 확인:

ros2 topic info /imu/data

구조 확인:

ros2 interface show sensor_msgs/msg/Imu

rqt_plot에 입력:

/imu/data/angular_velocity/x
/imu/data/angular_velocity/y
/imu/data/angular_velocity/z

로봇이나 센서를 움직이면 각속도 변화가 그래프로 보입니다.

8.6 Odometry 실습 예시

Odometry 토픽:

/odom

타입:

nav_msgs/msg/Odometry

rqt_plot 입력:

/odom/pose/pose/position/x
/odom/pose/pose/position/y
/odom/twist/twist/linear/x
/odom/twist/twist/angular/z

모바일 로봇이 움직일 때 위치와 속도 변화를 볼 수 있습니다.

8.7 제어기 튜닝 예시

PID 제어기를 만들었다고 가정합니다.

다음 토픽을 발행하면 rqt_plot으로 튜닝하기 좋습니다.

/pid/error
/pid/output
/pid/target
/pid/current

Plot에 다음을 넣습니다.

/pid/target/data
/pid/current/data
/pid/error/data

확인할 것:

목표값을 잘 따라가는가?
오버슈트가 큰가?
진동이 있는가?
응답이 느린가?

이런 건 터미널 숫자보다 그래프가 압도적으로 좋습니다.

8.8 자주 발생하는 문제

그래프가 안 나옴

토픽이 실제로 발행 중인지 확인:

ros2 topic hz /topic_name

필드 경로가 틀림

메시지 구조 확인:

ros2 interface show 메시지타입

예:

ros2 interface show nav_msgs/msg/Odometry

숫자 필드가 아님

rqt_plot은 숫자 값을 그립니다.

가능:

float32
float64
int32
int64
uint8

부적합:

string
bool만 단독으로는 사용성이 낮음
배열 전체
복잡한 객체 전체

배열은 특정 인덱스를 지원하는 경우가 있지만, 강의에서는 처음부터 단일 숫자 필드로 설명하는 것이 좋습니다.

8.9 실무 사용 예

드론 고도 변화 확인
PX4 local position z 확인
모터 RPM 확인
배터리 전압 확인
IMU 각속도 확인
엔코더 속도 확인
로봇 위치 x/y 확인
PID target/current/error 비교
센서 필터 적용 전후 비교

. Bar

9.1 기능 설명

Bar 플러그인은 ROS 2 토픽으로 들어오는 수치 데이터를 막대 그래프 형태로 보여주는 플러그인입니다.

센서값, 속도값, 거리값, 배터리 전압, 모터 출력값처럼 단일 수치 또는 여러 수치 데이터를 직관적으로 확인할 때 사용합니다.

예를 들어 다음과 같은 데이터를 확인할 수 있습니다.

/velocity
/battery_voltage
/motor_pwm
/sensor_value

9.2 사용 목적

Bar는 값의 크기를 빠르게 비교할 때 좋습니다.

예를 들어 로봇에 좌우 모터가 있다면 다음처럼 비교할 수 있습니다.

left_motor_speed
right_motor_speed

막대 길이를 보면 양쪽 모터 출력이 비슷한지, 한쪽만 과하게 출력되는지 바로 확인할 수 있습니다.

9.3 사용 예시

turtlesim_node와 turtle_teleop_key 노드를 각각 다른 터미널에서 실행합니다.

rqt에서 다음 메뉴를 선택합니다.

Plugins → Visualization → Bar

이후 플러그인에서 /turtle1/cmd_vel/linear/x 토픽을 선택한 후에  Max Value를 10로 설정하면 배터리 전압 값이 막대 형태로 표시됩니다.

9.4 적합한 데이터 타입

주로 다음과 같은 수치형 메시지에 적합합니다.

std_msgs/msg/Float32
std_msgs/msg/Float64
std_msgs/msg/Int32
std_msgs/msg/Int64

배열 형태의 데이터도 플러그인 설정에 따라 일부 확인할 수 있습니다.

9.5 활용 예

로봇 개발에서는 다음 용도로 활용할 수 있습니다.

1. 배터리 전압 확인
2. 모터 출력값 확인
3. 센서 거리값 확인
4. PID 제어 출력값 확인
5. 좌우 바퀴 속도 비교

10. Dial

10.1 기능 설명

Dial 플러그인은 ROS 2 토픽의 수치 데이터를 계기판 형태로 보여주는 플러그인입니다.

자동차 속도계나 전압계처럼 원형 게이지로 데이터를 확인할 수 있습니다.

10.2 사용 목적

Dial은 값의 현재 상태를 직관적으로 확인할 때 사용합니다.

예를 들어 다음과 같은 데이터에 적합합니다.

1. 로봇 속도
2. 모터 RPM
3. 배터리 전압
4. 온도
5. 거리 센서 값

막대 그래프보다 계기판 형태가 더 보기 편한 경우에 사용합니다.

10.3 사용 예시

turtlesim_node와 turtle_teleop_key 노드를 각각 다른 터미널에서 실행합니다.

rqt에서 다음 메뉴를 실행합니다.

Plugins → Visualization → Dial

그리고 /turtle1/cmd_vel/angular/z 토픽을 선택하고 Subscribe 한 후에 Max Value 값을 10으로 설정하면 현재 속도값이 다이얼 형태로 표시됩니다.

10.4 활용 예

드론이나 로봇에서는 다음과 같이 사용할 수 있습니다.

1. 현재 고도 표시
2. 현재 속도 표시
3. 모터 RPM 표시
4. 배터리 잔량 또는 전압 표시
5. 센서 거리값 표시

특히 사람이 빠르게 상태를 확인해야 하는 시스템에서는 Dial이 보기 좋습니다.

11. Dot Graph Viewer

11.1 기능 설명

Dot Graph Viewer는 DOT 형식의 그래프 파일 또는 DOT 그래프 데이터를 시각화하는 rqt 플러그인입니다.

DOT는 Graphviz에서 사용하는 그래프 표현 언어입니다.
노드와 노드 사이의 연결 관계를 텍스트로 작성하면, 이를 그래프 형태로 보여줍니다.

rqt_dotgraph는 DOT 그래프 파일을 직접 불러오거나 ROS 2 토픽으로 전달되는 DOT 그래프 데이터를 구독해서 시각화할 수 있습니다.

11.2 Node Graph와 Dot Graph Viewer의 차이

초보자가 가장 헷갈리는 부분이 바로 이것입니다.

Dot Graph Viewer는 Node Graph와 비슷해 보이지만 목적이 다릅니다.

                구분                                        Node Graph                                                  Dot Graph Viewer

메뉴 위치Plugins → Introspection → Node GraphPlugins → Visualization → Dot Graph Viewer
주 목적현재 실행 중인 ROS 2 노드와 토픽 관계 확인DOT 형식 그래프 시각화
데이터 입력ROS 2 시스템 상태를 자동으로 읽음DOT 파일 또는 DOT 데이터
turtlesim 연결 확인바로 가능DOT 그래프를 만들어서 확인
실전 사용 빈도높음보조적 사용

즉, 현재 실행 중인 ROS 2 노드 관계를 바로 보고 싶다면 보통 Node Graph를 사용합니다.

반면 Dot Graph Viewer는 사용자가 직접 작성한 그래프 구조, 상태 머신, 데이터 흐름도, 알고리즘 구조를 시각화할 때 사용합니다.

11.3 DOT 형식 기본 구조

DOT 그래프는 다음과 같은 형태로 작성합니다.

digraph G {
  node_a -> node_b;
  node_b -> node_c;
}

위 코드는 다음 의미입니다.

node_a가 node_b로 연결됨
node_b가 node_c로 연결됨

digraph는 방향성이 있는 그래프를 의미합니다.


ROS 2에서는 데이터가 어느 노드에서 어느 토픽으로 이동하고, 어느 노드가 그 토픽을 구독하는지 방향이 중요하므로 digraph 형태가 잘 맞습니다.

11.4 turtlesim 실습

이번 실습에서는 turtlesim을 실행한 뒤, turtlesim 구조를 DOT 그래프로 직접 작성해서 Dot Graph Viewer에서 확인합니다.

터미널을 3개 사용합니다.

a. 터미널 1 — turtlesim 실행

ros2 run turtlesim turtlesim_node

실행하면 파란색 배경의 TurtleSim 창이 열립니다.

이때 ROS 2 노드 이름은 보통 다음과 같습니다.

/turtlesim

b. 터미널 2 — 키보드 조작 노드 실행

ros2 run turtlesim turtle_teleop_key

이 노드는 키보드 입력을 받아서 거북이를 움직이는 속도 명령을 발행합니다.

보통 노드 이름은 다음과 비슷하게 생성됩니다.

/teleop_turtle

키보드 방향키를 누르면 /turtle1/cmd_vel 토픽으로 속도 명령이 발행됩니다.

c. 터미널 3 — 토픽 확인

ros2 topic list

대표적으로 다음 토픽이 보입니다.

/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose

각 토픽의 역할은 다음과 같습니다.

11.5 turtlesim 노드 관계 이해

turtlesim에서 기본적인 데이터 흐름은 다음과 같습니다.

키보드 입력
   ↓
/teleop_turtle 노드
   ↓
/turtle1/cmd_vel 토픽
   ↓
/turtlesim 노드
   ↓
거북이 이동

그리고 /turtlesim 노드는 현재 거북이 상태를 다음 토픽으로 발행합니다.

/turtlesim
   ├── /turtle1/pose
   └── /turtle1/color_sensor

이 구조를 DOT 그래프로 표현해 보겠습니다.

11.6 turtlesim DOT 파일 만들기

터미널에서 작업 폴더를 하나 만듭니다.

mkdir -p ~/ros2_dotgraph_test
cd ~/ros2_dotgraph_test

다음 파일을 생성합니다.

gedit turtlesim_graph.dot

또는 터미널에서 바로 작성하려면 다음 명령어를 사용합니다.

cat > turtlesim_graph.dot << 'EOF'
digraph turtlesim_graph {
  rankdir=LR;

  keyboard [label="Keyboard Input", shape=box];
  teleop [label="/teleop_turtle\nnode", shape=ellipse];
  cmd_vel [label="/turtle1/cmd_vel\ntopic", shape=box];
  turtlesim [label="/turtlesim\nnode", shape=ellipse];
  pose [label="/turtle1/pose\ntopic", shape=box];
  color [label="/turtle1/color_sensor\ntopic", shape=box];

  keyboard -> teleop [label="arrow key"];
  teleop -> cmd_vel [label="publish"];
  cmd_vel -> turtlesim [label="subscribe"];
  turtlesim -> pose [label="publish"];
  turtlesim -> color [label="publish"];
}
EOF

a. DOT 코드 해석

위 DOT 파일의 핵심은 다음 부분입니다.

teleop -> cmd_vel [label="publish"];
cmd_vel -> turtlesim [label="subscribe"];

이 의미는 다음과 같습니다.

/teleop_turtle 노드가 /turtle1/cmd_vel 토픽을 발행한다.
/turtlesim 노드가 /turtle1/cmd_vel 토픽을 구독한다.

즉, 키보드 조작 노드가 명령을 만들고, turtlesim 노드가 그 명령을 받아 거북이를 움직입니다.

b. 2 shape 옵션 의미

DOT 파일에서 shape 옵션을 사용했습니다.

teleop [label="/teleop_turtle\nnode", shape=ellipse];
cmd_vel [label="/turtle1/cmd_vel\ntopic", shape=box];

여기서는 다음 규칙으로 표현했습니다.

                                                            구분                                                                                모양

ROS 2 노드타원
ROS 2 토픽사각형
외부 입력사각형

이렇게 정해두면 그래프를 볼 때 노드와 토픽을 쉽게 구분할 수 있습니다.

11.7 Dot Graph Viewer에서 DOT 파일 열기

rqt를 실행합니다.

rqt

상단 메뉴에서 다음을 선택합니다.

Plugins → Visualization → Dot Graph Viewer

그다음 Dot Graph Viewer 화면에서 DOT 파일을 불러옵니다.

~/ros2_dotgraph_test/turtlesim_graph.dot

정상적으로 열리면 다음과 같은 흐름의 그래프를 볼 수 있습니다.

Keyboard Input
      ↓
/teleop_turtle
      ↓
/turtle1/cmd_vel
      ↓
/turtlesim
      ↓
/turtle1/pose
/turtle1/color_sensor

11.8 실제 ROS 2 명령어와 그래프 비교

DOT 그래프가 실제 시스템 구조와 맞는지 확인해 봅니다.

a. 노드 목록 확인

ros2 node list

예상 출력은 다음과 비슷합니다.

/teleop_turtle
/turtlesim

b. turtlwsim 노드 정보 확인

ros2 node info /turtlesim

출력에서 다음 항목을 확인할 수 있습니다.

Subscribers:
  /turtle1/cmd_vel

Publishers:
  /turtle1/color_sensor
  /turtle1/pose

이 구조는 DOT 그래프에서 다음 부분과 대응됩니다.

cmd_vel -> turtlesim [label="subscribe"];
turtlesim -> pose [label="publish"];
turtlesim -> color [label="publish"];

c. teleop 노드 정보 확인

ros2 node info /teleop_turtle

출력에서 다음 항목을 확인합니다.

Publishers:
  /turtle1/cmd_vel

이 구조는 DOT 그래프에서 다음 부분과 대응됩니다.

teleop -> cmd_vel [label="publish"];

11.9 Dot Graph Viewer 실전 활용 예

Dot Graph Viewer는 다음 상황에서 사용하면 좋습니다.

1. ROS 2 노드와 토픽 구조를 문서화할 때
2. 강의 자료에서 시스템 구조를 설명할 때
3. 상태 머신을 시각화할 때
4. 자율주행 미션 흐름을 정리할 때
5. 드론 배송 시스템의 전체 데이터 흐름을 표현할 때
6. 센서 → 인식 → 판단 → 제어 흐름을 설명할 때
7. 여러 노드가 얽힌 프로젝트 구조를 팀원에게 설명할 때

예를 들어 드론 배송 시스템에서는 다음과 같은 구조를 DOT 그래프로 만들 수 있습니다.

GPS
 ↓
Localization Node
 ↓
Mission Planner
 ↓
PX4 Offboard Control
 ↓
Gripper Control

이런 구조는 Node Graph보다 Dot Graph Viewer가 더 깔끔할 수 있습니다.
왜냐하면 Node Graph는 실제 실행 중인 모든 노드와 토픽을 보여주지만, Dot Graph Viewer는 블로그나 문서에 필요한 핵심 흐름만 사용자가 직접 정리해서 보여줄 수 있기 때문입니다.

11.10 주의할 점

Dot Graph Viewer는 실행 중인 ROS 2 시스템의 노드 관계를 자동으로 분석하는 도구가 아닙니다.

실시간 ROS 2 노드 관계를 바로 확인하려면 다음 메뉴를 사용하는 것이 맞습니다.

Plugins → Introspection → Node Graph

반면 Dot Graph Viewer는 다음 목적에 더 적합합니다.

1. 사용자가 작성한 DOT 파일 확인
2. 시스템 설계도 시각화
3. 상태 머신 시각화
4. 데이터 흐름도 정리
5. 블로그나 강의 자료용 그래프 작성

12. Rotational

12.1 기능 설명

Rotational 플러그인은 ROS 2 토픽에서 발행되는 회전값, 방향값, 각도값을 시각적으로 확인하는 rqt 플러그인입니다.

숫자로 표시되는 각도값은 바로 감이 오지 않을 수 있습니다.

예를 들어 다음 값이 있다고 가정합니다.

theta = 1.57

이 값은 라디안 기준으로 약 90도입니다.
하지만 숫자만 보면 로봇이 어느 방향을 바라보는지 바로 이해하기 어렵습니다.

이럴 때 Rotational 플러그인을 사용하면 회전 방향을 시각적으로 확인할 수 있습니다.

turtlesim은 ROS 2의 기본 학습용 시뮬레이터이고, 노드, 토픽, 서비스, 액션 같은 ROS 2 핵심 개념을 실습하기 좋습니다. rqt는 ROS 2 시스템을 GUI로 확인하고 조작할 수 있는 도구입니다.

12.2 turtlesim에서 확인할 회전값

turtlesim에서 거북이의 현재 위치와 방향 정보는 다음 토픽으로 발행됩니다.

/turtle1/pose

이 토픽의 메시지 타입은 다음과 같습니다.

turtlesim/msg/Pose

메시지 구조는 다음과 같습니다.

float32 x
float32 y
float32 theta
float32 linear_velocity
float32 angular_velocity

여기서 theta가 거북이의 현재 방향값입니다.

theta = 거북이가 바라보는 방향

따라서 Rotational 플러그인에서는 다음 값을 확인하면 됩니다.

/turtle1/pose/theta

12.3 실습 준비

이번 실습에서는 다음 순서로 진행합니다.

1. turtlesim 실행
2. 키보드 조작 노드 실행
3. /turtle1/pose 토픽 확인
4. rqt Rotational 실행
5. /turtle1/pose/theta 값을 연결
6. 거북이를 회전시키면서 방향 변화 확인

12.4 터미널 1 — turtlesim 실행

첫 번째 터미널에서 turtlesim_node를 실행합니다.

ros2 run turtlesim turtlesim_node

실행하면 파란색 배경의 TurtleSim 창이 열립니다.

기본 거북이는 화면 중앙 근처에 생성됩니다.

12.5 터미널 2 — 키보드 조작 노드 실행

두 번째 터미널에서 키보드 조작 노드를 실행합니다.

ros2 run turtlesim turtle_teleop_key

이 노드는 키보드 입력을 받아서 거북이에게 속도 명령을 보냅니다.

방향키를 누르면 거북이가 움직이고 회전합니다.

↑ : 앞으로 이동
← : 왼쪽 회전
→ : 오른쪽 회전
↓ : 뒤쪽 방향 이동 또는 감속

turtle_teleop_key는 방향키뿐 아니라 일부 키 입력으로 거북이의 방향을 특정 방향으로 회전시키는 액션 실습에도 사용됩니다. ROS 2 공식 튜토리얼에서는 G, B, V, C, D, E, R, T 키가 F 키 주변 방향에 대응한다고 설명합니다.

12.6 터미널 3 — pose 토픽 확인

세 번째 터미널에서 현재 발행 중인 토픽을 확인합니다.

ros2 topic list

다음과 같은 토픽이 보입니다.

/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose

이 중에서 Rotational 실습에 사용할 토픽은 다음입니다.

/turtle1/pose

토픽 타입을 확인합니다.

ros2 topic info /turtle1/pose

예상 출력은 다음과 비슷합니다.

Type: turtlesim/msg/Pose
Publisher count: 1
Subscription count: 0

이제 실제 데이터를 확인합니다.

ros2 topic echo /turtle1/pose

출력 예시는 다음과 같습니다.

x: 5.544445
y: 5.544445
theta: 0.0
linear_velocity: 0.0
angular_velocity: 0.0

여기서 중요한 값은 theta입니다.

12.7 theta 값 이해하기

turtlesim의 theta는 거북이의 방향을 나타냅니다.

단위는 보통 radian입니다.

                     theta 값                              대략적인 각도                                                   의미

0.00도오른쪽 방향
1.5790도위쪽 방향
3.14180도왼쪽 방향
-1.57-90도아래쪽 방향
6.28360도한 바퀴 회전

즉, 거북이가 회전하면 /turtle1/pose의 theta 값이 계속 변합니다.

12.8 rqt 실행

새 터미널에서 rqt를 실행합니다.

rqt

메뉴에서 다음을 선택합니다.

Plugins → Visualization → Rotational

그러면 회전값을 표시하는 플러그인 창이 열립니다.

12.9 Rotational에서 토픽 선택

Rotational 플러그인에서 확인할 값은 다음입니다.

/turtle1/pose/theta

플러그인에서 토픽 또는 필드를 선택할 수 있다면 다음 경로를 선택합니다.

/turtle1/pose → theta

직접 입력해야 하는 방식이라면 다음과 같이 입력합니다.

/turtle1/pose/theta

정상적으로 연결되면 거북이의 방향값이 회전 표시 형태로 나타납니다.

12.10 거북이 회전 실습

이제 turtle_teleop_key 터미널을 클릭해서 키보드 입력이 들어가도록 합니다.

왼쪽 방향키를 누릅니다.

그러면 거북이가 왼쪽으로 회전합니다.

이때 /turtle1/pose/theta 값이 변하고, Rotational 플러그인의 방향 표시도 같이 변해야 합니다.

오른쪽 방향키도 눌러봅니다.

거북이가 반대 방향으로 회전하면서 theta 값이 다시 변합니다.

12.11 터미널 출력과 Rotational 비교하기

ros2 topic echo를 켜둔 상태에서 거북이를 회전시키면 다음처럼 값이 변합니다.

x: 5.544445
y: 5.544445
theta: 0.52
linear_velocity: 0.0
angular_velocity: 2.0

조금 더 회전하면 다음처럼 바뀔 수 있습니다.

x: 5.544445
y: 5.544445
theta: 1.57
linear_velocity: 0.0
angular_velocity: 2.0

여기서 확인할 핵심은 다음입니다.

theta 값이 변한다.
Rotational 표시 방향도 같이 변한다.

즉, Rotational은 단순히 숫자를 보여주는 것이 아니라 회전 방향을 눈으로 확인하게 해주는 도구입니다.

12.12 Plot과 Rotational을 같이 사용하기

Rotational만 사용하면 현재 방향을 직관적으로 볼 수 있습니다.

하지만 시간에 따른 변화량까지 보고 싶다면 Plot 플러그인을 같이 사용하면 좋습니다.

메뉴에서 다음을 추가로 실행합니다.

Plugins → Visualization → Plot

Plot에는 다음 값을 입력합니다.

/turtle1/pose/theta

그러면 다음 두 가지를 동시에 볼 수 있습니다.

                   플러그인 확인                                                           내용

Rotational현재 방향
Plot시간에 따른 방향 변화

즉, Rotational은 현재 상태를 보는 데 좋고, Plot은 변화 추세를 보는 데 좋습니다.

12.13 angular_velocity도 함께 확인하기

turtlesim/msg/Pose에는 angular_velocity 값도 있습니다.

angular_velocity

이 값은 현재 거북이가 얼마나 빠르게 회전하고 있는지를 나타냅니다.

Plot에서는 다음 값을 확인할 수 있습니다.

/turtle1/pose/angular_velocity

왼쪽 또는 오른쪽 방향키를 누르고 있으면 angular_velocity 값이 변합니다.

정리하면 다음과 같습니다.

theta            : 현재 방향
angular_velocity : 회전 속도

Rotational에서는 theta를 보는 것이 맞고, Plot에서는 theta와 angular_velocity를 함께 보면 좋습니다.

13. TF Tree

13.1 기능 설명

TF Tree 플러그인은 ROS 2의 TF 프레임 관계를 트리 구조로 보여주는 플러그인입니다.

로봇 시스템에서는 여러 좌표계가 존재합니다.

예를 들어 모바일 로봇에서는 다음과 같은 프레임이 자주 사용됩니다.

map
odom
base_link
base_footprint
laser
camera_link
imu_link

TF Tree는 이러한 프레임들이 어떻게 연결되어 있는지 확인할 수 있게 해줍니다.

13.2 사용 목적

TF가 제대로 연결되어 있는지 확인할 때 사용합니다.

ROS 2에서 TF가 꼬이면 다음 문제가 발생할 수 있습니다.

1. RViz에서 로봇 모델이 이상하게 보임
2. 센서 위치가 맞지 않음
3. Navigation이 제대로 동작하지 않음
4. SLAM 좌표계가 깨짐
5. 카메라와 라이다 데이터 정합이 안 됨
6. 드론 위치 추정이 이상해짐

그래서 TF Tree는 로봇 개발에서 매우 중요한 디버깅 도구입니다.

13.3 사용 예시

먼저 TF가 발행되고 있는지 확인합니다.

ros2 topic list

다음 토픽이 있어야 합니다.

/tf
/tf_static

그 다음 rqt에서 다음 메뉴를 실행합니다.

Plugins → Visualization → TF Tree

그러면 현재 시스템의 TF 연결 구조가 트리 형태로 표시됩니다.

13.4 일반적인 TF 구조 예시

모바일 로봇에서는 보통 다음 구조를 가집니다.

map
 └── odom
      └── base_link
           ├── laser
           ├── camera_link
           └── imu_link

각 프레임의 의미는 다음과 같습니다.

map         : 전역 좌표계
odom        : 오도메트리 좌표계
base_link   : 로봇 본체 기준 좌표계
laser       : 라이다 센서 좌표계
camera_link : 카메라 좌표계
imu_link    : IMU 센서 좌표계

13.4 TF Tree에서 확인해야 할 것

TF Tree를 볼 때는 다음 항목을 확인해야 합니다.

1. 프레임이 끊어져 있지 않은가?
2. map → odom → base_link 순서가 정상인가?
3. 센서 프레임이 base_link 아래에 연결되어 있는가?
4. 중복된 프레임 이름이 없는가?
5. 불필요한 루프 구조가 없는가?
6. static transform이 정상적으로 들어왔는가?

14. 플러그인별 핵심 정리표

               플러그인핵심                             기능                                                          숙지 내용

Action Type BrowserAction 타입 구조 확인Goal, Feedback, Result 구조 이해
Console로그 확인/필터링WARN/ERROR를 빠르게 찾는 도구
Python ConsolePython 즉석 실행계산, import, 메시지 객체 테스트
Shellrqt 내부 셸간단한 ROS 2 명령 확인
Controller Managerros2_control 컨트롤러 관리active/inactive 상태 확인
Diagnostics Viewer로봇 진단 상태 확인로봇 건강검진표
Joint trajectory controller조인트 궤적 테스트MoveIt 없이 controller 직접 테스트
Motion builder동작 프리셋 생성/관리home, ready, wave 같은 동작 관리
Moveit! MonitorMoveIt 상태 확인move_group, robot_description, joint state 확인
Robot Steering/cmd_vel 발행모바일 로봇 수동 조작
Runtime Monitordiagnostics 실시간 확인개발자용 진단 메시지 모니터
Service Type Browser서비스 타입 구조 확인Request/Response 구조 이해
Message Type Browser메시지 타입 구조 확인토픽 필드 구조 확인
Image View이미지 토픽 표시카메라 토픽 확인
Plot숫자 데이터 그래프센서/제어값 오실로스코프

Leave a Comment