ROS2 이론 정리

ROS2 SLAM에 대한 모든 것

dawon-project 2025. 1. 7. 16:02

Geometry(기하학) : 공간에 있는 도형의 형상 및 크기를 나타내는 것

 

<길을 찾기 위한 필요 요소>

1. 위치 : 로봇의 위치 계측, 추정하는 기능

            -GPS / UWB / 추측 항법 / 데드레커닝 계산(선속도, 각속도) / Runge-kutta 공식

2. 센싱 : 벽, 물체 등의 장애물의 계측하는 기능

            - 거리 센서(Lidar) / 비전 센서 / Depth camera(깊이 카메라)

3. 지도 : 길과 장애물 정보가 담긴 지도

            - SLAM

4. 경로 : 목적지까지 최적 경로를 계산하고 주행하는 기능

            - 내비게이션 / 위치 추정 / 경로 탐색 및 계획 / Dynamic Window Approach / A*
              / 포텐셜 장 / 파티클 필터 / 그래프

위치, 센싱, 지도, 경로는 ROS의 메세지로 전송될 수 있다.

 

Odometry : (차의) 주행 거리 측정

     How? 모터에 달린 엔코더를 통해 거리를 측정하고, 엔코더 값과 거리를 추정하는 방법

             즉, 바퀴의 각도와 거리를 이용하여 위치 추정   -> wheel odometry
        => 굳이 모터가 아니더라도 IMU 또는 카메라 등의 센서들이 될 수 있다. 
        => 시간에 따른 위치 변화를 추정하기 위한 모션 센서의 데이터를 사용하는 것
        => 출발 지점으로부터 얼마나 떨어져 있나를 파악하는 상대적인 위치를 추정하는 것
        => 센서의 위치가 중요 -> 센서로부터 측정되는 값을 기준으로 하므로 중요 -> TF 정의

 

Visual odometry : 단순하게 매 프레임(한 장면)마다 나의 상대적 위치를 계산해 누적함으로써 시작점으로부터 현재 나의 위치를 계산하는 방식
       => 이미지에 노이즈가 끼거나 실시간으로 계산하면서 알고리즘이 유사 값을 계산하면서 위치 추정에 오차가 생기기 때문에 조심해함
       => locally consistent 즉, 근접 거리에서만 정확하다     
       => 카메라 이용     
       => 카메라 이용(*카메라의 좌표계는 x축, y축 시작 점이 다르다.)

 

<ros2의 odom frame 구조>

기본 TF 구조

크기 순 : earth > map > odom > basePlink

base_link : URDF를 통해 RVIZ 상에서 제작한 로봇에 부착된 센서들의 기본 위치 모터의 부착 위치 등
              ex) 로봇의 중심이나 차체의 아래

odom : 그렇게 로봇에 부착된 각각 센서들을 통해 들어오는 데이터들의 이동 경로를 시간에 따라 누적한 결과를 나타냄

map : 각각의 odom들을 합쳐서 정적 지도를 나타내는 환경 지도

earth : map들을 합쳐서 전체 건물 지도를 만드는 등 지구 기준 좌표계    
     -> 여러 대의 로봇들이 서로 다른 map 위에서 존재할 수 있게 해줌

 

<조건> 

1. map은 여러 개의 odom을 가질 수 있다.

2. odom은 단 하나의 map을 가질 수 있다.

 

<예시>

ROS2 의 Odom frame에서 base_link가 IMU, 라이다, 모터 등으로 이루어 지며 하나 하나가 각각의 odom으로 다시 기준 좌표계로 맞춰주고, 그 모든 odom들을 다 총합해서 만든 것이 하나의 map을 이루고, 그 하나의 map이 1층이라면 1층 2층 3층의 map들이 다 합쳐져서 earth라는 건물 지도를 구성하게 됨

 

SLAM(Simultaneous Localization and Mappint) : 로봇 위치 추정 및 지도 생성을 위한 다양한 측면을 포함하는 개념이며, 알고리즘, 패키지, 프레임워크 등의 다양한 형태로 구현된 기술

=> 동시적 위치 추정 및 지도 작성

 

이렇게 SLAM을 글로 표현하면 잘 와닿지 않을 것입니다. 그래서 한가지의 예시를 들어보겠습니다.

만약 자신이 무인도에 떨어졌다고 가정을 해봅니다.

그랬을때 무인도에서 지도를 만들고 그 지도를 사용하기 위해서는 4가지가 필요합니다.

1.  " 내가 지금 어디에 있고, 이곳 주변은 어떻게 생겼는지"   
       => SLAM 기술은 실시간으로 자신의 위치 추정과 (Localization) 주변 지도 작성(Mapping)을 할 수 있다.

2.  " 처음 눈을 뜬 장소를 기점으로 나의 위치는 어디인지 추정"   
       => SLAM 프로그램이 시작한 시점에서부터 지속적으로 자신의 위치 추정을 할 수 있다.
                               => particle 또는 GPS를 통해

3.  " 내가 현재 있는 위치가 이전에 왔던 지점인가?를 인지" 
       => 최신 SLAM 기술들에 적용되는 Loop Closure(원위치로 돌아왔을때 인지하기 위한 기술)라는 기능을 통해 나의 현재 위치가 이전에 와본적 있는 장소라는 것을 인지하고 자신의 위치에 대한 오차 수정을 할 수 있다.

4.  " 섬 전체의 지도" + " 어떤 곳을 우리가 갈 수 있는지 파악" 
        =>SLAM 프로그램이 종료되는 시점에서는 잘 그려진 지도와 나의 지난 위치들을 얻어낼 수 있다.

이렇게 4가지 정보가 있어야 지도를 그리고 사용할 수 있습니다.

그리고 SLAM은 이제 내가 무인도에 떨어진 것처럼 로봇이 무인도에 떨어졌을때 로봇이 움직일 수 있는 곳이 어디이며, 지금 로봇이 어디에 있는지를 알아내기 위한 기술이라고 생각하면 이해하기 쉬울 것 같습니다.

 

**필자의 경우 실내 쇼핑 로봇 프로젝트를 진행 할때 SLAM 패키지 중 하나인 Cartographer를 이용해서 2d Lidar를 통해서 Mapping 즉, 지도를 생성 후에 그 지도에서 로봇의 실시간 위치를 파악하기 위해서 UWB 값 1개와 2d lidar와 카메라를 센서 퓨전한 화면을 통해서 객체 인식이 된 물체와의 거리 값 2개 총 3개의 데이터들을 가지고 삼변 측량 기법을 적용하여 실내에서 실시간 위치 추정

즉, Localization을 구현해서 프로젝트를 진행했었습니다.

추후에 자세한 내용은 블로그로 작성하겠습니다.

 

 

 

참고 블로그 1 : https://cs-kookmin-club.tistory.com/323 

 

[2024 ROS 스터디]정주광 #4주차 -SLAM과 내비게이션

Chapter 11) SLAM(Simultneous Localization And Mapping) & 내비게이션 SLAM : 동시적 위치 추정 및 지도 작성 Navigation : 차량 자동 항법 장치 길을 찾기위한 필요요소 - 위치 : 로봇의 위치 계측/추정하는 기능 - 센

cs-kookmin-club.tistory.com

참고 블로그 2 : https://cvlearnblog.notion.site/SLAM-f16a75f894ca48d3aa851bca99ec7cce 

 

SLAM이란? | Notion

목차

cvlearnblog.notion.site