LAUNCHXL-CC2640R2でBLE AoA Preview

Texas Instruments(以下 TI)の BLE MCU、CC2640R2 の開発キット(以下DK)である LAUNCHXL-CC2640R2 と BOOSTXL-AOA で BLE AoA を試せると聞いて動かしてみたので、Bluetooth Direction Finding と合わせて紹介します。

Bluetooth Direction Finding1 とは

先に Bluetooth Direction Finding について簡単に説明します。

これは BLE デバイスで方向検知するための仕組みで Bluetooth 5.1 から追加されました。具体的には、Angle of Arrival(AoA)Angle of Departure(AoD) の2種類の方法があり、送信者と受信者の間の方向角をそれぞれ受信側を基準とした角度(到着角)、もしくは送信側を基準とした角度(出発角)として計算、推定します。角度の算出は常に受信側で行います。

これらの基本原理は以下の図のように、複数のアンテナが受信または送信する電波の位相差を利用して実現されます。それらのアンテナの間隔は電波波長(Bluetooth では約 125 mm)に依存するためある程度の大きさを必要とします。したがって一般的には AoA レシーバーと AoD トランスミッターは専用のロケーターデバイスとして設置され、それぞれ相対するロールデバイスとしてモバイルデバイス(例えばスマートフォン)やビーコンタグを用いるようなユースケースになると考えられます。

角度算出のための電波は Constant Tone Extension (CTE)と呼ばれ、Bluetooth 5 から追加された拡張パケット(Link Layer)の末尾に付属して送受信されます。送受信は複数のアンテナをマイクロ秒単位で切り替えながら行われます。アンテナの切り替えパターンなどの制御については仕様がありますが、レイアウトについては特に定められていません。どのように配置するかはベンダーに任されるようで、直線状だけでなくグリッド状や円状に並べる方法や、並べる向きを縦方向にすることで仰角を求めたりすることも可能と Overview にはあります。またロケーターデバイスを空間内に複数配置して統合するようなシステムにすることで個々のデバイスのアンテナレイアウトはそれほど複雑化せずとも精度を保証できるかもしれません。

LAUNCHXL-CC2640R2 / BOOSTXL-AOA について

LAUNCHXL-CC2640R2 はBluetooth 4.2 および BLE 5 対応 MCU の DK で、BOOSTXL-AOA はその拡張キットで AoA レシーバー用のアンテナボードになります。

これらはどちらも Bluetooth 5.1 リリース前にリリースされたものなので、SIG の仕様に準拠している訳ではなく、位置付けとしては概念実証を目的とした実装のようです。ただ SDK に含まれるデモプログラムのソースコードやドキュメントを見る限りでは、5.1 Specification で示されている Direction Finding の要素となる Antenna Switching や CTE、IQ Sampling について触れられているので、基本技術はほぼ同等と考えられます。

  • 2016.12 – Bluetooth 5.0 Release
  • 2017.5 – SIMPLELINK-CC2640R2-SDKの提供開始
  • 2018.7 – SIMPLELINK-CC2640R2-SDK 2.20.00.49 Release
  • 2018.8 – BOOSTXL-AOA Release
  • 2019.1.21 – Bluetooth 5.1 Release (AoA/AoD)
  • 2019.1.22 – SIMPLELINK-CC2640R2-SDK 2.40.00.32 Release
Demonstration

AoA のデモプログラムは CC2640R2 の SDK にパッケージされています。
https://www.ti.com/tool/SIMPLELINK-CC2640R2-SDK
最新版は v3.x ですがデモ用ツールが動作しなかったので、動作した v2.4 の紹介になります。デモに必要なツールは更新されていますが、ファームウェアの AoA 関連のソースコードは更新されてなかったので、AoA の検証については特に問題ないかと思います。

  • デモ用プロジェクト
  • rtls_master – デモ環境全体のコントローラー
  • rtls_slave – Broadcaster、AoA Transmitter、複数可
  • rtls_passive – Observer、AoA Receiver
  • デモ用ツール
  • rtls_agent – rtls_master, rtls_slaveとのUART通信, rtls_monitorとのWebSocket通信
  • RTLS Monitor – AoAデータの表示

デモで行われる BT 通信自体は単純な Broadcaster と Observer 間の Advertising のようですが、デモ環境は Real Time Localization System(RTLS)というちょっとしたシステムになっており、DK も最低でも3枚必要と少し複雑です。(SDK v2.2のデモプログラムは Broadcaster と Observer が通信して角度推定結果を UART で出力するだけでDKも2枚で済みますが、結果のわかりやすさの点でv2.4を用いています。)

動かし方については各種 Readme やヘルプメッセージでサポートされており、内容は Windows 環境のものになっていますが、ツール自体は Linux や Mac 向けのものも用意されており Mac でも動きました。(もちろん Windows でも動きました。)
デモの実施は以下のような条件で行いました。

  • アンテナ(rtls_passive)を水平に保つ
  • 反射電波が精度に影響するので金属台から離してアンテナを設置
  • rtls_slave とアンテナの高さを揃える
  • rtls_slave とアンテナの距離を2〜3 mに保つ
  • 移動はゆっくり
  • 他の Advertise パケットが頻繁に飛び交う空間

結果は以下のようになりました。まず静止状態です。ちゃんと検出できているように見えます。

次は左から右へそっと歩いてみた時。移動中は結構乱れてますが、傾きとしては捉えることができているようです。

逆に右から左へ歩いてみた時。

デモの結果について簡単にまとめると、「静止中の精度は良いが、移動中の精度は良くない」というところでしょうか。移動中の精度を求めるには補間が必要ですが、乱れが大きいのでそれなりに誤差が出そうです。またこの DK においては6本のアンテナを切り替えながら受信していますが、「このくらいのアンテナの数と並べ方ならこのくらいの精度」ということなのかもしれません。

AoA で使用しているパケット(Link Layer)も確認したかったのですが、手持ちの Sniffer(nRF52840-DKを使用)ではキャプチャーできませんでした。SDK v2.2 のデモプログラムではキャプチャーできて、Bluetooth 5 のパケットを用いず従来の Advertise パケット(ADV_NONCONN_IND)を用いてアドホックに実装していたようですが、SDK v2.4 からは独自定義もしくは 5.1 のパケットを用いているようです。(デモ用プロジェクトは SDK 内で Bluetooth 5 のプロジェクトとして分類されていなかったので独自である可能性が高そうです。)

以上、LAUNCHXL-CC2640R2 による AoA Preview の紹介でした。

関連記事

  1. 【家庭で使える!?Beaconアプリづくりにチャレンジ】BLEAD-T…

  2. Beaconアプリ開発記【その1 開発準備編】

  3. ねぇClova、開発したい 【サーバアプリ実装編】

  4. Web でカメラを使おう – WebRTC (getUse…

  5. Azure Functions に挑戦!(Node.js から SQL…

  6. アプリをデザインする時に気をつけていること