20220316_XRミーティング 20220316
by
1ft-seabass
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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 の時期や別デバイスの知 見も活かすことができる