본문 바로가기
Robotics 🤖/SLAM 🗺️

[SLAM 로드맵] SLAM 엔지니어가 되려면 어떤 기술이 필요할까?

by 우직한 사람 2023. 11. 17.
반응형

다음 내용은 아래 포스트를 한국어로 번역한 내용입니다
https://www.thinkautonomous.ai/blog/slam-engineer/

 

SLAM Roadmap: Which skills are needed to become a SLAM Engineer?

What is SLAM in robotics? And what do you need to learn to become a SLAM Engineer? This analysis of 3 SLAM job offers will give you the skills needed to work on SLAM in Robotics or AR/VR.

www.thinkautonomous.ai

 

 

비가 내리는 수요일 밤, 파리에서 열리는 주간 "자율주행차 밋업"에 제 시간에 맞춰 도착했습니다. 저는 참가자 중 한 명이었는데, 이번 주에는 2018년 프랑스 자율주행 셔틀의 선두주자였던 '나브야'를 만나게 되어 기대가 컸습니다. 나브야의 인식 담당 이사는 매우 흥미로웠고, 자율주행 셔틀에 사용하는 많은 알고리즘을 설명해 주었습니다.

하지만 알고리즘 중 하나는 설명에 포함되어 있지 않았기 때문에 저는 모든 청중 앞에서 그에게 질문해야 했습니다. "현지화를 위해 무엇을 하고 있습니까?!" 저는 긴장하며 물었습니다. 그러자 그는 대답했습니다: "오, 우리는 모든 것을 슬램합니다!"

그리고는 청중석에 앉아있는 SLAM 엔지니어들의 모습을 보여주었습니다.

 

대부분의 자율주행 프로젝트에서 사람들이 목표로 하는 직업 1위는 컴퓨터 비전 엔지니어입니다. 그러나 많은 사람들이 LiDAR 인식 또는 SLAM과 같은 자율주행의 다른 부분도 놀라운 기회가 될 수 있다는 사실을 깨닫지 못합니다.

첫째, 이러한 역할은 더 드물고 "검색"이 덜 됩니다. 즉, 특정 회사에 입사하기는 더 어려울 수 있지만 일자리를 유지하는 것은 훨씬 더 쉬울 수 있습니다. 둘째, 이러한 직책은 컴퓨터 비전 및 인식과 매우 관련이 있는 경우가 많으며, 특히 요즘처럼 모든 것이 혼재되어 있는 상황에서는 더욱 그렇습니다.

이 포스팅에서는 SLAM 엔지니어가 어떤 일을 하는지, 그리고 그 자리에 오르기 위해 무엇이 필요한지에 대해 이야기하고자 합니다. 다음과 같은 몇 가지 질문에 답해 보겠습니다:

 

  1. 로봇 공학에서 SLAM이란 무엇인가요? 어떤 회사에서 SLAM을 연구하나요?
  2. 어떤 센서와 알고리즘이 관련되어 있나요?
  3. 필요한 기술과 전문 지식은 무엇인가요?

로봇 공학에서 SLAM이란 무엇인가요? 그리고 어떤 회사에서 SLAM을 연구하나요?

SLAM은 동시 로컬라이제이션 및 매핑의 약자입니다. 여기에는 로컬라이제이션과 매핑이라는 두 가지 구성 요소가 포함됩니다. 하지만 이 두 요소는 회사에 따라 다른 의미를 가질 수 있습니다.

자율주행 셔틀의 예를 다시 한 번 살펴봅시다. 모든 자율 로봇, 자동차, 셔틀, 드론 등... SLAM은 로컬라이제이션 모듈에 적합하며, 사용자가 만든 지도에서 자신의 위치를 찾는 것이 목표가 될 것입니다.  이 경우 센서(카메라, GPS, LiDAR 등)를 사용하여 지도를 만들고 지도 내에서 로봇의 위치를 지속적으로 파악하는 팀과 함께 작업하게 됩니다.

SLAM belongs to the second step: Localization

 

보시다시피 두 가지 방법으로 로컬라이즈할 수 있습니다:

  • 지도 사용
  • 지도 없이(SLAM)(이 글 참조!)

