<https://wiki.ros.org/ROS/Introduction>
ROS에 대한 개념과 개발 환경의 이해 및 실습을 통한 구조 습득 |
- AI 임베디드 플랫폼을 활용한 ROS 와 Linux 시스템의 이해 |
(한글) ROS기반 로봇제어, SLAM, 네비게이션 기술 구현 (영문) Implementation of ROS-based Robot Control, SLAM, Navigation Technology |
- ROS 프로그래밍을 통한 센서 제어 및 응용 소프트웨어 활용 |
ROS 소개 및 설치, 토픽, 서비스, 액션 |
ROS 주요 도구 활용 |
Rviz를 통한 주요 센서 데이터 실습 |
SLAM의 이해 및 map(지도) 만들기 |
Navigation(자율주행) 해보기 |
Send Goal 프로그래밍 |
teleop_twist_keyboard 패키지와 모터 구동 |
모터 엔코더와 PID 제어 실습 |
IMU/EKF/Lidar 패키지 소개 |
Odometry, Lidar, Camera 데이터 확인 |
Cartographer SLAM과 Navigation 실습 |
Navigation, AMCL, Move_Base노드 확인 |
RootingforU님, 안녕하세요! AI 임베디드 플랫폼을 활용한 ROS와 Linux 시스템의 이해와 학습 방법에 대해 궁금하시군요. 깊이 있는 주제에 관심을 가지시는 모습이 정말 멋지십니다. 이 분야는 로봇 프로그래밍, AI 및 IoT 통합 솔루션 등 RootingforU님께서 관심 가지고 계신 분야들과 밀접하게 연결되어 있습니다. 제가 자세히 안내해 드리겠습니다.
---
- 위치 추정(Localization): 로봇이 현재 자신의 위치를 파악하는 과정입니다.
- 지도 작성(Mapping): 로봇이 이동하면서 주변 환경의 지도를 생성하는 과정입니다.
- 상호작용: 이 두 과정은 동시에 이루어지며 서로 영향을 줍니다. 로봇은 생성된 지도를 기반으로 자신의 위치를 더 정확히 추정하고, 추정된 위치를 바탕으로 지도를 업데이트하며 끊임없이 주변 환경을 인지합니다.
- GPS와 같은 외부 인프라에 의존하지 않고 스스로 동작합니다.
- 카메라, 라이다(LiDAR), 관성 센서(IMU) 등 다양한 센서를 사용합니다.
- GPS 신호가 약하거나 없는 터널, 지하, 실내 등 복잡한 환경에서 활용 가능합니다.
- 주변 환경을 인식하여 안전하게 도로를 주행하는 데 필수적인 기술입니다.
- 집안의 구조를 파악하고 청소 구역을 효율적으로 탐색하여 청소합니다.
- GPS가 없는 환경에서도 스스로 위치를 파악하고 비행하며 주변을 매핑합니다.
- 현실 공간에 가상 정보를 효과적으로 덧입히기 위해 공간을 인식하는 데 활용됩니다
### **AI 임베디드 플랫폼, ROS, Linux 시스템 개요**
1. **Linux 시스템:**
* **개요:** Linux는 오픈소스 운영체제로, 안정성과 높은 유연성을 자랑합니다. 특히 임베디드 시스템에서 많이 활용되며, 로봇 운영체제인 ROS의 기반이 됩니다 [1] [9]. 강력한 명령줄 인터페이스(CLI)를 통해 시스템 자원을 효율적으로 관리하고 다양한 개발 환경을 구축할 수 있습니다.
* **로봇 분야에서의 중요성:** 로봇 시스템은 실시간 처리가 중요하며, Linux는 이러한 요구사항을 충족시키는 데 적합합니다. 다양한 하드웨어 드라이버와 개발 도구를 지원하여 로봇 개발의 핵심적인 역할을 합니다.
2. **ROS (Robot Operating System):**
* **개요:** ROS는 로봇 애플리케이션 개발을 위한 프레임워크이자 미들웨어입니다. 복잡한 로봇 하드웨어와 소프트웨어 간의 통신, 센서 데이터 처리, 제어 로직 구현 등을 표준화된 방식으로 가능하게 합니다. 2025년 현재, ROS는 로보틱스 분야에서 가장 널리 사용되는 표준 플랫폼입니다 [5].
* **구성 요소:** ROS는 노드(Node), 토픽(Topic), 서비스(Service), 액션(Action) 등 다양한 개념과 도구로 구성되어 있으며, 이를 통해 모듈화되고 재사용 가능한 로봇 소프트웨어를 개발할 수 있습니다.
Bera-Metal OS
@@ Bera-Metal OS는 존재하지 않으며, "베어메탈(Bare Metal)"은 운영체제(OS) 없이 하드웨어를 직접 제어하는 펌웨어 또는 프로그래밍 방식을 의미합니다. 따라서 "Bera-Metal OS"는 "베어메탈 펌웨어" 혹은 "베어메탈 환경에서 동작하는 펌웨어"를 잘못 표기한 것으로 보입니다.
- 별도의 운영체제(OS)가 설치되어 있지 않은 하드웨어 자체에 바로 펌웨어가 동작합니다.
- 펌웨어는 하드웨어를 직접 조작하고 제어하는 역할을 합니다.
- 운영체제의 오버헤드 없이 하드웨어 리소스를 직접 사용하기 때문에 높은 성능과 효율성을 얻을 수 있습니다.
- 주로 마이크로컨트롤러 등 임베디드 시스템에서 사용되며, 하드웨어에 특화된 펌웨어를 개발할 때 활용됩니다.
- 운영체제 없이 하드웨어를 직접 제어하는 펌웨어를 개발하는 것을 의미합니다.
- 가상화 기술 없이 물리적인 서버의 컴퓨팅 자원을 단독으로 사용하는 고성능 클라우드 서비스입니다.
ROS 설치
1. 패키지 서버 등록
$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list’
2. 서버 키등록
$ curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
3. 패키지 서버 업데이트
$ sudo apt update
4. ROS Noetic 설치
$ sudo apt install ros-noetic-desktop
or
$ sudo apt install ros-noetic-desktop-full
5. 부가 패키지 설치
6. ~/.bashrc에 설정
실습용 로봇
§ Linux
3. **AI 임베디드 플랫폼:**
* **개요:** AI 임베디드 플랫폼은 인공지능 기능을 하드웨어에 직접 통합하여 엣지(Edge) 단에서 실시간으로 데이터를 처리하고 의사결정을 수행할 수 있도록 설계된 시스템입니다. 예를 들어, 자율주행 로봇이나 스마트 팩토리의 로봇 팔 등이 이에 해당합니다. NVIDIA와 같은 기업들이 AI 로봇 제품 출시와 함께 이 분야의 임베디드 개발자 수요가 증가하고 있습니다 [6].
* **Linux 및 ROS와의 연동:** AI 임베디드 플랫폼은 대부분 Linux를 운영체제로 사용하며, 그 위에서 ROS를 통해 로봇의 인공지능 기능을 구현합니다. 이를 통해 센서 데이터를 기반으로 환경을 인식하고, 자율적으로 경로를 계획하며, 사람과 상호작용하는 등 고도의 AI 기능을 수행하게 됩니다. 임베디드 보드 환경에 ROS를 적용하여 로봇 개발을 더욱 용이하게 만들 수 있습니다 [14].
---
### **학습 방법 안내**
1. **기초 프로그래밍 능력:**
* **C/C++:** 임베디드 시스템과 ROS의 핵심 개발 언어입니다. 기본적인 문법부터 자료구조, 객체지향 프로그래밍까지 탄탄하게 학습하시는 것이 좋습니다 [1].
* **Python:** ROS 개발 및 AI(머신러닝, 딥러닝) 분야에서 매우 중요하게 활용됩니다. 쉽고 간결한 문법으로 빠른 개발이 가능하며, 다양한 라이브러리를 통해 AI 모델 구현 및 ROS 노드 작성을 할 수 있습니다 [11] [12].
2. **Linux 시스템 이해:**
* **기본 명령어 학습:** 파일 시스템 관리, 프로세스 제어, 네트워크 설정 등 기본적인 Linux 명령어를 익히는 것이 필수적입니다.
* **셸 스크립트:** 자동화된 작업을 위해 셸 스크립트 작성법을 배우는 것도 유용합니다.
* **임베디드 Linux:** 비글본 AI 등을 활용한 임베디드 Linux 기본 과정을 통해 실제 하드웨어에 대한 이해를 높일 수 있습니다 [12].
3. **ROS 기본 개념 및 활용:**
* **ROS 환경 설정:** ROS를 다운로드하고 개발 환경을 설정하는 방법부터 시작합니다 [11].
* **주요 개념 학습:** 노드(Node), 토픽(Topic), 메시지(Message), 서비스(Service) 등 ROS의 핵심 통신 개념을 이해하고 직접 코드를 작성해보는 것이 중요합니다.
* **시뮬레이터 활용:** Gazebo와 같은 로봇 시뮬레이터를 사용하여 실제 로봇 없이도 ROS 코드를 테스트하고 디버깅하는 연습을 할 수 있습니다.
4. **AI 및 딥러닝 학습:**
* **머신러닝/딥러닝 개요:** AI 로봇 시스템 개발에서 머신러닝 프로그래밍, 딥러닝의 이해, 영상지능 딥러닝(CNN) 및 컴퓨터 비전 등은 필수적인 지식입니다 [8].
* **AI 프레임워크:** TensorFlow, PyTorch와 같은 딥러닝 프레임워크 사용법을 익히고, 이를 ROS와 연동하여 로봇에 인공지능 기능을 부여하는 방법을 학습합니다.
5. **실습 프로젝트 참여:**
* 이론 학습과 더불어 소형 로봇 제작, 센서 데이터 처리, 자율주행 알고리즘 구현 등 실제 프로젝트에 참여하거나 직접 만들어보는 것이 실력 향상에 가장 효과적입니다.---
### **관련 교육 과정 추천 (URL 포함)**
RootingforU님께서는 멘토링, 자기계발, 학습에도 관심이 많으시니, 체계적인 교육 과정을 통해 관련 지식을 쌓아나가시면 큰 도움이 될 것입니다.
현재 활발히 운영되는 전문 기술 교육 과정 중, 다음과 같은 과정을 참고하시면 좋겠습니다:
* **[새싹 캠퍼스] Linux/ROS 기반 IoT/AI로봇 임베디드 SW개발자 전문과정**
* **개요:** 서울시의 '새싹(SeSAC)' 캠퍼스에서 제공하는 직업 교육 프로그램으로, Linux, ROS, IoT, AI 로봇 임베디드 SW 개발에 초점을 맞춥니다 [2] [4] [6] [8]. 이 과정에서는 C/C++ 프로그래밍, Java 프로그래밍 등 기초 프로그래밍부터 시작하여 AI 로봇 시스템 개발 프로그래밍, 로봇 운영체제 이해 및 활용, 머신러닝 프로그래밍, 딥러닝의 이해, 영상지능 딥러닝(CNN), 컴퓨터 비전 등 실무에 필요한 다양한 지식과 기술을 배울 수 있습니다 [1] [8].
* **장점:**
* **실무 교육:** 중소기업 대외활동으로 실무 교육 혜택이 제공됩니다 [2] [4].
* **교육비 무료:** 교육비는 무료이며, 보통 예치금 선납 후 수료 조건 충족 시 반환됩니다 (예: 20만 원 예치금 후 80% 이상 이수 또는 30% 이상 이수 후 조기 취업 시 반환) [3] [7].
* **수요 증가:** 인공지능 로봇 제품 출시와 함께 Linux/ROS 기반 임베디드 개발자 수요가 증가하는 추세에 맞춰진 과정입니다 [6].
* **참가 자격:** 만 15세 이상 서울 시민 중 기초 지식을 갖추고 개발자로 진출하고자 하는 분, 전체 교육 일정 참여 및 수료가 가능한 미취업자 등이 대상입니다 [10].
* **참고 URL:** 새싹 캠퍼스(SeSAC) 공식 웹사이트에서 'Linux/ROS 기반 IoT/AI 로봇 임베디드 SW 개발자' 과정으로 검색하시면 자세한 정보를 찾아보실 수 있습니다.
* 일반적인 새싹 캠퍼스 정보: `https://sesac.seoul.kr/` (여기서 과정명으로 검색)
* **[인프런] 『ROS2 혼자 공부하는 로봇』 저자 직강 ROS와 딥러닝을 활용한 AI로봇 자율주행 국비지원 과정**
* **개요:** ROS2와 딥러닝을 활용한 AI 로봇 자율주행에 필요한 모든 코드를 직접 배우는 과정입니다.
* **참고 URL:** `https://www.inflearn.com/course/ros2-%ED%98%BC%EC%9E%90%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94%EB%A1%9C%EB%B4%87-ai%EB%A1%9C%EB%B4%87-%EC%9E%90%EC%9C%A8%EC%A3%BC%ED%96%89` [15]
이 외에도 Coursera, edX, KOCW 등 다양한 온라인 교육 플랫폼에서 Linux, ROS, 임베디드 시스템, 인공지능 관련 강좌들을 찾아보실 수 있습니다.
RootingforU님께서 로봇 프로그래밍과 AI, IoT 통합 솔루션에 큰 관심을 가지고 계신 만큼, 위 학습 방법들을 통해 차근차근 역량을 쌓아나가신다면 이 분야에서 훌륭한 전문가로 성장하실 수 있을 것이라고 생각합니다. 궁금한 점이 있으시면 언제든 다시 문의해주세요! 응원하겠습니다. ^^
참고 자료
[1] m.incruit.com - Linux,ROS기반 IoT,AI 로봇 임베디드 SW개발자 전문과정 (https://m.incruit.com/edu/lecturecontview.asp?lec=202107020024)
[2] linkareer.com - Linux/ROS 기반 IoT/AI로봇 임베디드 SW개발자 전문과정 (https://linkareer.com/activity/65671)
[3] linkareer.com - Linux/ROS 기반 IoT/AI로봇 임베디드 SW개발자 전문과정 (https://linkareer.com/activity/65671)
[4] linkareer.com - Linux/ROS 기반 IoT/AI로봇 임베디드 SW개발자 전문과정 (https://linkareer.com/activity/65671)
[5] www.jaenung.net - 로보틱스 프로그래밍의 세계: ROS(Robot Operating System ... (https://www.jaenung.net/tree/17576)
[6] sesac.seoul.kr - 새싹 교육 프로그램 (https://sesac.seoul.kr/course/active/detail.do?courseActiveSeq=1445&srchCategoryTypeCd=&courseMasterSeq=249¤tMenuId=900002001)
[7] m.incruit.com - Linux,ROS기반 IoT,AI 로봇 임베디드 SW개발자 전문과정 (https://m.incruit.com/edu/lecturecontview.asp?lec=202107020024)
[8] hancomacademy.com - [무료교육] 싹(SSAC)캠퍼스 Linux/ROS 기반 IoT/AI로봇 ... (https://hancomacademy.com/m/customer/board_view.php?board_idx=2185)
[9] scienceon.kisti.re.kr - [논문]실시간 임베디드 리눅스를 이용한 지능형 서비스 로봇 ... (https://scienceon.kisti.re.kr/srch/selectPORSrchArticle.do?cn=DIKO0013705508)
[10] hancomacademy.com - [무료교육] 싹(SSAC)캠퍼스 Linux/ROS 기반 IoT/AI로봇 ... (https://hancomacademy.com/m/customer/board_view.php?board_idx=2185)
[11] aisj.tistory.com - 'Robotics/ROS' 카테고리의 글 목록 (https://aisj.tistory.com/category/Robotics/ROS)
[12] www.youtube.com - (온라인) 비글본 AI를 사용한 임베디드 리눅스 기본과정 15강 ... (https://www.youtube.com/watch?v=Z8inB53zFMI)
[13] www.dbpia.co.kr - 임베디드 보드 환경의 실시간성을 이식한 ROS기반 자율주행 ... (https://www.dbpia.co.kr/journal/articleDetail?nodeId=NODE11035942)
[14] 김민재 개발자] Yocto project / ROS(Robot ... - [2021년 파트 - 김민재 개발자] Yocto project / ROS(Robot ... (https://www.oss.kr/developer_support_project/show/e93f9686-3216-4947-954c-4fc588a8feb1)
[15] www.linux.co.kr - [ROS2 혼자공부하는 로봇] 저자 직강 ROS와 딥러닝을 활용 ... (https://www.linux.co.kr/bbs/board.php?bo_table=news&wr_id=400)
RootingforU님, 이어서 AI 임베디드 플랫폼에서 ROS를 효과적으로 설치하고 설정하는 방법에 대해 질문해주셔서 감사합니다. 심도 있는 질문이시네요. 임베디드 환경은 자원 제약이 따르기 때문에 일반적인 데스크톱 환경과는 다소 다른 접근이 필요합니다. 핵심은 '최소화'와 '효율성'입니다.
아래에서 단계별로 자세히 안내해 드리겠습니다.
---
### **AI 임베디드 플랫폼에 ROS 효과적으로 설치 및 설정하는 방법**
AI 임베디드 플랫폼은 보통 NVIDIA Jetson 시리즈나 Raspberry Pi와 같은 소형 컴퓨팅 보드를 의미합니다. 이러한 환경에서는 데스크톱 PC와 달리 제한된 리소스(CPU, RAM, 저장 공간)를 효율적으로 사용해야 합니다.
#### **1단계: 사전 준비 및 고려 사항**
1. **운영체제 (OS) 선택:**
* 대부분의 임베디드 플랫폼은 Debian 기반의 Linux 배포판(예: Ubuntu Server, Ubuntu Core 또는 해당 보드 제조사가 제공하는 맞춤형 Linux)을 사용합니다. ROS는 Ubuntu 환경에서 가장 잘 지원됩니다.
* **경량화된 OS 이미지**를 사용하는 것이 좋습니다. 불필요한 데스크톱 환경이나 서비스가 적어야 리소스를 절약하고 ROS 성능을 최대화할 수 있습니다.
* 임베디드 보드에 Ubuntu가 이미 실행 중이라면, `apt-get`을 사용하여 ROS를 설치하는 표준 방식을 따를 수 있습니다 [4].
2. **ROS 버전 선택:**
* **ROS 1 (Noetic 등):** 아직 많은 프로젝트에서 사용되며 안정적입니다. Ubuntu 20.04와 Noetic이 주로 호환됩니다 [6].
* **ROS 2 (Humble, Iron 등):** 실시간 성능, 분산 시스템, 보안이 강화되어 미래 지향적이며, 점차 더 많은 프로젝트에서 채택되고 있습니다. 2025년 기준 ROS 2 설치 방법이 많이 소개되고 있습니다 [2].
* 임베디드 환경에서는 특히 ROS 2가 경량성과 실시간 통신에 유리할 수 있으나, 기존 ROS 1 프로젝트와의 호환성도 고려해야 합니다.
3. **인터넷 연결:** 안정적인 인터넷 연결이 필수입니다. 설치 패키지 다운로드 및 업데이트에 사용됩니다.
#### **2단계: ROS 설치 (Ubuntu 기반 예시)**
아래는 **ROS 1 Noetic (Ubuntu 20.04)** 또는 **ROS 2 Humble (Ubuntu 22.04)** 설치의 일반적인 절차입니다. 임베디드 환경에서는 `desktop-full` 대신 `ros-base`와 같은 **경량화된 버전**을 설치하는 것이 중요합니다.
1. **locale 설정:**
```bash
sudo apt update
sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
```
이 과정은 한글 문제가 발생할 수 있어 영문 `locale` 설정을 권장합니다.
2. **ROS 저장소 추가:**
```bash
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
```
3. **키 설정:**
```bash
sudo apt install curl # if you haven't already installed curl
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
```
4. **패키지 업데이트:**
```bash
sudo apt update
```
5. **ROS 설치 (경량 버전 권장):**
* **ROS 1 Noetic (for Ubuntu 20.04):**
```bash
sudo apt install ros-noetic-ros-base
```
이 명령어는 ROS 기본 라이브러리와 통신 메커니즘만 포함하여 자원 소모를 최소화합니다. (`ros-noetic-desktop-full`은 데스크톱 환경용으로 임베디드에서는 비효율적입니다.)
* **ROS 2 Humble (for Ubuntu 22.04):**
```bash
sudo apt install ros-humble-ros-base
```
6. **rosdep 초기화:**
ROS 패키지 의존성을 관리하는 도구입니다.
```bash
sudo apt install python3-rosdep # for ROS 2, use python3-rosdep
sudo rosdep init
rosdep update
```
#### **3단계: 환경 설정**
ROS를 사용하려면 터미널을 열 때마다 환경 변수를 설정해주어야 합니다.
1. **ROS 환경 변수 소싱:**
```bash
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc # ROS 1 Noetic
# 또는 ROS 2 Humble
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
```
이 명령은 사용자의 `.bashrc` 파일에 환경 변수 로드 명령어를 추가하여 터미널을 열 때마다 자동으로 ROS 환경이 설정되도록 합니다 [8].
2. **변경된 `bashrc` 적용:**
```bash
source ~/.bashrc
```
#### **4단계: 작업 공간 (Catkin Workspace) 설정 (ROS 1의 경우)**
ROS 패키지를 개발하고 빌드하기 위한 전용 작업 공간입니다. ROS 2는 Colcon을 사용하지만, 기본 설치 시에는 별도의 초기화 없이 패키지 빌드만 하면 됩니다.
1. **작업 공간 디렉토리 생성:**
```bash
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
```
2. **작업 공간 초기화:**
```bash
catkin_init_workspace
```
3. **작업 공간 빌드:**
```bash
cd ~/catkin_ws
catkin_make
```
4. **작업 공간 환경 소싱:**
새로운 터미널을 열 때마다 이 명령을 실행하거나 `.bashrc`에 추가해야 합니다.
```bash
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
```
#### **5단계: 설치 확인**
ROS 시스템이 제대로 동작하는지 확인합니다.
```bash
roscore
```
새로운 터미널에서 `roscore` 명령을 실행했을 때 정상적으로 ROS 마스터가 실행되면 설치가 성공적으로 완료된 것입니다 [8].
#### **6단계: 임베디드 환경 특화 최적화**
1. **불필요한 패키지 제거:** `ros-base` 외에 정말 필요한 패키지만 추가로 설치합니다.
2. **컴파일 최적화:** `catkin_make` 또는 `colcon build` 시 `-j` 옵션을 사용하여 병렬 컴파일을 통해 빌드 시간을 단축할 수 있습니다.
3. **네트워크 설정:** 임베디드 보드가 로봇의 다른 부품이나 원격 컴퓨터와 통신해야 한다면, IP 주소 및 ROS_MASTER_URI, ROS_IP 환경 변수를 올바르게 설정하는 것이 중요합니다.
4. **AI 추론 엔진 통합:** NVIDIA Jetson과 같은 AI 임베디드 플랫폼은 TensorRT와 같은 최적화된 AI 추론 엔진을 제공합니다. ROS 노드에서 이들을 활용하여 AI 모델의 성능을 극대화해야 합니다.
---
이러한 단계들을 차근차근 따라하시면 AI 임베디드 플랫폼에 ROS를 성공적으로 설치하고 효율적으로 사용할 수 있을 것입니다. 자원 제약이 있는 환경에서의 개발은 도전적이지만, 그만큼 성취감도 크실 겁니다. 혹시 특정 단계에서 문제가 발생하거나 더 궁금한 점이 있다면 언제든지 다시 질문해주세요. RootingforU님의 열정을 응원합니다!
참고 자료
[1] 1.ROS 환경 설치와 설정 - ROS를 배워보자 - 1.ROS 환경 설치와 설정 (https://www.youtube.com/watch?v=SH__g7nHn6o)
[2] www.jaenung.net - 로보틱스 프로그래밍의 세계: ROS(Robot Operating System ... (https://www.jaenung.net/tree/17576)
[3] ROS의 개요, 설치 및 개발 ... - [2023 ROS 스터디] 조현준 #1주차 - ROS의 개요, 설치 및 개발 ... (https://cs-kookmin-club.tistory.com/23)
[4] translate.google.com - ROS 마스터를 임베디드 플랫폼에 배치하는 방법은 무엇 ... (https://translate.google.com/translate?u=https://www.quora.com/What-are-the-ways-you-can-put-ROS-master-on-an-embedded-platform&hl=ko&sl=en&tl=ko&client=srp)
[5] creative-chan.tistory.com - [ROS] Python 3에서 설치하기 (https://creative-chan.tistory.com/entry/ROS-Python-3%EC%97%90%EC%84%9C-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0)
[6] NEON MOOD - Ubuntu 20.04에서 ROS Noetic 설치하기 - NEON MOOD (https://gosury32.tistory.com/5)
[7] 협동로봇활용 2024 - ROS 설치하기 - 협동로봇활용 2024 (https://cobots2024.jeju.ai/week03/ros-install.html)
[8] robertchoi.gitbook.io - 2장 ROS 설치하기 (https://robertchoi.gitbook.io/ros/install)
[9] conceptbug.tistory.com - [ROS 튜토리얼] 1.1.1 ROS 설치 및 환경 구축 (https://conceptbug.tistory.com/entry/ROS-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC-111-ROS-%EC%84%A4%EC%B9%98-%EB%B0%8F-%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%B6%95)
[10] colorful-palette.tistory.com - [ROS] 설치, 테스트와 환경설정, 삭제 방법 (melodic) (https://colorful-palette.tistory.com/33)
RootingforU님, 안녕하세요! 윈도우와 리눅스를 함께 활용하여 ROS 플랫폼을 사용하시려는 계획은 정말 현명한 접근이십니다. 특히 WSL(Windows Subsystem for Linux)은 윈도우 환경에서 리눅스를 완벽하게 활용할 수 있게 해주어, RootingforU님처럼 ROS 개발 환경을 구축하시려는 분들께 가장 효율적인 방법 중 하나입니다.
가장 쉽고 빠르게 WSL을 설치하는 방법을 상세히 안내해 드리겠습니다.
---
### **WSL (Windows Subsystem for Linux) 개요**
WSL은 윈도우 운영체제 안에서 리눅스 운영체제를 사용할 수 있도록 해주는 기능입니다. 윈도우와 리눅스를 동시에 실행하면서 리눅스의 강력한 개발 환경을 활용할 수 있게 해주죠 [1], [5]. 특히 ROS는 리눅스 기반으로 개발되었기 때문에, WSL을 통해 윈도우 PC에서 번거로운 듀얼 부팅이나 가상 머신 설정 없이 리눅스 환경을 구축하고 ROS를 사용할 수 있습니다 [8], [9].
### **WSL2 가장 쉽게 설치하는 방법**
Windows 10 버전 2004 (빌드 19041) 이상 또는 Windows 11 사용자는 명령어 하나로 WSL2를 아주 간편하게 설치할 수 있습니다. 2025년 9월 12일 기준으로, 이 방법이 가장 권장되는 설치 방식입니다.
#### **단계별 설치 안내:**
1. **관리자 권한으로 PowerShell 또는 명령 프롬프트(CMD) 실행:**
* 윈도우 시작 버튼을 클릭하고 `PowerShell` 또는 `cmd`를 검색합니다.
* 검색 결과에서 **"관리자 권한으로 실행"**을 선택합니다. (중요합니다!)
2. **WSL 자동 설치 명령 실행:**
* 열린 터미널 창에 다음 명령어를 입력하고 엔터를 누릅니다.
```bash
wsl --install
```
* 이 명령은 다음을 자동으로 처리해 줍니다 [2], [3], [4]:
* **WSL 기능 활성화:** "Linux용 Windows 하위 시스템" 및 "가상 머신 플랫폼" 구성 요소를 자동으로 활성화합니다 [2].
* **WSL 2로 기본 설정:** WSL 버전 2로 설정됩니다.
* **Linux 배포판 설치:** 기본적으로 Ubuntu (최신 LTS 버전)를 자동으로 설치합니다.
3. **컴퓨터 재부팅:**
* 설치가 완료되면 컴퓨터를 **재부팅**해 달라는 메시지가 나타날 것입니다. 컴퓨터를 재부팅합니다.
4. **Ubuntu 초기 설정:**
* 재부팅 후, Ubuntu 터미널 창이 자동으로 열리거나, 시작 메뉴에서 `Ubuntu`를 검색하여 실행할 수 있습니다.
* 처음 실행 시, **새로운 사용자 이름**과 **비밀번호**를 설정하라는 메시지가 나타납니다. 이 계정은 Ubuntu 내에서 사용될 계정입니다.
5. **WSL 업데이트 (선택 사항이지만 권장):**
* 설치된 WSL이 최신 상태인지 확인하려면 PowerShell에서 다음 명령어를 실행합니다.
```bash
wsl --update
```
---
**설치 후 확인 및 ROS 준비:**
설치가 완료되면 이제 윈도우 시작 메뉴에서 'Ubuntu' 앱을 실행하여 리눅스 환경에 접속할 수 있습니다. 이 Ubuntu 환경은 일반적인 리눅스 배포판과 동일하므로, 이전 대화에서 제가 안내해 드린 ROS 설치 방법(예: `sudo apt install ros-noetic-ros-base`)을 그대로 적용하여 ROS를 설치하고 설정하시면 됩니다.
WSL은 Windows와 Linux 환경 간의 파일 공유 및 상호작용도 편리하게 지원하기 때문에, 윈도우 파일 시스템과 리눅스 환경을 오가며 ROS 개발 작업을 효율적으로 진행하실 수 있을 것입니다.
RootingforU님의 코딩 학습 및 프로젝트 관리에 큰 도움이 되시기를 바랍니다! 혹시 설치 과정에서 추가적인 질문이 생기신다면 언제든 다시 말씀해주세요.
참고 자료
[1] 개발자 여행기 - 윈도우에서 리눅스 실행하기 (WSL 설치 방법) - 개발자 여행기 (https://200-rush.tistory.com/entry/WSLInstall)
[2] 우분투(Ubuntu)와 WSL - 2.2. WSL 설치와 실행 - 우분투(Ubuntu)와 WSL (https://wikidocs.net/219899)
[3] web-yiyeon.tistory.com - Window11 에서 WSL 설치하기 초간단! 짱쉬움! (https://web-yiyeon.tistory.com/12)
[4] learn.microsoft.com - WSL을 사용하여 Windows에 Linux를 설치하는 방법 (https://learn.microsoft.com/ko-kr/windows/wsl/install)
[5] 영차영차 - [ROS] WSL에서 ros 이용하기 - WSLg 사용하는 방법 - 영차영차 (https://want-ant.tistory.com/46)
[6] mobility Robotics][ROS]WSL을 이용한 Ubuntu 18.04설치와 ... - [H-mobility Robotics][ROS]WSL을 이용한 Ubuntu 18.04설치와 ... (https://shinestone.tistory.com/43)
[7] tech.cloud.nongshim.co.kr - [빌링] Windows에서 WSL(Linux 개발 환경) 구축하기 (https://tech.cloud.nongshim.co.kr/blog/billing/936/)
[8] songc.tistory.com - Windows WSL2에 ROS2 설치하기 (https://songc.tistory.com/183)
[9] 티스토리 - ROS2와 WSL - TH family - 티스토리 (https://th-family.tistory.com/21)
[10] WSL 환경에서 설치하기 - Ros - WSL 환경에서 설치하기 (https://jungreeyoung.tistory.com/entry/Ros-wsl%EC%97%90%EC%84%9C-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0)
RootingforU님, 정말 중요한 질문을 해주셨습니다! 윈도우와 리눅스(WSL)에서 ROS를 동시에 사용할 때 파일 공유와 네트워크 설정은 개발 효율성에 큰 영향을 미칩니다. WSL은 윈도우와 리눅스 환경을 유기적으로 연결해주지만, 몇 가지 설정만 이해하면 더욱 편리하게 사용할 수 있습니다.
### **윈도우와 리눅스(WSL)에서 ROS 동시 사용 시 파일 공유 및 네트워크 설정**
WSL은 윈도우 호스트 시스템과 리눅스 서브시스템 간의 통합을 매우 잘 지원합니다. 특히 WSL2는 가상 머신 기술을 기반으로 하여 파일 시스템 성능과 네트워크 호환성이 더욱 향상되었습니다.
### **1. 파일 공유 및 접근 방법**
WSL을 사용하면 윈도우 파일 시스템과 리눅스 파일 시스템 간에 파일을 매우 쉽게 공유할 수 있습니다.
#### **A. 윈도우에서 WSL (리눅스) 파일 접근하기**
가장 쉽고 편리한 방법은 윈도우 파일 탐색기를 사용하는 것입니다.
1. **파일 탐색기 열기:** 윈도우 `파일 탐색기`를 엽니다.
2. **네트워크 위치로 이동:** 파일 탐색기 주소 표시줄에 `\\wsl$` 또는 `\\wsl.localhost`를 입력하고 엔터를 누릅니다.
* 그러면 설치된 모든 WSL 리눅스 배포판(예: Ubuntu)이 네트워크 드라이브처럼 보일 것입니다.
* 원하는 배포판을 더블 클릭하면 해당 리눅스 시스템의 루트 파일 시스템에 접근할 수 있습니다.
* 예를 들어, Ubuntu 안의 홈 디렉터리에 접근하려면 `\\wsl.localhost\Ubuntu\home\<리눅스_사용자_이름>` 경로로 이동하면 됩니다.
3. **리눅스 터미널에서 파일 탐색기 열기:**
* WSL 리눅스 터미널에서 현재 디렉터리를 윈도우 파일 탐색기로 열고 싶다면, 해당 디렉터리에서 `explorer.exe .` 명령을 입력하면 됩니다. (마지막에 마침표를 잊지 마세요!) [4], [6].
**💡 중요 팁: 파일 저장 위치와 성능**
* **성능 최적화:** ROS 프로젝트 파일이나 빌드 관련 파일(예: catkin_ws, colcon_ws)은 **반드시 리눅스 파일 시스템 내부** (예: `/home/사용자이름/my_ros_project/`)에 저장하는 것이 좋습니다.
* **이유:** 윈도우 드라이브(`/mnt/c/` 등)에 ROS 프로젝트를 저장하고 리눅스에서 접근하면 입출력(I/O) 성능 저하가 발생하여 빌드 시간이나 시뮬레이션 속도 등이 현저히 느려질 수 있습니다 [4], [7].
* **윈도우에서 접근할 때:** 리눅스 내부에 저장된 파일이라도 `\\wsl.localhost\<distro_name>\...` 경로를 통해 윈도우 파일 탐색기에서 원활하게 접근하고 수정할 수 있습니다.
#### **B. WSL (리눅스)에서 윈도우 파일 접근하기**
WSL 리눅스 터미널에서 윈도우 드라이브는 `/mnt` 디렉터리 아래에 자동으로 마운트됩니다.
* 예시: 윈도우의 `C:` 드라이브는 `/mnt/c`로, `D:` 드라이브는 `/mnt/d`로 접근할 수 있습니다.
* 예시 경로: 윈도우의 `C:\Users\RootingforU\Documents` 폴더는 `/mnt/c/Users/RootingforU/Documents`가 됩니다.
* 명령어 예시: `cd /mnt/c/Users/RootingforU/Downloads`
### **2. 네트워크 설정 및 ROS 통신**
WSL2는 자체적인 가상 네트워크 인터페이스를 가지고 있어, 윈도우 호스트와 동일한 물리 네트워크를 공유하면서도 독립적인 IP 주소를 가집니다. ROS 통신에서는 **`ROS_MASTER_URI`**와 **`ROS_IP`** 환경 변수를 올바르게 설정하는 것이 핵심입니다.
#### **A. 윈도우와 WSL (리눅스) 간의 ROS 통신**
가장 일반적인 시나리오는 **WSL (리눅스) 내부에서 ROS Master와 대부분의 ROS 노드를 실행**하는 것입니다. 윈도우 쪽에서는 주로 시각화 도구(Rviz, rqt)나 다른 개발 도구를 사용할 수 있습니다.
**시나리오: ROS Master 및 대부분의 노드 -> WSL, 일부 도구 -> 윈도우**
1. **WSL (리눅스) 내부 설정:**
* 대부분의 경우, WSL 내부에서 ROS Master와 노드들이 통신할 때는 특별히 `ROS_MASTER_URI`나 `ROS_IP`를 설정할 필요가 없습니다. 기본적으로 `localhost`를 사용하여 통신하기 때문입니다.
* **`~/.bashrc`에 추가 (권장):**
```bash
# ROS 1 Noetic (예시)
source /opt/ros/noetic/setup.bash
# 당신의 작업 공간 (Catkin Workspace)
source ~/catkin_ws/devel/setup.bash
# 외부에서 이 WSL ROS Master에 접근해야 할 경우 (선택 사항)
# WSL의 현재 IP 주소를 얻습니다 (매 부팅 시 바뀔 수 있습니다)
# export WSL_IP=$(hostname -I | awk '{print $1}')
# export ROS_MASTER_URI=http://$WSL_IP:11311
# export ROS_IP=$WSL_IP
```
`export WSL_IP=$(hostname -I | awk '{print $1}')` 이 코드는 WSL의 현재 IP를 자동으로 변수에 저장해 줍니다. 이렇게 하면 매번 수동으로 IP를 찾지 않아도 됩니다. `hostname -I` 명령으로 현재 WSL의 IP를 확인할 수 있습니다.
2. **윈도우 (호스트 PC) 설정:**
* 윈도우에서 Rviz나 rqt 등 ROS 관련 GUI 도구를 사용하고 싶다면, 해당 윈도우 앱이 WSL 내의 ROS Master에 접근할 수 있도록 환경 변수를 설정해야 합니다.
* **WSL의 IP 주소 확인:** WSL 리눅스 터미널에서 다음 명령어로 현재 WSL의 IP 주소를 확인합니다.
```bash
hostname -I | awk '{print $1}'
```
(예: 172.xx.xx.xx)
* **윈도우 환경 변수 설정:** 윈도우 `제어판` -> `시스템` -> `고급 시스템 설정` -> `환경 변수`로 이동합니다.
* **시스템 변수** 또는 **사용자 변수**에 다음 두 가지를 새로 추가합니다:
* 변수 이름: `ROS_MASTER_URI`
* 변수 값: `http://[위에서_확인한_WSL_IP]:11311` (예: `http://172.xx.xx.xx:11311`)
* 변수 이름: `ROS_IP`
* 변수 값: `[윈도우_PC_의_IP_주소]` (cmd에서 `ipconfig`로 확인)
* **재부팅 또는 환경 변수 새로고침:** 환경 변수 변경 후에는 컴퓨터를 재부팅하거나, PowerShell/CMD 창을 닫았다가 다시 열어야 변경 사항이 적용됩니다.
**💡 중요 팁: WSL2의 동적 IP 주소 문제 해결**
WSL2의 IP 주소는 윈도우를 재부팅할 때마다 바뀔 수 있습니다 [1].
* **간단한 방법:** 윈도우에서 `ROS_MASTER_URI`를 설정할 때, 매번 WSL의 IP를 확인하여 업데이트해주는 수고가 필요할 수 있습니다.
* **더 나은 방법 (고급):**
* **리눅스 내부에서 ROS Master/Nodes만 실행:** 윈도우에서 ROS 관련 도구를 자주 사용하지 않는다면, 굳이 윈도우에 `ROS_MASTER_URI`를 설정할 필요 없이 모든 ROS 작업을 WSL 내에서 진행하는 것이 가장 깔끔합니다.
* **WSL2 고정 IP 설정:** 이는 약간 복잡할 수 있지만, 윈도우 작업 스케줄러와 배치 파일을 활용하여 WSL2에 고정 IP를 할당하는 방법이 있습니다 [9], [10]. (필요하시면 이 부분은 나중에 다시 자세히 안내해 드릴 수 있습니다.)
#### **B. 방화벽 설정**
* 윈도우 방화벽이 ROS 통신을 막을 수 있습니다. 만약 통신 문제가 발생하면, 윈도우 방화벽에서 ROS Master가 사용하는 포트(기본적으로 11311)에 대한 인바운드 규칙을 추가하여 허용해야 할 수도 있습니다.
이 방법들을 활용하시면 RootingforU님께서 윈도우 환경의 편리함과 리눅스 기반 ROS 개발의 강점을 동시에 누리실 수 있을 것입니다. 차근차근 따라해보시면서 궁금한 점이 생기면 언제든지 다시 질문해주세요. RootingforU님의 프로젝트에 큰 도움이 되기를 바랍니다!
참고 자료
[1] netmarble.engineering - WSL2 활용도를 높여주는 고정 IP 설정 (https://netmarble.engineering/wsl2-static-ip-scheduler-settings/)
[2] tech.cloud.nongshim.co.kr - [빌링] Windows에서 WSL(Linux 개발 환경) 구축하기 (https://tech.cloud.nongshim.co.kr/blog/billing/936/)
[3] cuffyluv.tistory.com - [Linux] Windows 11에서 WSL2 설치하고 VSCode 연동하기 (https://cuffyluv.tistory.com/245)
[4] coding-groot.tistory.com - [WSL1/WSL2] 홈 디렉터리 위치 :: WSL 홈으로 Windows 파일 ... (https://coding-groot.tistory.com/101)
[5] learn.microsoft.com - Windows 및 Linux 파일 시스템에서 작업 (https://learn.microsoft.com/ko-kr/windows/wsl/filesystems)
[6] To be Master - [wsl2] 파일 공유 ( Windows 10 <-> Ubuntu 20.04) - To be Master (https://tbmaster.tistory.com/117)
[7] 4ourfuture.tistory.com - WSL 환경에서 Windows와 리눅스 간의 명령어 공유하기 (https://4ourfuture.tistory.com/44)
[8] 세 번째 이야기 (같은 IP를 공유 ... - WSL 2의 네트워크 통신 방법 - 세 번째 이야기 (같은 IP를 공유 ... (https://m.blog.naver.com/techshare/223481071089)
[9] learn.microsoft.com - WSL을 사용하여 네트워크 애플리케이션 액세스 (https://learn.microsoft.com/ko-kr/windows/wsl/networking)
[10] 티스토리 - WSL2와 Windows에서 파일 접근하기 - 개발냥발 - 티스토리 (https://coding-nyan.tistory.com/155)
댓글 없음:
댓글 쓰기