# SLAM

SLAM의 개요
이미지 출처 : https://kr.mathworks.com/discovery/slam.html Simulatneous Localization and Mapping 동시적 위치 추정 및 지도 작성 위치 정보와 지도 정보가 아예 없는 불완전한 환경에서 사용이 가능 SLAM을 통해 최적의 위치 정보를 추론 가능 자율주행 차량에 사용되어 주변 환경 지도를 작성하는 동시에 차량의 위치를 지도 안에서 인식하는 기법 Localizaiton 정확한 지도 정보를 기반으로 위치 정보를 알아내는 기술 GPS 처럼 네비게이션에서 내 위치에 대한 위도, 경도, 고도, 좌표를 가져 오는 것 처럼 내 위치를 추정하는 과정 내가 어디 있는지 추론하는 과정 Mapping
SLAM
Simultaneous Localization And Mapping 동시적 위치추정 및 지도작성 개요 Perception 주변 공간 인지 |Exteroceptive sensing|Proprioceptive sensing| |:---:|:---:| |외수용성 감각MappingEstimate environmentGiven environmentGiven accurate motion informationReconstruct a map|고유 감각(=proprioception)LocalizationGiven motion informationEstimate motionGiven an accurate mapEstimate vehicle pose| Monte Carlo Localization 지도가 사전 정보로 주어졌을 때, 파티클 필터 기법을 사용해서 위치 추정 motion(propriocep

Point-lio 빌드 및 실행
Linux Condition PC : Desktop OS : Ubuntu 18.04 CPU : I9-10990 GPU : GTX 1660 TI CUDA : 11.7 ver. Memory : 32GB Editor : VS code Sensor LiDAR : Ouster2 64ch (Firmware=v2.1.1) (TCP) GPS : Novatel PwrPak7-E1 Receiver (TCP) / GNSS Antenna 2 EA IMU : Epson G320 MEMS (PwrPak7) 🔖참고 사이트) Ouster LiDAR ROS Driver Github How to build-up Ouster LiDAR (velog) [Novatel GPS ROS Driver Github](http
Evaluation and comparison of eight popular Lidar and Visual SLAM algorithms 리뷰
https://arxiv.org/abs/2208.02063 > 📝 개요 8개의 open-source LiDAR/visual SLAM 시스템을 동일 환경에서 실험해 성능 비교 : LOAM, Lego LOAM, LIO SAM, HDL Graph SLAM, ORB SLAM3, Basalt VIO, SVO2 실내외에서 아래의 여러 컨디션에 따른 성능과 계산자원 비교를 수행하였다. 1) 센서의 마운트 포지션 2) 지형, 진동 3) 모션 (다양한 선속도와 각속도) 마지막으로 각 컨디션 별 최적의 시스템에 대한 제안으로 끝맺음. > 🔎 결론 전반적으로 실외, dynamic object가 있는 환경에서는 라이다 기반이 우수함. 카메라보다 넓은 FOV를 이유로 듦. LiDAR SLAM의 경우, LIO SAM w/ IMU가 베스트 LEGO LOAM은 경량이 중요하다면 굿, 대신 센서가 땅에 가까울 수록 잘 작동 LOAM도 경량 조건 시 괜찮

LiDAR self compensation 시도
LiDAR를 SLAM에 사용할 때 imu 값을 이용한 motion compensation을 전처리단에서 수행하는 경우가 많다. 왜냐하면 주행 차량에서 취득하는 경우와 같이 빠른 속도로 움직이는 경우 라이다 앵글컷 시작점과 종료점이 꽤 큰 차이를 가질 수 있기 때문이다. 이를 보상하지 않는 것은 라이다가 한바퀴 스캔하는 동안 정지해 있다고 가정하는 것과 같음. 근데 imu가 없다면 어떻게 해야할까? 현재 프레임의 포즈를 보상 없이 추정한 후, 맵을 쌓을 때 이전 포즈와 현재포즈의 차이를 이용해 보상한 프레임을 사용해보기로 했다. Pandar 128 채널 라이다를 사용해 실험했다. 프레임 하나를 띄워보았다. 민트 화살표가 차량 주행 방향이다. 이 데이터는 후방이 +y, 왼쪽이 +x, 위가 +z인 좌표계를 사용함을

ROS melodic에서 Hector-mapping하기(G4 Lidar)
2023.03.14 수정 저번시간에는 YDLidar를 이용하여 rviz툴로 point cloud를 시각화 해보았다. 이번 시간에는 Hecto-slam을 이용하여 mapping을 해보자. 그전에 Slam, Mapping, Hector이 무엇인지 알아보자. Setting ROS melodic Ubuntu 18.04 Jetson Nano jetpack(4.6.1) 📌SLAM이란 Simultaneous Localization and Mapping 이란 기술의 이름을 줄인말로써, 직역하면 "동시적으로 위치를 추정하고 지도를 작성" 하는 것을 의미한다. 쉽게 SLAM이해하기 RPG 게임을 할 떄 맵 혹은 협곡을 돌아다니면서 지도를 얻는 것이 일종의SLAM이라고 할 수 있다. $$가 최소가 되는 $$x$$의 값을 찾는 것을 목표로 한다. 보통 최적화 방법들은 Iterate하게 동작한다. 아래의 공식 처럼 $$i$$번 째 $$x$$의 함수 값 $$f(x_i)$$가 어디로, 얼만큼 이동해야 현재의 값보다 작아질지 구하고($$\bigtriangleup x$$), 이동해 $$f(x)$$가 최소가 되는 $$x$$값을 찾는다. $$ x{i+1} = xi + \bigtriangleup x, \bigtriangleup x=-\lambda J(x_i) $$ $$xi$$에서 $$x{i+1}$$로 이동하기위해선 1) 어느 방향으로, 2) 얼만큼 이동할 것인지에 대한 정보가 필요하다. GD는 단순히 현재 위치에서 내려가는 방향만을 가지고서 다음 step으로 이동하기 때문에 얼만큼 이동할 것인지($$\lambda$$)는 사용자가 결정해주어야 한다. 이 때, $$\lam
slam
slam(Simultaneous Localization and Mapping) 정의 동시적 위치 추적 및 지도 작성 기술 특징 지도를 작성(임의의 공간에서 이동할 때) 자신의 위치 파악 종류 visual slam(카메라 센서) 정의 카메라 및 영상 센서로 획득한 영상을 사용함 장점: 값이 쌈 단점: 연산량 많음 종류 Monocular: 1개의 단안 카메라 Stereo: 2개의 고정된 카메라 RGB-D: depth 정보 얻을 수 있는 카메라 적용 방식 Feature-Based SLAM: 영상에서 특징점 추출하여 slam 적용 Direct SLAM: pixel 정보 그대로 slam 적용 2
[ROS] Karto SLAM 실습
이번 포스트에서는 graph SLAM의 대표적인 예제인 Karto SLAM을 가제보 시뮬레이션에서 실습하는 포스트입니다. 이 외에도 잘 알려진 graph SLAM으로는 Cartographer가 있습니다. 실제로 아래의 논문에서 발췌한 내용으로, 언급한 두가지 SLAM 알고지즘이 대표적인 것을 알 수 있습니다. 2D SLAM Algorithms Characterization, Calibration, and Comparison Considering Pose Error, Map Accuracy as Well as CPU and Memory Usage, Sensors, 2022 : yy 밑에 붙여 넣기: P(대문자) 삭제 한글자: x 현재행: dd 현재 단어: dw

