본문 바로가기

FOSCAR-(Autonomous Driving)/ROS 스터디

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

반응형

CHAPTER 11-1 기본개념

길찾기를 하기위해서 필요한 4가지는 

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

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

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

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

더 필요한 조건이 있을까 곰곰이 생각해봤지만 위치, 센싱, 지도, 경로만 있으면 길찾기의 조건이 만족되는 것 같다.

강의 1시간 가량은 길찾기에 대한 개념과 각 요소들이 길찾기에 어떻게 작용하는지 설명하는 내용이었다. 

 

CHAPTER 11-2 SLAM, CHAPTER 11-3 Navigation

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

Gmapping은 슬램의 한 종류로서 터틀봇을 이용하여 지도를 작성하는 방법이다.

흰색은 로봇이 이동 가능한 자유 영역 ,

흑색은 로봇이 이동 불가능한 점유 영역,

회색은 확인되지 않은 미지 영역이다.

 

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

① sensor_node ② turtlebot3_teleop ③ turtlebot3_core ④ slam_gmapping ⑤ map_server으로 사진(강의)을 보면 더 이해가 쉽다.

SLAM 노드 처리 과정 (그림)

NAVIGATION은 많이 듣던 단어 그대로 길을 찾는 과정, 방법을 말한다. 로봇의 속도 탐색 영역에서 로봇과 충돌 가능한 장애물을 회피하면서 목표점까지 빠르게 다다를 수 있는 속도를 선택하는 방법을 navigation이라 할 수 있다.

 

이제 본격적으로 실습에 들어갔다. 

여기서도 오류 천지였다. 강의 자료는 키네틱이라서 멜로딕을 사용하는 나로서는 구글에서 정답을 찾을 수 밖에 없었다. 

 

1) 의존 패키지를 설정하고

sudo apt-get 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-melodic-interactive-markers

의존 패키지 설치

 

2 ) 터틀봇3 패키지도 설치한다.

source /opt/ros/melodic/setup.bash
sudo apt-get install ros-melodic-turtlebot3-msgs
sudo apt-get install ros-melodic-turtlebot3

3) pdf 파일 그대로  git clone 설치하면 된다. (bash 파일 맨 밑에 export TURTLEBOT3_MODEL=waffle_pi 입력)

cm을 한 다음 $ source devel/setup.bash을 계속 쳐줘야지 실행을 할 수 있다. 터미널에 계속 갱신을 해야한다.

 

pdf 그대로 다 하면 이런 화면이 뜬다. $ roslaunch turtlebot3_gazebo turtlebot3_world.launch

gazebo

$ roslaunch turtlebot3_gazebo turtlebot3_gazebo_rviz.launch

rviz도 켜주자

새로운 창에 

$ roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

를 입력하고 그 창에서 w를 누르니 앞으로 나아간다. 조금 오래된 노트북이라 그런가 너무 작동이 느렸다. 

작동하는 난이도가 과장 조금 보태서 실제 자동차를 운전하는 것 보다 어려웠다.

 

 

w를 누르니 앞으로 나갔다.

$ roslaunch turtlebot3_slam turtlebot3_slam.launch

을 입력하여 slam 창을 키고 지도를 완성했다.

$ rosrun map_server map_saver -f ~/map

을 치면 home에 지도가 저장된다.흰 부분은 이동가능영역, 검정색은 장애물/물체 , 회색은 미지의 영역

삐둘빼둘 맵

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

을 입력한다.네비게이션은 사용자가 지정해둔 지도를 바탕으로 로봇의 현재위치를 찾아내고 이동하기 때문이다.

 

2D pose Estimate를 선택한 후 turtle이 위치한 대략적인 위치를 정해준다.

2D Nav Goal을 통해 이 로봇을 움직일 수 있다.

녹색 화살표는 작은 확률들이고 빨간 화살표는 로봇이 움직이는 경로같았다. 

목적지찾아가는 중

거북이는 목적지에 정상도착했다.

강의에서 말한대로 일반적인 로봇은 이런 방식을 통해서 움직인다고 했다.

그렇다면 자율주행이라는 분야도 비슷하다는 말인데 이 분야에 한 발자국 다가간 느낌이 들었다. 

반응형