글 / ROS 2 기초

ROS 2 명령줄 점검 도구

노드 목록에서 시작하여 토픽의 타입, 값, 빈도, 연결 상대 순으로 범위를 좁혀 가며 명령 여섯 가지로 확인한다.

작성일 · 읽는 시간 2분 · ROS 2 Jazzy 기준

개요

ros2 명령은 실행 중인 시스템에 외부에서 연결하여 상태를 출력한다. 노드 코드를 수정하거나 로그를 추가하지 않아도 어떤 노드가 실행 중이고 어떤 값이 송수신되는지 확인할 수 있다.

점검 순서

아래 명령은 공식 튜토리얼의 turtlesim을 대상으로 한다.

bash
# 떠 있는 노드
ros2 node list
# 토픽과 메시지 타입
ros2 topic list -t
# 타입의 필드 구조
ros2 interface show geometry_msgs/msg/Twist
# 지금 흐르는 값
ros2 topic echo /turtle1/cmd_vel
# 받는 빈도
ros2 topic hz /turtle1/pose
# 발행자와 구독자
ros2 topic info /turtle1/cmd_vel -v

ros2 명령 여섯 가지로 범위를 좁혀 가는 점검 순서

명령별 확인 항목

  • node list: 실행되어야 할 노드가 실행 중인지 확인한다.
  • topic list -t: 토픽 이름 옆의 대괄호에 타입이 출력된다. 이름의 오타나 네임스페이스 차이가 이 출력에 나타난다.
  • interface show: 메시지의 필드 이름과 타입을 출력한다.
  • topic echo: 수신한 메시지를 그대로 출력한다. 발행이 없으면 아무것도 출력하지 않고 대기한다. --once를 지정하면 메시지 하나만 수신하고 종료한다.
  • topic hz: 초당 평균 횟수와 메시지 간 간격의 최소·최대를 출력한다.
  • topic info -v: 발행자와 구독자의 수, 각 노드 이름, QoS 설정을 출력한다.

출력 해석 시 주의 사항

topic hz의 값은 이 명령이 생성한 구독자가 수신한 빈도이다. Jazzy의 topic hz는 센서 데이터 프로파일(best effort)로 구독하므로, 메시지가 손실되면 발행 빈도보다 낮게 출력될 수 있다.

topic echo는 QoS 옵션을 지정하지 않으면 발행자의 reliability와 durability를 확인하고 그와 호환되는 값으로 설정하여 구독한다. 따라서 echo에는 값이 출력되어도 다른 구독 노드는 수신하지 못하고 있을 수 있다. 이 경우 topic info -v에서 해당 노드의 QoS를 발행자의 QoS와 비교한다.

echo와 hz가 구독자가 되어 토픽을 수신하는 구성

정리

  • 노드, 토픽 이름과 타입, 값, 빈도, 연결 상대 순으로 범위를 좁혀 확인한다.
  • echo와 hz의 출력은 명령 자신이 구독자가 되어 측정한 결과이다.