아주 쉽게 푼 설명 (ELI5)
실습 1-10: 원격 개발환경 구축
# firefox
# 리눅스에서 _ 가상환경 설치- 시연 ㅡ
제공해주신 이미지는 로봇이나 자율주행 차량 등에서 사용되는 SLAM(Simultaneous Localization and Mapping, 동시 위치추정 및 지도작성) 기술 중, 특히 "Cartographer"라는 고급 시스템의 구성 흐름도입니다. 이를 아주 쉽게, 초등학생에게 설명하듯 풀어드리겠습니다.
---
### 아주 쉽게 푼 설명 (ELI5)
1. **센서가 주변을 봐요**
로봇이 주변을 알기 위해 여러 센서들을 사용해요. 예를 들면 레이저로 주변 물체와의 거리(몇 미터 떨어져 있는지)를 재는 센서와, 로봇이 얼마나 움직였는지 알려주는 센서(움직임 센서, IMU 데이터)가 있어요.
2. **센서 데이터 정리하기**
센서가 보내주는 정보는 아주 많기 때문에, 컴퓨터가 이해하기 쉽도록 쓸모있는 정보만 골라내요. 마치 큰 퍼즐 조각 중 중요한 것만 남기는 것처럼요.
3. **로봇 위치 알아내기**
로봇이 지금 어디 있는지, 어느 방향을 보고 있는지 예측하는 역할이 있어요. 이걸 'Pose Extrapolator'라고 부르고, 보조로 IMU(움직임 데이터)를 사용해 더 정확하게 위치를 추측해요.
• ROS는 유클리드 좌표계로 구성
- 오일러 좌표 : X, y, z, roll, pitch, yaw
- Quaternion 좌표 x, y, z, w (주로 로봇의 heading 정보 출력에 사용)
- URDF(Unified Robot Description Format)를 통해 각 조인트별
연결 정보 및 좌표계 설정 / UDRF에 정의된 링크 연결 정보가 우선
- 로봇 모델, 경로, 레이저 스캔 데이터 등 다양한 시각 정보를 3차원 공간에 표시합니다.
- 선, 큐브, 점 등 여러 종류의 마커를 생성하고 표시할 수 있어, 로봇의 상태나 경로 등을 직관적으로 표현할 수 있습니다.
- 카메라 데이터, 라이다 데이터 등 로봇 센서에서 수집된 다양한 데이터를 시각적으로 보여줍니다.
- URDF 파일을 통해 로봇의 형태와 각 부위의 움직임을 시각적으로 확인할 수 있습니다.
- 로봇의 움직임, 센서 데이터 처리, 경로 계획 등의 결과를 시각적으로 검증하고 디버깅하는 데 사용됩니다.
- 개발 중인 알고리즘이 로봇 환경에서 어떻게 동작하는지 3차원 공간에서 확인할 수 있습니다.
- 다양한 센서 데이터가 올바르게 로봇에 전달되고 처리되는지 시각적으로 확인합니다.
4. **주변 환경과 데이터 맞추기**
로봇이 센서로 본 주변 상황(포인트 클라우드)을 이미 알고 있는 지도와 비교해서, 현재 위치를 정확하게 맞춰요. 이것을 'Scan Matching'이라고 해요.
5. **움직임 필터**
만약 로봇이 서 있거나 거의 움직이지 않으면, 그 데이터는 무시해요. 움직임이 있을 때만 지도를 갱신하는 거예요.
6. **지도 만들기**
움직임이 감지되면, 새로운 환경 정보를 지도에 업데이트해요. 이 지도가 점점 커지고 정교해져요.
7. **전역 위치 보정**
로봇이 돌아온 길을 다시 살펴보며 오류가 생겼는지 확인하고, 전체 경로를 더 정확히 보정해요. 이렇게 하면 위치가 더 정확해져요.---
### 요약하자면,
- 로봇이 자신의 위치와 주변 환경을 센서로 살피고,
- 중요한 정보만 걸러서 현재 위치를 계산하고,
- 움직임을 감지해서 지도에 반영하고,
- 전체 경로를 주기적으로 다시 점검하며 오류를 바로잡는 과정을 하는 시스템입니다.
이런 기술 덕분에 자율주행 차량이나 로봇이 복잡한 환경에서도 정확하게 움직일 수 있습니다.
SLAM(Simultaneous Localization and Mapping, 동시 위치추정 및 지도작성)은 자율주행 로봇이 주변 환경을 이해하고, 동시에 자신의 정확한 위치를 파악하며 지도를 만들어 가는 핵심 기술입니다. 이 기술이 자율주행 로봇에서 어떻게 작동하는지 단계별로 설명드리겠습니다.
---
### 1. 센서로 주변 환경과 로봇 상태 데이터 수집
로봇은 레이저 거리 센서(LiDAR), 초음파 센서 등으로 주변 물체까지의 거리(포인트 클라우드 데이터)를 수집하고, 관성 측정 장치(IMU)로 로봇의 가속도와 회전 속도를 측정합니다. 또한 바퀴의 회전 정도를 나타내는 오도메트리 데이터도 함께 활용됩니다.
### 2. 센서 데이터 전처리 및 필터링
수집한 데이터는 노이즈가 많고 양이 방대하므로, 중요한 정보만 남기도록 ‘복셀 필터’ 같은 공간 필터링 기법으로 효율적으로 줄입니다. 이렇게 하면 계산량이 줄고 처리 속도가 빨라집니다.
### 3. 로봇 현재 위치 예측(Pose Estimation)
과거 위치와 센서 데이터(IMU, 오도메트리)를 기반으로 로봇의 현재 위치와 자세를 추정합니다. 이 과정에서 움직임 데이터를 세밀히 추적하여 다음 위치를 예상합니다.
### 4. 주변 환경과 위치 보정(Scan Matching)
현재 센서 데이터와 이전에 만든 지도 데이터를 비교하여 로봇 위치를 정밀하게 보정합니다. 레이저 스캔 점들이 지도상에서 얼마나 잘 맞는지 계산해서 위치를 조정하는 과정입니다.
### 5. 움직임 감지 및 지도 업데이트
로봇의 움직임이 충분하지 않으면(예: 정지 상태), 위치 정보나 지도 갱신을 하지 않고 대기합니다. 움직임이 감지되면, 새로운 센서 데이터가 반영되어 환경 지도가 점차 완성됩니다.
### 6. 전역 위치 보정(Global SLAM)
로봇이 돌아다니면서 쌓인 여러 위치 정보들을 바탕으로 전체 경로 오류를 보정합니다. 이를 통해 시간이 지나도 위치 오차가 누적되지 않고, 지도도 더 정확하게 완성됩니다.
---
### 요약
SLAM 기술은 자율주행 로봇이
- 센서로 주변 환경을 스캔하고,
- 자신의 위치를 예측 및 보정하며,
- 움직임이 있을 때만 지도를 업데이트하고,
- 주기적으로 전체 위치 오류를 조정하면서
실시간으로 정확한 위치 추정과 지도를 만들어 가는 기술입니다.
이 덕분에 자율주행 로봇은 낯선 환경에서도 스스로 위치를 파악하고, 장애물을 피해 안전하게 이동할 수 있습니다.
필요하시다면 SLAM 구현 예제나 기술별 자세한 설명도 더 도와드리겠습니다.
자율주행 로봇이 SLAM 기술을 활용해 장애물을 인식하는 과정을 단계별로 설명드리겠습니다.
---
### 1. 주변 환경 정보 수집
- 레이저 스캔(LiDAR), 초음파 센서, 카메라 등 다양한 센서들이 로봇 주변의 거리와 형태 정보를 실시간으로 측정합니다.
- 이 데이터는 포인트 클라우드(point cloud)라는 3D 점들의 집합 형태로 표현됩니다.
### 2. 데이터 전처리 및 필터링
- 센서에서 수집된 데이터는 노이즈가 많고 양이 방대하기 때문에, 불필요한 점들을 걸러내고 중요한 정보만 추출하는 ‘복셀 필터’ 같은 처리 과정을 거칩니다.
- 이렇게 하면 로봇이 연산 부담 없이 핵심 정보만 가지고 판단할 수 있습니다.
### 3. 로봇 위치 추정과 맵 작성
- SLAM 시스템이 로봇의 위치를 스마트하게 예상하면서 현재 센서 데이터와 기존 지도를 비교합니다.
- 이 과정에서 장애물에 해당하는 점들이 지도에 반영됩니다.
### 4. 장애물 인식
- 새로운 센서 데이터에서 이전 지도에 없던 점들이 발견되면, 이 점들은 장애물로 간주됩니다.
- 로봇은 주변 환경에 고정된 장애물인지, 움직이는 물체인지 판단하며, 움직임이 적거나 없는 점들은 장애물로 인식해 피합니다.
### 5. 실시간 지도 업데이트 및 경로 계획
- 장애물 위치가 지도에 반영되어 로봇이 이를 피해 안전하게 움직일 경로를 실시간으로 다시 계산합니다.
---
### 요약
SLAM은 로봇이 센서로 주변을 3D로 스캔해 점들의 집합을 만들고, 이를 필터링하며 장애물 위치를 파악하여, 지도에 반영하는 기술입니다. 이를 통해 자율주행 로봇은 실제 장애물을 정확히 인식하고 피할 수 있게 됩니다.
필요하시면 특정 센서 종류나 SLAM 내부 알고리즘 관련 보다 자세한 설명도 드릴 수 있습니다.
SLAM 기술에 대해 특정 센서 종류와 내부에서 주로 사용되는 알고리즘을 단계별로 상세히 설명드리겠습니다.
SLAM 시스템에서 센서 데이터 전처리 과정은 SLAM의 정확도와 효율성을 결정하는 매우 중요한 단계입니다. 원본 센서 데이터는 잡음(노이즈)이 많거나, 양이 너무 방대하거나, 불필요한 정보가 포함되어 있는 경우가 많기 때문에, 이를 정제하여 SLAM 알고리즘이 더 효율적이고 정확하게 작동하도록 만드는 것이 목표입니다.
주요 전처리 방식들은 다음과 같습니다.
### 1. 데이터 필터링 (Filtering)
* **복셀 그리드 필터링 (Voxel Grid Filtering):**
* **목표:** 3D 포인트 클라우드 데이터의 밀도를 줄이고 노이즈를 제거하여 계산량을 크게 감소시킵니다.
* **방법:** 3D 공간을 작은 정육면체(복셀)들로 나눕니다. 각 복셀 내부에 존재하는 모든 포인트들 중에서 대표 포인트(예: 복셀 내 포인트들의 평균 지점) 하나만 남기거나, 가장 중심에 있는 포인트를 선택합니다.
* **장점:** 데이터 크기 감소, 계산 효율성 증대, 약간의 노이즈 제거 효과.
* **단점:** 세부적인 형상 정보가 손실될 수 있습니다.
* **통계적 이상치 제거 (Statistical Outlier Removal, SOR):**
* **목표:** 데이터 내의 개별적인 잡음(아웃라이어)을 제거하여 데이터의 품질을 높입니다.
* **방법:** 각 포인트와 그 주변 이웃 포인트들의 평균 거리를 계산합니다. 이 평균 거리에서 크게 벗어나는 포인트들을 잡음으로 간주하여 제거합니다.
* **장점:** 스파이크성 노이즈나 고립된 불필요한 포인트 제거에 효과적입니다.
* **패스스루 필터링 (Pass-through Filtering):**
* **목표:** 특정 영역(ROI, Region of Interest) 외의 데이터를 제거하여 관심 영역에 집중합니다.
* **방법:** 특정 축(X, Y, Z 등)을 기준으로 최소/최대 값을 설정하여 그 범위를 벗어나는 포인트들을 제거합니다. 예를 들어, 로봇 근처 0.5m ~ 10m 이내의 데이터만 남기거나, 로봇 위쪽의 불필요한 데이터(천장 등)를 제거할 수 있습니다.
* **장점:** 불필요한 외부 환경 데이터를 제거하여 SLAM 알고리즘의 연산 부담을 줄입니다.
### 2. 다운샘플링 (Downsampling)
* **목표:** 전체 데이터 포인트 수를 줄여 처리 속도를 향상시키고 메모리 사용량을 최적화합니다.
* **방법:** 복셀 그리드 필터링과 유사하게 공간을 분할하여 대표 포인트만 남기는 방식이 주로 사용됩니다.
* **장점:** SLAM 알고리즘의 실시간성을 확보하는 데 필수적입니다.
### 3. 좌표 변환 및 정렬 (Coordinate Transformation and Alignment)
* **목표:** 서로 다른 센서에서 수집된 데이터를 동일한 좌표계로 통일하여 통합적으로 분석할 수 있게 합니다.
* **방법:** 각 센서의 고유한 좌표계를 로봇의 중앙 좌표계나 특정 기준 좌표계로 변환합니다. 이때, 센서의 내부 파라미터(intrinsic parameter)와 외부 파라미터(extrinsic parameter)를 이용합니다.
* **장점:** 여러 센서 데이터를 융합하여 더 정확한 환경 이해를 가능하게 합니다.
### 4. 시간 동기화 (Time Synchronization)
* **목표:** 서로 다른 센서에서 데이터가 수집되는 시점을 정확히 일치시킵니다.
* **방법:** 하드웨어 또는 소프트웨어적으로 센서 데이터를 타임 스탬프(timestamp) 기준으로 동기화합니다.
* **장점:** 센서 데이터가 다른 시간에 측정되어 발생하는 오류를 방지하고, 데이터 융합의 정확도를 높입니다.
### 5. 특징점 추출 (Feature Extraction) - 주로 카메라 기반 SLAM에서 활용
* **목표:** 이미지나 3D 데이터에서 환경을 대표할 수 있는 유니크한 특징점(corner, blob 등)을 찾아냅니다.
* **방법:** SIFT, SURF, ORB 같은 알고리즘을 사용하여 이미지의 특징점을 추출하고, 이를 추적하여 로봇의 움직임을 파악하거나 맵을 구성합니다.
* **장점:** 적은 데이터로 환경의 중요한 정보를 효과적으로 표현하고, 반복적인 패턴이나 빈 영역에서 발생하는 문제를 줄일 수 있습니다.
---
이러한 전처리 과정을 통해 SLAM 시스템은 노이즈 없이 정제된 데이터를 받아 로봇의 위치 추정(Localization)과 지도 작성(Mapping)을 더욱 견고하고 효율적으로 수행할 수 있게 됩니다.
---
### 1. SLAM에서 자주 사용하는 센서 종류
| 센서 종류 | 역할 및 특징 |
|----------------|----------------------------------------------------------------|
| LiDAR (레이저 거리 센서) | 레이저 빔으로 주변 물체까지의 거리를 매우 정확하게 측정해 고해상도 3D 점군(Point Cloud) 생성 |
| RGB-D 카메라 | 컬러 영상과 깊이(depth) 정보를 동시에 제공, 실내 환경에서 주로 사용 |
| IMU (관성 측정 장치) | 가속도와 각속도 정보를 제공, 로봇의 자세 변화와 움직임 추정을 보조 |
| 초음파 센서 | 상대적으로 저렴하고 근거리 장애물 감지에 유리, 주로 보조 센서로 활용 |
| 오도메트리 센서 | 바퀴 회전 등을 통해 이동 거리와 방향을 추정, 상대적 위치변화 측정 |
---
### 2. SLAM 내부 주요 알고리즘과 역할
| 알고리즘 명 | 설명 및 기능 |
|--------------------|------------------------------------------------------------------------------------------------|
| **복셀 필터 (Voxel Filter)** | 3D 공간을 일정 크기 격자로 나누어 점군 데이터를 간소화하여 연산량 감소와 노이즈 제거 |
| **포즈 추정 (Pose Estimation)** | 센서 데이터 및 IMU, 오도메트리 정보를 결합해 로봇의 위치와 자세를 예측 |
| **스캔 매칭 (Scan Matching)** | 새로운 센서 데이터와 기존 지도 데이터를 비교하여 위치 오차를 보정, 예를 들어 Ceres Solver 기반 최적화 사용 |
| **모션 필터 (Motion Filter)** | 로봇이 거의 움직이지 않을 때 불필요한 위치 업데이트를 차단하여 효율성 증대 |
| **서브맵 관리 (Submap Management)** | 지도를 작은 부분 단위로 분할해 변화가 있을 때 해당 부분만 갱신하여 전체 계산량 감소 |
| **전역 최적화 (Global Pose Graph Optimization)** | 전체 경로의 누적 오차를 줄이기 위해 그래프 이론 기반으로 전체 위치를 재조정, 루프 클로저(loop closure) 포함|
---
### 3. SLAM 작동 흐름 요약
- 센서(LiDAR, IMU 등)에서 받은 데이터는 복셀 필터로 줄인 후 포즈 추정기로 현재 위치를 계산합니다.
- 스캔 매칭 알고리즘으로 지도와 센서 데이터를 비교해 위치를 정밀하게 보정합니다.
- 움직임이 적으면 모션 필터로 쓸데없는 위치 정보 업데이트를 생략해 효율을 높입니다.
- 지도는 서브맵 단위로 나누어 자주 바뀌는 부분만 갱신하며, 시간이 지나면 전역 최적화로 전체 경로 오류를 바로잡습니다.
---
필요하시면 특정 센서별 장단점, 알고리즘별 수학적 원리나 코드 예제도 함께 설명해드릴 수 있습니다. SLAM 시스템 구현이나 프로젝트 진행 중 궁금한 점 있으시면 편하게 질문해 주세요.
001. ROS 원격 환경을 위한 설정 변경
. 아래 명령어를 통해서 Jetson 디바이스와 Host PC(Virtual Box + Ubuntu)의 IP주소를
확인한다.
$ ifconfig
(참고: ‘ifconfig’ 실행시, 해당 파일을 찾을 수 없다는 error가 출력되면,
“$ sudo apt install net-tools”명령어를 통해서 해당 도구를 설치하고, 다시 실행한다.
“$ sudo apt install net-tools”실행시 “waiting for cache lock could not get lock
/var/lib/dpkg/lock-frontend~” 라는 에러가 발생하면 아래 명령어를 실행하고 다시
설치해 본다.
$ sudo killall apt apt-get
)
결과 예시:
002. Visual Studio Code 설치
Visual Studio Code는 원격으로 소스 코드를 수정하고, 파일 복사, 다운로드하는데 매우
유용하다. Host PC(Virtual Box + Ubuntu)에 설치하여 원격(ssh)으로 Jetson 디바이스의
ROS관련 주요 소스 코드들을 수정하는 목적으로 활용한다.
1. Host PC(Virtual Box + Ubuntu)의 인터넷 브라우저를 실행하고, 주소창에 아래 site를
입력 후, ubuntu용 Visual Studio Code 설치 파일을 다운로드 받는다. (ver 1.69)
https://code.visualstudio.com/updates/v1_69
003. Visual Studio Code의 ‘SSH extension’ 설치
1. Visual Studio Code가 실행되면 아래와 같은 순서로 ‘SSH extension’을 설치한다.
① 왼쪽 메뉴에서 “Extension” 클릭
② 입력창에 “SSH”를 입력하고 “Remote-SSH” extension선택
③ “install” 버튼 클릭
내가 하는 분야/연구 소개
그래서 나는 어떤 게 필요해서 이 과목을 듣고자 한다.
어떤 것을 그릴지 / 어떻게 표현할 지 계획 중에 있다.
-----------
ppt 발표:
---------------------------
]
# ROS 패키지 서버 등록
$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
# ROS 패키지 서버 키 등록
$ sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
# 패키지 서버 업데이트
$ sudo apt update
# ROS Noetic 설치
$ sudo apt install ros-noetic-desktop-full
https://jstar0525.tistory.com/235
출처 : 구글 Cartographer SLAM
https://google-cartographer-ros.readthedocs.io/en/latest/
https://google-cartographer-ros.readthedocs.io/en/latest/
- 로봇이 이동하면서 주변 환경을 센서로 인식하고, 이 정보를 바탕으로 지도(Map)를 생성하며, 동시에 지도 상에서 로봇의 현재 위치(Localization)를 파악하는 기술입니다.
- 2차원 및 3차원 공간 모두에서 지도를 생성하고 로봇 위치를 추정할 수 있습니다.
- 라이다, IMU(관성 측정 장치) 등 다양한 센서 데이터를 통합하여 SLAM 성능을 높일 수 있습니다.
- 정밀한 스캔 매칭(Scan Matching)을 위해 Ceres Solver 라이브러리를 활용하여 2D 및 3D 환경에서 높은 정확도를 구현합니다.
- 자율주행 로봇, 드론 등이 처음 보는 환경에서 지도를 만들고 스스로 이동하는 데 활용됩니다.
- GPS가 없는 실내 환경에서 로봇이나 모바일 장치의 위치를 정밀하게 추정하는 데 사용됩니다.
- 구글 카토그래퍼는 로봇 운영 체제(ROS) 환경에서 널리 사용되는 오픈소스 SLAM 알고리즘으로, ROS Cartographer 페이지에서 설치 및 사용법에 대한 상세한 문서를 제공합니다.
댓글 없음:
댓글 쓰기