Slide 1

Slide 1 text

20220316_XRミーティング 20220316 HoloLens 2 と Keigan Motor を Bluetooth で つないでみる試行錯誤 ワンフットシーバス 田中正吾

Slide 2

Slide 2 text

私の話はスライドを後ほど共有します。 話す内容に注力いただいて大丈夫です!

Slide 3

Slide 3 text

田中正吾(たなかせいご) 屋号:ワンフットシーバス フリーランスエンジニア。WEBフロントエンド をベースにしながらも、情報とインターフェース が合わさるアプローチという視点で IoT や VR・MR といった技術も取り入れながら活動し ています。ウォンバットが好き。 2022 年 2 月現在 Microsoft MVP ( Windows Development ) ・IBM Champion。

Slide 4

Slide 4 text

こんなのも昨年開発で関わりました ドローン×ARグラスで災害現場の要救助者を発見する、レスキュードローンシステム実証実験 https://prtimes.jp/main/html/rd/p/000000047.000013715.html

Slide 5

Slide 5 text

Keigan Motor + HoloLens 2 扱いやすくて強力なモーター動力を HooloLens 2 から直接 Bluetooth 制御したい Keigan Motor 引用 : https://keiganmotor.myshopify.com/collections/km-1u-%E5%8D%98%E4%BD%93/products/km-1u Bluetooth

Slide 6

Slide 6 text

KeiganMotor KM-1U KeiganMotor KM-1Uはラピッドプロトタイピング(迅速な試作品製作)に 特化したモーターモジュール®製品 https://keigan-motor.com/km-1u/

Slide 7

Slide 7 text

以前も有線接続した Raspberry Pi + Node-RED が HoloLens 2 と Keigan Motor を中継するのは作りました このときは MQTT の接続まわりに力を入れた HoloLens 2 Keigan Motor Raspberry Pi Node-RED シリアル 接続 MQTT 有線 無線

Slide 8

Slide 8 text

こんなコンテンツ https://twitter.com/1ft_seabass/status/1356407989922529280

Slide 9

Slide 9 text

この仕組みでもいろいろ制御できるけど いかんせん関連する技術やデバイスが多い悩ましさがある HoloLens 2 Keigan Motor Raspberry Pi Node-RED シリアル 接続 MQTT 有線 無線

Slide 10

Slide 10 text

もっと直接シンプルに動かせるパターンもあると より柔軟に対応るのでやってみたい 大事なのはアプローチが多様でありたい Bluetooth

Slide 11

Slide 11 text

Bluetooth での命令にも Keigan Motor は対応 Bluetooth

Slide 12

Slide 12 text

Chrome ブラウザから WebBluetooth でつなぐ https://twitter.com/1ft_seabass/status/1501365618397761537

Slide 13

Slide 13 text

Bluetooth のドキュメントも豊富 Service UUID も各 Characteristic も分かりやすい https://docs.keigan-motor.com/software_dev/blelow/kmblef/keigan-motor-service#KeiganMotor

Slide 14

Slide 14 text

HoloLens でも以前 BLE でつなぐのは 書いているので、うまく適用していく ザっと説明してみる https://www.1ft-seabass.jp/memo/2018/02/21/hololens-microbit-ble-send-receive/

Slide 15

Slide 15 text

事前にペアリングはしておく 設定 > デバイス > Bluetooth きっとがんばれば自動ペアリングでも出来そうだけど、一旦は手動でやって検索対象になった

Slide 16

Slide 16 text

KeiganMotor の Service UUID で検索して DeviceService 取得する DeviceWatcher で全検索かけるよりも直接的に取れる

Slide 17

Slide 17 text

DeviceService から Characteristic 探す Status 確認したりして保持しておく

Slide 18

Slide 18 text

ということで、LEDが操作できました! まずは動画から

Slide 19

Slide 19 text

リアルタイムデモもやってみます 色のタイルをクリックすると連動して色が変わります

Slide 20

Slide 20 text

LED 機能はデータも分かりやすく飛ばしやすかった https://docs.keigan-motor.com/software_dev/lowapis/led

Slide 21

Slide 21 text

こんなコード

Slide 22

Slide 22 text

なんとか、モーターも動かせました! まずは動画から

Slide 23

Slide 23 text

動きが分かりやすいように KeiganMotor に LEGO 矢印つけます

Slide 24

Slide 24 text

