# 유용한 rqt 플러그인 소개

ROS2 환경에서 디버깅과 로깅은 개발자의 생산성을 크게 높여 준다. 특히 rqt 플러그인을 활용하면, 기존의 터미널 기반 디버깅뿐만 아니라 GUI를 통해 토픽, 노드, 파라미터 등을 한눈에 확인하고, 시스템 상의 데이터 흐름을 직관적으로 파악할 수 있다. 여기서는 ROS2 Humble에서 유용하게 활용할 수 있는 rqt 플러그인들의 특징과 활용법을 다룬다.

#### rqt\_graph

rqt\_graph는 ROS2 노드 간 데이터 흐름을 그래프로 시각화해 준다. 주로 다음과 같은 상황에서 활용할 수 있다.

* 복잡한 토픽 구조를 파악하고 싶을 때
* 현재 실행 중인 노드와 상호 연결 상태를 확인하고 싶을 때
* 특정 노드가 제대로 통신 중인지 빠르게 파악하고 싶을 때

실행 명령은 다음과 같다.

```
$ ros2 run rqt_graph rqt_graph
```

rqt\_graph가 표시되는 방식은 노드 이름을 정점(vertex)으로, 토픽을 간선(edge)으로 표현한다. 예를 들어, 노드 A가 퍼블리셔(publisher)로, 노드 B가 서브스크라이버(subscriber)로 연결되어 있다면, 노드 A → 노드 B 형태의 화살표로 나타난다.

일부 노드나 토픽만 필터링하여 보려면 rqt\_graph 창에서 옵션을 조정하거나, CLI 매개변수를 통해 표현을 제한할 수도 있다. 복잡한 네트워크에서 특정 토픽만 집중적으로 보고 싶을 때 매우 유용하다.

#### rqt\_console

rqt\_console은 ROS2 로그 메시지를 GUI 형태로 볼 수 있는 유틸리티이다. ROS2에서 발생하는 출력 메시지(Info, Warn, Error 등)를 시간 순서대로 나열해 주며, 메타데이터(노드 이름, 스레드 ID, 파일 위치 등)를 함께 확인할 수 있다.

대표적인 사용법은 다음과 같다.

```
$ ros2 run rqt_console rqt_console
```

주요 기능은 다음과 같다.

* 로그 레벨(Info, Debug, Warn, Error, Fatal)에 따른 필터링
* 노드 이름에 따른 필터링
* 텍스트 검색(키워드 검색)
* 컬러 표시(에러는 빨간색, 경고는 노란색 등)

ROS2 Humble 기준으로 rcl\_logging 인터페이스를 사용하고 있으므로, 백엔드로 어떤 로깅 라이브러리를 쓰느냐에 따라 추가 설정이 가능하다. 예컨대, rcutils에서 제공하는 설정 파일 경로나 포맷 변경 등을 활용할 수 있다.

#### rqt\_logger\_level

rqt\_logger\_level은 rqt\_console과 비슷하지만, 로그 레벨 자체를 런타임에 변경할 수 있다는 점이 가장 큰 특징이다. 이 플러그인을 사용하면 별도의 노드 재시작 없이도 특정 노드의 로그 레벨을 동적으로 변경할 수 있다.

```
$ ros2 run rqt_logger_level rqt_logger_level
```

GUI 창이 뜨면, 실행 중인 노드 목록과 현재 설정된 로그 레벨이 표시된다. 로그 레벨을 변경하고자 하는 노드를 선택하고, Debug, Info, Warn, Error, Fatal 중 원하는 레벨을 지정하면 즉시 반영된다. 이를 통해 디버깅 과정에서 필요한 시점에만 디버그 메시지를 활성화할 수 있어, 런타임 성능 저하를 최소화할 수 있다.

예를 들어, 다음과 같은 의사 코드를 가지고 있는 노드가 있다고 하자.

