Ubuntu ROS 실습(21)

zeusqoi·약 22시간 전

개인공부

목록 보기
40/42

ROS 2에서는 터미널에서 명령어를 입력하는 CLI 방식뿐만 아니라, GUI를 통해 ROS 시스템의 상태와 데이터를 확인하고 조작할 수 있는 다양한 도구를 제공한다. 그중 RQt는 여러 기능을 플러그인 형태로 제공하는 ROS의 종합 GUI 도구이다.

이번 실습에서는 RQt를 직접 실행하여 Node Graph, Topic Monitor, Message Publisher, Service Caller, Plot, Image View, Console 등의 플러그인을 사용해보았다. 이를 통해 ROS 2의 노드와 토픽 연결 관계를 확인하고, 메시지와 서비스를 직접 조작하며, 그래프·카메라 영상·로그 등의 데이터를 GUI에서 확인해보았다.

또한 일부 플러그인은 현재 실습 환경의 문제로 정상적으로 실행되지 않는 경우도 확인하면서, RQt가 어떤 기능을 제공하고 실제 ROS 2 환경에서 어떻게 활용할 수 있는지 확인해보았다.


1. RQt란?

RQt는 Qt 기반의 GUI 프레임워크로, 다양한 기능을 플러그인 형태로 제공하는 ROS의 종합 GUI 툴이다.

터미널에서 명령어를 입력하는 CLI 방식과 달리 GUI를 통해 ROS의 노드, 토픽, 서비스, 파라미터, 로그 및 센서 데이터 등을 확인하고 조작할 수 있다.

RQt에는 Node Graph, Topic Monitor, Message Publisher, Service Caller, Plot, Image View, Console 등 다양한 플러그인이 제공된다.


2. RQt 설치 및 실행

RQt는 다음 명령어로 설치할 수 있다.

sudo apt install ros-humble-rqt*

실행은 다음과 같이 한다.

rqt

실행한 뒤 Plugins 메뉴에서 원하는 플러그인을 선택할 수 있다.

예를 들어,

Plugins → Topics → Topic Monitor

과 같은 방식으로 원하는 기능을 실행할 수 있다.

또한 특정 플러그인을 직접 실행하는 방법도 있다.

ros2 run rqt_msg rqt_msg

RQt에는 다양한 플러그인이 있기 때문에 자주 사용하는 플러그인은 직접 실행하거나 별도의 단축 명령어로 사용할 수도 있다.


3. RQt 플러그인의 종류

RQt는 목적에 따라 다양한 플러그인을 제공한다.

Actions

  • Action Type Browser

액션 타입의 데이터 구조를 확인할 수 있다.

Configuration

  • Dynamic Reconfigure
  • Launch

노드의 설정이나 파라미터 등을 GUI에서 확인하거나 변경하는 기능을 제공한다.

Introspection

  • Node Graph
  • Package Graph
  • Process Monitor

실행 중인 노드와 노드 사이의 관계, 패키지 의존 관계, 프로세스 상태 등을 확인할 수 있다.

Logging

  • Bag
  • Console
  • Logger Level

ROS 데이터의 기록 및 노드에서 발생하는 로그와 경고, 에러 등을 확인할 수 있다.

Services

  • Service Caller
  • Service Type Browser

서비스를 호출하거나 서비스 타입의 데이터 구조를 확인할 수 있다.

Topics

  • Message Publisher
  • Message Type Browser
  • Topic Monitor

토픽의 정보를 확인하거나 메시지를 직접 발행할 수 있다.

Visualization

  • Image View
  • Navigation Viewer
  • Plot
  • Pose View
  • RViz
  • TF Tree

카메라 영상이나 데이터의 변화를 확인하고 ROS 데이터를 시각적으로 표현할 수 있다.


4. RQt 실습

4-1. Node Graph

Node Graph는 실행 중인 노드들의 관계와 토픽 연결을 그래프로 확인할 수 있는 플러그인이다.

Turtlesim과 Teleop 노드를 실행한 상태에서 Node Graph를 확인하여 노드 간 연결 관계를 확인했다.

GUI를 통해 ROS 시스템의 노드와 토픽 연결 상태를 한눈에 확인할 수 있다는 점이 편리했다.

4-2. Topic Monitor

Topic Monitor에서는 현재 ROS 시스템에서 사용 중인 토픽을 확인하고 선택한 토픽의 데이터를 모니터링할 수 있다.

실습에서는 /parameter_events, /rosout 등의 토픽을 확인했다.

4-3. Message Publisher

Message Publisher는 GUI를 이용해 특정 토픽에 메시지를 직접 발행할 수 있는 플러그인이다.

실습에서는 /turtle1/cmd_vel 토픽과 geometry_msgs/msg/Twist 타입을 확인하고 메시지의 linear, angular 값을 변경하여 거북이를 직접 움직여보았다.

CLI에서 ros2 topic pub 명령어를 사용하는 것과 비슷한 동작을 GUI에서 수행할 수 있었다.

4-4. Message Type Browser

Message Type Browser는 메시지 타입의 데이터 구조를 확인하는 기능이다.

자료에서는 RQt의 주요 토픽 플러그인 중 하나로 소개되어 있지만, 실제 실습 환경에서는 rqt_msg 실행 과정에서 rqt_py_common과의 함수 호환성 문제로 정상 실행되지 않았다.

