(1) SLAM이란 무엇인가
- SLAM(Simultaneous Localization and Mapping)이란 자신의 위치를 실시간으로 추정하면서 동시에 주변 환경의 지도를 셍성하는 기술이다. 로봇, AR, 자율주행 등에서 핵심 기술로 사용된다.
(2) Android 기반 SLAM 오픈소스
- Android에서는 정통 SLAM 기능을 완전히 구현한 예제는 드물지만 트래킹 + 위치 인식 + 시각화 흐름을 통해 SLAM의 동작 방식을 부분적으로 확인할 수 있다. 대표적으로 Google의 ARCore 기반 SLAM-like 앱 코드를 분석하면 Localization 흐름과 트래킹 로직을 Android 코드 상에서 확인할 수 있다. ARCore SDK for Android Studio 바로가기
(3) ARCore란 무엇인가
- ARCore는 Google에서 제공하는 AR(증강현실) 개발용 SDK로 카메라 및 센서 데이터를 활용하여 기기의 위치(Pose)를 실시간 추정하고 3D 공간을 트래킹하는 기능을 제공한다. 이처럼 ARCore는 내부적으로 기기의 현재 위치를 지속적으로 계산하는데, 이는 SLAM의 핵심 구성 요소 중 하나인 Localization과 동일한 역할을 한다. 따라서 ARCore는 완전한 SLAM은 아니지만 내 위치 추정 + 주변 평면 추적 + 시각적 트래킹이라는 측면에서 SLAM과 매우 유사한 동작 구조를 가지고 있다.
(4) ARCore SDK 실습하기
- GitHub에서 프로젝트를 다운로드하고 압축을 푼다.
ARCore SDK for Android Studio 바로가기

- Android Studio → Open an Existing Project → C:/.../arcore-android-sdk-main/samples/hello_ar_java 폴더 선택

- 프로젝트 Build 후 오류가 없는지 확인한다.
- 설정 → 태블릿 정보 → 소프트웨어 정보 → 빌드 번호를 7번 터치하면 토스트 메시지로 '개발자 모드를 켰습니다.'라는 메시지가 나온다.
- 설정 → 개발자 옵션 → USB 디버깅 허용 → Android Studio에서 디바이스 연결

- 앱 실행 후 카메라 권한 허용

- 화면을 터치하면 카메라가 추적한 위치(pose)를 기준으로 Anchor(기준점)가 생성되어 해당 위치에 오브젝트(공)가 고정된다. 이는 SLAM에서의 기준점(landmark) 설정과 유사하다.

- 내 위치가 시간마다 어떻게 바뀌는지 확인해 보겠다.
- HelloArActivity.java에 아래와 같은 코드를 입력해 로그를 찍는다.
Pose pose = camera.getPose();
Log.d("MyPose", "X: " + pose.tx() + ", Y: " + pose.ty() + ", Z: " + pose.tz());
- Logcat 창을 열고 MyPose를 검색하면 움직일 때마다 좌표가 바뀌는 것이 확인된다. 이처럼 SLAM의 Localization이란 내 위치를 실시간으로 추적하는 것이며, ARCore는 pose를 통해 이를 보여준다.
(5) ARCore에서 보는 좌표와 점의 의미는 무엇인가
- 앱을 처음으로 실행하면 ARCore는 그 순간 카메라가 바라보는 위치를 기준점(origin)으로 설정한다. 이것이 SLAM에서 말하는 초기 위치이다.
좌표 방향 설명
+X는 오른쪽
+Y는 위쪽
+Z는 뒤로
-Z는 앞으로
즉 핸드폰을 정면으로 들면 앞쪽은 -Z, 위는 +Y, 오른쪽은 +X 방향이다.
Pose pose = camera.getPose();
float x = pose.tx();
float y = pose.ty();
float z = pose.tz();
- 카메라가 바닥이나 테이블 같은 평면(Plane)을 인식하면 해당 위치에 점(노란색, 흰색 등)이 찍히는데 ARCore가 이 지점은 실제 평면이다고 판단하는 영역이다. 이는 SLAM의 Mapping(지도 생성)과 비슷한 개념이다.
SLAM을 마치며...
이번 실습에서 Kotlin이 아닌 Java 예제를 기반으로 진행한 이유는 공식 문서와 대부분의 참고 자료가 Java 중심으로 제공되었기 때문에 초기 구조와 흐름을 이해하기엔 Java 예제가 더 직관적이었다.
비록 ROS 기반의 정통 SLAM은 아니지만 Android 앱 내부에 내장된 SLAM-like 오픈소스를 직접 실행해 보며 SLAM이 어떤 흐름으로 동작하는지 체감할 수 있었다. 교수님께서 조언해주신 방식으로 접근하기 쉬웠고, 이번 실습을 통해 SLAM의 기본 원리를 쉽고 흥미롭게 이해할 수 있었다.