길 찾기에 필요한 것
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
터틀봇 원격 조종
$ export TURTLEBOT3_MODEL=waffle
$ roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
Rviz 실행
$ export TURTLEBOT3_MODEL=waffle
$ roslaunch turtlebot3_gazebo turtlebot3_gazebo_rviz.launch
가상 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
※Navigation을 사용할때는 퍼블리셔의 메세지가 섞일 수 있기때문에 사용하던 teleop를 꺼준다.
'FOSCAR-(Autonomous Driving) > ROS 스터디' 카테고리의 다른 글
[2024 ROS 스터디] <김예원> #1주차 - <ROS 소개 > (0) | 2024.09.05 |
---|---|
[2024 ROS 스터디] 초라핀스카 베로니카 #4주차 - SLAM과 내비게이션 (0) | 2024.07.25 |
[2024 ROS 스터디] 반제호 #4주차 - SLAM과 내비게이션 (0) | 2024.07.25 |
[2024 ROS 스터디] 반제호 #3주차 - ROS 기본 프로그래밍 (0) | 2024.07.22 |
[2024 ROS 스터디] 김기태 #3주차 - ROS 기본 프로그래밍 (0) | 2024.07.21 |