[ROS] ORB SLAM 실습
이번 포스트에서는 ORB SLAM2 패키지를 이용하여 monocular SLAM을 진행하고자 합니다. Procedure 1) 먼저 ORB-SLAM2 를 catkinws/src_ 에 다운받습니다. 2) 이 떄 주의해야 할 사항으로는, 배포된 코드에 error가 있으므로 이를 수정해주어야 합니다 related post: https://github.com/raulmur/ORB_SLAM2/issues/59#issuecomment-328763548 이를 위해서 먼저 orbslam2ros/orb_slam2/src에 접근합니다. <img src="https://velog.velcdn.com/images/wilko97/post/95e47f5b-8ff9-4c00-9540-f26d534dd561/image.p

[ROS] gMapping SLAM 실습
이번 포스트에서는 gMapping SLAM을 가제보 시뮬레이션에서 실습하는 포스트입니다. 먼저 gMapping SLAM Package의 pipeline을 살펴보겠습니다 1) Sensor 노드에서는 observation($$z_{t}$$)값을 측정합니다 2) 다음으로는 turtlebot_teleop에서 전달되는 velocity값이 odometry로 사용되게 됩니다. 즉 Odometry measurement와 Scan Observation을 이용하여 현재의 포즈를 추정하고, grid map을 만들게 됩니다. Procedure 1) In
[논문리뷰] gMapping SLAM
논문제목: Improved Techniques for Grid Mapping with Rao-Blackwellized Particle Filters 발표 학회 및 년도: IEEE Transactions on Robotics, 2007 Overview of gMapping gMapping SLAM은 ROBOTIS turtlebot3 SLAM 패키지에 default로 설정되어 있습니다 gMapping SLAM은 가장 보편적으로 사용되는 SLAM 알고리즘이라 할 수 있습니다 OpenSLAM에 의해 개발되었습니다. Rao-Blackwellization particle filter 기반의 Grid-based SLAM 방법입니다. 따라서 _robot의 pose와 landmarks을 각각
Intro
로봇 운영 체제(ROS 또는 ros) 로봇 소프트웨어 개발을 위한 소프트웨어 프레임워크 오로카(네이버카페) : http://www.oroca.org/ 로봇소스 : https://community.robotsource.org/ 로봇공학을 위한 열린 모임(페이스북) : https://www.facebook.com/groups/KoreanRobotics SLAM(Simultaneous Localization And Mapping) 임의 공간에서 이동하면서 주변을 탐색할 수 있는 로봇에 대해, 그 공간의 지도 및 현재 위치를 추정하는 문제(위키백과) 참고사이트 : https://saint-swithins-day.tistory.com/83 https://saint-swithins-day.tistory.com/85

