【Nearby Interaction】第2世代UWBチップで使える測距機能EDMの概要とサンプル解説
iOS / macOS / watchOSでUWBを扱うフレームワーク、Nearby Interaction の Extended Distance Measurement (EDM) という機能について調査したメモ。
EDM(Extended Distance Measurement )の概要
EDM(Extended Distance Measurement)とは、Nearby Interaction フレームワークで第2世代UWBチップを使ってデバイス間の測距を可能にする新機能。
以下、Appleのドキュメントにおける定義や、実装方法について紹介する。
Apple公式ドキュメントでの記載
2024年1月頭ぐらいに調べたときはサンプルしかなかった気がするのだが、今(2024年4月現在)見るとEDMについて解説したドキュメントがあった。
このドキュメントの "Overview" に明確に述べられている:
Extended distance measurement (EDM) is a ranging capability available between devices with second generation Ultra Wideband (UWB) chips. EDM enables measuring precise distance between two Apple devices using ultra-wideband technology at significantly farther distances than was possible with the first generation UWB chip. In iOS 17 and watchOS 10 and later, EDM is available through the Nearby Interaction framework.
拡張距離測定(EDM)は、第2世代のウルトラワイドバンド(UWB)チップを搭載したデバイス間で利用可能な測距機能です。EDMは、第一世代のUWBチップで可能であったよりもかなり遠い距離で、超広帯域技術を使用して2つのAppleデバイス間の正確な距離を測定することができます。iOS 17とwatchOS 10以降では、EDMはNearby Interactionフレームワークを通じて利用できる。
「拡張距離測定」か「延長距離測定」か?
DeepLだと翻訳結果が「拡張距離測定」となったり「延長距離測定」となったりしていた。どちらが正しいのだろうか?
以下長いので興味ある人だけどうぞ
Perplexityに
Nearby Interactionに、iOS 17でExtended Distance Measurement / EDMという機能が追加されました。これを日本語に訳す場合、「延長距離測定」と「拡張距離測定」どちらが適切ですか?
と質問してみると、以下のような回答が得られた:
「拡張距離測定」が適切な訳語と考えられます。その理由は以下の通りです:
- 「延長」は主に以下のような意味で使用されます:
- 期間や時間を延ばすこと
- 物理的な長さを延ばすこと[4]
- 一方、この機能は:
- 従来のNearby Interactionの測定機能を拡張するものである[1]
- iPhone 15以降の第2世代UWBチップ(U2)を搭載した機器で利用可能な新機能である[1]
- 距離測定の文脈では:
- 「延長」は単純に距離や長さを伸ばすニュアンス
- 「拡張」は機能や性能の向上を示唆するニュアンス
したがって、この機能が既存の距離測定機能を機能的に拡張・強化するという意味合いを考慮すると、「拡張距離測定」という訳語がより適切です。
Citations:
[1] https://note.com/shu223/n/nb3d8d5da8916
[2] https://static.aminer.org/pdf/PDF/000/259/939/lara_localization_of_an_automatized_refueling_machine_by_acoustical_sounding.pdf
[3] https://www.rex-rental.jp/feature/1116/note/Distance_measuring_instrument
[4] https://ejje.weblio.jp/content/延長
[5] https://www.bildy.jp/mag/laser_distance_meter/
しかし、上述の公式ドキュメントには以下のような記述がある。
EDM enables measuring precise distance between two Apple devices using ultra-wideband technology at significantly farther distances than was possible with the first generation UWB chip.
(第一世代のUWBチップで可能であったよりもかなり遠い距離で、超広帯域技術を使用して2つのAppleデバイス間の正確な距離を測定することができます。)
These effects can significantly affect measurement quality at the longer measurement distances enabled by EDM. By design, Nearby Interaction tunes EDM to output measurements to your app at longer operating ranges. If your app requires high quality direction and distance measurements for the longer measurement distances enabled by EDM, estimate the quality of measurements and provide different user experiences.
(これらの影響は、EDMによって可能になるより長い測定距離における測定の質に著しく影響します。設計上、Nearby Interactionは、より長い動作範囲で測定値をアプリに出力するようにEDMを調整します。EDMによって可能になるより長い測定距離において、高品質な方向および距離測定を必要とするアプリの場合は、測定の質を推定し、異なるユーザー体験を提供します。)
"longer" とか "farther" とか公式に言ってるけど?とPerplexityに問いただすと、回答が引っくり返った。
ご指摘の通り、Appleの公式ドキュメントでは「longer measurement distances」「farther distances」という表現が使われており、距離が延びることに重点を置いた説明がなされています。
この文脈を考慮すると、「延長距離測定」という訳語の方が以下の理由で適切と考えられます:
(中略)
先ほどの「拡張」という提案を訂正させていただき、Appleの説明内容に忠実な「延長距離測定」の方が適切な訳語であると考えられます。
しかしそこで「根拠」として挙げたのが僕の日本語記事で、いやそれを書いた僕がわからないから聞いてるんですというと、最終的に回答はこうなった:
申し訳ありません。その場合、「日本の開発者による解説記事でも」という部分は適切な根拠とはなりません。
改めて検討すると、この機能の訳語選定には以下の観点があります:
機能の特徴による検討
- 第2世代UWBチップによって、測定可能な距離が物理的に延長される
- 「longer measurement distances」「farther distances」という表現が公式ドキュメントで使用されている
- 既存の近距離測定から、より遠距離まで測定できるように機能が拡張された
日本語としての表現
- 「延長」は物理的な距離や長さが延びることを示す
- 「拡張」は機能や性能が向上することを示す
実際のところ、両方の訳語にそれぞれの妥当性があり、どちらを選ぶかは強調したい側面によって変わってくる可能性があります。公式の日本語訳が存在しない現状では、どちらが「より適切」とは一概に言えない状況かもしれません。
・・・というわけで本記事では「どっちも使わない」(英語の記述のまま使用する)ことにした。
実装方法
NINearbyPeerConfiguration
に、iOS 17で isExtendedDistanceMeasurementEnabled
という新しいAPIが追加された [1]。
このAPIを有効にすることで、EDMが有効に、すなわちデバイス間で従来より遠い距離での測距が可能になる。
具体的なコードとしてはこんな感じ:
let config = NINearbyPeerConfiguration(peerToken: token)
...
// このデバイスがEDMをサポートしているか?
guard NISession.deviceCapabilities.supportsExtendedDistanceMeasurement else { ... }
// 相手デバイスがEDMをサポートしているか?
guard token.deviceCapabilities.supportsExtendedDistanceMeasurement else { ... }
// EDMを有効化
config.isExtendedDistanceMeasurementEnabled = true
Apple公式サンプル
EDMで調べると、以下の公式サンプルのページが見つかる:
サンプルの概要
このサンプル自体は以前から存在した。ARKitを使って他の(AppleのUWBチップを搭載した)デバイスを見つけるというもの:
This sample code project demonstrates how to use ARKit to find devices equipped with Apple Ultra Wideband (UWB) chips using a technique known as ranging. Ranging estimates the distance between devices using parameters such as signal strength and packet timing.
(このサンプルコードプロジェクトでは、ARKitを使用して、レンジングとして知られる技術を使用してApple Ultra Wideband(UWB)チップを搭載したデバイスを見つける方法を示します。測距は、信号強度やパケットタイミングなどのパラメータを使用してデバイス間の距離を推定します。)
このサンプルは、iOS 17以上 / iPhone 15以降のデバイスで実行すると、Extended Distance Measurement (EDM) 機能を試すことができる。
To use Extended Distance Measurement (EDM) capabilities, you’ll need two iPhone 15 devices or later.
(拡張距離測定(EDM)機能を使用するには、2台のiPhone 15以降のデバイスが必要です。)
前述の通り、同機能の利用には 第2世代のUWBチップ(U2)が必要。
EDM capabilities (available on devices with second generation UWB chips)
EDMを使用したデモを試す
起動してすぐの画面の、"Discuss jetpacks〜"をタップするとEDMを使用したデモを利用できる。
下側のメニューはiOS 17以上の端末でのみ表示されるようになっている:
if #available(iOS 17.0, watchOS 10.0, *), NISession.deviceCapabilities.supportsExtendedDistanceMeasurement {
NavigationLink(destination: NICameraAssistanceView(mode: .visitor)) {
Text("\(Image(systemName: "person.2")) Discuss jetpacks with another visitor.")
...
}
}
メニューを選択するとカメラへのアクセスを求められ、許可すると次のようにカメラを利用しつつ相手デバイスを探すような画面になる:
だが残念ながら
2台のiPhone 15以降のデバイスが必要
というハードルが高すぎるため、手元ではこのサンプルの実際の(他のデバイスとの)インタラクションは試せていない。
距離品質推定関数(Distance Quality Estimator)の実装
同サンプルのページに、EDMに関連して「距離品質推定関数(Distance Quality Estimator)」なるものについて記述がある。
Implement a distance quality estimator function, if your app needs to take advantage of the EDM capabilities of the second generation of UWB chips. This is a function that uses data the Nearby Interaction framework returns to make decisions about signal quality to estimate the distance and direction between devices.
(アプリが第2世代のUWBチップのEDM機能を利用する必要がある場合は、距離品質推定関数を実装します。これは、Nearby Interactionフレームワークが返すデータを使用して、デバイス間の距離と方向を推定するための信号品質に関する決定を行う関数です。)
こういう実装が載っている:
class MeasurementQualityEstimator {
// Define the criteria that qualify a peer with "good" characteristics:
// these include:
// A time window, in seconds.
let freshnessWindow = TimeInterval(floatLiteral: 2.0)
// A minimum number of samples in that time window.
let minSamples: Int = 8
// A maximim distance, in meters.
let maxDistance: Float = 50
// A minimum distance, in meters.
let closeDistance: Float = 10
// A buffer to hold the individual quality measurements.
private var measurements: [TimedNIObject] = []
// An enumeration that defines levels of peer quality.
enum MeasurementQuality {
// The peer fails to meet any of the measurement quality criteria.
case unknown
// The extended distance measurements indicate the peer iPhone or device
// satisfies the criteria for "good" quality and falls inside the
// minimum and maximum acceptable distance.
case good
// The extended distance measurements indicate the current device
// satisfies the criteria for being "close" to the peer iPhone or device.
case close
}
// A structure that captures the range of a peer at a specific time.
struct TimedNIObject {
let time: TimeInterval
let distance: Float
}
func estimateQuality(update: NINearbyObject?) -> MeasurementQuality {
let timeNow = NSDate().timeIntervalSinceReferenceDate
if let distance = update?.distance {
if let lastMeasureMent = measurements.last {
if lastMeasureMent.distance != distance {
// Before adding a new measurement to buffers, check
// if the reported distance is unique.
measurements.append(TimedNIObject(time: timeNow, distance: distance))
}
} else {
// If the buffer is empty, unconditionally add the new measurement.
measurements.append(TimedNIObject(time: timeNow, distance: distance))
}
}
let validTimestamp = timeNow - freshnessWindow
measurements.removeAll { $0.time < validTimestamp }
if measurements.count > minSamples, let lastDistance = measurements.last?.distance {
if lastDistance <= closeDistance { return .close }
return lastDistance < maxDistance ? .good : .unknown
}
return .unknown
}
}
ざっくりコードリーディングメモ:
-
TimedNIObject
は特定の時間の推定距離を保持するstruct
-
measurements
プロパティにTimedNIObject
型で時間ごとの推定距離を保持している -
MeasurementQuality
は推定距離の品質をunknown
,good
,close
の3つに判別するgood
The extended distance measurements indicate the peer iPhone or device satisfies the criteria for "good" quality and falls inside the minimum and maximum acceptable distance.
(延長距離の測定結果は、相手のiPhoneやデバイスが「良い」品質の基準を満たし、許容可能な最小距離と最大距離の範囲内に収まっていることを示している。)
close
The extended distance measurements indicate the current device satisfies the criteria for being "close" to the peer iPhone or device.
(延長された距離測定は、現在のデバイスが相手のiPhoneまたはデバイスに「近い」という基準を満たすことを示している。)
-
estimateQuality
はNINearbyObject
オブジェクトを引数に取り、MeasurementQuality
を返す- 内部で
measurements
プロパティも更新する
- 内部で
その他詳細
冒頭にも示した公式ドキュメントに、
いろいろ重要な仕様や制約についての記述もあったので以下にまとめておく。
第1世代と第2世代UWBチップの互換性
A new UWB communication protocol enables the EDM capabilities in second generation UWB chips. To use this new measurement technology, both sides have to have the second generation chip, this includes iPhone 15, Apple Watch Series 9, Apple Watch Ultra 2, and later.
新しいUWB通信プロトコルは、第2世代UWBチップのEDM機能を可能にする。この新しい測定技術を使用するには、双方が第2世代チップを搭載する必要があり、これにはiPhone 15、Apple Watch Series 9、Apple Watch Ultra 2以降が含まれる。
Devices with the second generation UWB chip are backwards compatible with the ranging technologies available on the first generation UWB chip. Second generation UWB chip-equipped devices can communicate with first generation devices and Made for iPhone (MFI)-certified third-party chipsets. However, when communicating with first generation devices, second generation devices operate at the performance available on the first generation chip.
第2世代UWBチップを搭載したデバイスは、第1世代UWBチップで利用可能な測距技術と下位互換性がある。第2世代UWBチップ搭載デバイスは、第1世代デバイスおよびMade for iPhone(MFI)認定サードパーティ製チップセットと通信できます。ただし、第1世代デバイスと通信する場合、第2世代デバイスは第1世代チップで利用可能な性能で動作します。
Measurement capabilities depend on both the capabilities of a person’s device and of the peer device they’re connecting to. Although someone might have a second generation UWB chip-equipped device, the peer devices they want to interact with might only support the first generation UWB chip.
測定機能は、その人のデバイスの性能と、接続しているピアデバイスの性能の両方に依存します。ある人が第2世代のUWBチップを搭載したデバイスを持っていても、対話したい相手デバイスは第1世代のUWBチップしかサポートしていない可能性があります。
同時利用可能なピアセッションの数
同ドキュメントには、第1世代UWBチップと第2世代UWBチップ、およびサードパーティのMFIデバイス間でサポートしているインタラクションがまとめられている。
重要だと思った点は、
-
レガシーな(非EDMな)Nearby Interactionピアセッションは複数いける
-
EDMなNearby Interactionピアセッションは、第2世代同士であっても1つのみ
-
当然第1世代とはEDMでインタラクションできない
-
EDM1つと、非EDM複数は同時利用可能
-
EDMの「1つ」という制約については別の箇所でも言及されている:
Because EDM uses a new communications protocol, Nearby Interaction only supports one extended distance measurement session on a device at any given time. An EDM session can work concurrently with multiple legacy Nearby Interaction sessions on the same device.
(EDMは新しい通信プロトコルを使用するため、Nearby Interactionは、デバイス上で常に1つの拡張距離測定セッションしかサポートしません。EDM セッションは、同じデバイス上で複数のレガシー Nearby Interaction セッションと同時に動作できます。)
Locate devices using ranging (レンジングを使用したデバイスの位置特定)
EDMを用いる場合に、測定品質推定関数を用意しろよという話:
The EDM support that the Nearby Interaction framework provides enables a new communication protocol that measures distances between devices using rapid packet exchanges. As a result, it’s susceptible to various wireless signal propagation effects. Most notably, obstruction between the two devices and reflections from the ground, walls, and parts of the local environment that affect the quality of distance measurements. These effects can significantly affect measurement quality at the longer measurement distances enabled by EDM. By design, Nearby Interaction tunes EDM to output measurements to your app at longer operating ranges. If your app requires high quality direction and distance measurements for the longer measurement distances enabled by EDM, estimate the quality of measurements and provide different user experiences.
Nearby Interactionフレームワークが提供するEDMサポートは、迅速なパケット交換を使用してデバイス間の距離を測定する新しい通信プロトコルを可能にします。その結果、様々な無線信号伝搬の影響を受けやすくなります。最も顕著なのは、2つのデバイス間の障害物や、距離測定の品質に影響を与える地面、壁、ローカル環境の一部からの反射です。これらの影響は、EDMによって可能になる長い測定距離において、測定品質に大きな影響を与える可能性があります。設計上、Nearby Interactionは、より長い動作距離でアプリに測定値を出力するようにEDMをチューニングしています。EDMが可能にする長い測定距離で、アプリが高品質な方向と距離測定を必要とする場合、測定品質を推定し、異なるユーザー体験を提供してください。
そして、サンプルページにも貼ってあった測定品質推定関数がここにも載っていて、それについて解説があった:
This class is a part of the Finding devices with precision sample for iOS 17 that demonstrates measurement quality estimation on devices capable of EDM. This estimator determines measurements are high quality if the framework generates eight or more distinct measurements in the last two seconds, and if the measurements are within a distance threshold of 50 meters. Experiment with different measurement quality metrics to vet the results to meet your app’s intended use cases.
このクラスはiOS 17用のFinding devices with precisionサンプルの一部で、EDMが可能なデバイスでの測定品質推定を実証するものです。この推定器は、フレームワークが最後の2秒間に8つ以上の明確な測定値を生成し、測定値が50メートルの距離しきい値内にある場合、測定値が高品質であると判断します。さまざまな測定品質メトリクスを試して、アプリが意図するユースケースを満たす結果を検証してください。
静止しているデバイスの位置の特定と、移動中のデバイスの位置の特定
このような言及もあった:
iOS 16 and watchOS 9 introduced an API update to Nearby Interaction for locating stationary devices with high precision aided by an ARSession. With the EDM capabilities introduced in iOS 17 and watchOS 10, second generation UWB equipped devices can locate moving devices that also have the second generation UWB chip.
iOS 16とwatchOS 9は、ARSessionの助けを借りて、静止しているデバイスの位置を高精度で特定するためのNearby InteractionのAPIアップデートを導入しました。iOS 17とwatchOS 10で導入されたEDM機能により、第2世代UWBを搭載したデバイスは、同じく第2世代UWBチップを搭載した移動中のデバイスの位置を特定することができます。
In iOS 14 and watchOS 8 and later, devices equipped with the first generation UWB chip are capable of precise distance measurement through the Nearby Interaction Framework. Devices supporting ARKit can locate stationary objects or devices. Devices equipped with the second generation UWB chip are capable of EDM. Pairs of devices supporting both extended distance measurement and camera assistance have the ability to locate moving devices. You can query these capabilities through the deviceCapabilities property check.
iOS 14とwatchOS 8以降では、第一世代のUWBチップを搭載したデバイスは、Nearby Interaction Frameworkを通じて正確な距離測定が可能です。ARKitをサポートするデバイスは、静止しているオブジェクトやデバイスの位置を特定できます。第2世代のUWBチップを搭載したデバイスは、EDMが可能です。拡張距離測定とカメラ補助の両方をサポートするデバイスのペアは、動いているデバイスを見つける能力を持っています。deviceCapabilitiesプロパティをチェックすることで、これらの機能を照会できます。
ひとりアドベントカレンダーやってます!
こちらはひとりで全日埋めるアドベントカレンダー iOS by shu223 - Qiita Advent Calendar 2024 - Qiita の1日目の記事です。がんばって完走目指すので、カレンダーの購読や記事のLikeをポチッとしていただけると嬉しいです。
-
iOS 17がリリースされた年のWWDC23ではNearby Interactionのセッションがなく、当時この新APIについてまったく情報がなかった。 ↩︎
Discussion