SLAM ?
포스카 지원할 때쯤 자율주행을 얕게 공부하며 배웠던 단어였는데 이렇게 다시 만나서 오묘했다.
일단 Simultaneous Localization And Mapping 의 약어이고 직역하자면 '동시적 위치추정 및 지도작성' 이다.
그럼 이게 왜 중요할까? 배워볼거다~
길 찾기에 필요한 것
1. 위치 : 로봇의 위치를 계측, 측정하는 기능
2. 센싱 : 벽, 물체 등의 장애물을 계측하는 기능
3. 지도 : 길과 장애물 정보가 담긴 지도
4. 경로 : 목적지까지 최적 경로를 계산하고 주행하는 기능
1. 위치
- GPS (Globlal Positioning System)
- 오차
- 날씨
- 실외
- Indoor Positioning Sensor
- Landmark (Color, IR Camera)
- Indoor GPS (IPS)
- WiFi SLAM
- Beacon
- 추측 항법 (dead reckoning)
- 양 바퀴 축의 회전 값을 이용
- 이동 거리와 회전 값을 계산, 위치 측정
- 바닥 슬립, 기계정, 누적 오차 발생
- IMU 등의 관성 센서, 필터로 위치 보상
- 칼만필터 시리즈
- 필요한 정보
- 양 바퀴 축의 엔코더 값 E
- 바퀴 간 거리 D
- 바퀴 반지름 r
- 한계점 : 어디까지나 추정위치, 상대위치일 뿐이다
2. 센싱
- 거리센서
- LRF, 초음파 센서, 적외선 거리센서 (PSD)
- 비전센서
- 스테레오 카메라, 모노 카메라, 전 방향 옴니 카메라
- Depth camera
- SwissRanger, Kinect-2
- RealSense, Kinect, Xtion, Carmine(PrimeSense), Astra
3. 지도
- 길을 찾기 위해 지도가 필요!
- 도로와 같은 기반 시설의 경우 디지털 지도 OK!
- 병원, 카페, 회사, 가정집의 지도 - privacy 문제
지도가 없다? 만들자 - SLAM
4. 경로
- 내비게이션 (Navigation)
- 위치 추정 (Localization / Pose estimate)
- 경로 탐색 / 계획 (Path search and planning)
- DWA
- A Star
- Potential Field
- Particle Filter
- Graph
Gmapping
- OpenSLAM에 공개된 SLAM의 한 종류, ROS에서 패키지로 제공
- 특징 : Rao-Blackwellized 파티클 필터, 파티클 수 감소, 그리드 맵
- 하드웨어 제약 사항
- X,Y, Theta( θ ) 속도 이동 명령
- 차동 구동형 모바일 로봇
- 전 방향 이동 로봇
- 주행기록계 (Odometry)
- 계측 센서 : 2차 평면 계측 가능 센서 (LRF, LiDAR, Kinect, Xtion)
- 직사각형 및 원형의 로봇
- X,Y, Theta( θ ) 속도 이동 명령
지도작성 : Gmapping + TurtleBot3
실제 로봇이 있다면 위 코드를 통해 아래와 같이 구현 가능
2차원 점유 격자 지도
(Occupancy Grid Map)
- 흰색 = 로봇이 이동 가능한 자유 영역 (free area)
- 흑색 = 로봇이 이동 불가능한 점유 영역 (occupied area)
- 회색 = 확인되지 않은 미지 영역 (unknown area)
robot 구동 - ① sensor node 실행 - ④ gmapping에 sensor_msgs/LaserScan (평면 상 거리 정보) 전달
② turtlebot3_teleop 실행 - ③ turtlebot3_core에 velocity 값이 담긴 msgs 보냄
robot 구동하며 odom, base_... 알아냄 - ④ tf 형태로 gmapping에 센서위치 전달
gmapping을 통해 map 제작 - ⑤ map_server 패키지까지 제작
위치 추정 (Localization)
- 칼만 필터 (Kalman filter)
- 잡음이 포함되어 있는 선형 시스템에서 대상체의 상태를 추적하는 재귀 필터
- 베이즈 확률 기반
- 예측 (Prediction)
- 모델을 상정하고 이 모델을 이용해 이전 상태에서 현재 시점의 상태 예측
- 보정 (Update)
- 앞 단계의 예측 값과 외부 계측기로 얻은 실제 측정 값 간의 오차를 이용해 더욱 정밀한 값을 추정하는 보정
- 파티클 필터 (Particle filter)
- 시행 착오법 (try-and-error)을 기반으로한 시뮬레이션을 통해 예측하는 기술
- 대상 시스템에 확률 분포로 임의로 생성된 추정값을 파티클 형태로 나타냄
(1) 초기화 (2) 예측 (3) 보정 (4) 위치 추정 (5) 재추출
내비게이션 : Navigation + TurtleBot3
내비게이션
- Dynamic Window Approach (DWA) : local plan에서 주로 사용
- 로봇의 속도 탐색 영역 (velocity search space)에서 로봇과 충돌 가능한 장애물을 회피하며 목표점까지 빠르게 다다를 수 있는 속도를 선택하는 방법
DWA : 위치 영역이 아니라 속도 영역으로 바꿔 진행
결국 여기서 필요한 건 병진속도(v), 회전속도(w) 이고 이를 통해 Goal에 맞는 속도를 찾아가는 거다!
TurtleBot3 시뮬레이션 개발환경 준비 - 패키지 설치
$ sudo apt install ros-kinetic-joy ros-kinetic-teleop-twist-joy
ros-kinetic-teleop-twist-keyboard ros-kineticlaser-proc
ros-kinetic-rgbd-launch ros-kinetic-depthimage-to-laserscan
ros-kinetic-rosserial-arduino roskinetic-rosserial-python
ros-kinetic-rosserial-server ros-kinetic-rosserial-client
ros-kinetic-rosserial-msgs roskinetic-amcl ros-kinetic-map-server
ros-kinetic-move-base ros-kinetic-urdf ros-kinetic-xacro
ros-kineticcompressed-image-transport ros-kinetic-rqt-image-view
ros-kinetic-gmapping ros-kinetic-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
- 3차원 시뮬레이터 Gazebo 상에 가상의 로봇 구동
- TurtleBot3_teleop_key 노드를 통해 로봇 이동 가능
- Rviz를 통해 Gazebo 상의 로봇에 장착된 센서 값 확인 가능
export TURTLEBOT3_MODEL=waffle_pi
# 첫번째 터미널에 Gazebo 실행
source /opt/ros/noetic/setup.bash
export TURTLEBOT3_MODEL=waffle_pi # 로봇 모델 설정 (burger, waffle, waffle_pi 등)
roslaunch turtlebot3_gazebo turtlebot3_world.launch
# 두번째 터미널에 Teleop 실행
source /opt/ros/noetic/setup.bash
export TURTLEBOT3_MODEL=burger # 로봇 모델 설정 (첫 번째 터미널에서와 동일)
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
# 세번째 터미널에 rviz 실행
source /opt/ros/noetic/setup.bash
export TURTLEBOT3_MODEL=burger # 로봇 모델 설정 (필요한 경우)
roslaunch turtlebot3_gazebo turtlebot3_gazebo_rviz.launch
SLAM까지 띄울 수 있고 이를 통해 robot을 움직이며 Mapping할 수 있다.
+ 추가적으로 참고할 만한 책 : '칼만 필터는 어렵자 않아' , '확률론적 로보틱스'
'FOSCAR-(Autonomous Driving) > ROS 스터디' 카테고리의 다른 글
[2025 ROS 스터디] 이영상 #4주차 - SLAM과 내비게이션 (0) | 2025.02.07 |
---|---|
[2025 ROS 스터디] 황희찬 #4주차 - SLAM과 내비게이션 (0) | 2025.02.07 |
[2025 ROS 스터디] 홍동형 #4주차 - SLAM과 내비게이션 (0) | 2025.02.07 |
[2025 ROS 스터디] 김예찬 #4주차 - SLAM과 내비게이션 (0) | 2025.02.04 |
[2025 ROS 스터디] 이호휘 #4주차 - SLAM과 내비게이션 (0) | 2025.02.04 |