toppan_sawatome が 2025年01月29日19時25分53秒 に編集
コメント無し
本文の変更
# はじめに  「われ、よからぬことをたくらむ者なり」 この紙はただの紙じゃない。忍びの地図というものなんだ。 魔法をかけた相手の場所が文字通り手にとるようにわかる魔法の道具さ。 実際の使い方が知りたいって?下の画面を見てくれ! [動作の動画] # 1.構成 ## 全体構成 IMUセンサにより取得した計測開始位置からの移動量をPCに送信します。 UI上で初期位置を指定することで、初期位置からの移動量を1歩ずつ表示することを可能にしています。  ## ハードウェア設計図 ### 準備物 | 部品名 | 数量 | 金額(円) | 役割 | | ------------------------------------ | -- | -------- | ---------------- | | 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 | 筐体埋め込み用 | |SPRESENSE用Qwiic接続基板 | 1 | 770 | IMUセンサへの電力供給用| ### IMUユニット構成図
リチウムポリマー電池を電源として用いることで、対象者が自由に歩き回れるように測定デバイスをモジュール化しています。 
### ハウス作成
CADの様子
ハウス作成時の様子 配線しやすいように所々溝を切り、外れないように爪を作成しました。 上から体重がかかることを考え蓋部分はできる限り肉厚にし、Spresense本体とバッテリーを同一平面上に配置することで、モジュール全体の高さを抑えています。
 ### 組み立て 1.筐体に各部材を配置
各格納位置にセンサを配置した様子。 ほぼ隙間なく各センサ類が収まりました。

2.ふたをしめてユニット化
2.ふたをしめてモジュール化 幅:55mm,奥行:65mm,高さ:25mmの直方体にすべてが収まります。

3.インソールとIMUユニットを靴の中に挿入
3.インソールとIMUモジュールを靴の中に挿入 直接踏むと足が痛い&モジュールに体重がかかってしまうため、インソールをいれることでかかととセンサ間にかかる力を軽減しています。
 # 2.技術要素 ## 歩行者自律航法(PDR:Pedestrian Dead Reckoning) ### IMUのドリフト対策
MEMS式のIMUはゼロ点バイアスにより、ドリフトが起こることが知られている。 真値との誤差を補正する手法、特に環境に参照点を作らずにヒトに貼付したセンサのみで自己位置を推定する手法を歩行者自律航法(PDR)と呼び、過去に様々手法が提案されてきた。
MEMS式のIMUはゼロ点バイアスにより、ドリフトが起こることが知られています。 真値との誤差を補正する手法、特に環境に参照点を作らずにヒトに貼付したセンサのみで自己位置を推定する手法を歩行者自律航法(PDR)と呼び、過去に様々手法が提案されています。
今回は歩行が周期的な運動であることに着目し、足が接地し、静止している際に加速度の積分を止めることで位置の算出精度を高めている。
今回は歩行が周期的な運動であることに着目し、足が静止している間の加速度・角速度の期間の積分を速度・角度・位置の算出から除外することで位置の推定精度を高めています。
具体的にはIMUセンサによって計測した加速度と角速度に一定の閾値を設け、加速度と角速度の大きさがともに閾値以下であった際に加速度・角速度の積分を行わないことでドリフトを抑制している。 また、IMUセンサによって計測した加速度の微分値(躍度)を用いることで、足が接地した瞬間を検出し、移動距離を送信している。
具体的には下図に記載の通り下記の処理により歩行中の足の層を判定し、位置の算出を行っています。
1.足の接地の検出 足が接地する際には運動が床と接触して止まることにより加速度が大きく変化することが知られています。 今回は加速度の変化(微分値)をとらえることで、接地の瞬間を計測しています。 加速度の微分値は躍度(加加速度)と呼ばれる値であり、エレベーターの動きだしにガクンと体が下がる感覚を生み出すものとされています。 下図の「Initial Contact」を躍度を用いて検出することで、足の接地を検出しています。 
# 3.ソースコード ## 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); } ``` # 4.ライセンス 本アプリはPysideを用いているため、ライセンスはLGPL2.1です。 # 5.改善点 ## ジャイロのドリフト誤差について 今回実際に計測を行った結果、位置よりも角度の方がドリフト誤差が大きく乗るような印象を受けました。 今回は実際の進行方向との角度差分が大きくなってしまったため、やむなく進行方向を限定することとなってしまったが、 まもなく発売されるSpresense用のIMU add onボードでリベンジしたいと考えている。 https://www.switch-science.com/products/10181?srsltid=AfmBOopYV03zSuhVSbN7J9IQwqx6kJ3xyr8SIO8syQQH8-zlL6qof_yV IMUセンサを用いることによって限定的ではあるが忍びの地図の機能を再現することができた。 ジャイロのドリフトの補正がしきれずに、進行方向を限定する結果とはなったが、足の接地するタイミングを精度よく計測できたため、実際にヒトが歩いている臨場感のある製品にできた。 将来的にはAHRSなどの回転方向に強いIMUを用いることでより自由な移動経路の算出や異なる補正の仕方を用いてより頑健な位置推定を行っていきたいと思っている。 # おわりに  どうだった? これがあれば、オフィスで迷子になる心配も、誰かを探し回るムダな時間も、全部なくなっちゃう!これで、仕事もスムーズに進むし、最高だろ? おっと、使ってることはばれないほうがいいからな他言は無用だぜ、使い終わりの呪文はこうだ 「いたずら完了!」