Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
AITCシニア会
めがねチーム 報告
2016/1/30
近藤・吉田
1
動機シナリオ
ある朝、目覚める
「おや、ここは…自宅だ…」
「昨夜は覚えてないけど、よく飲んだなぁ…」
「もう、明るいなぁ、何時頃だろ…」
枕元に手を伸ばす
いつも眼鏡を置いておく場所
「おや?あれ? な、無い!」
この時の絶望感は、眼...
解決したい課題3
家の中のどこかにあるはずの眼鏡を
眼鏡をかけていなくでも
探せるようにしたい
当初のアイデア
眼鏡とスマホを通信させて
位置をスマホに知らせる
スマホから指示すると音がなる
ピカッと光ってもいいかも
…
しかし重大な問題点が発覚
4
すでにある!
 ステッカーとスマホの間の距
離をレーダー表示
 アイコンをタップで、鳴る、
光る
 指定した距離の外に移動する
と通知
 逆に、有効距離内に入った瞬
間に通知 Stick-N-Find ステッカー・ファインド
2個パック...
やっぱり電池不要なRFIDでしょ
RFIDとは、 (Wikipediaから)
ID情報を埋め込んだRFタグから、電磁界や電波などを用いた近
距離(周波数帯によって数cm~数m)の無線通信によって情報
をやりとりするもの、および技術全般を指す...
めがねに付けるのは難しいかも…
タグが結構大きい(アンテナなので小さくできない
し、アンテナが大きいほど遠くまで届く)
リーダーが電波を飛ばすので免許が要る
免許が不要な出力だと、30cm程度しか読みとれない
免許は建物に対する申請なの...
ここで発想の転換!
家の中ならば、『眼鏡の現在位置』ではなく、
『自分が昨夜どこにいたか』が分かればよい
スリッパに
モーションセンサーを装着して
昨夜どこを歩いたかを記録する
X
Y
8
荒本さん手持ちの加速度センサーに挑戦!
LSM9DS1搭載 IMU Breakout(9DOF)
3118円
しかし、
なんと半田付けが必要でした…
しかたないので、ワイヤーを
手で押さえながら…
わけわからんまま一日目終了。
9
この...
検索したらブレッドボード用のもあるよ。
 3軸加速度センサーモジュールKXR94−2050
