ROS2(Robot Operating System)
- 로봇 개발을 위한 오픈 소스 메타 운영 체제
- 로봇 소프트웨어 개발을 지원하는 소프트웨어 프레임워크이자 툴
사용 이유
- 모듈화된 구조: 독립적인 기능 단위로 개발 가능
- 하드웨어 및 소프트웨어 통합 용이
- 강력한 오픈 소스 생태계
- 시뮬레이션 지원 (Gazebo 등)
- 표준화된 메시지 통신 방식
- 대규모 로봇 시스템 설계 지원
1. 기본 구조
분산 프로세스 기반
- 로봇 시스템은 여러 개의 노드(Node) 로 구성
- 각 노드는 독립적으로 실행되는 최소 단위의 프로세스
패키지 단위 관리
- 코드, 메시지 정의, 설정, 실행 파일 등을 패키지(Package) 단위로 관리
- 패키지는 공유, 배포, 수정에 용이
2.핵심 용어 정리
패키지(package)
- ROS 개발의 기본 단위
- 하나 이상의 노드, 메시지, 설정 등을 포함
- package.xml과 CMakeLists.txt는 필수 구성 요소
노드(node)
- ROS의 실행 가능한 최소 단위
- 하나의 목적(예: 센서 읽기, 제어 등)에 하나의 노드를 구성
- 서로 통신하여 전체 로봇 시스템을 구성함
마스터(master)
- 노드 간의 통신을 중계해주는 네임 서버 역할
- 노드, 토픽, 메시지 타입 등을 중앙에서 관리
- ROS_MASTER_URI 환경변수를 통해 URI와 포트 지정 가능 (기본: 11311)
메시지(message)
- 노드 간 데이터 송수신 시 사용하는 데이터 형식
- .msg 파일에 정의
- 예: int32, float64, string, bool, 리스트 타입 등
통신 방식
| 통신 방식 | 구조 | 특징 | 용도 예시 |
|---|
| 토픽 | 퍼블리셔 → 토픽 → 서브스크라이버 | 비동기식, 실시간 데이터 스트림 | 센서 데이터, 위치 정보 |
| 서비스 | 클라이언트 ↔ 서버 | 동기식, 요청-응답 | 설정 요청, 상태 확인 |
| 액션 | 클라이언트 ↔ 서버(피드백 포함) | 비동기식, 장시간 작업 + 피드백 | 네비게이션, 제스처 |
| 파라미터 | 노드 ↔ 마스터 | 구성 정보 저장 및 공유 | 설정값 저장, 조건 변경 |
3.실행 명령어
| 명령어 | 설명 |
|---|
rosrun | 단일 노드 실행 |
roslaunch | .launch 파일 기반 여러 노드 실행 |
roscore | ROS 마스터 실행 |
rosparam | 파라미터 설정 |
rosbag | 토픽 데이터 기록 및 재생 |
launch file
- 여러개의 ROS2 노드와 매개변수를 정의 및 실행하는 스크립트
- 노드 실행 순서를 관리
- 조건부 실행 및 이벤트 처리 가능
roslaunch
<launch>
<node name="my_node" pkg="my_package" type="my_node_executable" output="screen"/>
<param name="robot_name" value="turtle1"/>
</launch>
4.파일시스템
~/ros_ws/ # 워크스페이스의 최상위 디렉토리 (예시)
├── src/ # 소스 파일이 위치하는 디렉토리 (ROS 패키지들이 여기에 위치)
├── devel/ # 실행 환경 설정 파일
├── build/ # 빌드된 파일이 저장되는 디렉토리
└── install/ # 빌드된 패키지가 설치된 위치 (옵션)
my_package/ # 패키지 이름
├── CMakeLists.txt # CMake 빌드 스크립트 (필수)
├── package.xml # 패키지 메타데이터 파일 (필수)
├── src/ # C++ 소스 파일이 위치하는 디렉토리
├── scripts/ # 파이썬 스크립트가 위치하는 디렉토리
├── include/ # C++ 헤더 파일이 위치하는 디렉토리
├── msg/ # 메시지 타입 정의
├── srv/ # 서비스 타입 정의
├── action/ # 액션 정의
├── launch/ # 런치 파일이 위치하는 디렉토리
└── config/ # 설정 파일이 위치하는 디렉토리