11-14 12:54
Notice
Recent Posts
Recent Comments
관리 메뉴

BAN2ARU

[Humble/Nav2] 튜토리얼 3. Navigation Concepts - 4) State Estimation 본문

Study/Nav2

[Humble/Nav2] 튜토리얼 3. Navigation Concepts - 4) State Estimation

밴나루 2024. 10. 3. 17:23
반응형

해당 글은 공식페이지를 참조하여 작성함.

 

이전 글 목록

State Estimation

로봇이 주어진 환경에서 정확한 위치를 파악하고, 원하는 목표 지점으로 이동하기 위해서는 자신의 위치와 자세를 정확히 추정해야한다. 이를 위해서는 map → odom과 odom → base_link 라는 두 가지 주요 좌표 변환이 필요하다.

Standards

REP는 ROS에서 사용하는 일종의 규칙이나 권고사항을 설명하는 문서이며, REP-105좌표계 프레임 정의변환 규칙에 대한 표준을 정의한다. 이 표준은 ROS 네비게이션 시스템, SLAM, 오도메트리, 센서 융합 등을 올바르게 구현하기 위해 필요한 좌표계 변환 구조를 정의한다.

REP-105에 따르면, ROS 시스템을 사용할 때 최소한 다음과 같은 TF 트리 구조를 갖춰야 한다.

map -> odom -> base_link -> [sensor frames]

# map : 전역 좌표계로, 로봇의 global 위치를 나타내는 좌표계임
# odom : 로봇의 단기적인 위치를 나타내는 local 좌표계로, 로봇이 출발 지점에서 현재 위치까지 얼마나 이동했는지를 나타냄
# base_link : 로봇 본체의 중심을 나타내는 좌표계로, 좌표계에 대한 로봇의 현재 위치와 자세를 나타냄
# [sensor frames] : base_link에 장착된 센서 각각의 좌표계 프레임을 정의함

TF2는 ROS에서 사용하는 time-variant 라이브러리로, 시간에 따라 변하는 동적 변환(예: 로봇의 이동, 센서 움직임)을 관리하고, 여러 좌표계간의 변환을 계산하는 데 사용된다. ROS 시스템에서는 로봇이 계속 이동하기 때문에, 시간에 따른 좌표계 변환이 중요하다(시간동기화; Time synchronization). TF2에서는 map → odom, odom → base_link 및 기타 센서 프레임 간의 변환을 관리한다.

map → odom 변환은 로봇의 전역 위치를 나타내는 변환이며, 로봇이 전체 지도(map)에서 어디에 위치해 있는지를 나타낸다. 이 변환은 전역 좌표계에서 로봇의 위치를 지속적으로 추적하고, odometry의 누적 오차를 보정하는 역할을 하여, 만약 map → odom 변환이 없다면, 로봇의 위치가 장기적으로 부정확해질 수 있다. odom → base_link  변환은 로봇의 로컬 위치와 자세를 추적하여, 로봇이 출발점(odom의 원점)에서 얼마나 이동했고, 어떤 방향으로 회전했는지를 나타낸다. odom → base_link  변환은 단기적으로 정확한 위치 추적을 제공하지만 시간이 지남에 따라 누적오차가 발생할 수 있어서, map → odom 변환을 사용하여 odom 프레임의 위치를 주기적으로 보정해주어야 한다. base_link를 기준으로 정의된 나머지 변환들은 보통 정적 변환(static transform)이며, 이러한 변환은 로봇의 URDF(Unified Robot Description Format) 파일에 설정된다.

Global Positioning : Localization and SLAM

전역 위치 추정 시스템(Global Positioning System)로봇의 위치를 전체 환경(map)에서 추적하고, 이를 로컬 좌표계(odom)와 연결하는 역할을 한다. 이를 위해 map → odom 변환을 제공하여, 로봇이 전역 환경에서 어디에 위치하고 있는지 정확한 정보를 제공한다. 이러한 Global Positioning System에는 GPS, SLAM, Motion Capture 같은 기술들이 포함된다.

ROS에서는 두 가지의 주요한 주요 위치 추정 알고리즘이 있다. AMCL (Adaptive Monte Carlo Localization)은 정적인 지도(static map)에서 로봇의 위치를 추정하기위해 사용되며, particle filter 기반의 localization 방법으로 로봇이 이동할때 particle을 사용하여 현재 위치를 추정하고, 지도와 비교하여 가장 가능성이 높은 위치를 계산한다. SLAM Toolbox는 ROS에서 제공하는 SLAM 솔루션으로, 로봇이 주행하면서 지도를 작성하고 이 지도상에서의 현재 위치를 추정할 수 있다. 이를 통해 map 좌표계를 생성하고, map → odom 변환을 업데이트하여 로봇이 전체 환경에서 자신의 위치를 지속적으로 추적한다.

