タグ「BLE」 の検索結果(1/1)

2015年12月14日

BLEビーコンでポジトラは可能なのか(未完ごめんなさい)

本エントリはOculus Rift Advent Calendar13日目の記事ですが、ここ最近の一ヶ月を振り返って、睡眠を削ってゲームを優先させた結果、結論としてごめんなさいという状況です。

Gear VRにポジトラが欲しいとは散々みんなが思っていると思いますが、Microsoft Kinnect v2、Google Tango Project、Oculus Rift DK2, HTC Viveの各方式をちょっと調べて乱暴にまとめればわかる通り、「光源とカメラが両方含まれたシステムで、時間情報を用いた厳密な距離測定によるポジショントラッキング」が結局のところ勝利の方程式だということがわかります。赤外線ではないですが、もう少し大きなスケールな例で言うならば、GPSも同じ仕組みです。

他の方式でポジトラのようなことをしようとするとどこかでより賢い補正式や、用途を限定的にする必要があるという、このへんの勘所をムリしてはいけないと常々思っています(まれによく天才と札束が組み合わさって最強に見える話が発生しますが・・・)いくつか事例を挙げてみます。


例1:加速度値の積分で位置を測定する
「姿勢」に関してはなんとかなるのですが、「位置」に関しては誤差が蓄積されていきますので、それを修正する別の何かが必要です。逆にいうとホイホイリセットできれば意外と使えたりします。

例2:光源がシステムに含まれない
ARマーカーはこちらに分類されます。人間が目でやってる距離測定はこちらですが、人間の距離感というのはある程度遠くなって左右の目の視差がなくなると、経験による距離測定をしだします。トラックみたいに大きな車両だと車間距離を勘違いしやすい、みたいな話とか、野球では球の鉛直方向の落下速度で軌跡を推測するそうですが、そのへんめっちゃ人間頭いいなー、というつらさがあります。

例3:時刻情報ではなく波のパワーで距離を測定する
今回やろうとしているBLEビーコンでのボジトラはこいつにあたります。耳で音を聞いて距離を測定する話に近いと言えば近いのですが、iBeacon等も含むBLEビーコンのAdvertiseはBLEの規格上20ms間隔の50Hzが限度です。RSSIとやらがもう二桁ぐらい精度よく取れればなんちゃってでも楽しめたのかもしれませんが、誤差も振動も大きく、厳しい話です。

ではそんな中でBLEビーコンでポジトラの勝率をあげるために、いくつかの前提条件を検討していきましょう。

案1:受信機を複数にする
人間の耳みたいに、BLEのAdvertiseを受けられるCentralな板を複数つけたら勝率があがるかもしれません。ただし、これはGear VRでは物理的には採用しづらいですね。面倒なのでやめときます。

案2:時間をかける
サンプリング周波数が足りないのであれば、足りるまで位置特定まで時間をかければいいのです。その場に10秒ぐらい立っていてくれれば10cm程度のオーダで位置測位ができます!いやいや、VRなポジトラ用途ではさすがに現実味がありません。受信誤差吸収のための移動平均はもちろんかけますが、秒オーダでもさすがに話になりません・・・。

案3:発信機を複数にする
これは実際やったことがあります。2x2x2(8個)の立方体な感じでビーコンをせいぜい1m間隔で置くという力技です。VR的な使い方を考えると前方3つ(正面と左右)あればなんとかなるんじゃないかなと思っています。

案4:受信機の向きを固定したり、障害物が入らないようにする
これがGear VRで少し有利な点です。電波ですから金属でガンガン反射するので、スマホでこの手のことをやると、端末の向きが意外と影響します。BLEの2.4GHzなマイクロ波は水に吸収されやすいので、身体やスマホの位置がガンガン影響します。どういう持ち方でどの向きで使われるか特定できるGearVR(特に前方にビーコンを配置した際)なら勝率が上がるのでは!ということです。

Appleが「iBeaconは距離測定に使うなよ使うなよ」ってつよく言っている理由がわかってきましたでしょうか。だんだんOculusの話ではなくてBLE位置測位の愚痴の話になってきましたが気のせいです。

