본문 바로가기

FOSCAR-(Autonomous Driving)/ROS 스터디

[2023 ROS 스터디] 조성준 #4주차 - SLAM과 내비게이션

반응형

오늘의 과제는 ROS Courses 11강 SLAM과 내비게이션을 듣고 공부하는 것이다. 어느새 마지막 과제다. 언제나 시작은 힘차게  https://www.youtube.com/watchv=067HSmDvXdE&list=PLRG6WP3c31_VIFtFAxSke2NG_DumVZPgw&index=12 항상 이 동영상들을 바탕으로 공부하는데, 강의자 님께 감사하다.

 

Chapter 11. SLAM과 내비게이션

 이번강의는 1. 내비게이션과 구성 요소 2.  SLAM 실습, 응용, 이론 3. 내비게이션 실습, 응용, 이론순으로 진행되며, 이론 중심의 강의 이후 실제 실습을 해보는 순으로 진행된다. 

 

SLAM과 내비게이션 둘 다말은 어려워 보이지만, 각각 지도 그리기 길찾기를 뜻한다. 지도 그리기와 길 찾기를 위해서는 위치, 센싱, 지도, 경로가 필요한데, 이에 대해서 알아보자.

 

위치 : 로봇의 현재 위치를 계측/추정하는 기능이 필요하다. 위치를 추정하는 도구로는 GPS, Positioning Sensor, cnc추측항법등이 있다.

 

센싱 : 주변의 지형지물(벽, 물체) 등의 장애물을 계측하는 기능이 필요하다. 이를 통해 현 위치에서 이동할 수 있는 곳과 없는 곳을 파악한다. 센서로는 거리센서, 비전센서, Depth camera 등이 있다.

 

지도 : 길을 찾아가기 위해서는 지도가 필요하다. Navigation을 통해 이동하려면, 사전 지도 데이터가 필요한데, 이것이 없으면 SLAM을 통해 만든다.

 

경로: 목적지까지 최적 경로를 계산하고 주행하는 기능이다. 사용되는 기술로는 DWA, A STAR, Potential Field, Partocle Filter 등이 있다.

위치와 센싱을 통해 지도를 만드는 것을 SLAM, 위치 센싱 지도를 통해 경로를 주행하는 것을 Navigation이라고 생각하면 된다.

 

위치 추정(Localization)

 위치 추정에 사용하는 알고리즘이다.

 칼만 필터(Kalman Filter)

  ● 잡음이 포함되어 있는 선형 시스템에서 대상체의 상태를 추적하는 재귀필터

  베이즈 확률 기반

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

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

 

 파티클 필터(Particle Filter)

  시행 착오(try-and-error) 법을 기반으로 한 시뮬레이션을 통하여 예측하는 기술

  대상 시스템에 확률 분포로 임의로 생성된 추정값을 파티클(입자) 형태로 나타낸다.

  초기화(initialization), 예측(prediction),  보정(update),  위치 추정(pose estimation),  재추출(resampling)의 과정을 거친       다.

 

SLAM(Simultaneous Localization And Mapping) : 지도그리기

 SLAM을 위해 사용하는 패키지로 이외에도 Hector Karto 등등이 있지만, Cartigrapher를 점점 더 많이 쓰는 추세다.

 Gmapping 

  ●OpenSLAM에 공개된 SLAM의 한 종류로 ROS에서 패키지로 제공한다.

  ●파티클 필터, 그리드 맵을 사용 한다.

  ●하드웨어에 제약 사항이 있고, 라이선스가 사용하기 불편하다는 단점이 있다. 변화가 없는 상황에서 사용해야 한다,

 Cartigrapher

  ● 구글에서 개발한 SLAM 라이브러리로 다양한 플랫폼과 센서구성에서 2D 및 3D 환경의 SLAM을 실시간으로 제공한다.

  ● 성능은 크게 차이가 없다고 한다. 하지만, 라이선스도 자유롭고, gmapping과 달리 변화가 있는 상황에서도 사용이 가         능하다는 장점이 있다. 

SLAM 관련 노드들의 처리과정이다. 1. 로봇의 센서데이터를 불러오는 노드 2. 로봇을 원격으로 조작하기 위한 노드 3. 터틀봇의 코어로 주행기록계와 레이저의 위치를 가지고 있다. 4.gmapping에는 센서의 위치와 센서가 감지한 데이터 두 개가 들어간다.

 

Navigation : 경로를 예측 및 주행

 내비게이션을 위한 알고리즘이다.

 DWA(Dynamic Windiw Approach)

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

  로봇이 현실적으로 움직일 수 있는 위치와 방향을 고려한다.

 

Gazebo를 통한 가상 로봇 실행

 기본 설치 패키지들과 TurtleBot3를 설치해줘야 한다. 나는 공식 터틀봇3 위키를 참조해서 다운로드 했지만, Turtlebot3_gazebo 패키지가 없다고 한다. 그래서 그냥 다 지우고, sudo apt-get installed turtlebot3* 을 통해 다 다운로드하였다. 비록 사용하지 않는 패키지를 다수 보유하게 됐지만, 정상적으로 실행되니 그걸로 만족이다. 이번 실습의 내용은 gazebo를 통해 가상환경을 만들고 가상의 터틀봇을 움직여 보는 것이 목적이다.

잘은 안보이지만, 오른쪽은 Gazebo 왼쪽은 Rviz다. 오른쪽 기둥아래 조그마한 검정색이 우리의 로봇이다, 왼쪽 Rviz를 보면 같은 위치에 로봇이 있고, 빨간색으로 보이는 부분은 로봇의 센서로 부터 받은 데이터들이다.

 

Gazebo를 통한 가상 SLAM

 ppt를 그대로 따라 하면 되지만, export TURTLEBOT3_MODEL=waffle_pi 를 빠지지 않고 적어주는 것이 좋다. 이번 실습은 전 실습과 비슷해 보이지만, SLAM을 추가해서 터틀봇이 지나다니며 센서로 받은 데이터들을 누적해 MAP을 만드는 것이 목적이다. 

터틀봇을 이곳저곳 한바퀴를 다 돌며 데이터를 수집했다. 검정색 부분은 이동할 수 없는 부분 짙은 회색은 탐험해보지 못한 곳, 밝은 회색은 이동할 수 있는 곳을 뜻한다.

terminal 창을 하나 더 켜서 rosrun map_server map_saver -f ~/map 코드를 적어준다.

명령어를 실행하고 나면, 다음과 같이 SLAM을 통하고 나면 image (gmapping을 통해서 얻어진 지도 파일 그림파일)과 .yaml 파일(image에 대한 일종의 메타데이터)이 생성된다.

 

Gazebo를 통한 Navigation

 이번에는 Gazebo와 Navigation, teleop_key를 실행해 준다. navigation인데 teleop_key를 사용하는 이유가 궁금했다. 그 이유는 초기에는 로봇의 위치와 센서가 바라보는 과정을 특정하는데 어려움이 있다. 그래서 조금 수동으로 움직여줘서, 위치를 특정할 수 있게 해준다. teleop_key는 잠깐 쓰고 끄면 된다.

이제 SLAM한 map을 바탕으로 목표위치만 정하면 로봇이 알아서 도착할 수 있게 되었다. 가장 신기하고 재미있는 실습이었다.

 

이것으로 나의 마지막 ROS-STUDY 과제가 끝났다. 다들 마지막 주차까지 고생 많이 하셨고, 남은 방학을 재밌게 보내시길 바라요~ 그럼 안녕~

 

반응형