ROS 2 명령줄 점검 도구
노드 목록에서 시작하여 토픽의 타입, 값, 빈도, 연결 상대 순으로 범위를 좁혀 가며 명령 여섯 가지로 확인한다.
개요
ros2 명령은 실행 중인 시스템에 외부에서 연결하여 상태를 출력한다. 노드 코드를 수정하거나 로그를 추가하지 않아도 어떤 노드가 실행 중이고 어떤 값이 송수신되는지 확인할 수 있다.
점검 순서
아래 명령은 공식 튜토리얼의 turtlesim을 대상으로 한다.
# 떠 있는 노드
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
명령별 확인 항목
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의 출력은 명령 자신이 구독자가 되어 측정한 결과이다.