```cpp
RCLCPP_INFO(this->get_logger(), "노드가 정상 동작 중이다");
RCLCPP_DEBUG(this->get_logger(), "디버그 메시지: 현재 상태 x=%d", x);
```

일반적으로 Info 레벨로 설정되어 있다면, Debug 레벨의 메시지는 보이지 않는다. 그러나 rqt\_logger\_level을 통해 런타임에 해당 노드의 로그 레벨을 Debug로 올리면, 곧바로 디버그 메시지가 rqt\_console(혹은 터미널)에 나타나게 된다. 이를 통해 무거운 디버그 메시지를 평소에는 비활성화해 두고, 필요할 때만 켜서 활용할 수 있다.

#### rqt\_bag

rqt\_bag는 ROS Bag 파일을 기록(record)하거나 재생(play)할 때 GUI로 다룰 수 있게 해 준다. 이 플러그인을 활용하면 다음과 같은 작업을 손쉽게 처리할 수 있다.

* Bag 파일 기록 및 재생
* 재생 속도 조절
* 특정 시점으로 건너뛰기(seek)
* 특정 토픽만 골라서 재생하기
* 여러 Bag 파일의 병합 재생

ROS2 Humble에서 사용되는 rosbag2 형식을 지원하며, 다음과 같은 명령으로 실행할 수 있다.

```
$ ros2 run rqt_bag rqt_bag
```

rqt\_bag를 이용하면 대규모 실험 데이터를 저장해 놓고, 후처리나 분석 시점에 원하는 형태로 재생해 볼 수 있어 편리하다. 또한, 토픽별로 메시지에 접근하여 하나하나 확인할 수 있기 때문에, 논리 버그나 타이밍 문제를 파악하는 데 크게 도움이 된다.

#### rqt\_param

ROS2에서는 노드별로 파라미터(Parameters)를 관리한다. rqt\_param은 이들을 GUI 형태로 나열해주며, 설정 변경도 손쉽게 수행할 수 있다.

```
$ ros2 run rqt_param rqt_param
```

열린 창에서 파라미터를 변경하면, 즉시 변경된 파라미터가 노드에 반영된다. 예컨대 PID 제어기의 P, I, D 게인을 실시간으로 조정해야 하거나, 특정 알고리즘에서 사용되는 내부 파라미터(학습률, 임계값 등)를 바꿔 가며 튜닝해야 할 때 유용하다.

또한 rqt\_param 창에서 파라미터 업데이트가 노드에 반영되는 과정을 아래와 같이 단순화해서 표현할 수 있다(간단한 그림 예시, mermaid 사용).