Lidar SLAM 맵 생성 및 병합(merge)하기 with SC-LIO-SAM, map merge tool
Map merge tool을 이용한다. > PC 환경 OS : Ubuntu 18.04 ROS version : ROS1 pytohn version : 3.7.0 sensor : ouster1 64ch imu : ouster imu 1. SC-LIO-SAM란? LIO-SAM을 Scan context형식과 합하여 LIO-SAM을 업그레이드 시킨 SLAM 알고리즘이다. 2. 다운로드 https://github.com/gisbi-kim/SC-LIO-SAM 3. 🛠Build 및 실행 빌드 순서: 실행 순서: <c
SLAM (Simultaneous Localization and Mapping)
SLAM쪽 공부를 하면서 ICP부터 정리하려 했으나, SLAM이 뭔지에 대해 간단히 짚는 글을 따로 분리하는 게 좋을 것 같아 작성한다. SLAM (Simultaneous Localization and Mapping) SLAM의 영어를 직역하자면 동시적인 localization과 mapping이다. localiztion: 위치를 추정 mapping: map 구축 [Localization: 위치 추정] localization은 스마트폰으로도 많이 사용하는 GPS를 생각하면 이해가 빠르다. GPS 센서는 지구에서 내 위치에 대한 위도, 경도, 고도를 가져오는데 이 과정이 결국 내 위치를 추정하는 것이다. 운전을 할 때 내 위치를 알아야 네비게이션에서 경로를 알려줄 수 있듯이 자율주행에서도 localization은 필수적이다. [Mapping: map 구축] mapping이라는 말은 SLAM을 처음 접하는 사람에게는 생소할 수 있는 용어다. GPS가 여러

Introduction to Visual SLAM From Theory to Practice (2)
아래는 Xiang Gao와 Tao Zhang의 을 읽고 번역정리+추가적인 코멘트를 단 내용이다. 문장은 가능하면 간소화하고, 이론적으로 더 참고할만한 부분은 추가적인 코멘트를 넣었음. 저자에 의해 모든 자료가 무료 배포되었음. 아래 링크 참고 📘 영어판 도서 파일: https://github.com/gaoxiang12/slambook-en 📂 practice 코드: https://github.com/gaoxiang12/slambook2 2장. 3D rigid Body Motion > 🔎 학습 목표 3D 공간 상의 rigid body 기하학- 회전행렬, 변환행렬, 쿼터니언, 오일러각- 을 익힌다. Eigen 라이브러리의 행렬&기하 모듈 사용법을 익힌다. 지난 시간에 우리는 visual SLAM의 전반적인 프레임워크와 내용을 살펴보았다. 이번 강의에서는 visual SLAM의 가장 기초적인 이

Introduction to Visual SLAM From Theory to Practice (1)
아래는 Xiang Gao와 Tao Zhang의 을 읽고 번역정리+추가적인 코멘트를 단 내용이다. 말은 가능하면 간소화하고, 이론적으로 더 참고할만한 부분은 추가적인 코멘트를 넣었음. 저자에 의해 모든 자료가 무료 배포되었음. 아래 링크 참고 📘 영어판 도서 파일: https://github.com/gaoxiang12/slambook-en 📂 practice 코드: https://github.com/gaoxiang12/slambook2 1장. Introduction to SLAM > 🔎 학습 목표 Visual SLAM 프레임워크가 어떤 모듈들로 이루어지고, 각 모듈이 어떤 역할을 하는지 이해한다. 프로그래밍 환경을 셋팅하고, 실험을 위한 준비를 완료한다. 리눅스에서 프로그램을 어떻게 컴파일하고 실행하는지 이해한다. 만일 컴파일 단계에서 문제가 생긴다면 어떻게 디버깅하는지 배운다. C

Introduction to Visual SLAM From Theory to Practice (0)
SLAM이라는 분야가 워낙 여러 연구분야를 다 갖다붙인 합성물같은 특성을 가지다보니 단일 연구분야로서는 꽤 광범위한 배경지식을 요구한다. 그래서 SPARK Lab에서 공개한 SLAM 라이브러리인 Kimera를 처음 보았을 때 SLAM 라이브러리가 가질 수 있는 가장 알맞은 이름이라며 감탄했던 기억이 있다. 가능한 모든 것을 조합해 어떻게든 작동하게 만드는 모습이 “안되면 되게 하라” 라는 공학정신을 그대로 보여주는 듯 한데, 이런 점이 SLAM이라는 분야의 매력이 아닌가 생각한다. 카메라 센서의 가격적인 면이나 접근성의 경쟁력 덕분에 여러 고기능 센서들의 등장과 유행에도 불구하고 Visual SLAM은 확고한 파이를 유지하고 있는데 (사실 정확히는 pure Visual SLAM보다는 Visual Inertial S