詳説Brilliant Labs "Frame"

# Frameとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139643/8dc6910c-107e-3624-99db-b5f918f5e54d.png)

Brilliant Lab社が販売しているARグラスです。お値段は$349(約53,00円)ドル。対角視野はおよそ20度。重さは40g。通常のメガネが30g程度なので、かなり本当のメガネに近い重さです。

https://brilliant.xyz/products/frame

どんなことができるかというと、いわゆるChatGPTの問い合わせができます。また、本体にカメラが乗っているため、目の前の風景について問い合わせたりすることができます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139643/113e1632-4118-4099-acb7-b164d6f874c2.png" width="50%"/>

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139643/99660af1-e3f3-0ccd-2e19-8e32c4937a8b.png" width="50%"/>

https://www.youtube.com/shorts/B7aThE1ppZY

<iframe width="560" height="315" src="https://www.youtube.com/embed/hBbrrNylidY?si=FGY05_47tH57aAKU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

このARグラスは単体で稼働するものではなく、無線でスマホと連携して動くタイプです。
Noaというスマホアプリがあり、その説明によると

> Noa は、フレーム AR グラス上で実行されるように設計されたパーソナル AI アシスタントです。 GPT を利用したチャット、Web 検索、翻訳を備えています。フレームをタップして、Noa に何でも質問してください。 Noa はフレーム上で応答し、チャット履歴をアプリに保存します。

となっています。

https://play.google.com/store/apps/details?id=xyz.brilliant.noaflutter

https://apps.apple.com/us/app/noa-for-frame/id6482980023

# オープンソースハードウェア

