======ROS 스터디 #2: ROS 사용법 기초======
2020년 11월 06일 13:00\\
ZOOM 화상회의
{{youtube>SsJOz88-8mw?medium}}
영상의 PPT가 많은 도움이 됩니다. 꼭 시청해주세요!
=====1. ROS 기본개념=====
* **노드(Node)**: 최소 단위의 실행 가능한 프로세스로, 하나의 실행 가능한 프로그램으로 생각하면 된다. 각 노드는 메시지 통신으로 데이터를 주고받는다.
* **패키지(Package)**: 하나 이상의 노드, 노드 실행에 필요한 정보를 묶어 놓은 것. 패키지의 묶음은 메타패키지라 한다.
* **메시지(Message)**: 노드 간 주고받는 변수 형태의 데이터. 메시지나 메시지의 배열 등의 구조를 메시지로 사용할 수 있다.
\\
====1.1. 메시지 통신 방법의 종류====
요약:
^종류 ^ 동기 ^ 방향 ^ 사용 ^
| Topic | 비동기 | 단방향 | 연속으로 데이터를 송수신 |
| Service | 동기 | 양방향 | 요청 처리가 순간적(1회성); 현재 상태를 확인하고 응답받는 것이 필요한 경우 |
| Action | 비동기 | 양방향 | 요청 처리 후 응답까지 오래 걸려서 서비스를 이용하기 어려운 경우, 중간 피드백값이 필요한 경우 |
=====2. 통신의 흐름=====
====2.1. 마스터 노드 구동====
roscore
모든 ros 노드들에 대한 **정보 중계**를 담당.\\
각 노드들이 **서로의 존재를 인식하게 하는 역할**만 담당하고, 이후는 노드들끼리 직접 통신한다. 즉, **모든** 통신이 roscore를 거치는 것은 아니다.
\\
====2.2. 노드2 구동====
rosrun 패키지이름 노드이름
Subscriber나 client를 따로 임의로 실행시킬 때 사용한다.
\\
====2.3. 노드 1 구동====
rosrun 패키지이름 노드이름
Publisher나 server를 따로 임의로 실행시킬 때 사용한다.
\\
====2.4. TCPROS 접속====
마스터는 노드1의 정보를 노드2에게 알리고, 노드1과 2 사이에 **TCPROS 접속**이 일어난다.
TCPROS 접속을 경로로 메시지 전송이 일어나는데, **Topic**의 경우 이 접속이 **단방향**이지만 **연속적**이고 **Service**의 경우 **양방향**이지만 **한 번** 송수신이 일어나면 연결이 끊어진다.
\\
====2.5. 예시====
[[activity:public:2020:ros:200925#ROS_실행|ROS 스터디 1차시 3. ROS 실행]] 참조
\\
=====3. ROS 개념=====
* **네임(Name)**: 노드. 메시지(토픽, 서비스, 액션 등) 고유의 식별자. [[activity:public:2020:ros:201120|ROS 스터디 #4: ROS 기초 프로그래밍]]에서 다루었다.
* **좌표변환(TF)**: 로봇 관절에 대한 상대적인 위치 표현. [[activity:public:2020:ros:210127|ROS 스터디 #8: 모바일 로봇]]의 rviz에서 다루었다.