・・・というわけでUnityでAdvertise取って計算させたぐらいまでしかできていないのでもう少し形にしたらリベンジさせていただきますごめんなさい!orz

2015年9月11日

Chrome v45だとBLEで遊べるっぽい(まるなげ)

2015.07.14にiBeacon+αっぽいEddystoneが発表されて、

GoogleからEddystoneなる発表がありました
http://dev.classmethod.jp/smartphone/eddystone/

2015.07.22にWeb Bluetoothがアナウンスされて、BLEのCentralな感じで、

Interact with BLE devices on the Web
https://developers.google.com/web/updates/2015/07/interact-with-ble-devices-on-the-web

Chrome v45.0で部分的に対応したっぽくて、

Web Bluetooth API - Web API Interfaces | MDN
https://developer.mozilla.org/en-US/docs/Web/API/Web_Bluetooth_API

W3CにDraftを投げてるっぽい。(Mozillaはサポートするわーって言ってる模様)

Web Bluetooth
http://webbluetoothcg.github.io/web-bluetooth/
>Draft Community Group Report, 8 September 2015

みんながんばれ(ぼくはもうBLEはやらないぞマン)

2014年12月24日

iOSとAndroidのBLEな事情 3

本エントリはBluetooth Low Energy Advent Calendar 2014の12/23のエントリです。遅れてすいません。

以前書いたものを最新状況にあわせてアップデートしました。

【変更差分】
・StickNFindが独自UUIDになってIAS等を公開してくれなくなったのでその旨を記載。
・OS X Yosemiteで自由にペイロードをいじったAdvertiseができなくなってしまった模様なのでその旨を記載。
・Android 5.0 LollipopでPeripheral対応かと思いきやN6/N9限定でN4/5/7ではハード都合により非対応となってしまった旨を記載。L-PreviewではN5でPeripheral動作していたのですが残念...。
・@adakodaさんの協力もありiBeaconとFindMeProfileを最低限実装したPeripheralの動作確認がNexus 9でとれたので、GitHubにサンプルコードとして公開。@zaki50さんによりAndroid Studio化されました。
https://github.com/youten/aBeacon

もうちょっとiOS8でどうなったのかおさえておきたいのですが、バックグラウンドRegion MonitoringはiOS7.1とは変わってないっぽいですね。

iBeacon Detectorもおかげさまで各地でちまちまお役にたっているようで、拙作のアプリとしては珍しく1万ダウンロードを超えました。時間ができたらiBeaconを吹く方に対応したいと思っています。

iBeaconでコンテキストトラッキングではない位置測位をしたい人が世の中から消え去りますように。それではみなさま良いクリスマスを。

2014年11月10日

Android 5.0 LollipopでiBeacon互換Advertise

せっかくN9買ったしMaterial Designをお試しがてらiBeaconをAdvしてみるかと組んでみました。

AdvertiseData.Builder#addManufacturerData(int, byte[])がちゃんと動作するようになったらしく、
4C 00 02 15...の先頭(?)2byteを削って02 15から始まる23bytesのバイト配列を用意した後、
builder.addManufacturerData(0x004c, manufacturerData);
したら1A FF 4C 00 02 15...みたいなAdvが出るようになり、
iOS8のiPhone5では一応iBeaconとして認識されることが分かりました。
(iPhone側が最近あまりiBeaconなコードを組んでないのでちょっと自信がない)

set addManufacturerData params 0x004c and byte[23], it seems good.
https://github.com/youten/aBeacon/commit/e4769a6f910d4b26a120bcf855b4ad1e203f8b65

先頭のAD Flags 02 01 16が出てないのが気になりますが、気が向いたらまた追いかけることにします。

【2014.11.12 追記】


setConnectable(true)したらFlags AD Typeの先頭3byteキター!

aBeacon - Android BLE Peripheral Advertiese sample as a iBeacon for Lollipop
https://github.com/youten/aBeacon

というわけで無事iBeacon互換っぽいAdvを出力するに至りました。L Previewの適当お試しに完全に踊っちゃった感あります。一緒に踊らさせてしまった@adakodaさん、ごめんなさい&ありがとう。さすが俺らのウォーズマンは頼りになる。

2014年7月14日

