AITCシニア会めがねチーム 加速度センターに挑戦
2016/6/23
近藤・吉⽥
1
解決したい課題2
家の中のどこかにあるはずの眼鏡を 眼鏡をかけていなくでも
探せるようにしたい
RFIDなど検討したが、発想の転換!´ 家の中ならば、『眼鏡の現在位置』ではなく、
『⾃分が昨夜どこにいたか』が分かればよい
スリッパに モーションセンサーを装着して 昨夜どこを歩いたかを記録する
X
Y
3
Arduino 9軸モーションシールド3790円
4
x
y
モーションシールドの仕様´ BOSCH製BNO055を搭載
´ 14bit精度の3軸加速度センサー (X,Y,Z)
´ 16bit精度の3軸⾓速度センサー (Ωx,Ωy,Ωz)
´ 16bit精度の3軸地磁気センサー (x,y,z)
5
物理のおさらい´ 重⼒加速度9.8m/s2 ´ 地磁気0.45ガウス
-9.8m/s2
x
yz
センサーを⽔平に置いて静⽌した場合
0.45G
x
z
北磁極に向けて⽔平に置いた場合(東京)
北磁極(6°⻄) 49°
0.45✕cos49°≒0.32G
0.45✕sin49° ≒-0.37G
y
6
BNO005ができること7
⽤語解説´ Sensor Fusion
ある現象に対して、それを測定する複数のセンサーーの出⼒から、データ同⼠の処理を⾏い、1つの知覚を得ること(wikipediaより)
´ Absolute Orientation ⾓速度を積分して、絶対⽅位に対して回転⾓度(傾き)を求める
´ Relative Orientation ⾓速度を積分して、初期状態の向きに対して回転⾓度を求める
´ Linear Acceleration 重⼒加速度成分を除き、動きによる加速度のみ出⼒する
8
ということは…
´ IMUモード(地磁気センサーを切る)にして
´ 最初にスリッパを⽔平にまっすぐ置き
´ Linear Acceleration (ax, ay, az)と
´ Relative Orientation (α、β、γ)を読んで
´ 座標変換(ax’, ay’, az’)し
´ ax’とay’を2回積分すればいい
´ まずは、センサーを回転させないように測ってみよう
9
う、それでもそこそこ⾯倒
プログラム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(); }}
10
では、早速やってみましょう!11
1. 加速度センサーを静⽌状態で安定させる
2. 実際に歩いて加速度を測定する
3. 加速度を2回積分して移動距離を求める
測定の概要´ 約4mの範囲で、歩いた軌跡を測定しました。
12
約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 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
13
む〜ん、0.00にならない 少し振動してる…けど 許容できる誤差でしょう
2. 実際に歩いて加速度を測定する´ 概ね①〜④の動きに合っている。
14
-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)
① ② ③ ④
3. 加速度を2回積分して移動距離を求める´ 約90m進んだようです。(あれ?・・・4mじゃ・・・ )
15
0
10
20
30
40
50
60
70
80
90
100
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))
X
①
② ③
④
ここ!
まとめ´ 加速度を扱うのは⾼度な専⾨技術が必要
´ 2回積分すると少しの誤差でも⼤幅なずれになる。´ 数値を取得できても、有効な値を抽出するのは困難。
´ キャリブレーション、ローパスフィルター、座標変換など勉強が必要。
´ プロが提供するフュージョン機能を使ってさえ充分な精度は得られない。
´ センサーの安定までに時間がかかる。
´ 加速度センサーでメガネを探すのはなかなか難しい ´ 平屋の前提でこの難易度⾼い。2階建てなら更にUP。
´ 考慮できていないことも多い。(向き、連続利⽤など)
16