본문 바로가기

FOSCAR-(Autonomous Driving)/ROS 스터디

[2024 ROS 스터디] 이강욱 #4주차 - SLAM & Navigation

반응형

본 게시글은 다음 영상을 보고 작성되었습니다!

https://youtube.com/playlist?list=PLX-Ur4rl2-qxGXUo_odjVjv7eqN-Hmuek&feature=shared

 

2024 ROS 스터디 4주차

www.youtube.com

  1. SLAM과 Navigation 이란?
    • SLAM = Simultaneous Localization And Mapping = 동시적 위치 추정 및 지도 작성
    • Navigation = 차량 차동 항법 장치

    • 그런데 풀어낸 말들이 좀 생소하니 둘을 합쳐서 간단하게 길 찾기라고 생각해보겠습니다.
      현대에는 GPS를 사용해서 길을 찾을 수 있고, 과거에는 나침반과 지도를 활용해서 길을 찾을 수 있습니다. 더 옛날로 가면 해, 달, 별 위치만으로 길을 찾곤 했습니다. 공통적으로 알 수 있는 사실은 길을 찾을 때는 나의 위치를 특정할 수 있는 주변 정보를 가지고 길을 찾았다는 것입니다.
      로봇도 마찬가지 입니다. 기본적으로 GPS를 사용하여 위치를 파악하여 길을 찾고, 실내에서는 로봇이 놓여져 있는 주변 정보를 가지고 지도를 만들어 길을 찾습니다. 다음은 로봇이 길을 찾기 위해 필요한 정보들입니다.

      • 위치 : 로봇의 위치 계측/추정하는 기능
        • GPS(Global Positioning System) : 오차가 존재, 날씨에 영향을 받음, 실외에서만 사용해야 함
        • Indoor Positioning Sensor: 랜드마크, Indoor GPS, WiFi SLAM, Beacon
        • 추측 항법(dead reckoning, 데드 레커닝) : 엔코더 값을 활용함. Runge-Kutta 공식,선속도, 각속도를 이용한 데드 레커닝 계산을 통해 상대적인 좌표를 구한다. 바닥 슬립, 기계적, 누적 오차 발생함.(장애물 혹은 벽에 부딪혀 엔코더 값은 증가하지만 실질적인 이동은 없는 경우) 이를 보정하기 위해 IMU, 칼만필터 등을 활용함. 필요한 정보는 다음과 같음
          • 양 바퀴 축의 엔코더 값 (모터 축인 경우 기어비로 재계산)
          • 바퀴 간 거리
          • 바퀴 반지름
      • 센싱 : 벽, 물체 등의 장애물의 계측하는 기능
        • 거리센서 : LRF, 초음파 센서, 적외선 거리센서(PSD)
        • 비전센서 : 스테레오 카메라, 모노 카메라, 전 방향 옴니 카메라
        • Depth Camera : SwissRanger, Kinect-2 등
      • 지도 : 길과 장애물 정보가 담긴 지도
        위치정보와 센싱정보를 결합하여 지도를 작성하는 알고리즘이 바로 SLAM 입니다.
        • 경로 : 목적지까지 최적 경로를 계산하고 주행하는 기능
          • 내비게이션
          • 위치추정
          • 경로 탐색/계획
            여기에는 굉장히 많은 알고리즘이 존재한다.
            • Dynamic Window Approach (DWA)
            • A* 알고리즘
            • 포텐셜 장 (Potential Field)
            • 파티클 필터 (Particle Filter)
            • 그래프 (Graph)
        마지막으로 위 내용들을 기반으로 보면 위치와 센싱 정보를 합쳐 만든 지도 == SLAM 이고,
        위치와 센싱 정보 그리고 지도까지 합쳐 만드는 것이 경로 == Navigation 임을 알 수 있습니다.
        SLAM 기법은 대표적으로 OpenSLAM 에서 제공하는 Gmapping 과 구글에서 제공하는 카토그래퍼가 있습니다. 수업에서 사용하는 SLAM은 Gmapping 입니다.

        ※ Gmapping이란? -> OpenSLAM에 공개된 SLAM의 한 종류, ROS에서 패키지 제공
        • 특징:
          • Rao-Blackwellized 파티클 필터
          • 그리드 맵
          • 파티클 수가 일반적인 파티클 필터 보다 적다.
        • 하드웨어 제약 사항
          • X, Y, Theta 속도 이동 명령 (2차 평면 상의 운동만 활용)
            • 차동 구동형 모바일 로봇 (differential drive mobile robot)
            • 전 방향 이동 로봇 (omni-wheel robot)
          • 주행기록계(odometry)
          • 계측 센서: 2차 평면 계측 가능 센서 (LRF, LiDAR, Kinect, Xtion 등)
          • 직사각형 및 원형의 로봇
    • 실습하기
      • 설치하기
        • 의존성 패키지 설치
                      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
          source ~/.zshrc
        • turtlebot3 및 시뮬레이터(이하 gazebo) 관련 패키지 설치 및 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_make
          source ./devel/setup.zsh
          echo -e "\nexport TURTLEBOT3_MODEL=waffle" >> ~/.zshrc

          마지막 명령인 echo 에서 TURTLEBOT3_MODEL을 설정하는데, 이에 대한 정보는 다음 링크를 참조하면 됩니다.
          링크 : https://emanual.robotis.com/docs/en/platform/turtlebot3/simulation/#gazebo-simulation
        • 테스트 명령어
                         roslaunch turtlebot3_gazebo turtlebot3_world.launch
          roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
          roslaunch turtlebot3_gazebo turtlebot3_gazebo_rviz.launch
          • 각각 gazebo 실행, turtlebot3 조종 터미널, 센서 데이터 확인용 rviz 실행을 위한 명령이다. 터미네이터, tilix 프로그램 등을 통해 새롭게 창을 열고 각각 입력해주면 된다.
          • 실행하면 다음과 같은 화면이 나온다. 왼쪽이 gazebo, 오른쪽이 rviz 이다. rviz 화면의 빨간 점들은 LiDAR 로부터 획득한 데이터이고, 하단의 회색 물체가 turtlebot3 이다.
          • gazebo의 마우스 조작은 다음과 같다.
            1. 왼쪽 버튼: 클릭한 기준으로 화면을 평면 이동시킬 수 있다.
            2. 휠 버튼: 3차원적으로 화면을 회전시킬 수 있다.
            3. 오른쪽 버튼 & 휠 드래그 : 화면을 확대/축소할 수 있다.
            rviz 의 마우스 조작은 1, 2번이 반대이다.
          • 다음은 teleop 터미널을 통해 움직여본 결과이다.
      • Gmapping 으로 지도 만들기
        • Gmapping 실행 명령어
                         roslaunch turtlebot3_gazebo turtlebot3_world.launch
          roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=gmapping
          roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch


          다음은 실행 결과입니다.


          다음은 로봇을 이동시키 맵을 완성한 모습입니다.

        • Gmapping 지도 저장 명령어

                           rosrun map_server map_saver
                      
          맵을 완성했다면, 위 명령어를 실행하여 완성한 맵을 저장할 수 있습니다. map.pgm, map.yaml 파일이 생성됩니다. 경로는 해당 명령을 실행한 폴더 아래에 저장되며 다음과 같습니다.

      • 만든 지도를 기반으로 Navigation 실행해보기
        • Navigation 실행 명령어
                      	   roslaunch turtlebot3_gazebo turtlebot3_world.launch
          roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file='생성된 map.yaml 경로'
          				
                      

          다음은 실행 결과입니다.


          오른쪽이 rviz 화면을 잘 보면 초록색 점들이 뿌려져 있는 것을 알 수 있는데, 저 점들은 로봇이 저 위치에 있을 것이다라고 확률적으로 계산된 좌표이다. 그리고 확대해서 본다면 점이 아니고 화살표라는 점을 알 수 있는데, 화살표가 가리키는 방향도 마찬가지로 확률적으로 그 방향을 보고 있을 것이라는 뜻입니다.
          한편, 로봇의 초기위치가 틀리게 나오는데 이는 rviz 상단에 2D Pose Estimate 를 클릭하여 조정할 수 있습니다. 이는 영상에서 확인하면 확실하게 알 수 있습니다.
          링크 : https://youtu.be/067HSmDvXdE?list=PLX-Ur4rl2-qxGXUo_odjVjv7eqN-Hmuek&t=6865


          2D Pose Estimate를 활용해 위치를 조정한 모습


          처음 실행했을 때, 위치를 조정했을 때는 로봇의 확률적 위치가 많이 퍼져 있는 것을 알 수 있는데, 이는 로봇이 움직이면서 점점 밀도 있게 모이게 됩니다. 다음은 일정 저리 전진 후 캡쳐한 사진입니다. 이동 전보다 훨씬 잘 모여있음을 알 수 있습니다.


          다음은 2D Nav Goal 버튼을 활용하여 임의의 목표지점으로 로봇을 이동시켜 보겠습니다. 이 과정도 영상으로 보면 훨씬 이해가 잘 되니 링크로 남기겠습니다.
          링크 : https://youtu.be/067HSmDvXdE?list=PLX-Ur4rl2-qxGXUo_odjVjv7eqN-Hmuek&t=7063


          2D Nav Goal 로 목적지를 설정한 모습


          gazebo 상에서도 동일한 위치에 도달한 모습

    4주차를 마지막으로 스터디를 완료했습니다. 지난 2월 7일에 진행된 가상환경 자율주행 대회를 준비하면서 느꼈던 2% 부족했던 지식을 채울 수 있는 시간이 된 것 같습니다. 이번 스터디에서 배운 지식을 기반으로 앞으로의 활동에 있어서 더 좋은 결과를 낼 수 있도록 열심히 해보겠습니다!
    반응형