Lと私(その2 BLE Peripheral Characteristic Read/Write編)

◯はじめに

前回はAdvertiseパケットがいじれてiBeaconができることが分かったので、次はRead/Write Characteristicを実装してみました。

あとで整理しますがGithubのias branchに置きました。後でNotify/Indicateまで試した後リポジトリは整理したいと思います。

◯手順

結局のところ以下の手順となります。

  1. AdvertisementData.Builder#setServiceUuidsで提供するService達を設定する。しないとCharacteristicが欠けたりしたのでちゃんと設定する。
  2. BluetoothManager#openGattServerで開く。
  3. BluetoothGattCallbackを実装。ぶっちゃけonDescriptorReadRequestonDescriptorWriteRequestだけ実装してもなんとかなります。気が向いたら他もどうぞ。
  4. Javadocに書いてある通り、onDescriptorReadRequestとonDescriptorWriteRequestのコールバックから、BluetoothGattServer#sendResponseを忘れずに呼ぶ。

◯余談

  • BluetoothAdapter#getProfileProxyは罠。profileにGATT_SERVERを指定しても失敗する。
  • 時々Serviceが多重起動して複数Nexus 5が見つかったりする。BTのon/offで復活する。深く気にしない。
  • UUIDは128bitのフルのみ使用、16bitが色々ちゃんと動くのかは試していない。あまり試す気もない。

整理するとなくなっちゃいそうなので記録としてAcitivtyにベタ書きしたソースを以下に。

続きを読む "Lと私(その2 BLE Peripheral Characteristic Read/Write編)"

2014年7月 7日

Lと私(その1 Eclipse ADTとBLE Peripheral編)

Android L Previewが来ました。
いくらか試してみたのでメモってみます。

◯常用しているN5をL Previewに

unlockしていなかったので、adb backupして、Storage全コピーして、Factory Image焼き。adb restoreは相変わらず何が起きてるのかよくわからないけど、「多分強制的に/data/配下のアプリのファイルを放り込む動作してるんだろう」と楽観的に考えて適当にadb restoreを数回。概ねアプリ状態とストレージ状態が戻ったみたいなので、困るファイルのみ追加でMTPでコピーしてL化完了。

若干Cellularのつかみが悪くなりましたが、LTE掴まないとかテザリングできない等のトラブルは私の端末では発生していないので概ね逃げ切った模様です。

◯Eclipse+ADTでAndroid L Previewにする際の落とし穴

いろいろつまづいたのですが、結論としては以下の通りの模様です。

・Android L PreviewがついにJava 7必須になった模様。
・Macの場合は標準の6を削除後に7を入れて、「7がコマンドライン以外でも動く様にする設定を追加」する必要があります。
参考:Eclipse Kepler for OS X Mavericks request Java SE 6
http://stackoverflow.com/questions/19563766/eclipse-kepler-for-os-x-mavericks-request-java-se-6
・ADT-BundleがJuno(Eclipse 4.2)ベースなのが気に入らない方はKeplerなりLunaなりにSDK個別インスコすればいいっぽいです。
・ADT-Bundleが相変わらずADTのupdateしてもアップデートがありませんとか言いやがるので新規にADT-Bundle落としてL, 4.4W(Wear), 4.4.2(KitKat)のSDKコンポーネントをざーっとダウンロードしてしまった方が良さそう。

◯Hello L

ADT23.0.2環境がきれいに構築できたらHello Lしましょう。

https://developer.android.com/preview/setup-sdk.htmlに書いてある通りですが、Eclipseのウィザードに沿った出力だと色々おかしいので手動で直します。
・project.propertiesはandroid-Lなことを確認。
・minSdkVersionとtargetSdkVersionは両方とも"L"に。
・styleは手動で書き換え。v11とかv14とかいらないので削除。

◯Hello Android Peripheral

さて、L環境ができたらBLE Peripheralを試しましょう。
増えたandroid.bluetooth.leってパッケージのJavadocを読む限りは、Advertiseまでは素直な感じです。

GitHubに置いておきます。
https://github.com/youten/aBeacon

