ROS2 스터디 중 기록해두고 싶은 내용 위주로 적어보았습니다.
참고 자료 : 표윤석박사님의 ROS 2로 시작하는 로봇 프로그래밍 (https://cafe.naver.com/openrt/24070)

이번 글에서 다룰 목차
ROS2 소개 (일부)
ROS2 기본 프로그래밍
[ROS2] 인터페이스 프로그래밍을 해보자 1 - 프로그래밍 기초, 인터페이스 복습, 패키지 설계 (C++ / 23,25,27,34)
> 008 ROS 2 노드와 메시지 통신
Node (노드) : 최소 단위의 실행 가능한 프로세스(프로그램)
→ 하나의 역할을 가지는 노드로 세분화하고 각 노드를 목적에 맞게 엮는 것을 지향한다.
예) 원본 영상을 출력하는 카메라 노드 → 영상을 필터링하는 필터 노드 → 필터링 된 영상에서 특징점을 추출하는 노드 → 특징점에서 물건을 검출하는 노드 등...
Message (메시지) : 노드와 노드 사이에 입력과 출력 데이터
→ integer, floating point, boolean, string 와 같은 변수 형태
(메시지 안에 메시지를 품고 있는 간단한 데이터 구조 및 메시지들의 배열과 같은 구조도 사용)
여기서 메시지를 주고받는 통신 방법에 따라 토픽(topic), 서비스(service), 액션(action), 파라미터(parameter)로 나눈다.
동기 Synchronous : 요청과 결과가 동시에 일어남. 순서에 맞춰 진행되는 장점이 있지만, 여러 요청을 동시에 처리하지 못함.
예) 노드 : 계좌 A, 계좌 B / 메시지 : 돈 10,000원 (송금시 각 계좌에서 차감, 증감이 동시 발생)
비동기 Asynchronous : 요청에 대한 응답을 즉시 처리 하지 않아도, 대기 시간동안 다른 요청에 대한 처리 가능
예) 노드 : 학생, 선생 / 메시지 : 시험지 (학생이 시험지를 전달해도, 작업 시간이 일치하지 않아도 됨. 시험지에 대해 각자 Goal이 다름)
> 009 ROS 2 토픽 (Topic)

`Node A - Node B`, `Node A - Node C`와 같은
비동기식 단방향 메세지 송수신 방식
msg 메세지 형태의 메시지를 발간하는 publish와
메세지를 구독하는 subsctilber로 구성
1:N / N:1 / N:N 통신이 가능
> 010 ROS 2 서비스 (Service)

`Node B - Node C`와 같은
동기식 양방향 메시지 송수신 방식
서비스의 요청(Request)을 하는 쪽을 Service client
서비스의 응답(Response)을 하는 쪽을 Service server라고 한다.
→ 특정 요청을 하는 클라이언트 단과 요청받은 일을 수행 후에 결과값을 전달하는 서버 단과의 통신
서비스 요청 및 응답(Request/Response) 또한 위에서 언급한 msg 메시지의 변형으로 srv 메시지라고 한다.
> 011 ROS 2 액션 (Action)

비동기식+동기식 양방향 메시지 송수신 방식
액션 목표 Goal를 지정하는 Action client과
액션 목표를 받아 특정 태스크를 수행하면서 중간 결괏값에 해당되는 액션 피드백(Feedback)과
최종 결괏값에 해당되는 액션 결과(Result)를 전송하는 Action server 간의 통신이라고 볼 수 있다.
→ 액션 목표 및 액션 결과를 전달하는 방식은 서비스와 동일
→ 액션 피드백은 토픽과 같은 메시지 전송 방식
→액션 목표/피드백/결과(Goal/Feedback/Result) 메시지 또한 msg 메시지의 변형으로 action 메시지라고 한다.
> 013 ROS 2 파라미터 (Parameter)

파라미터(Parameter)는 각 노드의 구성값을 말합니다.
파라미터는 각 노드마다 자신만의 parameter server, client를 갖습니다. (roscore가 없으므로)
→ 노드가 죽으면, 관련 파라미터들은 전부 사라진다.
→ 자기 자신의 파라미터 및 다른 노드의 파라미터를 읽고 쓸 수 있음.
각 노드에 Parameter server를 실행시켜
외부의 Parameter client 간의 통신으로 파라미터를 변경하는 것으로 서비스와 동일하다고 볼 수 있다.