850円
10
センサーを検索するときは
「Arduino 加速度センサー」で
Arduino 9軸モーションシールド
3790円
11
Arduino Unoにぴったり被さる。ワイヤー不要で
スリッパに装着しても違和感無し!(かな?)
x
y
モーションシールドの仕様
BOSCH製BNO055を搭載
14bit精度の3軸加速度センサー (X,Y,Z)
16bit精度の3軸角速度センサー (Ωx,Ωy,Ωz)
16bit精度の3軸地磁気センサー (x,y,z)
12
物理のおさらい(1)
加速度 速度 位置
台形公式
積分 積分
t i t i+1
⊿v(ti) = ⊿t ✕ (ai + ai+1) ÷ 2
⊿d(ti) = ⊿t ✕ (vi + vi+1) ÷ 2
13
物理のおさらい(2)
重力加速度9.8m/s2 地磁気0.45ガウス
-9.8m/s2
x
y
z
センサーを水平に置いて静止した場合
0.45G
x
z
北磁極に向けて水平に置いた場合(東京)
北磁極
(6°西)49°
0.45✕cos4...
では、さっそく測ってみよう!(1)
#include "NAxisMotion.h"
#include <Wire.h>
NAxisMotion mySensor;
unsigned long lastStreamTime = 0;
const...
では、さっそく測ってみよう!(2)
void loop() {
if ((millis() - lastStreamTime) >= streamPeriod) {
lastStreamTime = millis();
Serial.print...
測定結果は? (置いたまま動かさないで)
Time: 1569ms a: -0.03, 0.14, 9.77m/s2 gy: 0.06, -0.31, 0.00d/s mg: 0.13, 0.12, -0.40G
Time: 1609ms a:...
実装上の考察(1)
磁気は室内環境に左右される。
今回は絶対的な方位は関係ないので、スリッパを最
初に履く時の方向を基準に測定する。
地磁気センサーは使用しない
平屋の住まいを前提にすれば、上下移動は考慮する
必要はない。
ただし、ス...
実装上の考察(2)
センサーが前に20°傾いている場合
-9.8m/s2
x
1. 角速度を積分して傾き20°を知る
2. x軸方向の加速度から3.35を差し引く
3. さらにcos20°=0.94を掛ける
9.8✕sin20°≒3.35m/...
実装上の考察(3)
そもそもずっと同じ方向を向いて歩いているわけが
ない!
x
y
1. α = z軸方向の角速度を積分
2. 現在の座標をα°回転した座標に変換
α
うわぁ、けっこう色々面倒じゃん!
20
初期のx軸
大丈夫!BNO005がやってくれます21
BNO055 データシート
「Data sheet BNO055」でグーグル検索してくださ
い。
105ページある英語の文書です。
BNO055の使い方がすべて書いてあります。
22
用語解説
Sensor Fusion
ある現象に対して、それを測定する複数のセンサーーの出力から、
データ同士の処理を行い、1つの知覚を得ること(wikipediaより)
Absolute Orientation
角速度を積分して、絶対方位...
ということは…
IMUモード(地磁気センサーを切る)にして
最初にスリッパを水平にまっすぐ置き
Linear Acceleration (ax, ay, az)と
Relative Orientation (α、β、γ)を読んで
座標...
プログラム
void setup() {
Serial.begin(115200); I2C.begin();
mySensor.initSensor();
mySensor.setOperationMode(OPERATION_MODE_IM...
では、早速やってみましょう!26
1. 加速度センサーを静止状態で安定させる
2. 実際に歩いて加速度を測定する
3. 加速度を2回積分して移動距離を求める
測定の概要
約4mの範囲で、歩いた軌跡を測定しました。
27
約4m
約4m
センサーの持ち方
X方向
Y方向
①
②
③
④
向きを変えないように注意して
1. 加速度センサーを静止状態で安定させる
静止状態でのセンサー値を測定
Time: 4591ms a: 0.00,0.03,0.10m/s2
Time: 4606ms a: -0.01,0.02,0.08m/s2
Time: 4625ms ...
2. 実際に歩いて加速度を測定する
概ね①~④の動きに合っている。
29
-6
-4
-2
0
2
4
6
8
1
12
23
34
45
56
67
78
89
100
111
122
133
144
155
166
177
188
199...
3. 加速度を2回積分して移動距離を求める
約90m進んだようです。(あれ?・・・4mじゃ・・・ )
30
0
10
20
30
40
50
60
70
80
90
100
1
11
21
31
41
51
61
71
81
91
101
1...
まとめ
加速度を扱うのは高度な専門技術が必要
2回積分すると少しの誤差でも大幅なずれになる。
数値を取得できても、有効な値を抽出するのは困難。
キャリブレーション、ローパスフィルター、座標変換など勉強
が必要。
プロが提供するフュージ...
Upcoming SlideShare
Loading in …5
×

2016年1月30日 シニア技術者勉強会『メガネを見つける』

1,495 views

Published on

発表日:2016年1月30日
イベント名:AITC女子会&シニア技術者勉強会 IoT試作合同発表会
イベントURL:http://aitc.jp/events/20160130-Women_Senior/info.html
タイトル:シニア技術者勉強会『メガネを見つける』
発表者:近藤 繁延、吉田 裕之

Published in: Internet
  • Login to see the comments

2016年1月30日 シニア技術者勉強会『メガネを見つける』

  1. 1. AITCシニア会 めがねチーム 報告 2016/1/30 近藤・吉田 1
  2. 2. 動機シナリオ ある朝、目覚める 「おや、ここは…自宅だ…」 「昨夜は覚えてないけど、よく飲んだなぁ…」 「もう、明るいなぁ、何時頃だろ…」 枕元に手を伸ばす いつも眼鏡を置いておく場所 「おや?あれ? な、無い!」 この時の絶望感は、眼鏡をかけてない人 には絶対に分からない!(のだそうだ) 冷蔵庫の中に忘れる こともあるらしい 2
  3. 3. 解決したい課題3 家の中のどこかにあるはずの眼鏡を 眼鏡をかけていなくでも 探せるようにしたい
  4. 4. 当初のアイデア 眼鏡とスマホを通信させて 位置をスマホに知らせる スマホから指示すると音がなる ピカッと光ってもいいかも … しかし重大な問題点が発覚 4
  5. 5. すでにある!  ステッカーとスマホの間の距 離をレーダー表示  アイコンをタップで、鳴る、 光る  指定した距離の外に移動する と通知  逆に、有効距離内に入った瞬 間に通知 Stick-N-Find ステッカー・ファインド 2個パック:5,820円(Amazon) ステッカー側がボタン電池駆動… そんな重いものを眼鏡に貼り付けるか!? 5
  6. 6. やっぱり電池不要なRFIDでしょ RFIDとは、 (Wikipediaから) ID情報を埋め込んだRFタグから、電磁界や電波などを用いた近 距離(周波数帯によって数cm~数m)の無線通信によって情報 をやりとりするもの、および技術全般を指す。 タグの種類:パッシブタグとアクティブタグ、双方を組み合わせ たセミアクティブタグの3種類がある。 パッシブタグとは、リーダからの電波をエネルギー源として動 作するRFタグで、電池を内蔵する必要がない。タグのアンテナ はリーダからの電波の一部を反射するが、ID情報はこの反射波 に乗せて返される。 リーダ側は、比較的強めの電波を供給し、タグからの非常に微 弱な反射波を受信・解読できる必要がある。  しかし、これにも問題が! 6
  7. 7. めがねに付けるのは難しいかも… タグが結構大きい(アンテナなので小さくできない し、アンテナが大きいほど遠くまで届く) リーダーが電波を飛ばすので免許が要る 免許が不要な出力だと、30cm程度しか読みとれない 免許は建物に対する申請なので、別の場所でデモできない 遠距離だとRFIDリーダーが高い(15万円~) そもそも タグとリーダーで普通に製品になってる 7
  8. 8. ここで発想の転換! 家の中ならば、『眼鏡の現在位置』ではなく、 『自分が昨夜どこにいたか』が分かればよい スリッパに モーションセンサーを装着して 昨夜どこを歩いたかを記録する X Y 8
  9. 9. 荒本さん手持ちの加速度センサーに挑戦! LSM9DS1搭載 IMU Breakout(9DOF) 3118円 しかし、 なんと半田付けが必要でした… しかたないので、ワイヤーを 手で押さえながら… わけわからんまま一日目終了。 9 この穴にワイヤーを 半田付けする
  10. 10. 検索したらブレッドボード用のもあるよ。  3軸加速度センサーモジュールKXR94−2050 850円 10 センサーを検索するときは 「Arduino 加速度センサー」で
  11. 11. Arduino 9軸モーションシールド 3790円 11 Arduino Unoにぴったり被さる。ワイヤー不要で スリッパに装着しても違和感無し!(かな?) x y
  12. 12. モーションシールドの仕様 BOSCH製BNO055を搭載 14bit精度の3軸加速度センサー (X,Y,Z) 16bit精度の3軸角速度センサー (Ωx,Ωy,Ωz) 16bit精度の3軸地磁気センサー (x,y,z) 12
  13. 13. 物理のおさらい(1) 加速度 速度 位置 台形公式 積分 積分 t i t i+1 ⊿v(ti) = ⊿t ✕ (ai + ai+1) ÷ 2 ⊿d(ti) = ⊿t ✕ (vi + vi+1) ÷ 2 13
  14. 14. 物理のおさらい(2) 重力加速度9.8m/s2 地磁気0.45ガウス -9.8m/s2 x y z センサーを水平に置いて静止した場合 0.45G x z 北磁極に向けて水平に置いた場合(東京) 北磁極 (6°西)49° 0.45✕cos49°≒0.32G 0.45✕sin49° ≒-0.37G y 14
  15. 15. では、さっそく測ってみよう!(1) #include "NAxisMotion.h" #include <Wire.h> NAxisMotion mySensor; unsigned long lastStreamTime = 0; const int streamPeriod = 40; void setup() { Serial.begin(115200); I2C.begin(); mySensor.initSensor(); mySensor.setOperationMode(OPERATION_MODE_AMG); mySensor.updateAccelConfig(); } 15 3種全部のセンサーを有効にするモード Arduino IDEの最新版にスケッチがあります。 NAxisMotionライブラリの各関数の説明: http://labs.arduino.org/9+Axes+Motion
  16. 16. では、さっそく測ってみよう!(2) void loop() { if ((millis() - lastStreamTime) >= streamPeriod) { lastStreamTime = millis(); Serial.print("Time: "); Serial.print(lastStreamTime); Serial.print("ms "); Serial.print(" a: "); Serial.print(mySensor.readAccelX()); Serial.print(", "); Serial.print(mySensor.readAccelY()); Serial.print(", "); Serial.print(mySensor.readAccelZ()); Serial.print("m/s2 "); Serial.print("gy: "); Serial.print(mySensor.readGyroX()); Serial.print(", "); Serial.print(mySensor.readGyroY()); Serial.print(", "); Serial.print(mySensor.readGyroZ()); Serial.print("d/s "); Serial.print("mg: "); Serial.print(mySensor.readMagX()/100); Serial.print(", "); Serial.print(mySensor.readMagY()/100); Serial.print(", "); Serial.print(mySensor.readMagZ()/100); Serial.print("G "); Serial.println(); }} 16
  17. 17. 測定結果は? (置いたまま動かさないで) Time: 1569ms a: -0.03, 0.14, 9.77m/s2 gy: 0.06, -0.31, 0.00d/s mg: 0.13, 0.12, -0.40G Time: 1609ms a: -0.02, 0.15, 9.74m/s2 gy: 0.00, -0.06, 0.06d/s mg: 0.13, 0.12, -0.40G Time: 1649ms a: -0.03, 0.14, 9.77m/s2 gy: 0.06, 0.00, 0.00d/s mg: 0.13, 0.12, -0.40G Time: 1689ms a: -0.03, 0.17, 9.67m/s2 gy: 0.00, -0.06, 0.06d/s mg: 0.13, 0.12, -0.40G Time: 1729ms a: -0.02, 0.15, 9.81m/s2 gy: 0.00, 0.12, -0.06d/s mg: 0.13, 0.12, -0.40G Time: 1769ms a: -0.03, 0.16, 9.81m/s2 gy: 0.12, -0.06, 0.00d/s mg: 0.14, 0.12, -0.40G Time: 1809ms a: -0.03, 0.14, 9.74m/s2 gy: 0.00, -0.06, 0.12d/s mg: 0.14, 0.12, -0.40G Time: 1849ms a: -0.03, 0.16, 9.80m/s2 gy: -0.06, -0.19, -0.12d/s mg: 0.14, 0.12, -0.40G Time: 1889ms a: -0.02, 0.16, 9.72m/s2 gy: 0.00, 0.00, -0.06d/s mg: 0.14, 0.12, -0.40G Time: 1929ms a: -0.02, 0.15, 9.78m/s2 gy: 0.00, -0.12, 0.00d/s mg: 0.14, 0.12, -0.40G Time: 1969ms a: -0.04, 0.20, 9.80m/s2 gy: 0.00, 0.00, -0.19d/s mg: 0.12, 0.11, -0.39G 17 ま、こんなもんか?
  18. 18. 実装上の考察(1) 磁気は室内環境に左右される。 今回は絶対的な方位は関係ないので、スリッパを最 初に履く時の方向を基準に測定する。 地磁気センサーは使用しない 平屋の住まいを前提にすれば、上下移動は考慮する 必要はない。 ただし、スリッパが常に水平に保たれるわけではな い。スリッパが傾くとx軸・y軸方向に重力加速度成 分が加わってしまう。 18
  19. 19. 実装上の考察(2) センサーが前に20°傾いている場合 -9.8m/s2 x 1. 角速度を積分して傾き20°を知る 2. x軸方向の加速度から3.35を差し引く 3. さらにcos20°=0.94を掛ける 9.8✕sin20°≒3.35m/s2 20° 19
  20. 20. 実装上の考察(3) そもそもずっと同じ方向を向いて歩いているわけが ない! x y 1. α = z軸方向の角速度を積分 2. 現在の座標をα°回転した座標に変換 α うわぁ、けっこう色々面倒じゃん! 20 初期のx軸
  21. 21. 大丈夫!BNO005がやってくれます21
  22. 22. BNO055 データシート 「Data sheet BNO055」でグーグル検索してくださ い。 105ページある英語の文書です。 BNO055の使い方がすべて書いてあります。 22
  23. 23. 用語解説 Sensor Fusion ある現象に対して、それを測定する複数のセンサーーの出力から、 データ同士の処理を行い、1つの知覚を得ること(wikipediaより) Absolute Orientation 角速度を積分して、絶対方位に対して回転角度(傾き)を求める Relative Orientation 角速度を積分して、初期状態の向きに対して回転角度を求める Linear Acceleration 重力加速度成分を除き、動きによる加速度のみ出力する 23
  24. 24. ということは… IMUモード(地磁気センサーを切る)にして 最初にスリッパを水平にまっすぐ置き Linear Acceleration (ax, ay, az)と Relative Orientation (α、β、γ)を読んで 座標変換(ax’, ay’, az’)し ax’とay’を2回積分すればいい まずは、センサーを回転させないように測ってみよう 24 う、それでもそこそこ面倒
  25. 25. プログラム void setup() { Serial.begin(115200); I2C.begin(); mySensor.initSensor(); mySensor.setOperationMode(OPERATION_MODE_IMUPLUS); mySensor.updateAccelConfig(); void loop() { if ((millis() - lastStreamTime) >= streamPeriod) { lastStreamTime = millis(); Serial.print("Time: "); Serial.print(lastStreamTime); Serial.print("ms "); Serial.print(" a: "); Serial.print(mySensor.readLinearAccelX()); Serial.print(", "); Serial.print(mySensor.readLinearAccelY()); Serial.print(", "); Serial.print(mySensor.readLinearAccelZ()); Serial.print("m/s2 "); Serial.println(); }} 25
  26. 26. では、早速やってみましょう!26 1. 加速度センサーを静止状態で安定させる 2. 実際に歩いて加速度を測定する 3. 加速度を2回積分して移動距離を求める
  27. 27. 測定の概要 約4mの範囲で、歩いた軌跡を測定しました。 27 約4m 約4m センサーの持ち方 X方向 Y方向 ① ② ③ ④ 向きを変えないように注意して
  28. 28. 1. 加速度センサーを静止状態で安定させる 静止状態でのセンサー値を測定 Time: 4591ms a: 0.00,0.03,0.10m/s2 Time: 4606ms a: -0.01,0.02,0.08m/s2 Time: 4625ms a: 0.00,0.03,0.08m/s2 Time: 4641ms a: 0.02,0.03,0.08m/s2 Time: 4657ms a: 0.00,0.03,0.08m/s2 Time: 4674ms a: -0.01,0.00,0.09m/s2 Time: 4690ms a: 0.01,0.01,0.08m/s2 Time: 4707ms a: 0.00,0.03,0.07m/s2 Time: 4724ms a: -0.02,0.01,0.08m/s2 Time: 4741ms a: 0.00,0.01,0.10m/s2 Time: 4757ms a: 0.00,0.01,0.08m/s2 Time: 4774ms a: 0.00,0.01,0.09m/s2 28 む~ん、0.00にならない 少し振動してる…けど 許容できる誤差でしょう
  29. 29. 2. 実際に歩いて加速度を測定する 概ね①~④の動きに合っている。 29 -6 -4 -2 0 2 4 6 8 1 12 23 34 45 56 67 78 89 100 111 122 133 144 155 166 177 188 199 210 221 232 243 254 265 276 287 298 309 320 331 342 353 364 375 386 397 408 419 430 441 452 463 474 485 496 507 518 529 540 551 X方向における移動時間と加速度の推移(時間(ミリ秒)/距離(m)) lX(m/s2) ① ② ③ ④
  30. 30. 3. 加速度を2回積分して移動距離を求める 約90m進んだようです。(あれ?・・・4mじゃ・・・ ) 30 0 10 20 30 40 50 60 70 80 90 100 1 11 21 31 41 51 61 71 81 91 101 111 121 131 141 151 161 171 181 191 201 211 221 231 241 251 261 271 281 291 301 311 321 331 341 351 361 371 381 391 401 411 421 431 441 451 461 471 481 491 501 511 521 531 541 551 X方向における移動時間と距離の推移(時間(ミリ秒)/距離(m)) X ① ② ③ ④ ここ!
  31. 31. まとめ 加速度を扱うのは高度な専門技術が必要 2回積分すると少しの誤差でも大幅なずれになる。 数値を取得できても、有効な値を抽出するのは困難。 キャリブレーション、ローパスフィルター、座標変換など勉強 が必要。 プロが提供するフュージョン機能を使ってさえ充分な精度は得 られない。 センサーの安定までに時間がかかる。 加速度センサーでメガネを探すのはなかなか難しい 平屋の前提でこの難易度高い。2階建てなら更にUP。 考慮できていないことも多い。(向き、連続利用など) 31

×