さて、この次は自前Service実装なのですが、4.4までのCentral限定だと役に立ってなかったGATTServerあたりが臭いと思ってるのですが、Javadoc読んでもさっぱり分かりません。
どこかで既に誰かチャレンジし終わってるんじゃないかな、と思ってるのでぐぐりつつチマチマ試してみたいと思います。iOS-Android間の「HTTPでない」「MFi外の相互通信路」ってマロンですよね。

2014年5月22日

回避手順の説明付きマサカリ(追加一刀)

何様だという話はあるのですが。当該記事は「正しい見聞を広めよう」という目的で書かれているように見えるのですが実際には誤解を広めるのに一役買ってしまっていそうなので。

企画とエンジニアが知っておかないといけない「iBeacon」の話 #iBeacon #yahoo #iOS7
https://codeiq.jp/magazine/2014/05/10303/

この件へのツッコミ詳細です。

続きを読む "回避手順の説明付きマサカリ(追加一刀)"

2014年4月11日

#potatotips #6でBLEについて喋ってみました

iOSとAndroidの開発Tips共有会、#potatotips第6回に参加してBLEについてしゃべってきました。

自分の発表については、BLEが分からない人に向けて無理矢理説明しようとしてアレーって感じになってしまいました。妥当な検証かどうかはあまり自信がありませんが、似た様なものをみんなで集めて楽しい未来を目指せればいいんじゃないかな、と。

イベントは面白かったです。ついでに動画だけ見てなんだろう、って思ってたAnkiDriveの実物で遊べて楽しかったです。

タメになる情報にありがたみを感じながら、みんなちゃんと開発してるなぁ、と少し寂しさと危機感をおぼえました。

2014年3月24日

AndroidとBLEとiOSと

年度末ということで3連休で色々アウトプットしてきました。手持ちの残りは4月に整理して5月からはMOVERIO BT-200と遊びたいなと思っています。

Android Bazaar and Conference 2014 SpringでLTしました。

・デモとしてマサカリ振り始めたぐらいで時間切れでした。


BLE雑談会 in 東京で喋ってきました。1末に書いた資料の少し加筆ver.です。


関連して、既に公開済みのものもありますが、いくつか新たに手元のソースコードをgithubで公開しました。

https://github.com/youten/BLERW
AndroidでCharacteristicsをRead/Writeするサンプルです。Androidも4.3からCentralになれますよ、ということを示すものです。

https://github.com/youten/ImmPeri
iOSでImmediate Alert ServiceのPeripheralとして動作するサンプルです。Immediate AlertとしてStickNFindに代えて動作しますよー、ということを示すものです。

https://github.com/youten/iBeaconDetector
Google Playで公開しているアプリ、iBeacon Detectorのソースコードです。名前の通り、Androidでも(現仕様のバイト列パターンとしての)iBeaconは検出できますよ、ということを示すものです。

https://github.com/youten/XBeacon
MavericksなMac(OS X)を(互換バイトパターンをAdvertiseするという意味での)iBeaconにするアプリです。類似品との差別点はステータスバーに常駐するということぐらいです。OS XでPeripheralができますよ、Advertiseバイトパターンは自由に設定できますよ、ということを示すものです。

※"masakari" brunchはMacをPeripheralにして、AndroidからBLEでMacに接続して、keynoteを操作できますよ、というサンプルです。HOGPまわりが通るのであればそれでOK、車輪の再開発です。オレオレProfileでいいんですよ、ということを示すものですがイマイチ飛んでるデータが分かりにくいので、AndroidとiOSで動作する対戦ゲームっぽいものをつくろうかなと思っています。

2014年3月10日

LeScan探検隊

AndroidのBLEスキャンはみんなで同時にon/offしたらどうなるの?

○最初に結論

大丈夫だ、問題ない。

○確認手順

1. onPauseでscan止めないアプリAをつくる
2. アプリAを起動してscanしてHOMEおしてscanが続いてることを確認
3. scanしてconnectしてCharacteristicのreadとかwriteとかするアプリBをつくる
4. アプリAを起動してscanしてHOMEおしてアプリBを起動してscanして色々動かす
5. アプリAのscan止まってなければ勝ち

別になんでもいいのですがこれこれで試してみたところ...