단, 노드 내 매개변수 또는 글로벌 매개변수를 서비스 메시지 통신 방법을 사용하여
노드 내부 또는 외부에서 쉽게 지정(Set) 하거나 변경할 수 있고,
쉽게 가져(Get)와서 사용할 수 있게 하는 점에서 목적이 다르다고 볼 수 있다.
https://cafe.naver.com/openrt/24070
23 - 프로그래밍 규칙 (코드 스타일)
https://cafe.naver.com/openrt/24436
25 - ROS 프로그래밍 기초 (C++)
https://cafe.naver.com/openrt/24451
rclcpp::Node
27 - 토픽, 서비스, 액션 인터페이스
https://cafe.naver.com/openrt/24629
34 - ROS2 패키지 설계 (C++)
https://cafe.naver.com/openrt/24798
'1-1. Fundamental > ROS2' 카테고리의 다른 글
[ROS2] 인터페이스 프로그래밍을 해보자 1 - 프로그래밍 기초, 인터페이스 복습, 패키지 설계 (C++ / 23,25,27,34) (0) | 2024.08.01 |
---|---|
[ROS2] ROS2 툴과 인터페이스 (14~18) (0) | 2024.07.21 |
ROS2 스터디 중 기록해두고 싶은 내용 위주로 적어보았습니다.
참고 자료 : 표윤석박사님의 ROS 2로 시작하는 로봇 프로그래밍 (https://cafe.naver.com/openrt/24070)

이번 글에서 다룰 목차
ROS2 소개 (일부)
ROS2 기본 프로그래밍
[ROS2] 인터페이스 프로그래밍을 해보자 1 - 프로그래밍 기초, 인터페이스 복습, 패키지 설계 (C++ / 23,25,27,34)
> 008 ROS 2 노드와 메시지 통신
Node (노드) : 최소 단위의 실행 가능한 프로세스(프로그램)
→ 하나의 역할을 가지는 노드로 세분화하고 각 노드를 목적에 맞게 엮는 것을 지향한다.
예) 원본 영상을 출력하는 카메라 노드 → 영상을 필터링하는 필터 노드 → 필터링 된 영상에서 특징점을 추출하는 노드 → 특징점에서 물건을 검출하는 노드 등...
Message (메시지) : 노드와 노드 사이에 입력과 출력 데이터
→ integer, floating point, boolean, string 와 같은 변수 형태
(메시지 안에 메시지를 품고 있는 간단한 데이터 구조 및 메시지들의 배열과 같은 구조도 사용)
여기서 메시지를 주고받는 통신 방법에 따라 토픽(topic), 서비스(service), 액션(action), 파라미터(parameter)로 나눈다.
동기 Synchronous : 요청과 결과가 동시에 일어남. 순서에 맞춰 진행되는 장점이 있지만, 여러 요청을 동시에 처리하지 못함.
예) 노드 : 계좌 A, 계좌 B / 메시지 : 돈 10,000원 (송금시 각 계좌에서 차감, 증감이 동시 발생)
비동기 Asynchronous : 요청에 대한 응답을 즉시 처리 하지 않아도, 대기 시간동안 다른 요청에 대한 처리 가능
예) 노드 : 학생, 선생 / 메시지 : 시험지 (학생이 시험지를 전달해도, 작업 시간이 일치하지 않아도 됨. 시험지에 대해 각자 Goal이 다름)
> 009 ROS 2 토픽 (Topic)

NodeA-NodeB, NodeA-NodeC와 같은
비동기식 단방향 메세지 송수신 방식
msg 메세지 형태의 메시지를 발간하는 publish와
메세지를 구독하는 subsctilber로 구성
1:N / N:1 / N:N 통신이 가능
> 010 ROS 2 서비스 (Service)

NodeB-NodeC와 같은
동기식 양방향 메시지 송수신 방식
서비스의 요청(Request)을 하는 쪽을 Service client
서비스의 응답(Response)을 하는 쪽을 Service server라고 한다.
→ 특정 요청을 하는 클라이언트 단과 요청받은 일을 수행 후에 결과값을 전달하는 서버 단과의 통신
서비스 요청 및 응답(Request/Response) 또한 위에서 언급한 msg 메시지의 변형으로 srv 메시지라고 한다.
> 011 ROS 2 액션 (Action)

비동기식+동기식 양방향 메시지 송수신 방식
액션 목표 Goal를 지정하는 Action client과
액션 목표를 받아 특정 태스크를 수행하면서 중간 결괏값에 해당되는 액션 피드백(Feedback)과
최종 결괏값에 해당되는 액션 결과(Result)를 전송하는 Action server 간의 통신이라고 볼 수 있다.
→ 액션 목표 및 액션 결과를 전달하는 방식은 서비스와 동일
→ 액션 피드백은 토픽과 같은 메시지 전송 방식
→액션 목표/피드백/결과(Goal/Feedback/Result) 메시지 또한 msg 메시지의 변형으로 action 메시지라고 한다.
> 013 ROS 2 파라미터 (Parameter)

파라미터(Parameter)는 각 노드의 구성값을 말합니다.
파라미터는 각 노드마다 자신만의 parameter server, client를 갖습니다. (roscore가 없으므로)
→ 노드가 죽으면, 관련 파라미터들은 전부 사라진다.
→ 자기 자신의 파라미터 및 다른 노드의 파라미터를 읽고 쓸 수 있음.
각 노드에 Parameter server를 실행시켜
외부의 Parameter client 간의 통신으로 파라미터를 변경하는 것으로 서비스와 동일하다고 볼 수 있다.

단, 노드 내 매개변수 또는 글로벌 매개변수를 서비스 메시지 통신 방법을 사용하여
노드 내부 또는 외부에서 쉽게 지정(Set) 하거나 변경할 수 있고,
쉽게 가져(Get)와서 사용할 수 있게 하는 점에서 목적이 다르다고 볼 수 있다.
https://cafe.naver.com/openrt/24070
23 - 프로그래밍 규칙 (코드 스타일)
https://cafe.naver.com/openrt/24436
25 - ROS 프로그래밍 기초 (C++)
https://cafe.naver.com/openrt/24451
rclcpp::Node
27 - 토픽, 서비스, 액션 인터페이스
https://cafe.naver.com/openrt/24629
34 - ROS2 패키지 설계 (C++)
https://cafe.naver.com/openrt/24798
'1-1. Fundamental > ROS2' 카테고리의 다른 글
[ROS2] 인터페이스 프로그래밍을 해보자 1 - 프로그래밍 기초, 인터페이스 복습, 패키지 설계 (C++ / 23,25,27,34) (0) | 2024.08.01 |
---|---|
[ROS2] ROS2 툴과 인터페이스 (14~18) (0) | 2024.07.21 |