Frameの[FAQ](https://brilliant.xyz/products/frame)には面白いことが書いてあります。

> 明るいマイクロ OLED が薄い幾何学プリズム光学系に接着され、約 20 度の対角視野を表示します。フレームは完全にオープンソースで、設計ファイルとコードは Github にあります。

**ほぼすべての仕様データがGithubで公開されています。この公開データを用いて、Frameの原価やアーキテクチャについて詳しく見ていこう。** という記事になっています。

https://github.com/brilliantlabsAR/frame-codebase

# 原価計算について

使っているパーツや回路図は[Hardware](https://docs.brilliant.xyz/frame/hardware/)というページにあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139643/d644f076-6810-3fc2-3266-5f5d3a5dace3.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139643/61ca505c-d42b-5b01-9e1e-00e1f5a96fa5.png)

回路図
https://docs.brilliant.xyz/frame/frame-schematics.pdf

これらのデータをまとめて算出したのが以下の表になります。1ドル=150円となっています。

| 役割         | 詳細                 | 部品の型番                  | 単価    | 数量 | 合計     | リンク                                                                                          |
|--------------|----------------------|-----------------------------|---------|------|----------|-----------------------------------------------------------------------------------------------|
| バッテリー   | 105mAhバッテリー     | 推定                        | ¥262    | 2    | ¥524     | [リンク](https://amzn.to/3ZERsm8)                                                             |
| バッテリー保護 | GLF73910             | 記載                        | ¥239    | 2    | ¥477     | [リンク](https://jp.dasenic.com/product/glf-integrated-power-glf73910-ad01-5195473)           |
| DC-DCコンバーター | MAX17291            | 記載                        | ¥111    | 1    | ¥111     | [リンク](https://edn.itmedia.co.jp/edn/articles/2104/01/news054.html)                         |
| PMIC         | MAX77654             | 記載                        | ¥336    | 1    | ¥336     | [リンク](https://www.analog.com/jp/products/max77654.html)                                    |
| IMU          | MC6470               | 記載                        | ¥347    | 1    | ¥347     | [リンク](https://mou.sr/3DqEYqx)                                                              |
| マイク       | ICS-41351            | 記載                        | ¥261    | 1    | ¥261     | [リンク](https://mou.sr/4gzQ8Yx)                                                              |
| MCU          | nRF52840-CKAA-F      | 記載                        | ¥870    | 1    | ¥870     | [リンク](https://mou.sr/3ZJwGls)                                                              |
| FPGA         | LIFCL-17-7UWG72C     | 記載                        | ¥2,445  | 1    | ¥2,445   | [リンク](https://www.digikey.com/en/products/detail/lattice-semiconductor-corporation/LIFCL-17-7UWG72C/12751884) |
| カメラ       | OV09734-H16A         | 記載                        | ¥110    | 1    | ¥110     | [リンク](https://www.arrow.com/en/products/ov09734-h16a/omnivision-technologies)              |
| コネクタ     | FR02C051JA1-R5000    | 記載                        | ¥340    | 1    | ¥340     | [リンク](https://www.digikey.jp/ja/products/detail/jae-electronics/FR02C051JA1-R5000/4738912) |
| ディスプレイ |                      | 推定                        | ¥20,850 | 1    | ¥20,850  | [リンク](https://www.displaymodule.com/products/0-23-inch-micro-oled-display-640x400)         |
| **合計**     |                      |                             |         |      | **¥26,670** |                                                                                               |

追える部分だけ追った結果、**製品が\53,000に対し、原価の合計が\26,670となりました。**
計算できなかった部分は、以下の4点で、

- 眼鏡のフレーム
- ウェーブガイドレンズ
- 充電クレードル

まぁ原価は、\30,000～\35,000じゃないかなーと思っています。ウェーブガイドレンズの原価が全く読めない。
また、先ほどの表を円グラフにしてみると、以下のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139643/f7d8dd97-a42a-8dd3-4bb0-7c999f19eca6.png)

**ディスプレイが原価の大半(78.2%)を占めている。ということが分かります。マイクロOLEDが高い。** 
ただこれについては議論があり、**回路図にはディスプレイに関する品番の記載がない** ので、推定値に過ぎないです。ただここはちょっと大事なポイントではあると思います。

# アーキテクチャについて
## nRF52840

このBrilliant Frameですが、CPUってものが存在しないな。ということに気が付きました。じゃあこれってどう動いているんだっけ？と思って調べていました。
最初に気になったのがMCUという部品です。これは何かというと、

> マイクロコントローラ (英: microcontroller) とは、CPUに加えてRAM、ROM、I/Oポートなどを1つの集積回路（IC）にまとめた、いわば極小のコンピュータ[1]。主に機器の制御に使われる[1]。略語は英字ではMCU[2]。日本語ではマイコンとも呼ばれる[注 1]。

引用:https://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9

いわゆるマイコンです。PICやAVRの親戚が乗っています。だから、がっつりと強いCPUが乗っているわけではない。
　これは、NORDIC SEMICONDUCTORという会社の製品らしく、[公式ページ](https://www.nordicsemi.com/Products/nRF52840?lang=ja-JP)によると、

> nRF52840はARM®の32ビットCortex™-M4 CPUを中心に構築されており、64MHzで動作する浮動小数点ユニットを搭載しています。

一応、ARMが動いているようです。仕様書をまとめると以下のような感じです。

 | 機能                              | 詳細                                                                                     |
|-----------------------------------|------------------------------------------------------------------------------------------|
| プロセッサ                        | 64 MHz Arm® Cortex-M4 with FPU                                                           |
| メモリ                            | 1 MB Flash + 256 KB RAM                                                                  |
| 無線通信                          | Bluetooth 5 multiprotocol radio                                                         |
|                                   | - 2 Mbps                                                                                 |
|                                   | - CSA #2                                                                                 |
|                                   | - Advertising Extensions                                                                 |
|                                   | - Long Range                                                                             |
|                                   | - +8 dBm TX power                                                                        |
|                                   | - -95 dBm sensitivity                                                                    |
|                                   | - Integrated balun with 50 Ω single-ended output                                         |
| IEEE 802.15.4 サポート             | - Thread                                                                                |
|                                   | - Zigbee                                                                                |
| 電源電圧範囲                      | 1.7-5.5 V                                                                               |
| USB                               | Full-speed 12 Mbps USB                                                                  |
| NFC                               | NFC-A tag                                                                               |
| セキュリティ                      | Arm CryptoCell CC310 security subsystem                                                 |
| デジタルインターフェース           | - QSPI/SPI/TWI/I²S/PDM/QDEC                                                              |
|                                   | - High speed 32 MHz SPI                                                                  |
|                                   | - Quad SPI interface 32 MHz                                                              |
|                                   | - EasyDMA for all digital interfaces                                                     |
| アナログ                          | 12-bit 200 ksps ADC                                                                      |
| 暗号化                            | 128 bit AES/ECB/CCM/AAR co-processor                                                    |
| 内蔵DC-DCコンバーター             | On-chip DC-DC buck converter                                                            |
| 外部コンポーネント用電源供給       | Regulated supply for external components up to 25 mA                                    |

というわけで、RAMが256KB、フラッシュメモリが1MBあるようです。
　この構成を見て、はて。と思ったことがありまして、たまたま、自作キーボードについて調べていました。そのときに、[BLE Micro Pro Type-C版](https://shop.yushakobo.jp/products/ble-micro-pro)という製品を見ていまして、これは自作キーボードを無線化する基盤です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139643/b2b7d11f-8b84-2133-bb5b-be8b14f2a8fe.png)

この説明文を読むと、

> Pro Microとの互換性を意識したBL654(nrf52840モジュール)のブレークアウトボードです。主に自作キーボードでの使用を想定して設計しています

とありまして、実は、この基盤に使われているマイコンと同じものがFrameに乗っています。だから、割と結構メジャーなマイコンで、しかもやっぱりマイコンぐらいの性能しかでないんだろうな。という感触があります。

# LIFCL-17-7UWG72C

　ハードウェア構成にFPGAが乗っているというのは割と珍しい製品だと思います。また、その乗っているFPGAも、Altera(Intel)やXilinx(AMD)ではなくLatticeというのは中々珍しいのではないでしょうか。
  FPGAとは、
  
> FPGA（英: field-programmable gate array）は、製造後に購入者や設計者が構成を設定できる集積回路であり、広義にはPLD（プログラマブルロジックデバイス）の一種である。現場でプログラム可能なゲートアレイであることから、このように呼ばれている。

　雑にまとめると論理回路を自分でソフトウェア的に構成できる半導体部品です。(マイコンと何が違うの？というと、あんまり相手にわかるように説明できる気がしないですが・・・)
　最初に、FPGAが乗っている製品は割と珍しい。ということを書きましたが、その旨がWikipediaにも書かれています。

> 従来、FPGAはASICに比べて低速でエネルギー効率が悪く、実装可能な機能も限られていた。しかし、大量生産、製造ルールの微細化、研究開発などにより、ASICとFPGAの性能差はかなり縮まっている[24]。

というので、既成製品においてはあまりFPGAというのは採用されない印象が私にはありました。

## QuestProへのFPGA採用

しかし、XR領域であると、FPGAの採用事例があります。
　1つ目は**Quest ProでLatticeのFPGAの採用があります。** iFixitによると、LIF-MD6000-6という製品が採用されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139643/2a9b58ec-4d07-a6ed-4549-1b4ef18ad09b.png)

FPGAがCPUと近い位置に配置されていることを考えるとQuest Proでは特殊なコプロセッサとして動いているのかな。と思いました。

https://jp.ifixit.com/News/68861/meta-quest-pro%E3%81%8C%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%E3%81%AE%E6%9C%AA%E6%9D%A5%E3%81%A0%E3%81%A8%E3%81%97%E3%81%9F%E3%82%89%E3%80%81%E6%B1%BA%E3%81%97%E3%81%A6

## AppleVisionProへのFPGA採用

　2つ目は、**AppleVisionProでLatticeのFPGAの採用があります。** これも、iFixitによると、ICE5LP4K iCE40 Ultra FPGAという製品が乗っています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139643/ec84de20-278b-f081-2678-58f84b6b85cd.png)

https://jp.ifixit.com/Guide/Apple+Vision+Pro%E3%81%AE%E3%83%81%E3%83%83%E3%83%97%E6%83%85%E5%A0%B1/169813

　Quest3とは対照的に周りにあるチップセットはセンサードライバ周りなので、AVPにおいてはセンサー系を取りまとめてるのかな。という感じです。それは別の記事でも言及がありました。

https://eetimes.itmedia.co.jp/ee/articles/2408/28/news106_2.html

## FrameにおけるFPGAの役割

Frameのハードウェアダイアグラムから、FPGAはカメラとディスプレイに接続していることが分かります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139643/01144945-4c67-04e4-c592-9d54e9bd6788.png)

説明文でも、

> FPGA は、ディスプレイのグラフィック アクセラレーションと 720p カメラ センサーとのインターフェイスに使用されます。SPI 経由で Bluetooth MCU と通信し、電力を節約するために動的にシャットダウンされます。

とあります。

### ディスプレイ制御

　端的になぜFPGAが存在するのか。というとnRF52840がディスプレイやカメラを制御しきるだけの能力がないから。という感じがします。それはディスプレイのドキュメント仕様からも垣間見えて、**Frameは16色しか表示できません。**

 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139643/6d9392a6-036d-23eb-0a52-73adca902c66.png)

ディスプレイの解像度が640x400で16色(4bit)だと、画面表示に必要なメモリが1.02MB程度必要です。nRF52840のRAMが256KBしかないので、マイコンのメモリに画面表示が乗らない。また、ドキュメンによるとダブルバッファしてるそうなので、さらに倍メモリが必要そうです。

> バッファリング
> フレーム ディスプレイには 2 つのバッファがあります。frame.display.text()、frame.display.bitmap() などを介してディスプレイに書き込まれるすべての内容は、オフスクリーン バッファに書き込まれるため、表示されません。

だからFPGAでディスプレイ制御を行っている気がしてます。
　APIの仕様ドキュメントを読むと、

- frame.display.text(string, x, y, {color='WHITE', spacing=4})
- frame.display.bitmap(x, y, width, color_format, palette_offset, data)	
- frame.display.vector()	
- frame.display.show()	

ぐらいしか関数が生えていません。一応生のByteデータから画面表示はできるんですが、ドキュメントには`Sprite Engine`という表記があり、「古の技術だ・・・」感がありました。ただ古のゲーム機のようなスプライト登録とその呼び出しのような機能ではないので、逆にそれはあっても面白いのでは・・・？みたいな気持ちになりました。

## カメラ制御

　また、カメラの画像についても涙ぐましい努力があり、

> カメラ
> Frame のカメラ機能により、Bluetooth 経由で単一の JPEG 画像をキャプチャしてダウンロードできます。センサーのフル解像度は縦向きで 1280 x 720 ピクセルですが、一度にキャプチャできるのは最大 720 x 720 ピクセルの正方形画像のみです。ユーザーは、panコントロールを使用して、センサー ウィンドウのどの部分をキャプチャするかを選択できます。

という感じ、無理くり切り出してる感じがあります。ちょっと以下のような720x720ノイズ画像を生成するコマンドで実行してみました。

```
cat /dev/urandom | head -c $((720 * 720 * 3)) | convert -depth 8 -size 720x720+0 rgb:- -quality 100 noise_image.jpg
```

| JPGクオリティ | ファイルサイズ   |
|--------------|-----------------|
| 10           | 43.7 KB        |
| 25           | 111.2 KB       |
| 50           | 194.2 KB       |
| 100          | 1478.2 KB      |

 Frameのカメラからの画像取得のjpgクオリティパラメータは、10,25,50,100から選べます。それを模して実験してみると、実は50,100のパラメータだとメモリに乗り切らない可能性があるな。という感触があります。もちろん。これはノイズ画像なので、jpgに対して厳しいデータセットになっているので、あくまで目安的な数値です。それでも結構、マイコンのメモリ的には厳しい作業させている感があります。
 
## Proって名前につけたら何やってもいい

　これはXR界隈のジョークですが、「Proって名前につけたらなにやってもいい」という流言があります。業界の最先端のイノベーティブな製品。もっというとエッジの効いた尖っており売れるか売れないか分からないようなプロトタイプ色が強い、玄人向けの製品には名前にProとつきやすい。という話があります。Frameも割とそういうタイプの製品である風を感じます。
　その証拠にというわけではないのですが、割と**一般流通を目指したQuest3にはFPGAが乗ってない**んですよね。
　ここまでのギャグ？が正しいとすると、**Frameという製品自体、ハードウェア的にもプロトタイプ傾向が強いもの**であると感じられます。

https://www.ifixit.com/Guide/Meta+Quest+3+Chip+ID/165932
  

# ARグラスのアキレス腱

今回のFrameの調査をして思うことはあります。

**なぜ最新のARグラスのハードウェア構成をここまで公開できるのか？**

本来、このような技術は秘匿している必要があると思います。しかし、そうではないとすると、**公開されている情報に価値がないから。** だと思います。逆に言えば、

**ハードウェア構成を公開しているという触れ込みのなか、非公開にしている情報は何か？**

の方が、重要だと感じています。端的に言うと、

- **マイクロOLED**
- **ウェーブガイドレンズ**

前者についてはある程度、考えていて、ソニーのマイクロOLEDじゃないかなと。

https://www.sony-semicon.com/ja/products/microdisplay/oled.html

　XR界隈では、かなり採用実績があり、AVPもXRealも、このソニー製のマイクロOLEDだそうです。結構調べたんですが、1インチを切るようなマイクロOLEDでフルカラー、640x480の解像度が出るものはソニーぐらいしか作ってない感じがあります。EPSONがMOVERIOというものを作っているので、モジュール自体は存在しそうなんですが、一般で手に入る口がなさそう。
　どうもこのソニーのマイクロOLEDはソニーとNDAを結ばないとデータシートが手に入らないようです。これは邪推の域になるんですが、コードを公開したい。という意思がBrilliant Labにはある。しかし、NDAを結んでいる手前、下手な情報は出せない。ということで、コード上でドライバ部分を公開はするが、回路図からは削り、具体的なディスプレイの品番を隠すことで、機密保持を回避してるんじゃないかなーと思ったりしました。ただし、この**マイクロOLEDに関する課題は、技術的なハードルというよりかは商習慣的なものである**と思います。
　もう1つはウェーブガイドレンズです。いわゆる光学系で特殊な素材が必要になります。日立さんの資料にいい資料があったので掲載します。

 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139643/8581c497-2437-7ebf-5f12-3b78b6a2821a.png)

https://hlds.co.jp/product/wp-content/uploads/2020/10/WhitePaper_AR_Glass_Waveguide.pdf

　先ほど話していた、マイクロOLEDがデジタル映像を出力している部品になります。これを光学的に反射をし、目から見える風景(外光)と合成するような挙動をするのが導光板(ウェーブガイドレンズ)の仕組みになります。
　私もぼちぼち探しているんですが、この導光板の価格帯や個人での入手手段はわからない。おそらく現在だと業者に対する特殊な発注だと思います。**「導光板を手に入れる手段がないから他社は作れない」から、「最新のARグラスのハードウェア構成をここまで公開できる」** となっている気がします。

# 感想

　ある日、Brilliant Frameを知り、ふーんと思って、適当に見ていました。それは、基本的にスタンドアローンで動かないARグラスに個人的に興味がなく、スマホと一緒に使うやつはなぁ。ぐらいの感覚でした。しかも、割とこういうタイプは、自分でアプリをかけないタイプの方が多いです。そのため、やっぱりいまいちな気持ちになっていました。ただ、SDKが公開されていることを知り、見てみると、ハードウェア構成まで全部公開していたため、びっくりしてめちゃめちゃ調べました。
　やっぱり1つモデルケースがあると面白くて、その仕様を深堀していくと、その設計思想のようなものを垣間見ることができて、これはこれでやはり面白い遊びだったりします。低価格帯に収めるためにマイコンとFPGAにムリさせて、仕様をガリガリに削ってる当たりは中々渋さを感じます。いやぁ楽しい。
　　・・・といいながら、私はBrilliant Frame買ってないんですけどね。