toppan_sawatome が 2025年01月28日21時15分19秒 に編集
コメント無し
本文の変更
# 0.はじめに  「われ、よからぬことをたくらむ者なり」…って、これ、忍びの地図のやつだよな!知ってるか? えーと、つまりだな、「The Marauder's Map」っていうのは、あの魔法のアイテム、忍びの地図をモチーフにしたアプリなんだ!オフィスの中で、人がどこにいるか、リアルタイムで分かっちゃうっていう、すっげーやつ! SpresenseとBLEビーコン、それに9軸センサーっていうのを使って、歩幅と角度から、どれくらい移動したかとか、どっちの方向に行ったとかを計算するんだ。だから、オフィスで迷子になる心配も、誰かを探し回るムダな時間も、全部なくなっちゃう!これで、仕事もスムーズに進むし、最高だろ? 実際の使い方が知りたいって?下の画面を見てくれ! [動作の動画] # 1.ライセンス 本アプリはPysideを用いているため、ライセンスはLGPL2.1です。 # 2.構成 ## 全体構成  ## ハードウェア設計図 ### 準備物 | 部品名 | 数量 | 金額(円) | 役割 | | ------------------------------------ | -- | -------- | ---------------- | | SPRESENSEメインボード[CXD5602PWBMAIN1] | 1 | 6,050 | 制御ボード | | BLE for Spresense【BLE1507】 | 1 | 3,850 | PCとの通信用 | | BMX055使用9軸センサーモジュール | 1 | 2,180 | 歩幅、角度などの算出用 | | リチウムポリマー電池3.7V300mAh | 1 | 900 | バッテリー | | インソール(厚さ3cm) | 1 | 999 | 筐体埋め込み用 | ### IMUユニット構成図
Spresenseメインボードにリチウムポリマー電池で給電
### ハウス作成 CADの様子  ### 組み立て 1.筐体に各部材を配置  2.ふたをしめてユニット化  3.インソールとIMUユニットを靴の中に挿入  # 3.技術要素 ## 歩行者自律航法(PDR:Pedestrian Dead Reckoning) ### IMUのドリフト対策 MEMS式のIMUはゼロ点バイアスにより、ドリフトが起こることが知られている。
この真値との誤差を補正する手法、特に環境に参照点を作らずにヒトに貼付したセンサのみで自己位置を推定する手法を歩行者自律航法(PDR)と呼び、過去に様々手法が提案されてきた。
真値との誤差を補正する手法、特に環境に参照点を作らずにヒトに貼付したセンサのみで自己位置を推定する手法を歩行者自律航法(PDR)と呼び、過去に様々手法が提案されてきた。
今回は歩行が周期的な運動であることに着目し、足が接地し、静止している際に加速度の積分を止めることで位置の算出精度を高めている。
具体的にはIMUセンサによって計測した加速度と角速度に一定の閾値を設け、加速度と角速度の大きさがともに閾値以下であった際に、加速度・角速度の積分を行わないことでドリフトを抑制している。
具体的にはIMUセンサによって計測した加速度と角速度に一定の閾値を設け、加速度と角速度の大きさがともに閾値以下であった際に加速度・角速度の積分を行わないことでドリフトを抑制している。 また、IMUセンサによって計測した加速度の微分値(躍度)を用いることで、足が接地した瞬間を検出し、移動距離を送信している。
# 4.ソースコード ## Spresense側 ```arduino:歩幅推定 #define LED_PIN 13 void setup() { pinMode(LED_PIN, OUTPUT); } void loop() { digitalWrite(LED_PIN, HIGH); delay(1000); digitalWrite(LED_PIN, LOW); delay(1000); } ``` ## UI側 ```arduino:UIのコード(大きくなるかも) #define LED_PIN 13 void setup() { pinMode(LED_PIN, OUTPUT); } void loop() { digitalWrite(LED_PIN, HIGH); delay(1000); digitalWrite(LED_PIN, LOW); delay(1000); } ``` # 5.改善点 ## ジャイロのドリフト誤差について 今回実際に計測を行った結果、位置よりも角度の方がドリフト誤差が大きく乗るような印象を受けた。 その結果、真の進行方向との角度差分が大きくなってしまったため、やむなく進行方向を限定することとなった。 まもなく、Spresense用のIMU add onボードが発売されるため、ぜひこちらでリベンジしたいと考えている。 https://www.switch-science.com/products/10181?srsltid=AfmBOopYV03zSuhVSbN7J9IQwqx6kJ3xyr8SIO8syQQH8-zlL6qof_yV # 6.おわりに IMUセンサを用いることによって限定的ではあるが忍びの地図の機能を再現することができた。 ジャイロのドリフトの補正がしきれずに、進行方向を限定する結果とはなったが、足の接地するタイミングを精度よく計測できたため、実際にヒトが歩いている臨場感のある製品にできた。 将来的にはAHRSなどの回転方向に強いIMUを用いることでより自由な移動経路の算出や異なる補正の仕方を用いてより頑健な位置推定を行っていきたいと思っている。