[ROS2] 기초 개념

TaerinLog·2025년 5월 21일

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 파일 기반 여러 노드 실행
roscoreROS 마스터 실행
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.파일시스템

  • 워크스페이스 예시(Workspace)
~/ros_ws/           # 워크스페이스의 최상위 디렉토리 (예시)
├── src/               # 소스 파일이 위치하는 디렉토리 (ROS 패키지들이 여기에 위치)
├── devel/             # 실행 환경 설정 파일
├── build/             # 빌드된 파일이 저장되는 디렉토리
└── install/           # 빌드된 패키지가 설치된 위치 (옵션)
  • ROS 패키지 (Package)
my_package/                # 패키지 이름
├── CMakeLists.txt        # CMake 빌드 스크립트 (필수)
├── package.xml           # 패키지 메타데이터 파일 (필수)
├── src/                  # C++ 소스 파일이 위치하는 디렉토리
├── scripts/              # 파이썬 스크립트가 위치하는 디렉토리
├── include/              # C++ 헤더 파일이 위치하는 디렉토리
├── msg/                  # 메시지 타입 정의
├── srv/                  # 서비스 타입 정의
├── action/               # 액션 정의
├── launch/               # 런치 파일이 위치하는 디렉토리
└── config/               # 설정 파일이 위치하는 디렉토리
profile
taerin

0개의 댓글