![[로보틱스] TurtleSim을 이용한 ROS2 기본 개념과 명령어 (Node, Service, Topic, Action)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fx17Uw%2FbtsQnJ1Fs6J%2FAAAAAAAAAAAAAAAAAAAAAFuP1J8o2Mc-rxerSgWc5H6m_KiJ6EgZmAkY4JamueeX%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1759244399%26allow_ip%3D%26allow_referer%3D%26signature%3DDhL5mcH%252BLYp8XBVRhn%252BAlO%252B61nA%253D)
이 글은 ROS2의 기본 개념과 명령어에 대해 정리한 글입니다.
✅ 개발 환경
- OS : Ubuntu 22.04
- ROS : ROS2 Humble
🐢 TurtleSim 설치 및 실행
⚙️ TurtleSim 설치
turtlesim은 ROS를 설치할 때 같이 설치된다. 만약 설치가 되어있지 않다면, 아래 명령어로 설치할 수 있다.
sudo apt install ros-humble-turtlesim
🐢 TurtleSim 실행
ROS 명령어를 사용하기 위한 ROS 환경을 실행한다.
source /opt/ros/humble/setup.bash
그리고 node를 실행한다. (노드(node)는 ROS에서 실행 가능한 최소한의 단위로, ros2 run
명령으로 실행할 수 있다.)
# ros2 run <PKG Name> <Node Name>
ros2 run turtlesim turtlesim_node
그러면 아래와 같이 TurtleSim이 실행된다.
📌 ROS2 Node
- Node는 ROS2 애플리케이션의 가장 작은 실행 단위이다.
- 로봇 소프트웨어 안에서 특정 역할을 수행하는 하나의 프로그램/프로세스
➡️ ROS2 Node는 로봇 시스템 안에서 독립적인 기능을 수행하고, DDS를 통해 다른 Node와 데이터를 주고받는 최소 실행 단위
🧩 ROS2 Node 특징
- 하나의 Node = 하나의 기능
- 하나의 Node가 하나의 기능을 담당하기 떄문에 역할을 쪼개서 관리하면 유지보수와 확장이 쉬워진다.
- 통신의 기본 단위
- Node는 Topic, Service, Action을 통해 다른 Node와 통신한다.
- 센서 데이터 발행(Publish), 명령 구독(Subscribe), 서비스 요청/응답, 액션 수행 등이 모두 Node에서 이루어진다.
- 네임스페이스와 이름
- Node마다 고유한 이름이 존재하며, 이름을 통해 네트워크 안에서 Node를 구분한다.
🐢 TurtleSim Node 정보 확인
실행 중인 환경의 node 목록을 확인한다.
ros2 node list
node 목록 중에서 자세한 정보를 확인하고 싶은 경우, 아래와 같은 명령어로 정보를 확인할 수 있다.
# ros2 node info <Node Name>
ros2 node info /turtlesim
📌 ROS2 Service
- ROS2의 Service는 요청(Request) - 응답(Response) 방식의 통신이다.
- 한쪽 Node는 Service Server로서 기능을 제공하며, 다른 Node는 Service Client로서 요청을 보낸다.
➡️ ROS2 Service는 요청(Request)를 보내고, 처리 후 응답(Response)을 받는 동기적 통신 방식
🧩 ROS2 Service 특징
- 양방향 통신
- Topic은 일방향 데이터 스트림(publish/subscribe)이라면, Service는 요청-응답 형태로 요청하면 결과를 바로 돌려받는다.
- 동기적 성격
- Client가 요청을 보내면 Server가 처리하고 응답을 돌려줄 때까지 기다린다. ➡️ RPC(Remotre Procedure Call)와 비슷한 개념
- 메시지 구조
- Service는
.srv
파일로 정의되며,---
구분자를 기준으로 Request와 Response가 나뉜다.
- Service는
- 즉시 결과가 필요한 작업에 적합
🐢 TurtleSim Service
🕹️ Service 정보 확인
실행 중인 Node의 Service 정보를 확인한다.
ros2 service list
특정 ROS2 Service의 Type을 확인한다.
# ros2 service type <Service Name>
ros2 service type /turtle1/set_pen
Service의 인터페이스를 확인하고 싶을 때는 interface show
명령어를 사용한다.
# ros2 interface show <Service Type>
ros2 interface show turtlesim/srv/SetPen
🕹️ Service Call 사용
Service로 요청(Request)를 보낼 때에는 call
을 사용한다.
# ros2 service call <Service Name> <Service Type> "{Value}"
ros2 service call /turtle1/teleport_absolute turtlesim/srv/TeleportAbsolute "{x: 2, y: 2, theta: 1.57}"
상태 초기화를 할 때에는 /reset
Service로 call
명령을 호출한다.
ros2 service call /reset std_srvs/srv/Empty {}
📌 ROS2 Topic
- ROS2 Topic은 발행(Publish) - 구독(Subscribe) 방식의 통신 채널이다.
- 여러 Node들이 데이터 스트림을 주고 받을 때 사용하는 가장 기본적인 통신 방법이다.
➡️ ROS2 Topic은 Publisher가 발행한 데이터를 Subscriber들이 실시간 스트림 형태로 수신하는 비동기 통신 채널
🧩 ROS2 Topic의 특징
- 일방향 데이터 흐름
- Publisher Node가 메시지를 발행하면, Subscriber Node는 Topic을 구독하고 데이터를 받는다.
- Publiser는 구독자를 몰라도 되며, Subscriber는 발행자를 몰라도 된다. ➡️ 느슨한 결합
- 비동기적 통신
- Publisher는 데이터를 보내면 끝이고, Subscriber는 데이터를 받을 때에만 반응한다.
- 요청 - 응답 구조가 아니라 흘러가는 데이터 스트림에 적합하다.
- 메시지 타입
- Topic은 특정한 메시지 타입을 사용하며, 같은 토픽을 사용하기 위해서는 Publisher와 Subscriber가 동일한 메시지 타입을 사용해야 한다.
- 센서 데이터 스트림이나 로봇 제어 명령, 상태 방송(위치, 속도, 장애물 정보 등)에 적합
🐢 TurtleSim Topic
🕹️ Topic 정보 확인
실행 중인 Node의 Topic 목록을 확인한다.
ros2 topic list
# 목록과 타입을 한번에 확인하려면
ros2 topic list -t
# 발행과 구독을 나눠서 확인하려면
ros2 topic list -v
특정 Topic의 Type을 확인한다.
# ros2 topic type <Topic Name>
ros2 topic type /turtle1/pose
특정 Topic의 정보는 topic info
명령으로 확인한다.
# ros2 topic info <Topic Name>
ros2 topic info /turtle1/pose
Topic의 인터페이스는 interface show
명령어로 확인한다.
# ros2 interface show <Topic Type>
ros2 interface show turtlesim/msg/Pose
🕹️ Topic Subscribe
Topic을 구독할 때에는 topic echo 명령을 사용한다. (터미널에서 구독하는 경우)
# ros2 topic echo <Topic Name>
ros2 topic echo /turtle1/pose
🕹️ Topic Publish
Topic을 발행할 때에는 topic pub
명령을 사용한다.
# ros2 topic pub <Option> <Topic Name> <Topic Type> <Value>
ros2 topic pub --once /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}"
📌 ROS2 Action
- ROS2의 Action은 Service와 Topic의 중간 성격을 가진 통신 방식이다.
- 시간이 오래 걸리는 작업을 실행하고, 그 과정에서 진행 상황(Feedback)을 주고받으며, 최종 결과(Result)를 반환하는 구조이다.
➡️ ROS2 Action은 장시간 실행되는 작업을 요청하고, 중간 진행 상황을 주고받으며, 최종 결과를 반환하는 비동기 통신 방식
🧩 ROS2 Action의 특징
- 비동기적 요청 - 응답
- Service와 동일하게 요청 - 응답 구조를 가지지만, Action은 실행 시간이 긴 작업을 처리할 수 있다.
- Feedback 제공
- 작업이 진행되는 동안 주기적으로 진행 상황(Feedback 메시지)을 Client에게 보낸다.
- 취소 가능
- 실행 중에 작업을 취소할 수 있다.
- 구조
.action
파일에 Action을 정의하며, Goal(요청), Result(최종 응답), Feedback(진행 상황)으로 나눠서 정의한다.
- 특정 작업을 수행하는 명령(ex. 목표까지 로봇 이동)이나 오래 걸리는 연산을 요청할 때 사용
🐢 TurtleSim Action
🕹️ TurtleSim Action Test
ros2 run turtlesim turtle_teleop_key
🕹️ Action 정보 확인
ROS2 Action의 목록을 확인한다.
ros2 action list
# 데이터 타입 함께 확인
ros2 action list -t
Action의 인터페이스를 확인하기 위해서는 interface show
명령을 사용한다.
# ros2 interface show <Action Type>
ros2 interface show turtlesim/action/RotateAbsolute
🕹️ Shell에서 Action 명령
action send_goal
명령으로 액션의 목표를 지정한다.
# ros2 action send_goal <Action Name> <Action Type> "{Value}"
ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "{theta: 3.14}"
'🖥️ Dev > 로보틱스' 카테고리의 다른 글
[로보틱스] Python으로 ROS Topic Subscribe & Publish (0) | 2025.09.09 |
---|---|
[로보틱스] ROS Domain ID 개념 정리 (0) | 2025.09.07 |
[로보틱스] ROS2 & Gazebo 개발을 위한 환경 세팅 (0) | 2025.09.07 |
[로보틱스] Windows에 ROS 및 Gazebo Sim 개발 환경 세팅 (0) | 2025.09.04 |
since 2025.01.27. ~ 개발자를 향해....🔥