본문 바로가기

FOSCAR-(Autonomous Driving)/ROS 스터디

[2023 ROS 스터디] 이은선 #4주차 - SLAM과 내비게이션

반응형

(1) 이론-SLAM과 내비게이션

SLAM 

동시적 위치 추정 및 지도 작성 & 차량 자동 항법 장치

 

길 찾기에 필요한 것

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

▪︎ GPS 

▪︎ Indoor Positioning Seneor

▪︎ 데드레커닝 계산

▪︎ Runge-Kutta 공식 이용

 

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

▪︎ 거리센서 : LRF, 초음파센서, 적외선 거리센서(PSD)

▪︎ 비전센서 : 스테레오 카메라, 모노 카메라, 전 방향 옴니 카메라

▪︎ Depth camera : SwissRanger, Kinect-2, RealSense, Kinect, Xtion, Carmine(PrimeSense), Astra

 

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

▪︎ 로봇은 길을 찾아가기 위해 지도가 필요하다.

▪︎ SLAM(Simultaneous Localization And Mapping)

 

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

▪︎ 내비게이션(Navigation)

▪︎ 위치 추정(Localication / Pose estimation)

▪︎  경로 탐색/계획(Path search and planning

▪︎ Dynamic Window Approach(DWA)

▪︎  A* 알고리즘(A star)

▪︎  포텐셜 장(Potential Field)

▪︎  파티클 필터(Particle Filter)

▪︎  그래프(Graph) 

 

 

-> ①②③④는 전부 ROS의 메시지이다.

 

Gmapping

▪︎ OpenSLAM에서 공개된 SLAM의 한 종류, ROS에서 패키지로 제공

▪︎  특징: Rao-Blackwellized 파티클 필터, 파티클 수 감소, 그리드 맵

▪︎  하드웨어 제약 사항

  - X, Y, Theta 속도 이동 방향 : 차동 구동형 모바일 로봇, 전 방향 이동 로봇

  - 주행기록계

  - 계측 센서: 2차 평면 계측 가능 센서(LRF, LIDAR, Kinect, Xtion 등)

  - 직사각형 및 원형의 로봇

 

지도작성: Gmappig + TurtleBot3

▪︎ 마스터 실행 (Remote PC)

roscore

▪︎ 터틀봇 및 센서 구동 (SBC)

export TURTLEBOT3_MODEL=burger (또는 waffle)
roslaunch turtlebot3_bringup turtlebot3_robot.launch

turtlebot3_bringup 패키지를 구동하게 되면 openCR(임베디드 시스템)을 구동시켜 모터를 제어할 수 있는 세팅을 한다.

 

▪︎ RViz, 터틀봇 원격 조종, 지동 작성 (Remote PC)

export TURTLEBOT3_MODEL=burger (또는 waffle)
roslaunch turtlebot3_slam turtlebot3_slam.launch
rosrun rviz rviz-d'rospack find turtlebot3_slam'/rviz/turtlebot3_slam.rviz
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
rosrun map_server map_saver-f ~/map

로봇에는 임베디드 시스템과 싱글 보드 컴퓨터가 함께 장착돼있는데, 그러한 정보를 모두 싱글 보드 컴퓨터 쪽으로 전송하게 된다. 싱글 보드 컴퓨터에선 라이다가 USB로 연결돼있어, 라이다로부터의 정보(2차원 평면의 거리 정보)를 전부 다 취득하여 메시지로 보내게 된다. 실질적으로 로봇에선 모터를 제어하고, 모터값을 읽어 현재 위치를 수정하고, IMU센서로 값을 보정하며 센서값을 받는 역할까지만 한다. 실질적으로 지도를 작성하는 부분은 메시지를 받은 laptop/desktop에서 처리를 하여 지도 작성을 하는 것이다.

*일반적으론 로봇을 수동으로 작성하여 지도를 작성한다. 

 

▪︎ 완성된 지도

알고리즘에 따라 영역의 분류가 더 확대될 수도 있다.

 

SLAM 관련 노드들의 처리 과정

 

로봇을 구동시키면 sensor_node가 구동된다. 그 후, 센서의 low data를 scan이라는 topic명으로 sensor_msgs/LaserScan(2D 평면상의 거리 정보)를 gmapping에 보내게 된다. 또, 로봇을 구동시키려면 turtlebot3_teleop를 실행시켜서 geometry_msgs/Twist 형식으로 velocity값을 보내게 된다. 그렇게 되면 turtlebot3_core(로봇 부분)에서 velocity값을 받아서 실제 로봇을 구동시킬 수 있다. 구동시키면 로봇의 왼쪽/오른쪽 바퀴의 encoder 값을 읽을 수 있게 되어 로봇의 현재 위치를 알아낼 수 있고, IMU 센서값까지 더해 위치 보정 또한 할 수 있게 된다.

* base_footpring : 로봇의 가장 밑점 

* base_link : 하드웨어적으로 중심점   

* base_scan : 센서의 위치를 알아낼 수 있음

gmapping에서는 tf(센서의 위치 정보)와 scan(센싱 정보)을 가지고 지도를 만든다. 그 후, nav_msgs/OccupancyGrid 형식의 메시지가 map_server를 통해 실제 map의 정보가 담겨 있는 문서(map.pgm & map.yaml)를 만들게 된다.

 

위치 추정(localization)

▪︎ 칼만 필터

- 잡음이 포함되어 있는 선형 시스템에서 대상체의 상태를 추적하는 재귀 필터로, 베이즈 확률 기반이다.

- 예측(Prediction) : 모델을 상정하고 이 모델을 이용하여 이전 상태로부터 현재 시점의 상태를 예측할 수 있다.

- 보정(Update) : 앞 단계의 예측 값과 외부 계측기로 얻은 실제 측정 값 간의 오차를 이용하여 더욱 정확한 상태의 상태 값을 추정하는 보정

 

▪︎ 파티클 필터(Particle Filter)

- 파티클 필터는 시행 착오법을 기반으로 한 시뮬레이션을 통하여 예측하는 기술으로 대상 시스템에 확률 분포로 임의로 생성된 추정값을 파티클(입자) 형태롤 나타낸다.

1) 초기화(initialization) 2) 예측(prediction) 3) 보정(update) 4) 위치 추정(pose estimation) 5) 재추출(resampling)

 

내비게이션: Navigation + TurtleBot3

 

▪︎ 마스터 실행 (Remote PC)

roscore

▪︎ 터틀봇 및 센서 구동 (SBC)

export TURTLEBOT3_MODEL=burger (또는 waffle)
roslaunch turtlebot3_bringup turtlebot3_robot.launch

 

 

▪︎ RViz, 터틀봇 원격 조종, 지동 작성 (Remote PC)

export TURTLEBOT3_MODEL=burger (또는 waffle)
roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=$HOME/map.yaml
rosrun rviz rviz -d 'rospack find turtlebot3_navigation'/rviz/turtlebot3_nav.rviz

 

내비게이션

▪︎ Dynamic Window Approach

▪︎ 로봇의 속도 탐색 영역에서 로봇과 충돌 가능한 장애물을 회피하면서 목표점까지 빠르게 다다를 수 있는 속도를 선택하는 방법

 

 

반응형