확인 과정에서 다음과 같은 오류가 발생했다.

ImportError: cannot import name
'get_message_constants_from_class'
from 'rqt_py_common.message_helpers'

설치된 rqt_msg와 rqt_py_common 패키지 버전은 각각 확인했지만 동일한 오류가 발생하여 이번 실습에서는 해당 기능을 진행하지 않았다.

4-5. Service Caller

Service Caller는 실행 중인 서비스 서버에 접속하여 서비스를 요청할 수 있는 플러그인이다.

Turtlesim의 /spawn 서비스를 이용하여 새로운 거북이인 turtle2를 생성하는 실습을 진행했다.

서비스의 요청값을 GUI에서 입력하고 실행하여 실제로 새로운 거북이가 생성되는 것을 확인했다.

4-6. Parameter Reconfigure

Parameter Reconfigure는 노드에서 제공하는 파라미터 값을 확인하고 변경하는 기능이다.

자료에서는 RQt의 Configuration 플러그인으로 소개되어 있지만, 현재 실습 환경에서는 해당 플러그인을 확인할 수 없어 이번 실습에서는 진행하지 않았다.

따라서 해당 기능은 설치 문제를 해결하기 위해 무리하게 수정하기보다는 일단 넘어가고 다른 RQt 기능들을 실습했다.

4-7. Plot

Plot은 ROS에서 전달되는 데이터를 시간에 따라 그래프로 표시하는 플러그인이다.

토픽의 값이 시간에 따라 어떻게 변하는지 그래프로 확인할 수 있어 숫자 형태의 데이터를 직관적으로 확인하기에 유용하다.

4-8. Image View

Image View는 ROS에서 전달되는 카메라 영상 데이터를 GUI에서 확인할 수 있는 플러그인이다.

이번 실습에서는 C270 HD WEBCAM을 연결하여 카메라 데이터를 ROS 2의 이미지 토픽으로 발행한 뒤 RQt Image View에서 영상을 확인했다.

먼저 웹캠 장치를 확인했다.

ls -l /dev/video*

웹캠이 /dev/video0으로 인식되는 것을 확인했고, v4l2-ctl을 통해 C270 HD WEBCAM과 uvcvideo 드라이버를 확인했다.

이후 image_tools의 cam2image를 이용해 카메라 영상을 /image 토픽으로 발행했다.

ros2 topic list | grep image

결과:

/flip_image
/image

그리고 /image 토픽의 타입도 확인했다.

ros2 topic type /image
sensor_msgs/msg/Image

RQt의 Image View에서 /image 토픽을 선택한 결과 실제 웹캠 영상이 정상적으로 표시되는 것을 확인했다.

ROS 2의 이미지 토픽과 RQt를 연결하여 실제 카메라 영상을 GUI에서 확인할 수 있었다.

4-9. Console

Console은 ROS 노드에서 발생하는 로그 메시지를 GUI에서 확인할 수 있는 플러그인이다.

이번 실습에서는 cam2image를 실행한 상태에서 Console을 확인했다.

Console에는 다음과 같이 cam2image 노드에서 발생하는 로그가 표시되었다.

Node: cam2image
Severity: Info
Publishing image #...

또한 하나의 로그를 선택하면 시간, 노드, 로그 레벨, 메시지, 발생 위치 등의 상세 정보도 확인할 수 있었다.

이를 통해 카메라 영상이 계속 발행되는 과정에서 발생하는 Info 로그를 RQt에서 실시간으로 확인할 수 있었다.


5. Re-inventing

ROS는 코드와 기능을 재사용하고 공유하는 것을 중요하게 생각한다.

노드를 목적에 따라 작은 단위의 프로그램으로 나누면 다른 프로젝트에서도 해당 기능을 다시 활용할 수 있다.

또한 ROS에서는 CLI 도구인 ros2cli, GUI 도구인 RQt, 3차원 시각화 도구인 RViz, 3차원 시뮬레이터인 Gazebo 등 로봇 개발에 필요한 다양한 도구를 제공한다.

이러한 재사용성과 공개된 도구들을 활용하면 이미 존재하는 기능을 처음부터 다시 구현하는 Re-inventing을 줄일 수 있다.

따라서 로봇 개발을 할 때 기존에 사용할 수 있는 패키지나 도구가 있는지 먼저 확인하고, 불필요하게 같은 기능을 반복해서 개발하고 있지는 않은지 생각해보는 것이 중요하다.


마무리

이번 실습에서는 ROS 2의 종합 GUI 도구인 RQt를 직접 사용해보았다.

Node Graph를 통해 노드와 토픽의 연결 관계를 확인하고, Topic Monitor와 Message Publisher를 통해 토픽을 확인하고 메시지를 발행했다.

또한 Service Caller를 이용해 Turtlesim에서 turtle2를 생성했으며, Plot으로 데이터를 그래프로 확인했다.

C270 웹캠과 cam2image를 연결하여 Image View에서 실제 카메라 영상을 확인했고, Console에서는 cam2image에서 발생하는 로그까지 확인할 수 있었다.

RQt를 직접 실습하면서 ROS 2의 다양한 기능을 CLI뿐만 아니라 GUI 환경에서도 확인하고 제어할 수 있다는 점을 경험할 수 있었다.

0개의 댓글