<공부 주제>
ROS Noetic의 기본 통신 구조와 구성 요소 이해
<공부한 내용 정리>
ROS는 거대한 하나의 프로그램이 아니라, 여러 개의 작은 프로그램들이 서로 데이터를 주고받으며 작동하는 분산 처리 시스템이다. 이를 이해하기 위한 3가지 핵심 키워드는 다음과 같다.
- 노드 (Node)
- 정의: 최소 단위의 실행 프로그램.
- 역할: 로봇의 센서 하나, 모터 하나, 혹은 특정 알고리즘 하나가 각각의 노드가 된다.
- 장점: 하나가 죽어도 다른 노드에 영향을 주지 않아 시스템이 안정적이다.
- 마스터 (Master / roscore)
- 정의: 노드들 사이의 통신을 돕는 중개자.
- 역할: 각 노드가 어디에 있는지 정보를 가지고 있으며, 노드들이 서로를 찾을 수 있게 연결해준다.
- 실행: 터미널에서 roscore 명령어를 입력하면 마스터가 실행된다. (이게 꺼지면 통신 불가!)
- 패키지 (Package)
- 정의: ROS 소프트웨어를 구성하는 기본 단위.
- 역할: 관련된 노드, 설정 파일, 데이터 등을 하나로 묶어놓은 폴더 개념이다.
- 특징: 남이 만든 기능을 가져다 쓸 때도 '패키지' 단위로 내려받아 사용한다.
<예제 / 실습 코드>
현재 실행 중인 노드와 마스터의 상태를 확인하는 필수 명령어들이다.
- 마스터 실행
roscore
- 실행 중인 노드 목록 확인
rosnode list
/rosout: 로그 기록을 담당하는 기본 노드로, 항상 떠 있어야 정상이다.
- 특정 노드의 정보 확인
rosnode info /turtlesim
어떤 데이터를 보내고 받는지 상세 정보를 보여준다.
- 노드 간의 관계 시각화 (치트키)
rqt_graph
어떤 노드가 어떤 통로(Topic)로 연결되어 있는지 그림으로 보여준다. 초보 때는 무조건 이걸 켜놓고 공부하는 게 좋다.
<헷갈렸던 점>
- 마스터의 역할: 마스터가 데이터를 직접 전달하는 줄 알았는데, 사실 마스터는 "연락처"만 알려줄 뿐이다. 실제 데이터는 노드끼리 직접(Peer-to-Peer) 주고받는다는 점이 놀라웠다.
- 패키지 vs 폴더: 그냥 폴더를 만든다고 패키지가 되는 게 아니라, 안에 package.xml과
CMakeLists.txt가 있어야 ROS가 패키지로 인식한다는 점을 잊지 말자.
<오늘의 정리>
- 마스터(roscore)는 통신의 전화국 역할을 한다.
- 노드는 각 기능을 수행하는 개별 프로그램이다.
- 패키지는 코드를 담는 가방이며, ROS 관리의 기본 단위다.
- rqt_graph를 통해 시스템 전체 구조를 한눈에 파악할 수 있다.