リアルタイムデモもやってみます 180,90,0 と角度の書かれたタイルをクリックすると回転します

Slide 25

Slide 25 text

モーターは、3手順必要 動作許可→回転速度指定→指定した角度に動かす 1 2 1 3

Slide 26

Slide 26 text

動作許可はLEDぽくてやりやすい バイト列を並べるだけ

Slide 27

Slide 27 text

enable のコード

Slide 28

Slide 28 text

speed はいろいろ難しい 4ケタ使って radian / second の小数点入りデータをバイトでつくる

Slide 29

Slide 29 text

指定角度へ動かす moveTo も speed 同様 バイトの扱いに注意が必要 絶対位置 radian で 4 ケタつかう

Slide 30

Slide 30 text

計算大変なので一度うまくいったてる Node-RED のバイト列を移植しました 固定値だけど動くのが大事。近いうちに動的にバイト列作りたい。

Slide 31

Slide 31 text

こんな値です ← enable ← speed ← moveTo

Slide 32

Slide 32 text

試行錯誤したところとか余談とか 時間のゆるすかぎり

Slide 33

Slide 33 text

デバイス情報取得時に IsEnable が False で つながらないかと思ってめっちゃ調べた False は気にしなくてよかった。勇気をもってつなげばよかった。 micro:bit の時も同じ状況で心配しすぎだった。(所要 12 時間消費)

Slide 34

Slide 34 text

勇気をもってつないだ様子 つまりは以前 micro:bit でつないだコードでほぼほぼイケた

Slide 35

Slide 35 text

無事つながったのが、今日の朝。 ほんとつながって良かった 一度つながれば、あとは順調で助かった。できませんでした LT にならなくてホッとした。

Slide 36

Slide 36 text

WINDOWS_UWP 内がコードヒントが出て めちゃめちゃ書きやすくなった。知見感謝。 Unity でプラットフォーム依存コンパイル内がグレーアウトされるときの対処法 https://zenn.dev/fumiyahr/articles/3fa7013e43b5b5

Slide 37

Slide 37 text

データをバイト列で書き込む知見は こちらがめちゃくちゃ助かったので感謝 UWP(C#)でSwitchBot(BLEデバイス)を操作する https://qiita.com/natsu_san/items/da9c16809508fd30f4ab#%E3%82%B3%E3%83%9E%E3%83%B3% E3%83%89%E3%82%92%E9%80%81%E3%82%8B

Slide 38

Slide 38 text

Unity で 2 分弱+Visual Studio で 1 分で あれこれで試行錯誤の1単位が10~15分はかかる デバイス操作関連は実機で見ないことには分からないことも多く色々試行錯誤できた。つらいたのしい。

Slide 39

Slide 39 text

今回 Unity で HoloLens2 OpenXR プロジェクトで Bluetooth やりましたが、問題なし! https://twitter.com/1ft_seabass/status/1503532564300308480

Slide 40

Slide 40 text

バイト列の操作は苦労しそうなので 良きやり方を模索していきたい BitConverterなど使うと良さそう? LEDのコードでバイト列を動的に入れるのも書けたのでなんとかなりそう?

Slide 41

Slide 41 text

角度指定を今回は泣く泣く固定値にしたけど 動的にデータが作れるようにがんばりたい

Slide 42

Slide 42 text

事前に別手法で Bluetooth つながっていると 安心感あった。諦めにくくなる。 Android BLE Scanner アプリですぐ見れたり、WebBluetoothが素直に動いたので勇気を持って進めた

Slide 43

Slide 43 text

KeiganMotor KM-1U 入手性 開発元の Keigan さん販売サイトに在庫アリ。i-maker.jp にもあった。 https://keiganmotor.myshopify.com/collections/km-1u-%E5%8D%98%E4%BD%93/products/km-1u

Slide 44

Slide 44 text

KeiganMotor KM-1S というのもある https://keiganmotor.myshopify.com/collections/km-1s

Slide 45

Slide 45 text

まとめ ➔ Bluetooth が疎通するのは毎度苦労するけどつながったと きはたのしい ➔ Bluetooth で HoloLens 2 と KeiganMotor がつながると シンプルな構成で得意分野ありそう ➔ C# のデータ送信はバイト列を扱うので慣れが必要そうだ けど良いやり方を探していきたい ➔ Bluetooth をつなげる知見は 1 の時期や別デバイスの知 見も活かすことができる