なんてことのなかった様に動きました@Nexus5。 「どこかscan中の子が1つでも居たらstopLeScanしても止まらない」ということのようです。

以下、余談。

続きを読む "LeScan探検隊"

2014年3月 1日

RingSDK公開はよ

これは「コンセプト動画だけRing」にいくらか被害を受けたある個人の逆恨みエントリです。プロダクトよりプロジェクトXの方が好きという人種は同意見だと信じてる。

KickStarter:Ring : Shortcut Everything.
https://www.kickstarter.com/projects/1761670738/ring-shortcut-everything

続きを読む "RingSDK公開はよ"

2014年1月28日

AndroidとiOSのBLEな事情

AndroidとiOSでBLEだAdvertiseだCentralだPeripheralだ、とiBeaconの話を何回も順番に説明するのに飽きてきたのでなるべくシンプルで、それでいて密度が濃い様な資料を作ってみました。

2013年11月17日

AndroidのBLEでCharacteristicsのRead/Writeサンプルを作ってみた

○はじめに

Bluetooth Low Energy(BLEと略される、ただしググラビリティが低すぎるという欠点を持つ)がやっとAndroid 4.3で対応したのですが、ちょっと触ってみた結果、どうにも悲しいことに

「1. 安定性がイケてない」
「2. SDKサンプルがイケてない」
「3. API仕様がイケてない」

という三重苦です。

iBeaconとかの盛り上がりもありますし、なるべく低コストで早く正しい方向で盛り上がる様に、AndroidのBLEについてStickNFindという先駆者の製品でピロリーしてみた際の話を以下に記載します。

(注)本エントリではBLEそのものの話は端折ってしまいますので、そのあたりはもっと分かりやすく詳しい他のサイトなどを参照していただければ、と。

コードはgithubにおいてますので、AndroidのBLEについて触ってみたことがある人はそれを見れば話が早いかもしれません。

GitHub - youten / BLERW - Android BLE Scan and Characteristics Read/Write Example
https://github.com/youten/BLERW

続きを読む "AndroidのBLEでCharacteristicsのRead/Writeサンプルを作ってみた"

2013年10月18日

iBeaconは結局何なのか

iBeaconまとめ_20131021.png

iOS7からの新機能(?)として話題のiBeaconについて、ちょっとO2Oとか決済関連で、違うんじゃないかなー?という流れがある中、BLEとiBeaconなAPIについて、ちまっと試したのでまとめてみました。

○参考

Developers.IO:[iOS 7] 新たな領域観測サービス iBeacon を使ってみる
http://dev.classmethod.jp/references/ios7-ibeacon-api/

stackoverflow:Combine iBeacon bluetooth low energy with Android 4.3
http://stackoverflow.com/questions/17875430/combine-ibeacon-bluetooth-low-energy-with-android-4-3
> I have ported the iOS7 iBeacon SDKs to Android, and was able to see standard iBeacons and estimate their range.

Reinforce-Lab.'s Blog:iBeaconの解説
http://reinforce-lab.github.io/blog/2013/10/21/ibeacon/

○iBeaconとは

タグとしての正体は、サービス識別のための128bit UUID、それぞれ16bitのmajor番号・minor番号、それと1byteの電波強度を含む、BLE Advertiseする子の様です。

APIとしては、Developers.IOさんのタイトルそのままですが、Apple公式docに「Monitoring Beacon Regions」って書いてあってそのまんまですね。
(BLEでぴこーんぴこーんAdvertiseを吹く)ビーコンで領域(Region)に入った/出たをモニタリングするもの、でしかないです。

Q「NFCに代わるものなの?」
A「NFCをただのRFID読み取り技術と思っていたらそうかもしれませんね。」

# AndroidにもPeripheral対応はよ!

※@u_akihiroさんから指摘をもらってBT4なロゴがおかしいのと固定8byteの表現が違うとのことです。サボらないでもちょっと調べて更新します、ありがとうございます!

(2013.10.21追記)
画像にBluetooth SMART/SMART Readyのロゴとestimoteのタグがone of themなことについて少し表現を修正、またアドバタイズパケットのフォーマットについて以下追記。

続きを読む "iBeaconは結局何なのか"