SLAM을 사용하는 모든 회사가 로보틱스 기반은 아닙니다. Apple, Meta 및 수많은 컴퓨터 비전 스타트업에서 일하는 SLAM 엔지니어를 볼 수 있습니다. 그 이유는 SLAM이 특정 환경에서 주행하는 데 사용되는 경우도 있지만, AR, VR 및 기타 3D 시나리오와 같이 단순히 해당 환경을 3D로 만드는 데 사용되는 경우도 있기 때문입니다.

While SLAM seems to be primarily a robotics thing, it has immense use cases in Augmented and Virtual Reality

 

따라서 SLAM에는 두 가지 유형의 회사가 참여하고 있습니다:

  • 자율 로봇 회사: SLAM을 사용하여 계획 알고리즘에 정보를 제공하는 역할을 합니다.
  • 자율 로봇이 아닌 회사: AR/VR/3D 재구성 등과 같은 목적으로 SLAM을 사용하는 회사 등

어떤 센서와 알고리즘이 관련되어 있나요?

이제 SLAM이 무엇이고 SLAM 엔지니어의 역할이 무엇인지 잘 알았으니, 이제 이 역할을 '어떻게' 수행할 것인지 자세히 살펴볼 필요가 있습니다. 여러분의 업무는 지도를 만들고 그 안에서 자신을 로컬라이즈하는 것이므로 다음과 같은 몇 가지 하위 기술이 포함됩니다:

  • 센서를 사용하여 2D 또는 3D 환경(지도) 만들기
  • 지도에서 내 위치 정의하기
  • 지도를 최신 상태로 유지하고 위치를 정확하게 파악하기

센서를 사용하여 2D 또는 3D 환경 만들기
SLAM에 사용되는 센서는 주로 LiDAR와 카메라의 두 가지 유형이 있습니다. LiDAR부터 시작하겠습니다.

 

SLAM with LiDAR

라이다는 세계의 포인트 클라우드를 구축하고 있습니다. 어떤 의미에서 이 '포인트 클라우드'는 이미 지도가 될 수 있습니다. 벽을 감지할 때마다 벽과 관련된 포인트 클라우드를 일종의 지도에 추가할 수 있습니다. 따라서 클라우드의 모든 점이 지도의 일부가 되며, 더 많이 운전할수록 지도는 더 커집니다.

A Map build with a LiDAR

이미지 출처 : https://githubhelp.com/TixiaoShan/LIO-SAM

 

반면 카메라는 중간 과정을 거쳐야 합니다. 데이터는 2D 기반(픽셀)이며, 이를 3D 세계로 변환해야 합니다. 또한 포인트 클라우드로 간주될 키포인트가 필요합니다. 이 작업은 비주얼 슬램(Visual SLAM)이라고 하는 분야로, 보통 ORB, BRISK, AKAZE, SURF 등과 같은 컴퓨터 비전 기능을 사용하여 수행됩니다.

A Map built with a camera and visual keypoints (openVSLAM algorithm)

 

피처는 LiDAR의 포인트 클라우드와 유사합니다.


다른 고급 기술은 신경 방사 필드와 3D 재구성을 활용하여 각 픽셀을 포인트 클라우드로 변환하므로 (드문드문한 피처와 달리) 밀집된 환경에서 운전할 수 있습니다. 이 경우 지도를 구성하는 것은 단지 몇 개의 특징이 아니라 모든 픽셀입니다.

 

지도에서 내 위치 정의하기

첫 번째 단계는 '매핑'이었고, 두 번째 단계는 로컬라이제이션입니다. 이 단계에서는 지도의 각 지점에 대한 상대적 위치를 정의하고자 합니다. 우리 앞의 이 벽과 옆의 이 울타리에서 우리는 얼마나 떨어져 있을까요?

로컬라이제이션의 역할은 우리가 가지고 있는 모든 랜드마크를 살펴보고 모든 랜드마크에 해당되는 위치를 추정하는 것입니다. 따라서 벽 앞에서 5미터 앞에 있다고 추정하는 동시에 다른 물체 앞에서 2미터 앞에 있다면 가능한 유일한 위치는 X입니다.

