-- Views
September 22, 25
スライド概要
iOSDC2025 で登壇した際に使用した資料です。
ゼロタップの世界へ UWB Nearby Interaction 実装ガイド iOSDC Japan 2025 Track D oka yuji
経歴 • 教員(工業:電気、電子、情報) • iOSエンジニアにキャリアチェンジ
経歴
トーク内容 • Nearby Interactionとは? • UWBについて • 実装方法 • Demo & Tips
Nearby Interactionとは?
Nearby Interaction • 一言で言うと位置情報をインタラクティブに通信するフレームワーク UWBチップにアクセスして距離や方向を測定することが可能
Nearby Interaction • 一言で言うと位置情報をインタラクティブに通信するフレームワーク UWBチップにアクセスして距離や方向を測定することが可能
Nearby Interaction
Nearby Interaction
Nearby Interaction
Nearby Interaction
Nearby Interaction • iOS 15 〜 サードパーティ製のUWBチップが利用できるようになった • Apple WatchとNearby Interactionで測位が可能になった(watchOS 8.0〜)
Nearby Interaction
Nearby Interaction • iOS 18.4 〜 ライブアクティビティを使ったiOS同士でのバックグラウンド機能も追加され た
UWBについて
UWB • UWBはUltra Widebandの略で超広帯域無線通信規格を指します。 • UWBチップを用いた通信によって高精度な距離や方位測定が可能となり、こ れを応用して正確な測位を実現できます。
UWB • 非常に広い帯域(一般に3.1 10.6 GHzを想定)で動作する無線で、IEEE 802.15.4系の実装ではLow band(約3.1‒4.8 GHz)とHigh band(約6‒ 10.6 GHz)に分けて運用されます。 各国の規制により利用可能な周波数は異なり、日本では通信システム向けに 3.4‒4.8 GHz(Low)と 7.25‒10.25 GHz(High)が定められています • このため地域ごとに有効化される“チャネル(周波数)”が異なるのが実情で、 ~ グローバル機器では相互運用性の高い チャネル9(7.9872 GHz) がよく使 われます。
UWB 位置情報のやりとりを どのように実現しているのか
UWB 位置情報を求める • 距離 = ToF (Time of Flight) • 角度 = AoA (Angle of Arrival) • この2つを組み合わせれば「位置」が分かる
UWB ToFとは? • Time of Flight • ToF = 電波の「飛行時間」 • 距離 = 飛行時間 光速
UWB 測位の全体像 • 距離 = ToF (Time of Flight)
UWB 測位の全体像 • 距離 = ToF (Time of Flight)
UWB ToFの測定方式一覧 • ToA(Time of Arrival): 単方向、時計同期必須 • SS-TWR(Single-Sided TWR): 片側で往復時間を推定、補正難 • DS-TWR(Double-Sided TWR): 双方向で時間を交換、同期不要、実用的 • TDoA(Time Di erence of Arrival): 複数アンカーで到達時間差から測 ff 位、RTLS用途
UWB ToFの測定方式一覧 • ToA(Time of Arrival): 単方向、時計同期必須 • SS-TWR(Single-Sided TWR): 片側で往復時間を推定、補正難 • DS-TWR(Double-Sided TWR): 双方向で時間を交換、同期不要、実用的 • TDoA(Time Di erence of Arrival): 複数アンカーで到達時間差から測 ff 位、RTLS用途
UWB ToFの測定方式一覧 • ToA(Time of Arrival): 単方向、時計同期必須 • SS-TWR(Single-Sided TWR): 片側で往復時間を推定、補正難 • DS-TWR(Double-Sided TWR): 双方向で時間を交換、同期不要、実用的 • TDoA(Time Di erence of Arrival): 複数アンカーで到達時間差から測 ff 位、RTLS用途
UWB ToA • ToA(Time of Arrival)とは、「信号到達時間」を意味します。 タグから発信された電波が受信機に到達するまでの時間から距離を算出し位 置を測定する仕組みです。 • 距離 = (受信時刻 送信時刻) 光速
UWB ToA • ToA(Time of Arrival)とは、「信号到達時間」を意味します。 タグから発信された電波が受信機に到達するまでの時間から距離を算出し位 置を測定する仕組みです。 • 距離 = (受信時刻 送信時刻) 光速
UWB ToA • ToA(Time of Arrival)とは、「信号到達時間」を意味します。 タグから発信された電波が受信機に到達するまでの時間から距離を算出し位 置を測定する仕組みです。 • 距離 = (受信時刻 送信時刻) 光速
UWB ToA • ToA(Time of Arrival)とは、「信号到達時間」を意味します。 タグから発信された電波が受信機に到達するまでの時間から距離を算出し位 置を測定する仕組みです。 • 距離 = (受信時刻 送信時刻) 光速
UWB ToA • ToA(Time of Arrival)とは、「信号到達時間」を意味します。 タグから発信された電波が受信機に到達するまでの時間から距離を算出し位 置を測定する仕組みです。 • 距離 = (受信時刻 送信時刻) 光速
UWB ToA • ToA(Time of Arrival)とは、「信号到達時間」を意味します。 タグから発信された電波が受信機に到達するまでの時間から距離を算出し位 置を測定する仕組みです。 • 距離 = (受信時刻 送信時刻) 光速 ?
UWB DS-TWR • Double-Sided Two-Way Ranging の略称 • デバイス間で信号を往復させ、その往復にかかる時間を基に距離を算出する 方式です。デバイスAがデバイスBに信号を送信し、デバイスBは受信後に応答 を返します。このときデバイスBは、自身の応答に要した遅延時間を含めてデ バイスAに知らせます。デバイスAは、送信から応答を受信するまでの全体時 間からこの遅延時間を差し引くことで、正確な往復伝搬時間を計算できます。 • この方法では、各デバイスが内部クロックを厳密に同期させる必要がないた め、実装が比較的簡単で、誤差を抑えやすいという利点があります。
UWB AoA • AoA(Angle of Arrival)とは、「信号到達角度」を意味します。 複数のアンテナが信号を受信した時間の差から角度を求め、位置を測定する 仕組みです。
UWB AoA • AoA(Angle of Arrival)とは、「信号到達角度」を意味します。 複数のアンテナが信号を受信した時間の差や位相差から角度を求め、位置を 測定する仕組みです。
UWB AoA • AoA(Angle of Arrival)とは、「信号到達角度」を意味します。 複数のアンテナが信号を受信した時間の差や位相差から角度を求め、位置を 測定する仕組みです。
UWB 測位の全体像 • 距離 = ToF (Time of Flight) • 角度 = AoA (Angle of Arrival) • この2つを組み合わせれば「位置」が分かる
UWB • アンテナの向きや範囲などが非常に重要になってくる • iPhoneの場合は背面を向かい合わせる必要がある • 視野角は円錐型で超広角カメラの視野角とほぼ一致
UWB • U2チップではEDMの利用が可能になりU1チップに比べてはるかに遠い距離 でも、2台のAppleデバイス間の正確な距離測定が可能となっている
UWB • 対象デバイス • iPhone 11 以降 -> U1(第2〜第3世代のiPhone SEを除く) • iPhone 15 以降 -> U2 • Apple Watch 6 以降 -> U1 • Apple Watch 9(Ultra 2) 以降 -> U2 • MFi認定 • NXP Semiconductors • Qorvo
実装方法
実装方法 1. NISession の初期化 2. ディスカバリトークンの交換 3. NINearbyPeerCon guration or NINearbyAccessoryCon guration の 作成 4. セッションの開始 5. NISessionDelegate による更新受信 fi fi 6. NINearbyObject の利用
実装方法 1. NISession の初期化 2. ディスカバリトークンの交換 3. NINearbyPeerCon guration or NINearbyAccessoryCon guration の 作成 4. セッションの開始 5. NISessionDelegate による更新受信 fi fi 6. NINearbyObject の利用
実装方法 1. NISession の初期化 session = NISession() NISession
実装方法 1. NISession の初期化 guard NISession.isSupported else { return } session = NISession() NISession
実装方法 1. NISession の初期化 if NISession.deviceCapabilities.supportsDirectionMeasurement { // distance と direction をサポート } else if NISession.deviceCapabilities.supportsPreciseDistanceMeasurement { // distance のみサポート } guard NISession.isSupported else { return } session = NISession() NISession
実装方法 2. ディスカバリトークンの交換 if let myToken = session?.discoveryToken { ... } NISession NIDiscoveryToken
実装方法 2. ディスカバリトークンの交換 • Multipeer Connectivity • Core Bluetooth • Watch Connectivity • サーバー
実装方法 2. ディスカバリトークンの交換 • BLEで接続した場合バックグラウンドでの使用が可能となる
実装方法 2. ディスカバリトークンの交換
実装方法 3. NINearbyPeerCon guration の作成 guard let peerToken = peerDiscoveryToken else { return } let config = NINearbyPeerConfiguration(peerToken: peerToken) NISession NIDiscoveryToken fi fi NINearbyPeerCon guration
実装方法 4. Sessionの開始 session?.run(config) NISession NIDiscoveryToken fi NINearbyPeerCon guration
実装方法 5. NISessionDelegate による更新受信 func session(_ session: NISession, didUpdate nearbyObjects: [NINearbyObject]) { ... NISession NIDiscoveryToken } NINearbyPeerCon guration fi NISessionDelegate
実装方法
6. NINearbyObject の利用
func session(_ session: NISession,
didUpdate nearbyObjects: [NINearbyObject]) {
...
let peerObj = nearbyObjects.first { (obj) -> Bool in
return obj.discoveryToken == peerToken
}
...
print(peerObj?.distance)
print(peerObj?.direction)
}
NISession
NIDiscoveryToken
NINearbyPeerCon guration
NISessionDelegate
fi
NINearbyObject
UWB 位置情報を求める • 距離 = ToF (Time of Flight) • 角度 = AoA (Angle of Arrival) • この2つを組み合わせれば「位置」が分かる
実装方法 1. NISession の初期化 2. ディスカバリトークンの交換 3. NINearbyPeerCon guration or NINearbyAccessoryCon guration の 作成 4. セッションの開始 5. NISessionDelegate による更新受信 fi fi 6. NINearbyObject の利用
実装方法 iPhone iPhone サードパーティ製のアクセサリ iPhone Apple Watch ARKit & EDM
実装方法 iPhone iPhone サードパーティ製のアクセサリ iPhone Apple Watch ARKit & EDM
実装方法 iPhone iPhone サードパーティ製のアクセサリ iPhone Apple Watch ARKit & EDM
実装方法 iPhone iPhone サードパーティ製のアクセサリ iPhone Apple Watch ARKit & EDM
Demo & Tips
Demo & Tips • directionを取ることがかなり難しい
まとめ • directionを取ることがかなり難しい
まとめ • directionを取ることがかなり難しい • isCameraAssistanceEnabledを使用するしかないがカメラ向けたり動かし たりと一般ユーザーやユースケースから、かなり使いにくい印象
まとめ • directionを取ることがかなり難しい • isCameraAssistanceEnabledを使用するしかないがカメラ向けたり動かし たりと一般ユーザーやユースケースから、かなり使いにくい印象 • ライブアクティビティでバックグラウンドで距離が取れるのはとてもいい
まとめ • directionを取ることがかなり難しい • isCameraAssistanceEnabledを使用するしかないがカメラ向けたり動かし たりと一般ユーザーやユースケースから、かなり使いにくい印象 • ライブアクティビティでバックグラウンドで距離が取れるのはとてもいい • アクセサリのセットアップが1番の鬼門
まとめ • directionを取ることがかなり難しい • isCameraAssistanceEnabledを使用するしかないがカメラ向けたり動かし たりと一般ユーザーやユースケースから、かなり使いにくい印象 • ライブアクティビティでバックグラウンドで距離が取れるのはとてもいい • アクセサリのセットアップが1番の鬼門 • 評価キットの値段が
まとめ • directionを取ることがかなり難しい • isCameraAssistanceEnabledを使用するしかないがカメラ向けたり動かし たりと一般ユーザーやユースケースから、かなり使いにくい印象 • ライブアクティビティでバックグラウンドで距離が取れるのはとてもいい • アクセサリのセットアップが1番の鬼門 • 評価キットの値段が15000円ぐらい
まとめ • directionを取ることがかなり難しい • isCameraAssistanceEnabledを使用するしかないがカメラ向けたり動かし たりと一般ユーザーやユースケースから、かなり使いにくい印象 • ライブアクティビティでバックグラウンドで距離が取れるのはとてもいい • アクセサリのセットアップが1番の鬼門 • 評価キットの値段が15000円ぐらい(AirTagは…)
公式ドキュメント • https://developer.apple.com/jp/nearby-interaction/ • https://developer.apple.com/documentation/nearbyinteraction/ • https://www.murata.com/ja-jp/products/connectivitymodule/ultrawide-band/nxp/type2dk
WWDCセッションビデオ • https://developer.apple.com/jp/videos/play/wwdc2020/10668/ • https://developer.apple.com/jp/videos/play/wwdc2021/10245/ • https://developer.apple.com/jp/videos/play/wwdc2021/10165/ • https://developer.apple.com/jp/videos/play/wwdc2022/10008/
ご清聴ありがとうございました!