(1) 이론-SLAM과 내비게이션
SLAM
동시적 위치 추정 및 지도 작성 & 차량 자동 항법 장치
길 찾기에 필요한 것
1. 위치: 로봇의 위치 계측/추정하는 기능
▪︎ GPS
▪︎ Indoor Positioning Seneor
▪︎ 데드레커닝 계산
▪︎ Runge-Kutta 공식 이용
2. 센싱: 벽, 물체 등의 장애물의 계측하는 기능
▪︎ 거리센서 : LRF, 초음파센서, 적외선 거리센서(PSD)
▪︎ 비전센서 : 스테레오 카메라, 모노 카메라, 전 방향 옴니 카메라
▪︎ Depth camera : SwissRanger, Kinect-2, RealSense, Kinect, Xtion, Carmine(PrimeSense), Astra
3. 지도: 길과 장애물 정보가 담긴 지도
▪︎ 로봇은 길을 찾아가기 위해 지도가 필요하다.
▪︎ SLAM(Simultaneous Localization And Mapping)
4. 경로: 목적지까지 최적 경로를 계산하고 주행하는 기능
▪︎ 내비게이션(Navigation)
▪︎ 위치 추정(Localication / Pose estimation)
▪︎ 경로 탐색/계획(Path search and planning
▪︎ Dynamic Window Approach(DWA)
▪︎ A* 알고리즘(A star)
▪︎ 포텐셜 장(Potential Field)
▪︎ 파티클 필터(Particle Filter)
▪︎ 그래프(Graph)
-> ①②③④는 전부 ROS의 메시지이다.
Gmapping
▪︎ OpenSLAM에서 공개된 SLAM의 한 종류, ROS에서 패키지로 제공
▪︎ 특징: Rao-Blackwellized 파티클 필터, 파티클 수 감소, 그리드 맵
▪︎ 하드웨어 제약 사항
- X, Y, Theta 속도 이동 방향 : 차동 구동형 모바일 로봇, 전 방향 이동 로봇
- 주행기록계
- 계측 센서: 2차 평면 계측 가능 센서(LRF, LIDAR, Kinect, Xtion 등)
- 직사각형 및 원형의 로봇
지도작성: Gmappig + TurtleBot3
▪︎ 마스터 실행 (Remote PC)
roscore
▪︎ 터틀봇 및 센서 구동 (SBC)
export TURTLEBOT3_MODEL=burger (또는 waffle)
roslaunch turtlebot3_bringup turtlebot3_robot.launch
turtlebot3_bringup 패키지를 구동하게 되면 openCR(임베디드 시스템)을 구동시켜 모터를 제어할 수 있는 세팅을 한다.
▪︎ RViz, 터틀봇 원격 조종, 지동 작성 (Remote PC)
export TURTLEBOT3_MODEL=burger (또는 waffle)
roslaunch turtlebot3_slam turtlebot3_slam.launch
rosrun rviz rviz-d'rospack find turtlebot3_slam'/rviz/turtlebot3_slam.rviz
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
rosrun map_server map_saver-f ~/map
로봇에는 임베디드 시스템과 싱글 보드 컴퓨터가 함께 장착돼있는데, 그러한 정보를 모두 싱글 보드 컴퓨터 쪽으로 전송하게 된다. 싱글 보드 컴퓨터에선 라이다가 USB로 연결돼있어, 라이다로부터의 정보(2차원 평면의 거리 정보)를 전부 다 취득하여 메시지로 보내게 된다. 실질적으로 로봇에선 모터를 제어하고, 모터값을 읽어 현재 위치를 수정하고, IMU센서로 값을 보정하며 센서값을 받는 역할까지만 한다. 실질적으로 지도를 작성하는 부분은 메시지를 받은 laptop/desktop에서 처리를 하여 지도 작성을 하는 것이다.
*일반적으론 로봇을 수동으로 작성하여 지도를 작성한다.
▪︎ 완성된 지도
알고리즘에 따라 영역의 분류가 더 확대될 수도 있다.
SLAM 관련 노드들의 처리 과정
로봇을 구동시키면 ①sensor_node가 구동된다. 그 후, 센서의 low data를 scan이라는 topic명으로 sensor_msgs/LaserScan(2D 평면상의 거리 정보)를 ④gmapping에 보내게 된다. 또, 로봇을 구동시키려면 ②turtlebot3_teleop를 실행시켜서 geometry_msgs/Twist 형식으로 velocity값을 보내게 된다. 그렇게 되면 ③turtlebot3_core(로봇 부분)에서 velocity값을 받아서 실제 로봇을 구동시킬 수 있다. 구동시키면 로봇의 왼쪽/오른쪽 바퀴의 encoder 값을 읽을 수 있게 되어 로봇의 현재 위치를 알아낼 수 있고, IMU 센서값까지 더해 위치 보정 또한 할 수 있게 된다.
* base_footpring : 로봇의 가장 밑점
* base_link : 하드웨어적으로 중심점
* base_scan : 센서의 위치를 알아낼 수 있음
④gmapping에서는 tf(센서의 위치 정보)와 scan(센싱 정보)을 가지고 지도를 만든다. 그 후, nav_msgs/OccupancyGrid 형식의 메시지가 ⑤map_server를 통해 실제 map의 정보가 담겨 있는 문서(map.pgm & map.yaml)를 만들게 된다.
위치 추정(localization)
▪︎ 칼만 필터
- 잡음이 포함되어 있는 선형 시스템에서 대상체의 상태를 추적하는 재귀 필터로, 베이즈 확률 기반이다.
- 예측(Prediction) : 모델을 상정하고 이 모델을 이용하여 이전 상태로부터 현재 시점의 상태를 예측할 수 있다.
- 보정(Update) : 앞 단계의 예측 값과 외부 계측기로 얻은 실제 측정 값 간의 오차를 이용하여 더욱 정확한 상태의 상태 값을 추정하는 보정
▪︎ 파티클 필터(Particle Filter)
- 파티클 필터는 시행 착오법을 기반으로 한 시뮬레이션을 통하여 예측하는 기술으로 대상 시스템에 확률 분포로 임의로 생성된 추정값을 파티클(입자) 형태롤 나타낸다.
1) 초기화(initialization) 2) 예측(prediction) 3) 보정(update) 4) 위치 추정(pose estimation) 5) 재추출(resampling)
내비게이션: Navigation + TurtleBot3
▪︎ 마스터 실행 (Remote PC)
roscore
▪︎ 터틀봇 및 센서 구동 (SBC)
export TURTLEBOT3_MODEL=burger (또는 waffle)
roslaunch turtlebot3_bringup turtlebot3_robot.launch
▪︎ RViz, 터틀봇 원격 조종, 지동 작성 (Remote PC)
export TURTLEBOT3_MODEL=burger (또는 waffle)
roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=$HOME/map.yaml
rosrun rviz rviz -d 'rospack find turtlebot3_navigation'/rviz/turtlebot3_nav.rviz
내비게이션
▪︎ Dynamic Window Approach
▪︎ 로봇의 속도 탐색 영역에서 로봇과 충돌 가능한 장애물을 회피하면서 목표점까지 빠르게 다다를 수 있는 속도를 선택하는 방법
'FOSCAR-(Autonomous Driving) > ROS 스터디' 카테고리의 다른 글
[2024 ROS 스터디] 성창엽 #1주차 - ROS 소개 및 설치하기 (0) | 2024.01.22 |
---|---|
[2023 ROS 스터디] 주승근 #4주차 - SLAM & 네비게이션 (1) | 2023.02.06 |
[2023 ROS 스터디] 신의석 #4주차 - SLAM과 내비게이션 (0) | 2023.02.05 |
[2023 ROS 스터디] 박준석 #4주차 - SLAM과 내비게이션 (0) | 2023.02.05 |
[2023 ROS 스터디] 성동현 #4주차 - SLAM과 내비게이션 (0) | 2023.02.05 |