위치 추정 시스템(GPS, SLAM, Motion Capture 등)은 단순히 map → odom 변환만 제공하는 것이 아니라, 위치 정보(Position topics), 지도 데이터(Maps), 메타데이터(Metadata) 등의 다양한 출력 데이터를 생성할 수 있다. 하지만 이러한 데이터가 유효하려면, 반드시 map → odom 변환이 올바르게 제공되어야 한다. map → odom 변환은 모든 전역 위치 추정의 기준이므로 이 변환이 제대로 설정되지 않으면, 로봇의 위치가 전역 좌표계에서 잘못된 위치로 해석될 수 있다. ROS에서는 여러 위치 추정 방법을 동시에 사용하여 더 정확한 위치 추정을 할 수 있도록 한다. 이를 위해 robot localization 패키지를 사용하여 다양한 위치 추정 방법의 데이터를 융합할 수 있다. 이를 통해 여러 위치 추정 source가 함께 사용될 때 각 위치 추정 방법의 장점을 살리고, 정확도를 높여 로봇의 위치 추정이 더 안정적이 되도록 한다.

Odometry

Odometry 시스템은 로봇의 이동 경로와 자세를 지속적으로 추적하여, 로봇이 출발점(odom의 원점)에서 현재 위치(base_link)까지 어떻게 이동했는지를 나타낸다. odometry는 odom → base_link 변환을 제공하며, 이를 통해 로컬 위치 추적(local position tracking)이 가능해져 로봇의 단기적인 이동경로를 파악할 수 있다. Odometry 데이터는 여러 종류의 센서로부터 얻을 수 있다. 각각의 센서는 로봇의 이동 경로와 자세 변화를 추적하는 데 사용되며, 특정 상황에서는 여러 센서를 조합하여 더 정확한 odometry를 계산할 수 있다. 이러한 센서는 Wheel Encoders, IMU, VIO, LiDAR, RADAR 등이 있다. 이에 관한 자세한 설명은 아래 접은글을 참조하자.

- 주요 센서의 예시

더보기
  1. Wheel Encoder
    • 바퀴의 회전량을 측정하여 이동량을 계산하여 각 바퀴의 회전 수와 방향을 측정하여 로봇이 앞으로 얼마나 이동했는지 혹은 얼마나 회전했는지를 추정함. 시간이 지남에 따라 누적 오차(Drift)가 발생할 수 있음
  2. IMU (Inertial Measurement Unit)
    • 가속도와 각속도를 측정하여 로봇의 회전 및 가속을 추적하여, 로봇이 갑작스럽게 회전하거나 기울어졌을 때 변화를 감지하여 로봇의 자세(orientation)을 보완할 수 있음
  3. 비전 기반 오도메트리(VIO, Visual Inertial Odometry)
    • 카메라 데이터를 사용하여 로봇의 이동 경로와 자세 변화를 추적함. 카메라 이미지에서 특징점을 추적하여 로봇이 어떻게 이동했는지 계산하여 IMU 데이터와 결합하여 더 정확한 odometry를 제공함
  4. 라이다 기반 오도메트리 (LiDAR)
    • 라이다 센서를 사용하여 주변 환경의 특징을 추적하고, 로봇의 이동 경로를 계산함. 라이다 기반 오도메트리는 주로 SLAM과 결합하여 로컬 위치 추정을 보완함
  5. 레이더 기반 오도메트리 (RADAR)
    • 레이더 센서를 사용하여 장애물의 위치와 이동 경로를 추적하여 로봇의 위치 변화를 계산함. 주로 실외 환경에서 사용되며, 가시성이 낮은 환경(비, 안개 등)에서도 안정적으로 동작함

ROS에서는 robot localization 패키지를 사용하여 다양한 센서 데이터를 fusion하여 하나의 일관된 위치 추정 결과를 제공할 수 있다. 여러 센서 데이터를 결합하여 odom → base_link 변환이 시간에 따라 일관되고 부드럽게 갱신 되도록 한다. 또한 fusion하여 사용함으로써, 각 센서간의 고유 오차와 제한 사항과 같은 단점을 보완한다.

Dead Reckoning은 현재 위치를 기반으로 이전의 움직임을 추적하여 다음 위치를 추정하는 방법이다. Odometry는 주로 dead reckoning을 사용하여 로봇이 이동할 때 현재 위치를 지속적으로 계산한다. 그러나 오랜 시간동안 dead reckoning만 사용하면 누적 오차가 발생하므로, 주기적으로 전역 위치 시스템(GPS, SLAM 등)에서 제공하는 정확한 위치 업데이트가 필요하다. 이를 통해, odometry의 단기적인 위치 추정과 전역 위치 시스템의 장기적인 위치 추정을 결합하여 정확하고 안정적인 로봇 위치 추정이 가능해진다.

728x90
Comments