In Yellow, the possible probability location of the robot. In red, the measurements. In blue, the features or points detected.

 

이 단계는 대부분 4가지 유형의 알고리즘으로 해결됩니다:

  • Kalman Filters
  • Particle Filters
  • Information Filters
  • Graph Optimization

EKF-SLAM, Fast SLAM, GraphSLAM 등과 같은 알고리즘이 여기에 해당합니다. 또한 여기에는 몇 가지 하위 접근 방식이 수행된다는 점도 중요합니다. 예를 들어 FastSLAM은 파티클 필터를 사용하여 로봇과 랜드마크의 위치를 추정합니다.

 

지도를 최신 상태로 유지

마지막 단계는 지도를 부정확하지 않게 지속적으로 업데이트하는 것입니다. 시간이 지남에 따라 위치 추정치가 점점 더 정확도가 떨어지고 지도 측정값도 정확도가 떨어질 수 있습니다. 특히 일부 위치를 연속해서 두 번 방문하는 경우 포인트 클라우드가 중첩될 수 있습니다.

이를 루프 클로저라고 하는데, 루프 클로저에 관한 글과 포인트 클라우드 등록에 관한 다른 글을 읽어보시면 이 부분을 '이해'하실 수 있습니다.

 

Left: What happens when you keep scanning an environment without optimizing. Right: How the map gets optimized with Loop Closure.
SLAM and Loop Closure at Kitware

이미지 출처 : https://www.kitware.com/lidar-slam-spotlight-on-kitwares-open-source-library/

 

이것은 SLAM에서 또 하나의 중요한 과제입니다. 다음으로 어떤 유형의 기술을 구축해야 하는지 살펴봅시다.

 

필요한 기술과 배경 지식은 무엇인가요?

슬램 엔지니어 직무를 수행하기 위해 필요한 기술을 이해하는 가장 좋은 방법은 무엇일까요? 아마도 채용 공고를 살펴보는 것이겠죠!

제목에 SLAM 엔지니어가 언급된 채용 공고 3개를 선택했습니다. 하나는 FoxRobotics라는 회사에서, 다른 하나는 Tesla에서, 그리고 마지막 하나는 Symbotic이라는 창고 관리 회사에서 나온 채용 공고입니다.

여러분이 하게 될 일

The "What" part of 3 SLAM Engineer Job Offers at Symbotic, Tesla, and Apple

 

'무엇을' 부분에서 볼 수 있듯이 트위터에는 여러 가지 책임이 있지만 이해하기가 결코 쉬운 일은 아닙니다. 알고리즘을 개선한다는 것은 무엇을 의미할까요? 아니면 접근 방식을 최신 상태로 유지한다는 의미일까요? 이를 진정으로 이해하는 유일한 방법은 여러분이 일하게 될 회사에서 SLAM의 핵심 역할을 상상해 보는 것입니다.

예를 들어, Symbotic에서 일하기로 선택했다면 Walmart나 Amazon과 같은 창고 내부의 자율 로봇을 연구하게 될 것입니다.

이제 무엇을 해야 하는지 살펴봅시다:

 

Your requirements

Let's see the rest of the job offers, starting with Symbotic, Tesla, and Apple:

The Skills part of the 3 SLAM Engineer Job Offers. Notice the redundent elements.

 

보시다시피 다음과 같은 몇 가지 반복되는 요소가 있습니다:

- 언어: C++ 및 Python
- 배경: 석사 학위(컴퓨터 공학 또는 AI 또는 로봇공학 전공), 탄탄한 수학적 기본기
- 분야: 컴퓨터 비전 및 센서 융합 기술, 자율 로봇에 대한 배경 지식, 머신 러닝, eSLAM, LiDAR, ...
- 어려운 기술: 3D 재구성(모션으로부터의 구조, ...), SLAM 알고리즘(EKF-SLAM, 그래프 SLAM, 번들 조정...), 라이브러리(OpenCV, ROS, GSLAM, ...), 상태 추정(시각적 주행거리 측정, MAP, ...)

