서론
이전 글에서 demo_nodes_cpp, turtlesim을 실행해 보며 노드, 토픽, 서비스, 액션 등을 조회해 보았다.
2024.10.29 - [ROS/ROS2] - [ROS2] 002 : ROS2 예제 (demo_nodes, turtlesim)
[ROS2] 002 : ROS2 예제 (demo_nodes, turtlesim)
ROS2 예제 실행이전 글에서 ROS2 Humble을 설치해 보았다. 2024.09.30 - [ROS/ROS2] - [ROS2] 001 : ROS2 Humble 설치 (Ubuntu 22.04) [ROS2] 001 : ROS2 Humble 설치 (Ubuntu 22.04)ROS2 Humble 설치ubuntu 22.04에 ROS2 Humble을 설치하는
menggu1234.tistory.com
또 ros2 CLI-tools의 명령어를 정리해 보았다.
2024.10.29 - [ROS/ROS2] - [ROS2] 003 : ROS2 명령어 정리
[ROS2] 003 : ROS2 명령어 정리
1. ROS2 명령어 정리 (CLI-tools)ROS2는 기본적으로 여러가지 개발 도구를 제공한다. 그중 Commad-Line Tools(CLI-tools)의 사용법과 명령어를 정리해 보았다. CLI-tools는 거의 모든 ROS의 기능을 다룰 수 있다.
menggu1234.tistory.com
이제 위 글에서 사용한 노드, 토픽 등의 역할과 내용을 정리해 보겠다.
1. 노드(Node)란?
ROS2에서 Node는 특정 작업을 수행하는 독립된 실행 단위를 의미한다. 각각의 Node는 하나의 로봇 시스템에서 특정한 역할을 수행하며, 예를 들어 센서 데이터 수집, 로봇 이동 제어, 이미지 처리 등을 담당할 수 있다. 이처럼 ROS2는 로봇 시스템의 구성을 여러개의 Node로 나누어 구성하며, 모듈화와 확장성을 극대화하고 있다.
Node는 분산 시스템을 구현할 수 있게 하며, 다양한 노드들이 독립적으로 개발되고 관리될 수 있기 때문에 복잡성을 크게 줄일 수 있다.
Node는 각종 데이터와 명령을 서로 주고받으며 동작하는 ROS2의 기본 단위이며 제공하는 주요 기능은 아래와 같다.
토픽(Topic) -> Publish/Subscribe
Node는 토픽을 통해 데이터를 주고 받는다.
예를 들어 카메라를 사용하는 노드에서는 이미지 데이터를 sensor_msgs/Image 타입의 토픽으로 퍼블리쉬하고 이미지 처리를 하는 노드에서는 해당 토픽을 서브스크라이브 하여 데이터를 사용할 수 있다.
여기서 토픽을 publish/subscribe하는 역할을 하는 것들을 각각 Publisher, Subscriber라고 한다.
- publisher : 데이터를 토픽을 통해 퍼블리쉬
- subscriber : 데이터를 토픽을 통해 서브스크라이브
서비스(Service)
Node는 서비스를 통해 요청-응답(request-response) 방식의 통신을 수행할 수 있다.
하나의 노드에서 특정 작업을 요청(request)하면, 다른 노드에서 해당 요청을 처리하고 결과를 반환(response)하는 형식으로 사용된다.
예를 들어, 로봇의 위치를 재설정 하는 서비스가 있다면, 로봇을 관리하는 노드에서 재설정을 요청할 경우, 로봇을 제어하는 노드에서 로봇을 설정한 위치로 이동시키고 이동 결과를 반환하는 방식으로 사용할 수 있다.
액션(Action)
액션은 비동기 작업을 위한 통신 방식이다.
예를 들어 로봇을 특정 위치로 이동시키는 작업은 시간이 소요되기 때문에 액션을 통해 노드가 로봇의 이동 상태를 모니터링할 수 있다. 액션을 사용하면 작업의 진행 상황을 중간중간 확인할 수 있다.
파라미터(Parameter)
Node는 파라미터를 사용하여 특정 설정값을 저장하고 사용할 수 있다.
예를 들어, 로봇의 속도, 카메라의 해상도, 센서의 주기 등 설정값을 파라미터로 정의하여, 노드 실행 중에 동적으로 변경할 수 있다.
2. 노드의 장점
노드를 사용하게 되면 다음과 같은 장점이 있다.
- 모듈화 : 로봇 시스템을 기능별로 Node로 분리하여, 각 노드가 독립적으로 동작하고 개발될 수 있다. 이는 소프트웨어의 복잡성을 줄이고 코드의 가독성을 높여준다.
- 유연한 통신 방식 : ROS2 Node는 토픽, 서비스, 액션 등을 통해 다양한 통신 방식을 지원하며, 노드 간의 데이터를 효율적으로 주고받을 수 있다.
- 확장성 : Node 기반 시스템은 새로운 기능을 추가하거나 기존 기능을 확장하기 용이하다. 예를 들어, 새로운 센서가 추가되더라도 해당 센서만을 위한 노드를 추가하면 된다.
- 분산 실행 가능 : 여러 Node는 하나의 시스템에 국한되지 않고 네트워크를 통해 분산 실행될 수 있다. 이를 통해 복잡한 로봇 시스템에서도 높은 성능을 유지할 수 있다.
'ROS > ROS2' 카테고리의 다른 글
[ROS2] 006 : ROS2 QT GUI C++ 패키지, 노드 작성 (2) | 2024.10.31 |
---|---|
[ROS2] 005 : ROS2 C++ 패키지, 노드 작성 가이드 (1) | 2024.10.29 |
[ROS2] 002 : ROS2 예제 (demo_nodes, turtlesim) (0) | 2024.10.29 |
[ROS2] 003 : ROS2 명령어 정리 (0) | 2024.10.29 |
[ROS2] image_recognition 프로젝트 001 - usb_camera 패키지 (3) | 2024.10.10 |