ROS(Robot Operating System) 이란?
오픈 소스를 기반으로한 로봇 소프트웨어를 개발하기 위한 소프트웨어 프레임 워크
메타운영체제로, 일반적인 운영체제 위에서 동작하며, 여러 장치와 소프트웨어 간의 상호 작용을 관리하고 조율하는 시스템
-> 원하는 하드웨어의 운영체제에 ROS를 설치하여 이기종 디바이스 간의 통신 지원 가능
1. ROS의 특징
- 프로그램의 재사용성 : 개발할 부분만 개발하고, 다른 기능들은 필요한 패키지를 다운 받아 사용 및 공유 가능
- 통신 기반 프로그램 : 하나의 서비스를 위해 하드웨어 드라이버, 센싱, 인식, 동작 등을 각각의 프로세서 목적에 따라 나누고(노드화) 이 최소 실행 단위인 노드는 데이터를 플랫폼 상에서 주고 받음
- 개발 도구 지원 : 디버깅, GUI(rqt), 3차원 시각화 도구(Rviz) 지원
-> 정해진 메세지 형식에 맞추기만 하면 사용 가능 - 로봇 생태계 구성 : 스마트폰의 하드웨어가 어떻게 구성되어 있는지 알지 못해도 많은 개발자들이 앱을 개발하듯이, 로봇 소프트웨어 플랫폼을 사용하여 로봇 하드웨어가 각각 달라도 코딩이 가능
- 이기종 하드웨어 간의 데이터 송수신 : 메세지 통신만 가능하다면 운영체제와 프로그래밍 언어와 상관없이 데이터 주고 받기 가능
2. ROS1과 ROS2 파일 시스템의 차이점
- Multiple workspace : Ros1에서는 catkin_ws와 같이 특정 workspace를 확보하고 하나의 workspace에서 모든 작업을 다했지만, Ros2에서는 복수의 독립된 workspace를 사용할 수 있어서 작업 목적 및 패키지 종류별로 관리 가능
- No devel space : Ros1에서는 catkin은 패키지를 빌드한 후 devel이라는 폴더에 코드를 저장하여 패키지를 설치할 필요없이 패키지를 사용할 수 있는 환경을 제공했다. 편리한 기능이지만 패키지를 관리하는 측면에서 복잡성이 증가했다. Ros2에서는 패키지를 빌드한 후 설치해야 패키지를 사용할 수 있도록 바뀌었다.
=> 파일 구조의 차이
- 클라이언트 라이브러리 : 다양한 프로그래밍 언어를 지원하는 소프트웨어 모듈, 각각의 다른 언어를 작성할 수 있고, 노드 간의 통신을 위해 정보를 교환하기 위해 사용 (ex. roscpp, rospy, roslibjs)
- 로보틱스 어플리케이션 프레임워크 : 로보틱스 응용 프로그래밍용 (ex. tf, robot, localization)
- 로보틱스 어플리케이션 : 위 프레임워크를 기반으로 한 서비스용 응용 프로그래밍 (ex. navigation, MoveIt!)
- 커뮤니케이션 레이어 : 데이터 통신 (ex. rosnode, roslaunch, rostopic, rosbag, rosmaster 등)
- 하드웨어 인터페이스 레이어 (ex. 카메라, 드라이버, GPS/IMU 드라이버, rosserial)
- 소프트웨어 개발 도구 (ex. Rvi, rqt, rospack, catkin, rosdep)
- 시뮬레이션 (ex. gazebo, ros pkgs, state ros)
3. ROS 기본 용어
<마스터(master)>
- 노드와 노드 사이의 연결/ 메세지 통신을 위한 네임 서버와 같은 역할
- roscore가 마스터 실행 명령
- 마스터를 실행하면 각 노드들이 이름을 등록하고 필요에 따라 정보를 받을 수 있으며 마스터가 없으면 노드 간 접속, 토픽과 서비스와 같은 메세지 통신을 할 수 없다.
- XMLRPC를 통하여 슬레이브들과 통신을 하며 노드들이 필요할 때만 접속하여 자신의 정보를 등록하거나 다른 노드들의 정보를 요청하여 수신(응답)받을 수 있다.
<노드(Node)>
- 실행 가능한 최소 단위 프로세서, 각각의 코드가 돌아가는 최소 단위
-> 하나의 로봇을 작동하는데 여러개의 노드가 작게 세분화되어 운영되며, 하나의 목적에 하나의 노드를 사용
-> 모든 센서 값 데이터들을 노드로 만들어야함
-> ROS 노드는 roscpp,rospy와 같은 ROS 클라이언트 라이브러리를 사용하여 작성
<패키지(Package)>
- 하나 이상의 노드, 노드 실행을 위한 정보 등을 묶어 놓은 것
-> ROS의 응용프로그램은 패키지 단위로 개발되고 관리(ROS 소프트웨어 구성 단위)
-> 각 패키지는 package.xml이라는 패키지의 정보(패키지 이름, 라이센스, 의존성 패키지)를 닮은 XML 파일 포함
-> 패키지의 묶음을 "메타 패키지"라 하여 따로 분리한다.
<메타패키지(MetaPackage)>
- 공통된 목적을 지닌 패키지들을 모아둔 패키지들의 집합 단위
<매개변수(parameter)>
- 노드에서 사용되는 미리 지정되거나 할당할 수 있는 어떠한 값
-> 보통 소스코드에서 할당이 가능하며, 따로 파일을 빼두어 값들을 모아두거나 쉽게 조정할 수 있다.
ex) 센서 초기 설정 파일인 yaml 파일 과 같은 경우 => ydlidar.yaml
<메세지(message)>
- 노드가 데이터를 주고 받을 때 사용하는 데이터 형태
-> integer, floating point, boolean 과 같은 변수 형태 같은 정의된 자료형
-> 그외에도 C언어에서의 구조체와 비슷한 느낌으로 노드끼리 주고 받을 메세지 데이터 타입을 사용자가 정의 가능하다.
->CMakeList.txt와 package.xml 파일을 수정해 주어야 사용자 정의 메세지 타입을 만들 수 있다.
<Manifest(package.xml)>
- 패키지를 설명하는 파일
- 패키지 간의 종속성을 정의하고, 버전, 관리자, 라이센스 등과 같은 패키지에 대한 메타 정보를 저장한다.
<CMakeList.txt>
- cmake 빌드 시스템에 기반을 둔 catkin 빌드 시스템에 대한 내용이 담긴 파일
->CMake(Cross Platform Make) 기본적으로 이용, 패키지 폴더에 CMakeList.txt 라는 파일에 빌드 환경 기술
<Catkin과 ament>
- ROS에서 사용하는 빌드 시스템
-> 이 빌드 시스템은 ROS와 관련된 빌드, 패키지 관리, 패키지 간의 의존관계 등을 편리하게 사용할 수 있도록 한다.
-> ROS1 에서는 Catkin을 사용
-> ROS2 에서는 ament를 사용 그러나 ROS1에서 Catkin으로 사용했던 것들이 ROS2에서 호환되는 것들도 존재한다.
<bag>
- ROS에서 주고받는 메세지 데이터를 저장하는 파일 포맷으로 'bag' 확장자를 가진다.
- ***시간을 발행하는 역할로 사용하기도 한다.****
-> 이 기능을 통해 화면 녹화 혹은 음성 녹음처럼 이전 상황을 재현할 수 있다.
-> 글쓴이의 경우 로봇을 시뮬레이션할때는 gazebo와 같은 경우 자신의 clock을 가지고 있어서 시간 충돌이 일어나지 않으나
실제로 로봇을 만들어서 mapping을 할때는 clock이 없어서 rosbag을 통해서 녹음한 후 그것을 mapping 시에 실행 시켜 과거 시간과 현재 시간의 충돌로 인한 TF 충돌 등과 같은 문제를 해결했었다.
-> 그 외의 경우는 시스템으로 부터 clock을 불러와서 사용해야한다.
<RPC> => 통신 개념
- Remote Procedure Call(원격 프로시저 호출)의 약자
- 별도의 원격 제어를 위한 코딩 없이 다른 주소 공간에서 함수나 프로시저를 실행 할 수 있게 하는 프로세스 간 통신 기술
<XMLRPC> => 마스터 구동
- ROS launch file에서 yaml file을 load해주는 편리한 도구
- 상대적으로 가볍고, 다양한 프로그래밍 언어에서 폭 넓게 사용 가능
- HTTP 기반 프로토콜
'ROS2 이론 정리' 카테고리의 다른 글
ROS2 SLAM에 대한 모든 것 (0) | 2025.01.07 |
---|---|
ROS2 URDF에 대한 모든 것 (0) | 2025.01.06 |
ROS2 TF에 대한 모든 것 (0) | 2025.01.06 |
노드 간의 통신 방식 3가지 (0) | 2025.01.06 |
ROS 파일 시스템 구조 (1) | 2025.01.03 |