안녕하세요. 저번 시간에는 Launch, Node를 다루는 방법을 배웠습니다.
이번 시간에는 ROS의 통신 방식 중 하나인 Topic에 대한 간단한 명령어들을 다뤄보겠습니다.
Topic 명령어 사용법
ROS 2에서 노드 간 통신은 대부분 Topic을 통해 이루어집니다. 토픽은 데이터를 송수신하는 통로로, 퍼블리셔(Publisher)는 메시지를 보내고 서브스크라이버(Subscriber)는 메시지를 수신합니다. 먼저 토픽과 관련된 명령어부터 알아보겠습니다.
기본 명령어 확인
ros2 topic -h
이 명령어로 사용할 수 있는 토픽 관련 명령어들의 목록을 확인할 수 있습니다.
토픽 목록 조회
ros2 topic list
- 현재 활성화된 모든 토픽을 확인할 수 있습니다.
- 특정 이름을 가진 토픽을 찾고 싶다면 grep을 활용할 수 있습니다:
ros2 topic list | grep cmd_vel
토픽 정보 조회
ros2 topic info <topic_name>
- 해당 토픽의 인터페이스 타입, 퍼블리셔/서브스크라이버 수 등을 확인할 수 있습니다.
- /scan 토픽처럼 퍼블리셔만 있고 서브스크라이버가 없다면, 데이터는 송신되고 있지만 소비되고 있지 않다는 의미입니다.
- /cmd_vel 토픽은 외부에서 명령이 입력되기를 대기하고 있습니다.
토픽 메시지 확인 (구독)
ros2 topic echo <topic_name>
- 해당 토픽으로 전달되는 메시지를 실시간으로 확인할 수 있습니다.
- 퍼블리셔가 없으면 아무런 메시지가 출력되지 않습니다.
Interface 명령어 사용법
토픽은 특정한 메시지 타입(인터페이스)을 사용합니다. 인터페이스는 메시지, 서비스, 액션으로 나뉘며, 다음 명령어로 정보를 확인할 수 있습니다.
인터페이스 목록 확인
ros2 interface list
- Messages (.msg), Services (.srv), Actions (.action)로 구분됩니다.
여기서 간단하게 msg - Topic, srv - Service, action - Action으로 구분됩니다.
곧 있으면 Topic, Service, Action에 대해 자세히 다룰 예정입니다.
Messages:
action_msgs/msg/GoalInfo
action_msgs/msg/GoalStatus
action_msgs/msg/GoalStatusArray
actionlib_msgs/msg/GoalID
actionlib_msgs/msg/GoalStatus
...
Services:
action_msgs/srv/CancelGoal
composition_interfaces/srv/ListNodes
composition_interfaces/srv/LoadNode
...
Actions:
action_tutorials_interfaces/action/Fibonacci
control_msgs/action/FollowJointTrajectory
control_msgs/action/GripperCommand
control_msgs/action/JointTrajectory
...
인터페이스 구조 확인
ros2 interface show <interface_name>
- 예시:
기억하시겠지만, /cmd_vel 토픽에 대한 정보를 찾을 때 이 토픽이 geometry_msgs/Twist라는 유형을 사용한다는 것을 보셨을 것입니다. 이제 아시다시피 이것은 Messages 타입의 인터페이스입니다.
ros2 interface show geometry_msgs/msg/Twist
- 메시지 내부 필드(예: linear, angular)와 자료형을 확인할 수 있습니다.
인터페이스 프로토타입 확인
ros2 interface proto <interface_name>
- 해당 메시지의 구조를 .msg 파일 형태로 출력합니다.
토픽 메시지 게시 (Publish)
ros2 topic pub <topic_name> <interface_name> <message>
예시:
https://woongeee.tistory.com/66
[ROS 2 강의] ROS 2 기본 개념
1. 실습 환경 구성과 로봇 이동 실습이번 시간에는 ROS 2에서 기본 시뮬레이션 환경을 설정하고,로봇을 직접 움직여보는 과정을 실습해보겠습니다. 아래 링크에서 제공하는 패키지를 받아서https:/
woongeee.tistory.com
이전의 ROS 2 기본 개념에서 사용했던 시뮬레이션 환경을 열고 아래 명령어를 입력합니다.
ros2 topic pub /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.1, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.0}}"
- /cmd_vel 토픽에 속도 명령을 보내 로봇을 움직일 수 있습니다.
- 이후 ros2 topic echo /cmd_vel 명령으로 메시지 수신 확인 가능
- ros2 topic info /cmd_vel 명령으로 퍼블리셔/서브스크라이버 수 변화 확인 가능
publish 중지 및 로봇 정지
ros2 topic pub --once /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}"
- 로봇 정지 명령을 1회만 전송할 때 사용합니다.
이렇게 로봇을 움직이고 멈추는 것을 연습해봤습니다. ROS 2 기본 개념에서 여러분이 키보드로 로봇을 움직였을텐데요, 혹시 눈치채셨나요?
네 맞습니다!! 키보드를 누를 때마다 위의 명령어처럼 cmd_vel 토픽을 geometry_msgs/msg/Twist 메세지에 값을 넣어서 로봇에 토픽을 Publisher 하는 것입니다.
이 방법은 추후에 자율주행을 할 때, 목표 지점까지 경로를 따라 움직일 때 cmd_vel 토픽이 계산되어 로봇에 최종적으로 주어지는 값입니다.
[부록] 토픽 분석 예시 – /scan 분석
/scan은 일반적으로 2D LiDAR 센서에서 제공하는 거리 데이터를 담고 있는 토픽입니다.
인터페이스 확인
ros2 interface show sensor_msgs/msg/LaserScan
- LaserScan 메시지는 다양한 거리 측정 관련 필드를 포함합니다.
- angle_min, angle_max, angle_increment: 레이저의 스캔 각도 범위
- range_min, range_max: 측정 가능한 거리 범위 (단위: m)
- ranges: 각 방향에 대한 거리 측정값 배열
메시지 실시간 확인
ros2 topic echo /scan
- 각 방향에서 측정된 거리 값이 실시간으로 출력됩니다.
- 360도 커버 시 약 360개의 ranges 값을 갖습니다.
- inf는 장애물이 없음을 의미합니다.
이처럼 ROS 2의 Topic과 Interface를 활용하면 로봇의 센서 데이터를 확인하고, 직접 제어하는 다양한 작업을 수행할 수 있습니다.
자 다음 시간에는 이제 이 Topic을 직접 파이썬 코드로 다루는 것을 배워보겠습니다.
여기까지 잘 따라오셨을 까요? 강의를 따라 하고 계신 분이 있다면, 꼭 댓글을 남겨주세요.
여러분의 댓글이 저에게 큰 동기부여가 됩니다.
강의를 따라 하면서 궁금한 점이나 막히는 부분이 있다면 언제든지 자유롭게 질문 남겨주세요!
'ROS2 강의 (Humble)' 카테고리의 다른 글
[ROS 2 강의] Topic Programming (0) | 2025.06.29 |
---|---|
[ROS 2 강의] ROS 2 기본 개념 || (1) | 2025.06.24 |
[ROS 2 강의] ROS 2 기본 개념 (0) | 2025.06.23 |
[ROS 2 강의] Humble 설치 및 초기 개발환경 설정 (0) | 2025.06.22 |
[ROS 2 강의] 시작 – 로봇 소프트웨어 개발, 어디서부터 어떻게 배울까 (0) | 2025.06.22 |