본문 바로가기

FOSCAR-(Autonomous Driving)/ROS 스터디

[2023 ROS 스터디] 주승근 #4주차 - SLAM & 네비게이션

반응형

 

1) 이론

SLAM : Simultaneous Localization And Mapping : 동시적 위치 추정 및 지도 작성

Navigation : 차량 자동 항법 장치

 

로봇의 길 찾기 :

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

( GPS : 실외에서만 사용가능하고 날씨 등에 대한 한계,, )

( 따라서 Indoor Positioning Sensor 사용 { Landmark, Indoor GPS, WiFi SLAM, Beacon...} )

  • 추측 항법(Dead reckoning)

- 양 바퀴 축의 회전 값을 이용

- 이동 거리와 회전 값을 계산, 위치 측정

- 바닥 슬립, 기계적, 누적 오차 발생

- IMU 등의 관성 센서, 필터로 위치 보상

- 칼만필터 시리즈...

  • 필요한 정보

- 양 바퀴 축의 엔코더 값 E ( 모터 축인 경우 기어비로 재계산)

- 바퀴 간 거리 (D) , 바퀴 반지름 (r)

  • 데드레커닝 계산

- 선속도 , 각속도

  • Runge-Kutta 공식 이용

- 이동한 위치의 근사 값 x,y

- 회전각도 θ

 

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

  • 거리 센서 : LRF, 초음파센서, 적외선 거리센서(PSD)
  • 비전 센서 : 스테레오 카메라, 모노 카메라, 전 방향 옴니 카메라
  • Depth camera

- SwissRanger, Kinect-2

- RealSense, Kinect, Xtion, Carmine(PrimeSense), Astra

 

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

  • 로봇은 길을 찾아가기 위해 지도가 필요하다!
  • 지도

- 도로와 같은 기반 시설의 경우 디지털 지도 사용 가능, 하지만 병원, 카페, 회사, 가정집, 탐사, 붕괴된 위험지역의 경우 지도는 어떻게 해결할 것인가

-> 지도가 없으면 만들어서 해결하면 된다 !

  • SLAM 을 이용한다

 

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

- 네비게이션, 위치 추정, 경로 탐색/계획

- Dynamic Window Approach(DWA) , 포텐션 장 , 파티클 필터 , 그래프

 

위치 정보 + 센싱 정보 = 지도 를 만들 수 있다. (SLAM)

위치 정보 + 센싱 정보 + 지도 = 경로 를 만들 수 있다. (Navigation)

 

Gmapping

  • OpenSLAM에 공개된 SLAM의 한 종류, ROS에서 패키지로 제공
  • 특징 : Rao-Blackwellized 파티클 필터, 파티클 수 감소, 그리드 맵
  • 하드 웨어 제약 사항

- X , Y , Theta 속도 이동 명령

-> 차동 구동형 모바일 로봇 / 전 방향 이동 로봇

- 주행기록계

- 계측 센서 : 2차 평명 계측 가능 센서(LRF , LiDAR , Kinect , Xtion ,,,)

- 직사각형 및 원형의 로봇

 

  • 지도작성 : Gmapping + TurtleBot3

- 완성된 지도

- 2차원 점유 격자 지도

- 흰색 = 로봇이 이동 가능한 자유 영역(free area)

- 흑색 = 로봇이 이동 불가능한 점유 영역(occupied area)

- 회색 = 확인되지 않은 미지 영역(unknown area)

 

 

  • SLAM 관련 노드들의 처리 과정

1) sensor_node

2) turtlebot3_teleop

3) turtlebot3_core

4) slam_gmapping

5) map_server

 

  • 위치 추정(localization)

- 칼만 필터

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

- 베이즈 확률 기반

- 예측

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

- 보정

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

- 파티클 필터

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

1) 초기화 / 2) 예측 / 3) 보정 / 4) 위치 추정 / 5) 재추출

 

  • 네비게이션

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

- 목적함수 G는 로봇의 방향, 속도, 충돌을 고려하여, 목적함수가 최대가 되는 속도를 구하게 된다.

 

 

 

 

 

 

실습

 

  • TurtleBot3 시물레이션 개발환경 준비

 

- 기본 설치 패키지 (3차원 시뮬레이터 Gazebo를 이용하기 위한 준비)

sudo apt install ros-melodic-joy ros-melodic-teleop-twist-joy ros-melodic-teleop-twist-keyboard ros-melodic-laser-proc ros-melodic-rgbd-launch ros-melodic-depthimage-to-laserscan ros-melodic-rosserial-arduino ros-melodic-rosserial-python ros-melodic-rosserial-server ros-melodic-rosserial-client ros-melodic-rosserial-msgs ros-melodic-amcl ros-melodic-map-server ros-melodic-move-base ros-melodic-urdf ros-melodic-xacro ros-melodic-compressed-image-transport ros-melodic-rqt-image-view ros-melodic-gmapping ros-melodic-navigation

 

항상 설치하는 과정은 오류가 뜰까 하는 걱정에 조마조마하다. ROS 강의영상에서 나온 kinetic 을 melodic 으로 바꾸어 기본 패키지를 설치하도록 하자.

 

 
 

 

 

설치 이후 패키지 빌드 입력 후

$ cd ~/catkin_ws/src

$ git clone https://github.com/ROBOTIS-GIT/turtlebot3.git

$ git clone https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git

$ git clone https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git

$ cd ~/catkin_ws && catkin_make

 

 

bashrc 파일 맨 밑부분에

export TURTLSBOT3_MODEL=waffle_pi 를 입력한다.

 

 

이후

$ roslaunch turtlebot3_gazebo turtlebot3_world.launch

$ roslaunch turtlebot3_gazebo turtlebot3_gazebo_rviz.launch

 

를 통해 실행하려 하였으나 지속된 오류에 봉착되어 실행하는데 실패하고 말았다,,,

마지막 ROS 스터디가 찝찝하게 끝나 아쉬운면이 크게 남는다.

이후 ROS 복습겸 ubuntu를 초기화 하여 1주차 부터 다시 복습하여서, 2차시도 때는 성공하여 추후에 성공한 모습으로 티스토리 글을 수정하도록 다짐하였다..

 

 

반응형