본문 바로가기

FOSCAR-(Autonomous Driving)/ROS 스터디

[2024 ROS 스터디] 초라핀스카 베로니카 #4주차 - SLAM과 내비게이션

반응형

SLAM (Simultaneous Localization And Mapping) & Navigation

 

SLAM (로봇의 길 찾기)

 

길 찾기에 필요한 것:

  1. 위치: 로봇의 위치 계측/추정하는 기능
  2. 센싱: 벽, 물체 등의 장애물의 계측하는 기능
  3. 지도: 길과 장애물 정보가 담긴 지도
  4. 경로: 목적지까지 최적 경로를 계산하고 주행하는 기능

 

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

  • GPS (Global Positioning System)
        단점:
            오차 - 수 미터의 오차 생길 수 있음
            날씨
            실외 - 실외에서만 사용 가능
  • Indoor Positioning Sensor
    - Landmark (Color, IR Camera)
    - Indoor GPS
    - WiFi SLAM
    - Beacon
  • 추측 항법(dead reckoning, 데드레커닝)
    - 양 바퀴 축의 회전 값으로 이동 거리와 회전 값을 계산하여 위치 측정
    - 필요한 정보:  양 바퀴 축의 엔코더 값 E, 바퀴 간 거리 D, 바퀴 반지름 r
    - 데드레커닝 계산
    - Runge-Kutta 공식 이용

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

  • 거리센서 - LRF, 초음파센서, 적외선 거리센서(PSD)
  • 비전센서 - 스테레오 카메라, 모노 카메라, 전 방향 옴니 카메라
  • Depth camera - SwissRanger, Kinect-2, RealSense, Kinect, Xtion, Carmine(PrimeSense), Astra

3.  지도: 길과 장애물 정보가 담긴 지도
    지도 없으면 SLAM으로 만들면 된다

 

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

  • 내비게이션(Navigation)
  • 위치 추정 (Localization / Pose estimation)
  • 경로 탐색/계획 (Path search and planning)
    • Dynamic Window Approach (DWA)
    • A* 알고리즘 (A Star
    • 포텐셜 장(Potential Field)
    • 파티클 필터 (Particle Filter)
    • 그래프 (Graph)

SLAM

  • Gmapping
    • OpenSLAM에 공개된 SLAM의 한 종류, ROS에서 패키지로 제공
    • 특징: Rao-Blackwellized 파티클 필터, 파티클 수 감소, 그리드 맵
    • 하드웨어 제약 사항 :
      • X, Y, Theta 속도 이동 명령,
      • 주행기록계 (Odometry),
      • 계측 센서:  2차 평면 계측 가능 센서( LRF, LiDAR, Kinect, Xtion 등)
  • 지도작성: Gmapping + TurtleBot3
        2차원 점유 격자 지도
        (OGM, Occupancy Grid Map)
        • 흰색 = 로봇이 이동 가능한 자유 영역 (free area)
        • 흑색 = 로봇이 이동 불가능한 점유 영역 (occupied area)
        • 회색 = 확인되지 않은 미지 영역 (unknown area) Gmapping

  • SLAM 관련 노드들의 처리 과정
    • sensor_node
    • turtlebot3_teleop
    • turtlebot3_core
    • slam_gmapping
    • map_server
  • 위치 추정(localization)
    • 칼만 필터 (Kalman filter)
      • 잡음이 포함되어 있는 선형 시스템에서 대상체의 상태를 추적하는 재귀 필터
      • 베이즈 확률 기반
      • 예측(Prediction)
      • 보정(update)
    • 파티클 필터(Particle Filter) - 파티클 필터는 시행착오(try-and-error) 법을 기반으로 한 시뮬레이션을 통하여 예측하는 기술로 대상 시스템에 확률 분포로 임의로 생성된 추정값을 파티클(입자) 형태로 나타낸다.
      1. 초기화(initialization)
      2. 예측(prediction)
      3. 보정(update)
      4. 위치 추정(pose estimation)
      5. 재추출(Resampling)
       

 

내비게이션

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

 

실습

$ sudo apt-get install ros-noetic-joy ros-noetic-teleop-twist-joy \
ros-noetic-teleop-twist-keyboard ros-noetic-laser-proc \
ros-noetic-rgbd-launch ros-noetic-rosserial-arduino \
ros-noetic-rosserial-python ros-noetic-rosserial-client \
ros-noetic-rosserial-msgs ros-noetic-amcl ros-noetic-map-server \
ros-noetic-move-base ros-noetic-urdf ros-noetic-xacro \
ros-noetic-compressed-image-transport ros-noetic-rqt ros-noetic-rviz \
ros-noetic-gmapping ros-noetic-navigation ros-noetic-interactive-markers \
ros-noetic-turtlebot3-msgs ros-noetic-turtlebot3

 

$ cd ~/catkin_ws/src
$ git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git
$ git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git
$ git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
$ cd ~/catkin_ws && catkin_make
  • 가상 SLAM with Gazebo
$ export TURTLEBOT3_MODEL=waffle

 

Gazebo 실행한다 

$ roslaunch turtlebot3_gazebo turtlebot3_world.launch

 

 

터틀봇 원격 조종한다

$ roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

 

 

Rviz 실행한다

$ roslaunch turtlebot3_gazebo turtlebot3_gazebo_rviz.launch

 

SLAM 실행한다

$ roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=gmapping

 

거북이를 움지기면서 SLAM으로 지도를 완성한다

 

완성된 지도를 저장한다

$ rosrun map_server map_saver -f ~/map

 

내비게이션 실행한다

$ roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=$HOME/map.yaml

 

2D Pose Estimate에서 거북이 위치와 방향을 설정한다

 

2D Nav Goal 위치와 방향을 선택하면 거북이가 그 목적지로 이동한다

 

 

반응형