이것이 여러분이 알아야 할 내용입니다. 이제 SLAM 엔지니어가 실제로 사용하는 모습을 살펴보겠습니다.

 

Example 1 : Kitware Europe의 SLAM

Kitware는 과학 컴퓨팅, 의료 영상, 컴퓨터 비전, 데이터 및 분석, 품질 소프트웨어 프로세스 등 다양한 영역에서 오픈소스 소프트웨어를 만들고 지원하는 회사로 잘 알려져 있습니다. 다양한 오퍼링을 통해 포인트 클라우드 비주얼라이저를 만드는 "LiDARView"라는 이름의 소프트웨어를 제공하고 있으며, 이 소프트웨어는 SLAM과 호환됩니다.

그럼 이제 LiDARView로 "SLAM"을 어떻게 수행하는지 살펴보겠습니다:

이미지 출처 : https://lidarview.kitware.com/

 

Looking at their Open Source code, you may see a list of files:

The Code for SLAM at Kitware gives many hints on the type of skills we should build

이미지 출처 : https://gitlab.kitware.com/keu-computervision/slam

 

SLAM 엔지니어로 일하기의 1부입니다: 회사를 위한 SLAM 라이브러리 빌드하기입니다.


이 사례에서는 C++를 사용하여 SLAM 라이브러리를 구축하고 있으며, 복셀화, 키포인트 추정 및 매칭, 에이프릴 태그 감지 등 여러 컴포넌트를 사용하고 있습니다.

SLAM 알고리즘의 작동 방식을 간략하게 설명하겠습니다:

1. Keypoint Extraction: 포인트 클라우드에서 키포인트를 추출합니다(LiDAR에서).
2. Ego Motion: 소프트웨어는 시점(t)의 포인트 클라우드와 시점(t-1)의 포인트 클라우드를 사용하여 t-1에서 t까지의 "이동"을 계산하고 가장 가까운 포인트 매칭 함수를 사용하여 LiDAR(따라서 자동차)의 움직임을 복구하려고 시도합니다.
3. Localization: 추출된 키포인트와 에고 모션으로 계산된 새 위치를 지도에 추가합니다.

 

그런 다음 이를 루프에서 실행하여 맵을 업데이트하고 루프 클로저와 같은 요소를 추가하여 재방문 시 맵을 개선합니다.

 

Hidden Skills inside

  • LiDAR Processing: 대부분의 작업은 포인트 클라우드를 처리하는 방식으로 이루어집니다. 두 가지 주요 기술은 포인트 클라우드(포인트 클라우드 정복자 강좌에서 배운 대로)와 SLAM(SLAM 강좌에서 배운 대로)입니다.
  • Geometry: 저장소에는 많은 회전과 변환이 이루어지고 있으므로 스킬 세트에 이러한 기능이 있어야 합니다. 에고 모션 예측을 위한 스플라인 보간도 볼 수 있습니다.
  • Math: 수학: SLAM은 종종 고도의 수학 기술이 필요한 복잡한 문제입니다. 행렬 인수분해 및 기타 요소가 포함될 수 있으므로 기하학을 따로 떼어놓는 것이 좋습니다.
  • Graph SLAM Optimization: 사용 가능한 SLAM 알고리즘이 많이 있습니다. 실수하지 않는 한, 이 알고리즘은 "그래프 SLAM"을 구현하고 있으므로 그래프 최적화에 대한 모든 기술이 유용합니다.
  • C++ 및 ROS: 언급할 가치가 있지만, 이 코드는 C++로 구현되고 ROS에서 실행되므로 이 경우 이 두 가지를 알아야 합니다. 많은 SLAM 프로젝트에서 C++가 지배적인 언어입니다.

보시다시피, 이 특정 사례에서는 5가지 주요 SLAM 관련 기술이 있습니다.

 

😀 Software Engineer Skills for Kitware
: LiDAR Processing, Geometry, Maths, Graph SLAM Optimization, C++, ROS, LiDAR SLAM Approaches.

 

다른 기술을 사용한 다른 예를 살펴보겠습니다:

 

