# 사전 지식

#### 필수 사전 지식

**리눅스 및 운영 체제 기본 지식**

ROS2는 주로 리눅스(Ubuntu) 환경에서 사용되며, 리눅스 명령어와 운영 체제에 대한 기본적인 이해가 필요하다. ROS2 설치, 패키지 관리, 환경 설정 등에서 리눅스 명령어를 자주 사용하므로, 이를 잘 이해하고 있어야 한다.

**프로그래밍 언어 (C++ 및 Python)**

ROS2는 \*\*C++(rclcpp)\*\*와 \*\*Python(rclpy)\*\*을 주로 사용하여 노드(Node)를 작성한다. 두 언어 중 하나 또는 둘 다에 대한 이해가 필요하다. 특히, 고성능 패키지 개발 시 C++이 선호되며, 간단한 구현이나 테스트에는 Python이 유용하게 사용된다.

#### CMake

ROS2 는 CMakeLists.txt에 기술하고 colcon을 통해 빌드 하게 된다. CMake에 대한 이해와 사용법이 필요하다.

* CMake의 사용법은 이 도서관의 `프로그래밍 > C++ > CMake` 에 별도로 정리해 두었다.

**네트워크 통신 개념**

ROS2는 **DDS(데이터 분산 서비스)** 프로토콜을 기반으로 하여 분산 시스템에서 노드 간 통신을 처리한다. 네트워크 통신의 기본 개념, QoS(품질 서비스) 설정 등은 ROS2의 노드, 토픽, 서비스, 액션 등 통신 구조를 이해하는 데 필수적이다.

**로봇 공학 및 제어 이론**

ROS2는 로봇 시스템과의 통신 및 제어에 사용되므로, 로봇 공학의 기본 개념을 이해하는 것이 필요하다. 특히 **URDF**와 **로봇 모델링**을 사용하여 로봇의 구조를 정의하고 제어할 때 기초적인 로봇 공학 이론이 필수이다.

**알고리즘 및 자료구조**

ROS2에서 여러 작업을 수행할 때 효율적인 알고리즘과 자료 구조를 이해하고 사용하는 것이 중요하다. 예를 들어, **Behavior Tree**를 사용한 행동 계획이나 상태 관리, **QoS** 설정 시 자료 구조와 알고리즘을 활용해 성능을 최적화할 수 있다.

**실시간 시스템 개념**

ROS2는 실시간 시스템에서의 사용이 가능하므로, **생명주기 노드**와 같은 실시간 시스템 요소를 이해하고 구현할 수 있어야 한다. 특히 **노드 간 시간 동기화** 및 **지연 문제(Latency)** 해결 방안은 실시간 로봇 제어에 중요한 요소이다.

**Git 및 버전 관리 시스템**

ROS2는 오픈 소스 생태계를 기반으로 하며, 패키지 배포나 관리, 개발자 협업 시 Git과 같은 버전 관리 시스템을 활용할 수 있어야 한다. 또한 **ROS2 패키지 배포** 및 오픈 소스 기여에 대한 이해도 중요하다.

**선형 대수 및 수학적 모델링**

로봇 제어, 센서 데이터 처리, 좌표 변환 등의 과정에서는 **선형 대수**와 **수학적 모델링**이 필수적이다. ROS2에서 **TF2 좌표 변환**이나 **센서 데이터 처리** 시에도 이러한 수학적 도구들이 필요하다. 특히 URDF나 로봇의 동작 시뮬레이션 시 로봇의 기하학적 모델링이 중요하다.

#### 사전에 알면 도움이 되는 지식

**ROS1 경험**

ROS2는 ROS1과 여러 가지 차이점이 있으므로, **ROS1**에 대한 경험이 있다면 ROS2의 새로운 기능 및 차별점(예: 통신 아키텍처의 변화, 생명주기 관리 등)을 이해하는 데 유리한다. ROS1과 ROS2의 네임스페이스 및 리매핑, 서비스와 액션 구조 등의 차이를 이해하면 더욱 쉽게 적응할 수 있다.

**로봇 시뮬레이션 도구**

ROS2는 **Gazebo**, **rviz2**와 같은 시뮬레이션 및 시각화 도구와 함께 사용된다. 로봇 동작을 실제 환경에서 실험하기 전에 시뮬레이션에서 테스트할 수 있는 능력은 필수적이다. Gazebo와 같은 시뮬레이션 도구를 다룰 줄 알면 ROS2와의 통합 및 로봇 시스템을 효과적으로 개발하고 디버깅할 수 있다.

**센서 및 액추에이터**

ROS2는 다양한 센서(예: 카메라, 라이다, IMU)와 액추에이터(예: 모터, 로봇 팔)와의 통합을 지원한다. **센서 데이터**를 처리하고 로봇의 **액추에이터**를 제어하는 방법을 알고 있다면, ROS2에서 해당 장치들과의 통신을 설정하고 이를 활용한 로봇 제어를 쉽게 다룰 수 있다.

**데이터 처리 및 최적화 기술**

ROS2는 **대용량 센서 데이터**(예: 이미지, 3D 점군) 처리와 통신 성능 최적화가 중요하다. **QoS 설정**이나 **데이터 직렬화/역직렬화** 과정에서 데이터 처리 및 최적화 기법을 이해하고 있다면 ROS2의 성능을 크게 향상시킬 수 있다.

**분산 시스템 및 클라우드 컴퓨팅**

ROS2는 여러 컴퓨터에서 노드가 실행되는 **분산 시스템**을 지원하며, 최근에는 **클라우드 컴퓨팅**과의 연계도 주목받고 있다. 여러 노드를 클러스터로 구성하거나 **멀티 로봇 시스템**을 제어할 때 분산 시스템의 개념을 이해하는 것이 필수적이다. 또한 클라우드 기반 로봇 시스템을 운영할 수 있는 능력도 중요하다.

**보안 지식**

ROS2는 **SROS2**를 통해 보안을 강화할 수 있다. 로봇 통신에서 **암호화**, **인증** 및 **무결성 검사** 등을 지원하므로, 네트워크 보안에 대한 기본 지식이 있어야 한다. 로봇과의 통신에서 안전을 보장하려면 보안 기능을 설정하고 관리하는 것이 필수적이다.

**실시간 프로그래밍**

ROS2는 **실시간 시스템**에서도 사용될 수 있다. 실시간 성능 요구 사항을 충족시키기 위해 \*\*Real-Time Operating System (RTOS)\*\*와 같은 실시간 운영 체제를 사용할 수 있는 능력이 필요하다. 특히 **RTOS**에서 ROS2를 사용하는 경우, 실시간 제어에 대한 이해가 필수이다.
