그만큼 실내 매핑 시스템
See U 실내 포지셔닝 시스템에 대한 전체 기술 참조: 아키텍처, 센서, 알고리즘, API 및 구현 가이드.
개요
매핑 시스템 소개
See U 실내 매핑 시스템이란?
See U 실내 시스템은 6개의 센서 기술 레이어와 고급 융합을 융합하여 GPS를 사용할 수 없는 곳에서도 정확한 위치를 제공하는 폐쇄공간 포지셔닝 플랫폼입니다.
Wi-Fi 또는 Bluetooth 전용 제품과 달리 당사는 다음을 포함하는 다중 모드 스택을 사용합니다.
- 자기 위치정보: 모든 건물에 대한 고유한 자기 '지문'
- Wi‑Fi RTT: 정확한 거리를 위한 비행 시간 범위
- 블루투스 LE: 앵커 및 관심 장소를 위한 비콘
- 관성 센서: 고급 IMU를 사용한 추측 항법
- 컴퓨터 비전: SLAM 및 시각적 마커
- GNSS: 부드러운 실내-실외 전환
안전한 길 찾기를 위해 99%의 경우 1~2m 정확도
100ms 미만의 엔드투엔드 대기 시간으로 실시간 업데이트
신뢰성과 정밀도를 위한 다양한 기술 융합
시스템 아키텍처
구조 및 주요 구성품
건축 빌딩 블록
1. 데이터 수집 계층
모든 장치 센서의 원시 데이터를 실시간으로 스트리밍합니다.
- • 기본 드라이버(iOS/Android)
- • 샘플링 속도 관리
- • 일괄 융합을 위한 데이터 버퍼링
- • 타임스탬프 동기화
2. 전처리 계층
융합을 위해 데이터를 필터링, 정규화 및 준비합니다.
- • 저역 통과 및 고역 통과 필터
- • 자동 교정
- • 이상값 감지 및 제거
- • 정규화 및 확장
3. 센서 융합층
여러 소스를 현대적인 융합 방법과 결합합니다.
- • 입자 필터(확률적)
- • 평활화를 위한 확장된 칼만
- • 적응형 센서별 가중치
- • 실내/외 상황 감지
4. 포지셔닝 레이어
지도상의 최종 사용자 위치를 계산합니다.
- • 지도 매칭
- • 유효한 경로 세그먼트에 스냅
- • 바닥/수위 감지
- • 드리프트 보정
5. 탐색 레이어
경로 계획 및 단계별 지침.
- • 접근성 가중치가 있는 A*
- • 오디오 명령 생성
- • 동적 재라우팅
- • POI에 대한 근접 알림
6. 인터페이스 레이어
앱 통합을 위한 API 및 SDK.
- • 웹 및 서버용 REST
- • 네이티브 SDK(iOS 및 Android)
- • WebSocket 실시간 업데이트
- • 위치 이벤트용 웹후크
센서 레이어
레이어별 기술 세부정보
자기 위치정보
지구 필드와 건물로 인한 이상 현상을 매핑합니다. 각 구조에는 고유한 자기 지문이 있습니다.
기술 사양:
- 샘플링 속도: 50~100Hz
- 분해능: 0.01μT
- 지속적인 자동 교정
- 간섭 보상
Wi-Fi RTT
액세스 포인트까지 연결되는 비행 시간 Wi-Fi입니다. 장치 및 인프라 RTT 지원이 필요합니다.
기술 사양:
- 프로토콜: IEEE 802.11mc(Wi-Fi RTT)
- 대역: 2.4 및 5GHz
- 지연 시간: < 100ms
- 삼각 측량을 위한 최소 3개의 AP
블루투스 저에너지(BLE)
근접성, 방향, POI 및 웨이포인트에 대한 비콘입니다.
기술 사양:
- 프로토콜: BLE 5.0+
- RSSI(수신 신호 강도)
- 배터리: 2~5년
- 범위: 최대 100m
관성 측정 장치(IMU)
IMU는 참조 간의 간격을 메우기 위해 동작, 회전 및 고도를 다룹니다.
기술 사양:
- 가속도계: ±16g, 400Hz
- 자이로: ±2000°/s, 400Hz
- 바로: 바닥 높이 0.5m
- 퓨전 : 칼만
컴퓨터 비전(CV)
위치 업데이트 및 SLAM을 위한 기능, AR 마커, QR, 텍스트를 시각적으로 찾습니다.
기술 사양:
- SLAM: 동시 현지화 및 매핑
- 특징 탐지: ORB, SIFT
- AR 마커: ArUco, QR
- 런타임: TensorFlow Lite
GNSS/GPS(실외)
실외 및 실내외 핸드오버 및 드리프트 제어를 위한 위성 위치입니다.
기술 사양:
- 다중 GNSS: GPS, GLONASS, 갈릴레오, BeiDou
- 빠른 TTFF를 위한 A-GPS
- 자동 실내/실외
- 다른 레이어와 융합
알고리즘
처리 및 지능
입자 필터(몬테카를로)
많은 가중치 입자는 여러 잡음 센서에서 가장 가능성이 높은 사용자 포즈를 추적합니다.
확장 칼만 필터
잡음이 있는 입력이 있는 동적 시스템을 재귀적으로 추정합니다. 매끄러운 경로와 단기 예측에 사용됩니다.
A* 길 찾기
장애물, 접근성, 사용자 선호도를 가중치로 하여 최단 경로를 찾습니다.
쾅
지도를 작성하고 시각적 기능을 사용하여 지도 안의 장치를 추적합니다.
기계 학습(신경망)
환경을 분류하고, 데이터의 노이즈를 제거하고, 시간이 지남에 따라 정확도를 향상시키는 훈련된 모델입니다.
추측항법
라디오 수정 사항이 떨어질 때 속도와 방향을 사용하여 마지막 수정 사항에서 포즈를 전파합니다.
처리 흐름
데이터 캡처
센서는 실시간으로 원시 측정을 스트리밍합니다.
전처리
필터링, 교정 및 정규화
센서 융합
입자 필터는 모든 소스를 병합합니다.
칼만 필터
궤적을 매끄럽게 하고 예측합니다.
지도 매칭
라우팅 가능한 맵 그래프에 투영
출력 포즈
API를 통해 앱에 노출됨
REST API
엔드포인트 및 통합
기본 URL
/api/v1/positioning현재 장치 포즈를 반환합니다.
매개변수:
device_idvenue_idfloor/api/v1/navigation/route두 지점 사이의 경로 계획
매개변수:
origindestinationaccessibility_mode/api/v1/venues/{id}/map장소 지도 타일 가져오기
매개변수:
venue_idfloorformat/api/v1/pois근처 관심 지점 나열
매개변수:
latlngradiuscategory/api/v1/tracking/update서버측 융합을 위한 포스트 센서 배치
매개변수:
sensor_datatimestampdevice_id샘플 요청
curl -X POST https://api.seeu.app/v1/navigation/route \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"origin": {
"lat": -23.550520,
"lng": -46.633308,
"floor": 1
},
"destination": {
"lat": -23.551234,
"lng": -46.634567,
"floor": 2
},
"accessibility_mode": true
}'구현 가이드
스택을 통합하는 방법
1. 시스템 요구사항
iOS
- • iOS 14.0 이상
- • 스위프트 5.5+
- • 코어로케이션
- • 코어모션
- • ARKit(선택사항)
기계적 인조 인간
- • 안드로이드 8.0 이상(API 26)
- • 코틀린 1.7+
- • Google Play 서비스
- • 안드로이드 센서 API
- • ARCore(선택사항)
2. SDK 설치
iOS(CocoaPod)
pod 'SeeUMapping', '~> 1.0'
안드로이드(그레이들)
implementation 'app.seeu:mapping:1.0.0'
3. 초기화
// Swift
import SeeUMapping
let mapping = SeeUMapping(apiKey: "YOUR_API_KEY")
mapping.configure(
venueId: "shopping-center-xyz",
enableMagneticPositioning: true,
enableWiFiRTT: true,
enableBLE: true
)
mapping.startPositioning { result in
switch result {
case .success(let position):
print("Lat: \(position.lat), Lng: \(position.lng)")
case .failure(let error):
print("Error: \(error)")
}
}4. 네비게이션
mapping.calculateRoute(
from: currentPosition,
to: destination,
accessibilityMode: true
) { route in
mapping.startNavigation(route: route) { instruction in
// turn-by-turn instructions
print(instruction.text)
speakInstruction(instruction.audio)
}
}