Example 2 : ORB SLAM v3

SLAM의 그래프 기반 LiDAR 애플리케이션을 보셨습니다. LiDAR 접근 방식 중 칼만 피틀러 또는 다른 유형의 필터를 사용할 수도 있습니다. 그리고 SLAM 자체 중에서도 Visual SLAM을 사용할 수도 있습니다. 비주얼 슬램은 카메라에서 발생하므로 어떻게 작동하는지 살펴보겠습니다.

예를 들어, ORB-SLAM(Oriented FAST and Rotated BRIEF SLAM)은 카메라에서 작동하는 SLAM 알고리즘으로, 다음과 같은 작업을 수행합니다:

  1. Feature Detection & Matching: 모서리와 가장자리와 같은 컴퓨터 비전 특징을 찾고 이러한 특징을 감지 및 추적하는 알고리즘을 구현합니다. 이 경우 FAST 키포인트와 BRIEF 디스크립터를 사용하고 있습니다.
  2. Pose Estimation : 그래프 SLAM 알고리즘을 구현하여 추출된 특징을 프레임마다 일치시켜 로봇의 포즈를 추정합니다.
  3. Mapping: 추출된 특징을 맵에 배치합니다.
  4. Loop Closure: 루프 폐쇄 알고리즘을 사용하여 피처의 중복을 제거합니다.
  5. Optimization: 번들 조정을 수행하고 그래프를 전체적으로 최적화하여 맵을 업데이트합니다.

이 경우 이전 알고리즘과 매우 유사한 패턴을 발견할 수 있습니다(다시 그래프 슬램 접근 방식입니다). 가장 큰 차이점은 이번에는 LiDAR 키포인트를 찾는 것이 아니라 카메라 키포인트를 찾는다는 점입니다. 루프 클로저 및 최적화 단계는 Kitware 예제에서도 수행되었을 가능성이 높습니다.

 

Additional Hidden Skills in Visual SLAM

  • Feature Detection and Matching: ORB(오리엔티드 패스트 및 회전된 브리프) 특징 및 기타 특징 설명자(Harris corners, BRIEF 등...)에 대한 지식.
  • Camera Models and Calibration: 카메라 내적 및 외적 매개변수와 카메라 보정 방법을 이해합니다.
  • 3D Reconstruction: 많은 비주얼 SLAM 알고리즘은 특히 스테레오 설정에서 작업할 때 2뷰 재구성을 사용합니다.
  • Sensor Fusion: 특히 GPS, IMU, 주행 거리계 등의 센서와의 융합은 비주얼 SLAM 또는 다른 접근 방식에서 자주 사용됩니다(실제로 대부분의 SLAM 알고리즘에서 이러한 센서를 사용).

 

😀 Software Engineer Skills for ORBSLAM Projects:
Computer Vision (Feature Detection & Tracking), 3D Reconstruction, Maths, Camera Calibration, Sensor Fusion, Graph Optimization, Mapping.

 

너무 어렵고 구체적이지 않나요? 그냥 사용하면 안 되나요?

너무 어렵나요? 네, SLAM은 로봇 공학 분야에서 가장 어려운 주제 중 하나입니다. (제 생각에는) 신경망 아키텍처를 이해하는 것보다 SLAM 알고리즘을 이해하는 것이 훨씬 더 어렵습니다.

하지만 SLAM은 컴퓨터 비전 및 인식에서 구축한 많은 기존 기술을 재사용하기 때문에 이러한 기술을 이미 보유하고 있다면 "익혀도 괜찮은" 기술입니다. 따라서 이러한 기술(3D 재구성, 특징 감지 등)을 먼저 학습한 다음 SLAM의 맥락에서 학습하는 것이 좋습니다.

그냥 사용하면 안 되나요? 물체 감지 알고리즘을 블랙박스로 사용할 수 있는 것과 마찬가지로 SLAM 알고리즘을 블랙박스로 사용할 수 있습니다. 이를 위해 Kitware의 소프트웨어와 같은 기존 소프트웨어를 사용하거나 GitHub 리포지토리를 복제할 수 있습니다. 반면에 하드웨어 스택과 함께 작동하도록 만드는 것은 다른 유형의 알고리즘을 사용할 때보다 훨씬 더 어려울 수 있습니다.

