の 屋内マッピングシステム
See U 屋内測位システムの完全な技術リファレンス: アーキテクチャ、センサー、アルゴリズム、API、実装ガイド。
概要
マッピングシステムの紹介
See U屋内マッピングシステムとは何ですか?
See U 屋内システムは、GPS が利用できない場所でも正確な位置を提供するために6 つのセンサー技術レイヤーを高度な融合で融合した閉鎖空間測位プラットフォームです。
Wi‑Fi または Bluetooth のみの製品とは異なり、以下を含むマルチモーダル スタックを使用します。
- 磁気地理位置情報: すべての建物に固有の磁気「指紋」
- Wi‑Fi RTT: 正確な距離を測定する飛行時間測距
- Bluetooth LE: アンカーと名所のビーコン
- 慣性センサー: ハイエンド IMU による推測航法
- コンピュータ ビジョン: SLAM と視覚的マーカー
- GNSS: 屋内と屋外のスムーズな移行
99% の場合で 1 ~ 2 m の精度で安全なウェイファインディングを実現
エンドツーエンドの遅延が 100 ミリ秒未満のリアルタイム更新
多くのテクノロジーを融合して信頼性と精度を実現
システムアーキテクチャ
構造と主要構成部品
アーキテクチャの構成要素
1. データ収集層
すべてのデバイスセンサーからの生データをリアルタイムでストリーミングします。
- • ネイティブドライバー (iOS / Android)
- • サンプルレート管理
- • バッチフュージョンのためのデータバッファリング
- • タイムスタンプの同期
2. 前処理層
データをフィルタリング、正規化し、融合用に準備します。
- • ローパスフィルターとハイパスフィルター
- • 自動校正
- • 外れ値の検出と削除
- • 正規化とスケーリング
3. センサーフュージョン層
複数のソースを最新のフュージョン手法で組み合わせます。
- • 粒子フィルター (確率的)
- • 平滑化のための拡張カルマン
- • センサーごとの適応重み付け
- • 屋内/屋外コンテキスト検出
4. レイヤーの位置決め
最終的なマップ上のユーザーの位置を計算します。
- • マップマッチング
- • 有効なパスセグメントにスナップします
- • 床/レベル検出
- • ドリフト補正
5. ナビゲーション層
経路計画とターンバイターンの指示。
- • アクセシビリティの重み付けを伴う A*
- • 音声指示の生成
- • 動的再ルーティング
- • POIへの近接アラート
6. インターフェース層
アプリ統合のための API と SDK。
- • Web およびサーバー用の REST
- • ネイティブ SDK (iOS および Android)
- • WebSocketのライブアップデート
- • 位置イベントの Webhook
センサー層
レイヤーごとの技術的な詳細
磁気地理位置情報
地球フィールドと建物に起因する異常をマップします。各構造には固有の磁気指紋があります。
技術仕様:
- サンプルレート: 50 ~ 100 Hz
- 分解能: 0.01μT
- 継続的な自動校正
- 干渉補償
Wi-Fi RTT
アクセスポイントまでの飛行時間型Wi-Fi。デバイスとインフラストラクチャの RTT サポートが必要です。
技術仕様:
- プロトコル: IEEE 802.11mc (Wi-Fi RTT)
- 帯域: 2.4 および 5 GHz
- レイテンシ: < 100 ミリ秒
- 三角測量用に少なくとも 3 つの AP
Bluetooth 低エネルギー (BLE)
近接性、方向、POI、ウェイポイントのビーコン。
技術仕様:
- プロトコル: BLE 5.0+
- RSSI(受信信号強度)
- バッテリー: 2 ~ 5 年
- 範囲: 最大 100 メートル
慣性計測ユニット(IMU)
IMU は、参照間のギャップを埋めるために、動き、回転、および高度をカバーします。
技術仕様:
- 加速度計: ±16 g、400 Hz
- ジャイロ: ±2000°/秒、400 Hz
- バロ:床高0.5m
- フュージョン: カルマン
コンピュータービジョン (CV)
位置更新や SLAM 用のフィーチャ、AR マーカー、QR、テキストを視覚的に見つけます。
技術仕様:
- SLAM: ローカリゼーションとマッピングを同時に行う
- 特徴検出: ORB、SIFT
- ARマーカー:ArUco、QR
- ランタイム: TensorFlow Lite
GNSS/GPS(屋外)
屋外および屋内と屋外のハンドオーバーおよびドリフト制御のための衛星位置。
技術仕様:
- マルチGNSS: GPS、GLONASS、Galileo、BeiDou
- A-GPS による素早い TTFF
- 自動屋内・屋外
- 他のレイヤーと融合
アルゴリズム
処理とインテリジェンス
粒子フィルター (モンテカルロ)
多くの重み付けされたパーティクルは、複数のノイズの多いセンサーから最も可能性の高いユーザーのポーズを追跡します。
拡張カルマンフィルター
ノイズの多い入力を含む動的システムを再帰的に推定します。スムーズなパスと短期予測に使用されます。
A* 経路探索
障害物、アクセシビリティ、ユーザーの好みを重みとして最短経路を検索します。
スラム
マップを構築し、視覚的な機能を使用してその中のデバイスを追跡します。
機械学習(ニューラルネットワーク)
トレーニングされたモデルにより、環境を分類し、データのノイズを除去し、時間の経過とともに精度を向上させます。
推測航法
無線フィックスがドロップしたときに、速度と方位を使用して最後のフィックスからポーズを伝播します。
処理の流れ
データキャプチャ
センサーは生の測定値をリアルタイムでストリーミングします
前処理
フィルタリング、キャリブレーション、正規化
センサーフュージョン
パーティクルフィルターはすべてのソースをマージします
カルマンフィルター
軌道を滑らかにして予測します
マップマッチング
ルーティング可能なマップ グラフに投影する
出力ポーズ
API 経由でアプリに公開される
REST API
エンドポイントと統合
ベースURL
/api/v1/positioning現在のデバイスのポーズを返します
パラメータ:
device_idvenue_idfloor/api/v1/navigation/route2 点間のパスを計画する
パラメータ:
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以降
- • Swift 5.5+
- • コアの場所
- • コアモーション
- • ARKit (オプション)
アンドロイド
- • Android 8.0+ (API 26)
- • Kotlin 1.7 以降
- • Google Play サービス
- • AndroidセンサーAPI
- • ARCore (オプション)
2.SDKのインストール
iOS (ココアポッド)
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)
}
}