ミリ波を用いたセンシング技術とデモアプリケーションを動かしてみたお話

NTTドコモの六平です。新卒1年目のいわゆる若手です。笑
この記事は、ミリ波を用いたセンシング技術について簡単に説明し、[Texas Instruments](http://www.tij.co.jp/ja-jp/sensors/mmwave/iwr/overview.html)（TI）が製造している産業用ミリ波センサを用いて、TIが公開しているデモアプリケーションを動かしてみた様子を紹介しようと思います。
元々は情報科学を専攻していたため、無線技術について勉強中の身ではありますが、頑張って書いていこうと思います。

## ミリ波について
ミリ波とは、30GHz～300GHzの周波数帯を用いた電磁波を指します。
波長が1~10mmであることから、「ミリ波」と呼ばれています。

そして、ミリ波を用いたセンサは、測定対象物に対して電磁波を輻射し、対象物から跳ね返ってきた電磁波（反射波）を解析することで、対象物との距離、速度、角度を測定することができます。

この解析には、Time of Flight (ToF) や、到来方向推定などが利用されています。（[ToF](https://www.kddi.com/yogo/%E3%83%9E%E3%83%AB%E3%83%81%E3%83%A1%E3%83%87%E3%82%A3%E3%82%A2/TOF.html)：照射した電磁波が物体に当たって、戻ってくるまでにかかった時間から、物体までの距離を計測する技術）

利用シーンとしては、周辺環境の分析が主となっています。例えば、車の周辺環境の分析や、ロボットの周辺環境の分析などがあげられ、ロボットを自動化するための技術として用いられています。

また、後ほど紹介する心拍計測や、ジェスチャー認識などにも用いられています。

### カメラよりも優れているところ
物体認識や測距が可能であるミリ波センサの比較対象としてカメラが挙げられます。  
1. 環境変化に強い
ミリ波センサによる測距はToFを利用しているため、日光の照射量の影響を受けません。また、カメラで測距する場合よりも、雨や雪の影響を受けにくい特徴があります。  
2. 高い精度で測距可能
波長が短いため、人間の目（カメラ）では見えない微妙な動きも検知することができます。  
3. 透過性を持っている
電磁波は透過性を持っているため、比誘電率が低い物体（木の壁など）の向こう側の物体を検知することができます。アメリカでは、空港の保安検査にミリ波が使われており、服の内側に危険物が無いかチェックすることができます。（[ProVision™ ミリ波ボディスキャナー](https://www.j-aero.co.jp/divisions/provision.html)）

# デモアプリケーションを動かしてみた
3つのミリ波センサを用意して、様々なデモアプリケーションを動かしてみました。
ちなみに、ここで紹介するデモアプリケーションは、[TI Training & Videos](https://training.ti.com/jp)にすべて公開されていて、それを再現してみます。（添付している写真はこの記事のために撮った写真なので電源に繋げていませんが、実際に使う場合は電源とUSBを繋げて使用してください。）

||IWR1642|IWR1443|IWR6843AoPEVM|
|---|---|---|---| 
||高性能の 77GHz センサ|低消費電力の 77GHz 液面検出センサ|内蔵アンテナ - RF 設計の課題を軽減|
|同調周波数|76~81GHz|76~81GHz|60~64GHz|
|レシーバの数|4|4|4|
|トランスミッタの数|2|3|3|
|処理|DSP/MCU|FFT アクセラレータ、マイコン|DSP、FFT アクセラレータ、マイコン|
|デモ|人物検出|心拍計測|ジェスチャー認識|

### 初回セットアップ
- TI レーダモジュールをPCで認識するための[XDS driver](http://processors.wiki.ti.com/index.php/XDS_Emulation_Software_Package)をインストール
- モジュールにバイナリファイルを書き込むための[UniFlash](http://www.ti.com/tool/uniflash)をインストール
    - 書き込むときはジャンパーやスイッチのON/OFFを切り替えFlasing modeにしてください。（詳しくは以下のUser's GuideやQuickStart Guideを参照）
    - モードを切り替えた際、リセットボタンや電源抜き差しで初期化動作を行ってください。
- [TI Resource Explorer](http://dev.ti.com) > Industrial Toolbox - 4.1.0 をローカルにzipで保存して解凍
- [mmWave SDK](http://www.tij.co.jp/tool/jp/MMWAVE-SDK)をインストール（いらないかも…？一番最初にインストールしていたため必要かどうかわからない）

### IWR1642を用いた人物検出
"Industrial Toolbox (4.1.0) / Labs / People Counting / 16xx - People Counting /user's Guide"を参考に環境設定
1. Uniflashを用いて "\mmwave_industrial_toolbox_4_1_0\labs\people_counting\16xx_people_counting\quickstart\mmw_pplcount_demo_default.cfg" をIWR1642へ書き込む。
2. MATLAB runtime R2017a をインストール
3. "\mmwave_industrial_toolbox_4_1_0\labs\people_counting\16xx_people_counting\quickstart\pplcount_gui.exe" を実行
4. Port等をセッティングしてスタート

というわけでこいつ↓に向かって動き回ったりしてみます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543366/36adbca9-627c-4022-06f5-6024249d0f11.jpeg" width="400">

自分が動いた位置に対して反応しています！
（机の周りを一人動き回っている異様な光景）

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543366/bde8c83c-bb59-f76d-d546-6af245179a9b.png" width="600">

写真に残し忘れましたが、人数カウントも確認できました。

軌道もトラッキングできるのは何かに使えそうですね！
    
### IWR1443を用いた心拍計測
"Industrial Toolbox (4.1.0) > Labs > Vital Signs > 14xx - Vital Signs > QuickStart Guide" を参考にセットアップします。
1. Uniflashを用いて"\mmwave_industrial_toolbox_4_1_0\labs\vital-signs\14xx_vital_signs\pjt\Prebuilt_binaries\xwr14xx_vitalSigns_lab_mss.bin" をIWR1443へ書き込む。
2. MATLAB runtime R2017a をインストール
3. "\mmwave_industrial_toolbox_4_1_0\labs\vital_signs\14xx_vital_signs\gui\vitalSignsDemo_GUI.exe" を実行
4. Port等をセッティングしてスタート

というわけでこいつ↓に向かって正座します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543366/6037d729-15d1-16bf-1ce2-13437db37dd4.jpeg" width="400">

呼吸と心拍が取得できている！（どのくらい正確なのかはまだ検証していませんが…）

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543366/52d5896a-16ef-9be1-38df-7667757799c1.png" width="600">

試しに息を止めてみると…

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543366/7ca109b8-34df-9801-51fe-39cd1dc52497.png" width="600">

死んでしまいました…（運動不足すぎて肺活量だいぶ落ちててしんどい）

さすがに、心拍を止めることはできないので、お試しは以上です。

非接触的に心拍が取れることで面白い応用先がありそうです。

### IWR6843AOPEVMを用いたジェスチャー認識
"Industrial Toolbox (4.1.0) > Labs > Gesture Rcognition > 68xx AoP_ODS - Multiple Gesture and Motion Detection > User's Guide" を参考にセットアップします。
1. Uniflashを用いて"\mmwave_industrial_toolbox_4_1_0\labs\gesture_recognition\68xx_multi_gesture_and_motion_det\prebuilt_binaries\aop\multi_gesture_demo_68xx_aop.bin"をIWR6843AOPEVMへ書き込む。
2. Tera Termをインストール
3. Tera Termを実行し、シリアルポートを設定する。

ということでこいつ↓にシュバッとしてみます…
（居室で一人手を振りまくっている異様な光景）

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543366/c9c6bee9-7f86-9f4f-e29d-66b07dbf3b2a.jpeg" width="400">

横縦横横縦横縦　横縦横横縦縦横縦横縦
（どこかで見覚えのある順番…）

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543366/870fa79b-e19f-888f-6578-4ac04d0abdc3.png" width="400">

といった感じで使えます！
改良できれば、面白いネタが作れそうですね！

# おまけ
最近、私が気になっているデバイスについて紹介します。

### Google Pixel 4
初めてミリ波レーダのチップが搭載されたスマートフォンです。[Pixel 4](https://store.google.com/jp/product/pixel_4)には、[Soli](https://atap.google.com/soli/)というミリ波レーダのチップが搭載されていて、Motion Senseというジェスチャー操作が使えるようになっています。

Google Pixel 4 "https://www.youtube.com/watch?v=KnRbXWojW7c"

例えば、スマホに顔が近づいたことを認識して、ディスプレイの電源をONにすることができます。その他にも、手のジェスチャーによって、画面を触らずとも再生されている楽曲を切り替えることができます。

今は、そこまで多くの機能が備わっているわけではありませんが、もっと面白そうなジェスチャー操作が搭載されると思います。

そして、そんなMotion Senseに心を惹かれた私は、発売日にPixel 4を買いました。笑

だがしかし…！

2019年12月現在、日本ではMotion Senseを使うことができません…。2020年の春頃にMotion Senseが使えるようになるらしいので、首を長くして待ちます…！

（余談：カメラの性能がとても良く、ポートレートがとても綺麗だったり、夜景がすごく綺麗に撮れて、カメラも気に入ってます。笑）

### Vayyar Smart Home
Vayyar - Hello Home "https://www.youtube.com/watch?v=VB2fLHVEhjs"

部屋の天井に取り付けるタイプのミリ波センサデバイスで、人間の行動をトラッキングすることができます。さらに、部屋にいる人の数をカウントしたり、部屋にいる人の心拍を計測することができます。

行動トラッキングについては、人がどこを動いたか、立っているのか、座っているのかなどをセンシングしています。また、心拍異常などを即座に察知できるため、高齢者の見守りセンサなどの役割も果たすことができます。

このように、行動をリアルタイムでトラッキングすることができるため、行動ログをもとに生活改善など新しい価値を生み出せる可能性が考えられます。

# おわりに
今回は、ミリ波センサについて簡単に紹介してみました。
気になった方は是非、ミリ波センシングで面白いものを開発して、Qiita等に共有してみてください！

# 参考
- https://www.macnica.co.jp/business/semiconductor/articles/texas_instruments/128213/
- http://www.tij.co.jp/ja-jp/sensors/mmwave/overview.html