일부 회사에서는 이러한 알고리즘을 애플리케이션으로 사용하도록 요구할 수 있습니다. 이 경우 내부의 모든 알고리즘을 마스터할 필요는 없지만 결국에는 마스터하게 될 것입니다. 다른 알고리즘이 아닌 다른 알고리즘을 사용하려면 알고리즘에 대한 이해가 필요합니다.

 따라서

  • Change your LiDAR keypoint estimator
  • Use a different type of visual feature descriptor
  • Change from online to offline SLAM
  • Change from Kalman Filters to Particle Filters
  • ...

위왁 같은 접근 방식을 사용하는 이유, 이러한 접근 방식의 기본 원칙, 그리고 이러한 접근 방식을 작동시키는 방법을 알 수 있습니다.

 

Summary Next Step

이 분야를 전문으로 할 수 있는 엔지니어가 훨씬 적기 때문에 SLAM 엔지니어가 되는 것은 좋은 직업 선택입니다. 로봇 공학(로봇, 자동차, 드론 등) 또는 로봇 공학이 아닌 분야(VR, 컴퓨터 비전, 지오매핑 등)를 다루는 다양한 회사에서 일할 수 있으며 수익성이 높은 옵션이 될 수 있습니다.

SLAM에 사용되는 센서는 LiDAR와 카메라의 두 가지 유형이 있습니다. LiDAR 기반 접근 방식은 3D 포인트 클라우드를 추적하여 지도에 배치하는 방식으로 작동합니다. 카메라 기반 접근 방식도 비슷하게 작동하지만, 추적할 포인트는 3D로 투영된 2D 컴퓨터 비전 특징(예: 가장자리와 모서리)입니다.

대부분의 채용공고를 분석한 결과, SLAM 엔지니어로 일하려면 코딩, 접근 방식 테스트, 알고리즘 최적화, 환경 수정, 빠르고 견고한 작업 등을 수행해야 한다는 것을 알 수 있습니다.

또한 SLAM에는 다음과 같은 고난도 기술이 필요하다는 것도 잘 알고 있습니다: C++ 및 Python, 3D 재구성(모션으로부터의 구조), 포인트 클라우드 처리, 라이브러리 작업, 센서 퓨전 등...

SLAM 엔지니어는 SLAM 코드를 작성하거나 사용할 수 있습니다. SLAM 코드를 작성하려면 포인트 클라우드의 키포인트 감지 또는 프레임 간 에고 모션 추정과 같이 사용되는 특정 알고리즘에 대해 더 자세히 알아봐야 합니다.

하지만 SLAM 알고리즘을 사용하려면 이러한 알고리즘에 대한 깊은 이해가 필요합니다. 이 분야에서는 우회하는 방법이 어렵습니다.

라이다 엔지니어가 부족하다면 그럴 만한 이유가 있습니다. SLAM은 어려운 주제이므로 SLAM을 배우기 전에 핵심 알고리즘을 먼저 배우는 것이 좋습니다.

 

저처럼 자율주행 회사와 엔지니어를 만나는 것을 좋아한다면, 모든 사람이 AI 및 딥러닝 분야에서 일하는 것은 아니라는 사실에 놀랄 것입니다. 연결성, 계획, 제어 명령, 그리고 SLAM과 로컬라이제이션을 연구하는 엔지니어도 있습니다. 이러한 엔지니어들은 전문성을 가지고 있으며, 많은 AI 엔지니어들이 비슷하게 보이는 '엣지'를 가지고 있습니다.

하지만 이러한 주제를 전문으로 한다는 것은 AI와 컴퓨터 비전에 대한 문을 닫는 것을 의미합니다. SLAM에서 일하지 않는다면 말입니다. SLAM은 인식에 크게 의존하기 때문에 부족한 프로필을 구축하는 동시에 AI와 인식에 대해 광범위하게 작업할 수 있는 완벽한 절충안입니다

 

 

반응형