ROS가 뭘까?
- -
ROS2(로봇 운영 체제 2, Robot Operating System 2)는 로봇 개발을 위한 오픈소스 프레임워크로, ROS의 차세대 버전입니다. ROS는 로봇 소프트웨어를 개발하기 위한 도구와 라이브러리의 집합입니다.
주요 특징
- 실시간 처리 지원
- ROS2는 실시간 로봇 애플리케이션을 지원합니다. 이는 로봇이 시간에 민감한 작업(예: 로봇 팔 제어, 자율 주행)을 안정적으로 수행할 수 있도록 해줍니다.
- 분산 시스템
- ROS2는 Data Distribution Service (DDS)를 기반으로 하여 분산 시스템을 기본적으로 지원합니다. 이를 통해 네트워크 상에서 여러 로봇 간의 통신이 용이합니다.
- 멀티 플랫폼 지원
- ROS2는 다양한 운영 체제에서 동작합니다. ROS1은 주로 Linux(Ubuntu)에서 사용되었지만, ROS2는 Windows, macOS, Linux, 심지어 RTOS(실시간 운영 체제)에서도 실행 가능합니다.
- 보안 강화
- ROS2는 DDS의 보안 계층을 활용하여 데이터 암호화, 인증, 접근 제어 등 보안 기능을 제공합니다.
- 유연한 통신
- ROS2는 ROS1보다 더 유연한 통신 구조를 제공합니다. 노드 간 통신은 DDS를 통해 수행되며, QoS(품질 서비스) 설정으로 데이터 전송 방식을 세부적으로 조정할 수 있습니다.
- 이식성과 확장성
- ROS2는 로봇 하드웨어와 소프트웨어 간의 독립성을 보장하여, 다양한 로봇 플랫폼에 쉽게 이식하고 확장할 수 있도록 설계되었습니다.
다음은 ROS의
1. Node
2. Topic
3. Service
4. Action
에 대해 알아보겠습니다
1. ROS의 Node
ROS(로봇 운영 체제)의 Node(노드)는 로봇 시스템의 기본 실행 단위로, 특정 작업을 수행하는 독립적인 프로그램입니다. 노드는 일반적으로 센서 데이터를 처리하거나, 명령을 제어 시스템에 전달하는 역할을 합니다. 로봇의 전체 시스템은 여러 노드가 협력하여 동작합니다.
요약
- Node는 ROS에서 실행되는 프로그램의 단위로, 로봇 시스템의 기능을 모듈화하여 설계합니다.
- 여러 노드가 협력하여 복잡한 로봇 작업을 수행하며, ROS의 통신 기능(Topic, Service, Action)을 통해 데이터를 주고받습니다. 이를 통해 로봇 소프트웨어를 효율적으로 개발하고 확장할 수 있습니다! 🚀
1.1 Node의 주요 특징
- 독립성
- 각 노드는 별도의 프로세스로 실행되며, 독립적으로 작동합니다.
- 서로 다른 프로그래밍 언어(예: Python, C++)로 작성된 노드들도 함께 작동할 수 있습니다.
- 통신 기능
- 노드 간의 데이터 송수신은 ROS의 통신 구조를 통해 이루어집니다.
- 토픽(Topic): 게시-구독(Pub-Sub) 방식으로 메시지를 주고받음.
- 서비스(Service): 요청-응답 방식으로 통신.
- 액션(Action): 장시간 작업이나 피드백이 필요한 작업에 사용.
- 노드 간의 데이터 송수신은 ROS의 통신 구조를 통해 이루어집니다.
- 작업 분리
- 각 노드는 단일 책임 원칙(Single Responsibility Principle)을 따르는 것이 일반적입니다.
예를 들어, 하나의 노드는 카메라 데이터를 처리하고, 다른 노드는 이 데이터를 기반으로 물체를 인식합니다.
- 각 노드는 단일 책임 원칙(Single Responsibility Principle)을 따르는 것이 일반적입니다.
- 확장성 및 유연성
- 시스템의 복잡성이 증가하더라도 새로운 노드를 추가하여 기능을 확장할 수 있습니다.
- 한 노드가 고장 나도 시스템의 나머지 부분이 계속 작동할 수 있습니다.
1.2 Node의 예시
- 카메라 센서 노드
- 카메라로부터 이미지를 캡처하고 이를 다른 노드에 전달.
→ 예: /camera/image_raw 토픽에 이미지 데이터 게시.
- 카메라로부터 이미지를 캡처하고 이를 다른 노드에 전달.
- 물체 인식 노드
- 카메라 데이터를 받아 물체를 탐지하고 결과를 다른 노드에 전송.
→ 예: /detected_objects 토픽에 탐지된 물체 정보 게시.
- 카메라 데이터를 받아 물체를 탐지하고 결과를 다른 노드에 전송.
- 로봇 제어 노드
- 물체 인식 결과를 바탕으로 로봇을 이동시킴.
→ 예: /cmd_vel 토픽에 속도 명령 게시.
- 물체 인식 결과를 바탕으로 로봇을 이동시킴.
1.3 Node 간의 통신 구조
- Publisher(퍼블리셔): 데이터를 보내는 노드.
- Subscriber(서브스크라이버): 데이터를 받는 노드.
- Service Server/Client: 요청(Request)과 응답(Response) 처리를 위한 노드.
- Action Server/Client: 상태 업데이트와 피드백을 포함한 비동기 작업 처리.
1.4 Node의 장점
- 모듈화된 설계로 유지보수와 디버깅이 용이함.
- 여러 노드가 병렬로 실행되기 때문에 성능 최적화 가능.
- 네트워크를 통해 로컬 및 원격 노드와의 통신이 가능함
2. ROS의 Topic
Topic(토픽)은 ROS에서 노드 간 비동기 데이터 통신을 위해 사용되는 주요 메커니즘입니다. 노드 간 데이터를 주고받기 위해 Publisher(발행자)와 Subscriber(구독자)가 토픽을 통해 서로 연결됩니다.
요약
- Topic은 노드 간 데이터를 비동기적으로 주고받기 위한 ROS의 핵심 통신 방식입니다.
- Publisher와 Subscriber를 활용해 효율적이고 유연하게 데이터를 송수신할 수 있습니다.
- 토픽 기반 구조는 ROS의 모듈화 설계와 확장성을 지원합니다.
2.1 Topic의 주요 특징
- 게시-구독(Publish-Subscribe) 방식
- 데이터 송신자는 Publisher 역할을 하며, 수신자는 Subscriber 역할을 합니다.
- 토픽은 중앙 집중형 메시지 전달 방식으로, 데이터는 네트워크를 통해 전달됩니다.
- 비동기적 통신
- Publisher는 Subscriber가 연결되어 있는지 신경 쓰지 않고 데이터를 보냅니다.
- Subscriber는 필요한 데이터를 비동기로 받아옵니다.
- 양쪽이 반드시 동시에 실행될 필요는 없습니다.
- 멀티캐스트 지원
- 한 Publisher에서 여러 Subscriber로 데이터를 동시에 전송할 수 있습니다.
- 여러 Publisher가 같은 토픽에 데이터를 게시할 수도 있습니다.
- 유연성과 확장성
- 노드가 데이터를 주고받기 위해 서로 직접 연결될 필요가 없습니다.
- 토픽 이름과 메시지 타입만 일치하면 통신이 가능합니다.
2.2 Topic의 통신 구조
- Publisher: 데이터를 생성하고 특정 토픽에 게시.
- Subscriber: 특정 토픽을 구독하고 데이터를 수신.
- Master: 노드 간 연결을 관리하고, Publisher와 Subscriber가 올바르게 연결되도록 중재.
2.3 Topic 활용
1. Topic 이름
- 토픽 이름은 고유하며, 네임스페이스를 사용할 수 있습니다.
- 예: /camera/image_raw, /robot/velocity.
2. 메시지 타입
- 토픽은 특정 메시지 타입을 사용하여 데이터를 주고받습니다.
- 예: std_msgs/String, sensor_msgs/Image.
2.4 Topic의 장점
- 모듈화
- 데이터 송신자와 수신자를 독립적으로 설계 가능.
- 확장성
- 여러 노드가 동일한 토픽을 구독하거나, 여러 노드가 동일한 토픽에 게시 가능.
- 유연성
- 토픽 기반 설계는 다양한 로봇 시스템에 쉽게 적용 가능.
3. ROS의 Service
Service(서비스)는 ROS에서 요청-응답(Request-Response) 방식으로 데이터를 주고받기 위해 사용하는 통신 메커니즘입니다. 노드 간의 비동기적인 Topic과는 달리, Service는 한 노드가 요청을 보내면, 다른 노드가 이에 응답을 반환하는 동기적 통신 방식을 제공합니다.
요약
- ROS의 Service는 요청-응답 기반의 통신 방식으로, 특정 작업을 수행하고 결과를 반환하는 데 사용됩니다.
- Topic과 비교하여 실시간 명령 처리에 적합하며, 데이터 흐름이 명확합니다.
- Service 서버와 클라이언트를 작성하여 로봇의 특정 기능을 호출하고 결과를 받을 수 있습니다.
3.1 주요 특징
- 요청-응답 구조
- 클라이언트(Client): 요청(Request)을 보냄.
- 서버(Server): 요청을 받고, 응답(Response)을 반환.
- 동기적 통신
- 클라이언트는 서버가 응답을 반환할 때까지 대기함.
- 정해진 메시지 구조
- Service는 Request와 Response 메시지 타입을 미리 정의해야 함.
- 주요 사용 사례
- 즉각적인 명령 실행(예: 로봇 팔 초기화).
- 특정 작업 결과를 요청(예: 로봇 상태 점검).
3.2 Service와 Topic의 차이점
특징 | Topic | Service |
통신 방식 | 게시-구독(Pub-Sub) | 요청-응답(Request-Response) |
데이터 흐름 | 지속적인 데이터 스트림 | 단일 요청에 대한 단일 응답 |
동기/비동기 여부 | 비동기적 | 동기적 |
주요 사용 사례 | 센서 데이터 송신/수신 | 명령 실행, 특정 결과 요청 |
3.3 Service 메시지 구조
Service는 두 가지 메시지 타입으로 구성됩니다:
- Request: 클라이언트가 서버에 보내는 요청 데이터.
- Response: 서버가 클라이언트에 반환하는 응답 데이터.
3.4 Service의 장점
- 즉각적인 명령 처리
- 요청-응답 구조로 빠르게 작업 완료 가능.
- 데이터 교환의 간결성
- 단일 요청-응답으로 명확한 데이터 흐름 제공.
- 간단한 설계
- 요청-응답 방식으로 특정 작업만 수행하는 데 적합.
4. ROS의 Action
Action(액션)은 ROS에서 비동기 요청-응답 방식으로, 장시간 작업(Long-running task)을 처리하거나 중간 상태 피드백이 필요한 작업을 수행할 때 사용하는 통신 메커니즘입니다. Topic과 Service의 장점을 결합한 구조로, 요청(Request), 응답(Response), 그리고 피드백(Feedback)을 모두 포함합니다.
요약
- ROS의 Action은 비동기 요청-응답 통신으로, 중간 피드백과 작업 완료 결과를 모두 제공할 수 있는 강력한 기능입니다.
- 장시간 작업이나 피드백이 필요한 작업에 적합하며, 요청 취소와 같은 유연성도 제공합니다.
- Topic과 Service의 한계를 보완하여 로봇 제어에 널리 사용됩니다.
4.1 주요 특징
- 비동기 작업 처리
- Action 클라이언트는 작업을 요청한 뒤 결과를 기다리지 않고, 다른 작업을 계속 진행할 수 있습니다.
- 중간 상태 피드백
- 작업 완료 전에도 서버에서 클라이언트로 진행 상황(피드백)을 전송할 수 있습니다.
- 장시간 작업 지원
- 서비스와 달리, 시간이 오래 걸리는 작업을 안정적으로 처리할 수 있습니다.
- 주요 사용 사례
- 로봇 팔 제어(목표 위치로 이동).
- 자율주행 로봇의 목표 지점 설정 및 경로 이동.
- 드론의 특정 작업 수행(예: 이륙, 착륙).
4.2 Action의 구조
Action은 세 가지 주요 메시지 타입으로 구성됩니다:
- Goal(목표): 클라이언트에서 서버로 요청.
- Feedback(피드백): 서버에서 클라이언트로 진행 상황 전달.
- Result(결과): 서버에서 작업 완료 후 클라이언트로 응답.
4.3 Action의 장점
- 중간 피드백 제공
- 작업 진행 상황을 클라이언트에 지속적으로 전달할 수 있음.
- 장시간 작업에 적합
- 작업이 완료될 때까지 클라이언트와 서버 간 연결 유지.
- 취소 가능
- 작업 도중 클라이언트에서 작업을 취소할 수 있음.
- 유연성
- 동기/비동기 작업 처리 가능.
Action과 Service/Topic 비교
특징 | Topic | Service | Action |
통신 방식 | 비동기 | 동기 | 비동기 (피드백 지원) |
데이터 흐름 | 지속적 스트림 | 단일 요청-응답 | 요청, 피드백, 결과 포함 |
작업 시간 | 짧은 시간 적합 | 짧은 시간 적합 | 장시간 작업 적합 |
피드백 제공 여부 | 없음 | 없음 | 있음 |
'로봇,ROS,SLAM' 카테고리의 다른 글
[ROS2] ROS2 action 알아보기 (0) | 2025.01.14 |
---|---|
[ROSA] ROSA로 turtlesim 작동시키기 (0) | 2025.01.08 |
[ROS2] ROS2 topic 알아보기 (0) | 2025.01.08 |
[ROS2] ROS2 service 알아보기 (0) | 2025.01.08 |
[ROS2] Turtlesim을 통해 ROS2 기초 명령어 익히기 (0) | 2025.01.07 |
소중한 공감 감사합니다