본문 바로가기

FOSCAR-(Autonomous Driving)/ROS 스터디

[2024 ROS 스터디] 곽우인 #4주차 - SLAM과 Navigation

반응형

길 찾기에 필요한 것

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

 

GPS(Global Positioning System)

오차가 있다.

날씨의 영향을 많이 받는다.

실외에서만 가능하다.

Indoor Positioning Sensor

Landmark(Color, IR Camera)

Indoor GPS

WiFi SLAM

Beacon

 

우리는 오랜시간동안 오차를 보정하기 위해서 추측항법(dead reckoning, 데드레커닝)을 써왔다.

 

그렇다면 추측항법이란?

양 바퀴 축의 회전 값을 이용

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

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

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

칼만필터 시리즈

이러한 방법들을 통해서 우리는 절대좌표를 알 수 있는게 아니라 출발한 시점부터의 상대 좌표를 알 수 있는것이다.

 

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

거리센서

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

비전센서

스테레오 카메라, 모노 카메라, 전 방향 옴니 카메라

Depth camera

SwissRanger, Kinect-2

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

 

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

SLAM(Simultaneous Localization And Mapping)

 

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

내비게이션(Navigation)

위치 추정(Localization / Pose estimation)

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

Dynamic Window Approach(DWA)

A* 알고리즘(A Star)

포텐셜 장(Potential Field)

파티클 필터(Particle Filter)

그래프(Graph)

 

SLAM

위치+센싱▶지도

Navigation

위치+센싱+지도▶경로

※위치, 센싱, 지도, 경로는 전부 ROS의 메세지이다.

 

Gmapping

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

저자G. Grisetti, C. Stachniss, W. Burgard

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

 

Gmapping 하드웨어 제약 사향

X, Y, Theta 속도 이동 명령을 해야하는데 다음 로봇이면 문제없이 사용 가능

차동 구동형 모바일 로봇(differential drive mobile robot)

전 방향 이동 로봇(omni-wheel robot)

주행기록계(Odometry)

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

직사각형 및 원형의 로봇

 

칼만 필터(Kalman filter)

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

베이즈 확률 기반

예측

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

보정

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

 

파티클 필터(Particle Filter)

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

1) 초기화(initialization)

2) 예측(prediction)

3) 보정(update)

4) 위치 추정(pose estimation)

5) 재추출(Resampling)

 

Dynamic Window Approach

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

 

실습하기

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

sudo apt install \
ros-noetic-joy \
ros-noetic-teleop-twist-joy \
ros-noetic-teleop-twist-keyboard \
ros-noetic-laser-proc \
ros-noetic-rgbd-launch \
ros-noetic-depthimage-to-laserscan \
ros-noetic-rosserial-arduino \
ros-noetic-rosserial-python \
ros-noetic-rosserial-server \
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-image-view \
ros-noetic-gmapping \
ros-noetic-navigation
$ 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

 

Gazebo 실행

$ export TURTLEBOT3_MODEL=waffle
$ roslaunch turtlebot3_gazebo turtlebot3_world.launch

gazebo 실행사진

 

터틀봇 원격 조종

$ export TURTLEBOT3_MODEL=waffle
$ roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

 

Rviz 실행

$ export TURTLEBOT3_MODEL=waffle
$ roslaunch turtlebot3_gazebo turtlebot3_gazebo_rviz.launch

Rviz 실행사진
방향키를 사용해서 turtlebot3를 조작했고 Gazebo와 Rviz에 터틀봇의 움직임이 나타나고있다.

 

가상 SLAM with Gazebo

 

Gazebo 실행

$ export TURTLEBOT3_MODEL=waffle
$ roslaunch turtlebot3_gazebo turtlebot3_world.launch

 

SLAM 실행

$ export TURTLEBOT3_MODEL=waffle
$ roslaunch turtlebot3_slam turtlebot3_slam.launch

 

Rviz 실행

$ export TURTLEBOT3_MODEL=waffle
$ rosrun rviz rviz -d'rospack find turtlebot3_slam'/rviz/turtlebot3_slam.rviz

 

터틀봇 원격 조종

$ export TURTLEBOT3_MODEL=waffle
$ roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

 

지도 출력

$ rosrun map_server map_saver -f ~/map

 

가상 내비게이션 with Gazebo

 

Gazebo 실행

$ export TURTLEBOT3_MODEL=waffle
$ roslaunch turtlebot3_gazebo turtlebot3_world.launch

 

내비게이션 실행

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

 

Rviz 실행 및 목적지 설정

$ export TURTLEBOT3_MODEL=waffle
$ rosrun rviz rviz -d'rospack find turtlebot3_navigation'/rviz/turtlebot3_nav.rviz

2D Pose Estimate를 사용하여 현재 위치를 표시하고 teleop를 사용하여 조작해보았다.

 

※Navigation을 사용할때는 퍼블리셔의 메세지가 섞일 수 있기때문에 사용하던 teleop를 꺼준다.

2D Nav Goal을 사용하여 터틀봇을 이동시켜보았다.
Planner Plan과 Global Map, Local Map을 모두 끈 사진이다.

 

반응형