{% @mermaid/diagram content="flowchart LR
A(파라미터 변경) --> B\[ROS Parameter Server]
B --> C(노드 내부 파라미터 반영)" %}

이때 ROS Parameter Server 기능은 각 노드가 parameter service를 통해 제공하고, rqt\_param이 해당 service를 사용해 파라미터 값을 get/set하는 구조를 가진다. 변경된 파라미터로 실제 노드의 알고리즘이 어떻게 동작하는지는 각 노드의 콜백 함수를 어떻게 작성했느냐에 따라 달라진다.

#### rqt\_plot

rqt\_plot은 특정 토픽에 담긴 수치형 데이터를 실시간으로 그래프로 시각화해 주는 플러그인이다. 예컨대 센서 값(온도, 압력, 거리 등), 로봇 조인트의 각도, 위치나 속도 등과 같은 데이터를 빠르게 파악할 수 있다.

```
$ ros2 run rqt_plot rqt_plot
```

창이 뜨면, 그래프로 확인하고 싶은 토픽 이름(예: `/sensor_data/temperature`)을 입력하여 데이터를 플롯할 수 있다. 여러 개의 서로 다른 토픽을 동시에 표시하여 비교할 수 있으며, 단순한 2D 라인 그래프 형태로 시간에 따른 추이 변화를 확인하기에 유용하다.

* **축 범위 자동 조정(Auto-Scaling)**: 측정값의 범위가 크게 달라지면 축 범위를 자동으로 맞춰 준다.
* **다중 축(Multi-Axis) 지원**: 그래프가 뒤섞이지 않도록, 필요한 경우 오른쪽 축을 추가로 생성해 서로 다른 스케일의 데이터를 동시에 표시할 수 있다.
* **추세 분석**: 특정 구간에서 데이터가 일정 패턴으로 변화하는지, 혹은 갑작스러운 급등·급락이 있는지 등을 관찰하기 좋다.

#### rqt\_image\_view

rqt\_image\_view는 ROS2에서 퍼블리시되는 이미지 토픽(예: 카메라 영상)을 직접 확인할 수 있는 GUI 플러그인이다.

```
$ ros2 run rqt_image_view rqt_image_view
```

카메라 토픽 이름(예: `/camera/image_raw`)을 지정하면, 해당 토픽의 이미지를 실시간으로 보여 준다. 또한, OpenCV 이미지 변환 필터 등을 적용하거나, 화면의 일부를 확대·축소해 볼 수 있어 시각적인 디버깅에 유용하다.

* **다중 카메라 지원**: 여러 카메라를 동시에 운용하는 경우에도 각각의 토픽을 선택하여 순환적으로 확인할 수 있다.
* **이미지 저장**: 특정 순간의 이미지를 캡처해 로컬에 저장할 수 있다.
* **색상 공간 전환**: GRAY, BGR, RGB 등으로 전환하여 확인하거나, 카메라 드라이버 설정이 올바른지 여부를 비교할 때 활용할 수 있다.

#### rqt\_tf\_tree

ROS TF(Transform) 프레임 구조를 한눈에 보여 주는 플러그인이다. 로봇 팔 같은 조인트형 로봇이나, 드론, 모바일 로봇 등 여러 좌표계(frames)를 다루는 환경에서, TF 간 계층 구조가 정확히 설정되어 있는지를 빠르게 확인할 수 있다.

```
$ ros2 run rqt_tf_tree rqt_tf_tree
```

* **프레임 트리 시각화**: 루트(base\_link 등)에서부터 말단(end\_effector 등)까지 트리 형태로 연결 관계를 보여 준다.
* **프레임 이름 검색**: 특정 프레임이 어디에 매달려 있는지, 부모(parent)는 누구이고 자식(child)은 누구인지 쉽게 찾을 수 있다.
* **정확성 검증**: TF 브로드캐스터(tf2\_ros::TransformBroadcaster)나 TF 리스너(tf2\_ros::TransformListener)가 올바르게 설정되어 있는지, 혹은 중복된 이름이나 잘못된 계층 구조가 없는지 확인할 때 쓴다.

ROS2에서 TF는 tf2 라이브러리를 사용하며, Humble 버전에서도 동일한 인터페이스를 따른다. 로봇 조인트는 물론, 센서와 주변 환경 간의 좌표 변환에도 활발히 쓰이므로, rqt\_tf\_tree는 특히 복잡한 로봇 시스템에서 필수적인 플러그인 중 하나다.

#### rqt\_service\_caller

ROS2는 서비스(Service) 인터페이스를 통해 요청/응답 형태의 통신이 가능하다. rqt\_service\_caller는 서비스 서버를 호출하고, 응답을 확인하는 과정을 GUI로 단순화한다.

```
$ ros2 run rqt_service_caller rqt_service_caller
```

* **서비스 목록 조회**: 현재 활성화된 서비스 이름과 서비스 타입을 나열해 준다.
* **요청 필드 편집**: 서비스 타입(예: `std_srvs/srv/SetBool`)에 따라 요청 메시지의 필드들을 편집할 수 있다.
* **응답 모니터링**: 호출 결과가 응답되는 즉시 그 내용을 표시해 준다.

이를 통해 직접 CLI로 `ros2 service call` 명령을 수행하지 않아도, GUI 상에서 여러 서비스를 빠르게 테스트하고 결과를 비교할 수 있다. 예를 들어, 어떤 노드가 제공하는 `Reset` 또는 `Start` 같은 기능성 서비스를 테스트하고자 할 때 효율적이다.

#### rqt\_topic

rqt\_topic은 토픽을 실시간으로 모니터링하고, 퍼블리시/서브스크라이브 동작까지 지원해 주는 플러그인이다. `rostopic echo`, `rostopic pub`에 해당하는 CLI 기능을 GUI 환경으로 옮겨 놓은 것으로 볼 수 있다.

```
$ ros2 run rqt_topic rqt_topic
```

* **토픽 목록 조회**: 현재 활성화된 모든 토픽을 확인하고, 각 토픽의 메시지 타입도 함께 볼 수 있다.
* **토픽 echo**: 특정 토픽을 선택하면, 그 토픽의 메시지 내용을 텍스트 형태로 실시간 출력한다.
* **토픽 pub**: 직접 메시지 내용을 입력하여 해당 토픽을 퍼블리시할 수 있다(예: 테스트를 위해 `/cmd_vel`에 속도 명령 퍼블리시).
* **속도 측정**: 토픽 메시지 발행 주기나, 초당 메시지 수 등을 GUI에서 간단히 확인할 수 있다.

큰 장점은 여러 토픽을 동시에 모니터링할 수 있어, 각 토픽이 주고받는 데이터를 한눈에 보면서 디버깅할 수 있다는 점이다.

#### rqt\_publisher

rqt\_publisher는 GUI 상에서 메시지를 구성해 특정 토픽으로 퍼블리시할 수 있게 해 주는 플러그인이다. CLI 명령어 `ros2 topic pub`의 GUI 버전으로 볼 수 있으며, 메시지 필드를 직접 편집하여 간단한 테스트를 수행할 때 유용하다.

```
$ ros2 run rqt_publisher rqt_publisher
```

* **메시지 타입 자동 인식**: `/example_topic` 같은 토픽을 선택하면 자동으로 메시지 타입을 가져온다.
* **필드별 입력**: 메시지 타입이 `geometry_msgs/msg/Twist`라면, linear.x, linear.y, angular.z 등 각 필드값을 직접 입력 가능하다.
* **퍼블리시 주기 설정**: 1회성 퍼블리시뿐 아니라, 일정 주기로 반복 퍼블리시할 수도 있다.
* **손쉬운 디버깅**: 예를 들어, 로봇에 속도 명령을 주거나(sensor data를 흉내 내며) 특정 알고리즘의 입력 신호를 시험할 때 편리하다.

#### rqt\_runtime\_monitor

rqt\_runtime\_monitor는 ROS2 노드와 관련된 각종 진단(diagnostics) 상태를 한눈에 보여 주는 플러그인이다. 로봇 하드웨어나 소프트웨어 상태 감시를 위해 사용되며, 특정 센서나 드라이버의 상태 불량, 통신 이상 등을 빨리 파악할 수 있다.

```
$ ros2 run rqt_runtime_monitor rqt_runtime_monitor
```

* **진단 메시지(DiagnosticArray) 표시**: 각 노드에서 퍼블리시하는 진단 메시지를 구독해, 현재 상태(OK, WARN, ERROR 등)를 트리 구조로 시각화한다.
* **문제 영역 강조**: 문제가 감지된 부분(에러나 경고)이 있으면 빨간색 또는 노란색으로 표시되어, 개발자가 즉시 주의를 기울일 수 있다.
* **세부 정보 확인**: 문제 영역을 클릭하면, 해당 노드 또는 센서가 어떤 이유로 이상 상태가 되었는지(예: 센서 연결 끊김, 데이터 범위 초과 등) 세부 정보가 나타난다.

#### rqt\_robot\_monitor

rqt\_robot\_monitor 또한 진단 메시지를 기반으로 로봇 전체 상태를 점검한다. rqt\_runtime\_monitor와 유사하지만, 주로 복잡한 로봇 플랫폼(여러 센서, 액추에이터가 결합된 로봇 등)에서 더 체계적으로 각 컴포넌트를 구분해 모니터링할 수 있도록 설계되었다.

```
$ ros2 run rqt_robot_monitor rqt_robot_monitor
```

* **계층적 상태 모니터링**: 로봇 바디, 팔, 센서, IMU, 카메라 등 각 파트별로 트리 구조를 구성하여 상태를 보여 준다.
* **동적 업데이트**: 어느 노드에서 오류가 감지되면, 해당 계층(예: 'Left Arm/Joint 3')까지 자동으로 반영되어 UI에 표시된다.
* **로깅 기능 연동**: 경고나 오류가 발생할 때, rqt\_console 등과 함께 사용해 버그 상황을 빠르게 재현하고 원인을 찾는 데 활용할 수 있다.

#### rqt\_action

ROS2에서 액션(Action) 인터페이스는 목표(goal)를 보내고, 진행 상황(feedback)을 수신하며, 최종 결과(result)를 받는 비동기 통신 방식을 지원한다. rqt\_action 플러그인을 사용하면 이러한 액션 인터페이스를 GUI로 확인하고 제어할 수 있다.

```
$ ros2 run rqt_action rqt_action
```

* **액션 목록 조회**: 현재 시스템에서 액션 서버가 제공하는 액션 이름과 액션 타입을 나열해 준다.
* **목표(Goal) 발행**: 액션 요청을 위해 메시지 필드를 입력하고 목표를 전송할 수 있다. 예: `NavigateToPose` 액션에 목표 좌표와 회전 각도를 설정하여 로봇에게 이동 명령을 내릴 수 있음.
* **진행 상황 모니터링(Feedback)**: 액션 실행 과정에서 발행되는 피드백(진행률, 상태 등)을 실시간으로 확인한다.
* **결과(Result) 수신**: 액션이 완료되면 결과를 표시해 주며, 성공 여부나 최종 상태를 한눈에 알 수 있다.

이 플러그인은 CLI 명령어인 `ros2 action send_goal`, `ros2 action list`, `ros2 action echo` 등을 GUI에서 좀 더 직관적으로 사용하도록 도와준다.

#### rqt\_shell

rqt\_shell은 rqt 환경 안에서 터미널(셸)을 직접 실행할 수 있게 해 주는 플러그인이다. 즉, rqt GUI 창 내에서 명령어를 입력하여 ROS2 CLI를 사용할 수 있으므로, 그래픽 디버깅과 명령어 기반 디버깅을 한 창 안에서 수행할 수 있다.

```
$ ros2 run rqt_shell rqt_shell
```

* **동시 사용**: rqt\_graph, rqt\_console 등 다른 플러그인과 함께 탭(tabs)으로 구성해, GUI 모니터링과 CLI 디버깅을 병행할 수 있다.
* **ROS2 명령어 실행**: `ros2 topic list`, `ros2 node info` 등 자주 쓰는 명령어를 바로 입력 가능하다.
* **일반 UNIX 명령**: ROS2 명령어 외에 `ls`, `cd`, `pwd` 같은 일반 UNIX 셸 명령도 지원한다.

물론 실제 시스템 셸과 완전히 동일한 환경은 아닐 수 있으나, 간단한 명령어를 실행하고 로그를 확인하기에는 충분하다.

#### rqt\_pose\_view

rqt\_pose\_view는 `geometry_msgs/msg/Pose`와 같은 메시지를 3D 좌표축 형태로 시각화해 주는 플러그인이다. 로봇의 위치(translation)와 자세(orientation)를 직관적으로 표현하는 데 쓰인다.

```
$ ros2 run rqt_pose_view rqt_pose_view
```

* **3D 축 표시**: 위치(x, y, z)와 쿼터니언(w, x, y, z)을 받아, 3D 공간에서 해당 포즈를 축+화살표 형태로 보여 준다.
* **실시간 업데이트**: Pose 메시지가 지속적으로 들어오는 토픽(예: 로봇 위치 추정 결과, SLAM 결과)을 연결하면, GUI 상에서도 실시간으로 좌표축이 움직인다.
* **시뮬레이션 환경 디버깅**: Gazebo, RViz 등에서 로봇이 이동하고 있는 것과 rqt\_pose\_view가 보여 주는 값이 일치하는지 비교함으로써, TF나 센서 데이터가 맞게 들어오는지 확인할 수 있다.

#### rqt\_joint\_trajectory\_controller

주로 로봇 팔이나 멀티 조인트 로봇에서 사용하는 `JointTrajectoryController`(controller\_interface 기반)를 GUI로 다룰 수 있게 해 주는 플러그인이다. ROS2 Controller를 통해 액추에이터(모터)에 제어 명령을 보내고, 응답(피드백)을 시각화한다.

```
$ ros2 run rqt_joint_trajectory_controller rqt_joint_trajectory_controller
```

* **조인트 리스트 업**: 현재 로드된 컨트롤러에 등록된 모든 조인트 이름과 제한 범위(최소/최대 각도 등)를 표시한다.
* **목표 설정**: 각 조인트의 목표 각도나 속도를 설정해 실시간 명령을 보낼 수 있다.
* **실시간 피드백**: 현재 각 조인트의 실제 위치, 속도, 토크 등을 그래프로 모니터링할 수 있으므로, 튜닝과 디버깅에 유용하다.

#### rqt\_multiplot(비공식 플러그인)

rqt\_plot 기능을 확장하여, 여러 개의 플롯을 한 화면에서 더 정교하게 구성하고, 다양한 그래프 형태(2D, 3D, XY Plot 등)를 지원하는 비공식(또는 서드파티) 플러그인도 있다. 실제 ROS 배포판에 포함되어 있지 않을 수 있으므로, 별도의 설치 과정이 필요하다.

* **복합 그래프**: 시간축 대 여러 변수(time vs. multiple vars)뿐 아니라, 변수 대 변수(x vs. y) 형태의 그래프도 그릴 수 있다.
* **레이아웃 커스터마이징**: 플롯 창을 여러 개로 나누거나, 타이틀/레이블을 세밀하게 수정할 수 있다.
* **실시간/오프라인 모드**: 실시간 토픽 데이터뿐 아니라, 로그 파일(csv, bag 등)을 오프라인에서 불러와 분석 가능하다.

\[계속]rqt\_gui & 플러그인 관리

ROS2 환경에서 rqt 툴을 실행하는 가장 기본적인 방법은 `rqt_gui`를 구동하는 것이다. 이를 통해 여러 플러그인을 탭(tab) 형태로 한 화면에 묶어서 관리할 수 있다.

```
$ ros2 run rqt_gui rqt_gui
```

* **플러그인 선택**: 실행 후 상단 메뉴에서 `Plugins` 항목을 선택하면, 설치된 rqt 플러그인 목록이 나타난다. 필요한 플러그인을 클릭하여 불러올 수 있다.
* **플러그인 제거/추가**: 사용이 끝난 플러그인은 탭에서 닫으면 되고, 필요할 때 다시 메뉴에서 불러올 수 있다.
* **퍼스펙티브(Perspective) 저장**: 여러 플러그인을 동시에 열어 놓고 탭 레이아웃을 구성한 뒤, 원하는 구성을 파일로 저장해 둘 수 있다. 이후 동일한 환경을 재현하려면 저장해 둔 퍼스펙티브를 불러오면 된다.

예를 들어, 토픽 모니터링(rqt\_topic), 그래프 시각화(rqt\_graph), 콘솔 로그(rqt\_console) 등을 한데 모아 “디버깅용” 퍼스펙티브를 만들어 두면, 다음번에 동일한 ROS2 시스템을 디버깅할 때 빠르게 환경을 복원할 수 있어 생산성이 올라간다.

#### rqt\_py\_console

rqt\_py\_console는 rqt 환경 내에서 Python 인터프리터를 실행할 수 있는 플러그인이다. 이를 통해 Python 스크립트를 즉석에서 작성·실행하며, ROS2 Python API(rclpy) 호출을 테스트할 수 있다.

```
$ ros2 run rqt_py_console rqt_py_console
```

* **인터랙티브 Python**: 일반적인 Python Shell처럼, 라이브러리 임포트와 간단한 코드 실행을 손쉽게 할 수 있다.
* **ROS2 API 연습**: 예컨대, `rclpy`에서 노드를 생성하고, 토픽 퍼블리셔나 서브스크라이버를 만들어 보는 식의 실험을 빠르게 수행 가능하다.
* **코드 스니펫 공유**: 디버깅 중에 즉석에서 발견한 유용한 코드를 다른 개발자에게 공유할 때도 편리하다(특히 GUI 화면 캡처 등으로).

#### rqt\_dep

rqt\_dep는 ROS(ROS2) 패키지 간 의존성(dependency)을 그래프로 표시해 주는 플러그인이다. 프로젝트 규모가 커져 여러 패키지를 다뤄야 할 때, 패키지 빌드 실패나 종속 라이브러리 문제를 빠르게 파악할 수 있게 도와준다.

```
$ ros2 run rqt_dep rqt_dep
```

* **패키지 의존 그래프**: `package.xml`에 기록된 `build_depend`, `exec_depend` 등이 어떻게 연결되어 있는지, 그래프로 시각화한다.
* **중복/순환 의존 검사**: 혹시 순환 의존(Cycle)이 발생하거나, 빌드를 방해하는 충돌이 있는지 찾아낼 수 있다.
* **ROS2 workspace 관리**: 여러 패키지가 공존하는 워크스페이스에서 특정 패키지를 제거하거나 수정할 때, 영향을 받는 다른 패키지를 빠르게 확인 가능하다.

#### rqt\_reconfigure (ROS1 대비)

ROS1에서 다이나믹 리컨피규어(dynamic\_reconfigure) 기능을 GUI로 다루는 rqt\_reconfigure 플러그인이 있었다. ROS2는 별도의 dynamic\_reconfigure가 아닌 파라미터(Parameter) 시스템으로 대체되었기 때문에, 현재 ROS2에서 공식적으로 `rqt_reconfigure`에 대응하는 플러그인은 존재하지 않는다. 대신, 앞서 소개한 `rqt_param`을 이용해 노드 파라미터를 실시간으로 변경·확인하는 방식을 사용한다.

#### rqt\_image\_overlay 등 기타 플러그인

이 외에도 특정 기능에 특화된 rqt 플러그인이 여럿 존재한다.

* **rqt\_image\_overlay**: 카메라 이미지 위에 텍스트나 그래픽 정보를 오버레이해 디버깅할 수 있다. 예: 물체인식 Bounding Box를 이미지 위에 표시.
* **rqt\_plot\_cpp**: C++ 기반으로 구현된 확장 플러트(Plot) 기능을 제공한다(일부 배포판 제한).
* **rqt\_bag\_plugins**: rqt\_bag와 결합하여 Bag 파일 재생 시, 이미지나 point cloud 같은 데이터를 시각화해 볼 수 있는 서드파티 플러그인들도 있다.

이상으로 ROS2 Humble에서 활용 가능한 rqt 플러그인들을 전반적으로 살펴보았다. 필요에 따라 추가 플러그인을 설치해 사용할 수도 있으며, 직접 rqt 플러그인을 개발해 맞춤형 툴을 구성하는 것도 가능하다.
