3190175 大岩 達典 (屋内・屋外両用測位システム)

屋内・屋外両用測位システム

機械工学科3年 大岩 達典

1.初めに

IoTで何かしたい!と思った時に位置データと組み合わせたくなるのはあまり珍しくないことだと思います.ところが,どこでも簡単に測位出来るシステムというのはまだありません.先ず既存の測位システムについてみると,全球で使える測位システムとしてはまずGPS (メートルオーダの精度) があり,必要であれば更に高い精度(センチメートルオーダの精度) で測位出来るようにする補正用信号もあります.ところがこれらはいずれも室内では使うことができないので,屋内では別の方法を使う必要があります.このような屋内測位システムはすでに複数出ており,GPS測位とのシームレスな繋ぎ変えなども研究されているようなのですが,いずれも測位したい範囲に固定局を設置して回る必要があり,複数の部屋や屋外を含む複数の建物間で動線解析をしたり,手軽に色々な場所に行ってデータを収集したりといった目的には使いづらいのが現状です.

そこで,データ収集目的であることから,必ずしもリアルタイムで位置情報が得られなくてもよい,という特性に注目し,後から測位データを補正することで屋内・屋外の両方で使えるサブメートルオーダの正確度が出せる測位システムを作ろうと考えました.

基本的な考え方は,まず加速度を元に変位を推定し,これをGPSや,出入り口などに置かれた少数の補正用ゲートやビーコンなどで補正する,というものです.加速度による測位にはどこでも測位出来るが少しずつ誤差が累積していってしまうという特性がある一方で,GPSは屋外に限るが誤差が累積しない,という特性があります.これらを組み合わせることで,屋外ではGPSが使えるので累積した誤差を修正することができます(図1).一方屋内では,GPSによって補正することができないため誤差が累積していってしまいます(図2左).そこで,GPS信号ロスト時と再受信時の位置データを基に補正を掛けることで,途中の精度を上げようと考えました(図2右).

図1GPSによる慣性誘導の補正
図1GPSによる慣性誘導の補正
赤:真値
緑:加速度より求めた位置
青点: GPSデータ
青丸:GPSの誤差半径
補正量の二乗と (GPSデータとの差) / (GPS誤差半径)の二乗の和が最小になるようにするなどの方法で,加速度に基づく変位を補正する.
図2
図2
  1. 結果

GPSと加速度計の特性を知るところから始めました.

2.1 GPS

GPSの信号の誤差半径を知るためには,真値との比較を行う必要があります.ところが位置情報の真値を得るのは簡単ではないので,直線上を等速で移動し,直線からずれた部分を誤差とみなすことにしました.実際に測定してみた結果が次のグラフ1です.青が位置(左軸),灰色と黄色が緯度を一致させてプロットした幾何学的な誤差係数と受信していた衛星の数(いずれも右軸) です.位置データを見ると,左上の範囲では辺りが開けていたため正しいデータが手に入っていますが,中央付近では,周りに障害物が多かったため,真直ぐ移動したにもかかわらず曲がって移動したようなデータとなっています.右下で二か所ほど途切れているのは,建物の下にある通路に二回入り信号をロストしたためです.全体としてみると直線的に移動しており,確かに誤差の蓄積はないことが分かりますが,細かい移動は誤差との区別がつかないことが分かります.また,幾何学的に決まる誤差や,受信衛星数はロスト直前まであまり変化がなく,GPSの誤差半径の推定には使えないこともわかります.

グラフ1

そこで,比較的正確な場合は真値との一致度が高く,ずれる時は大きくずれるという特性から,単純に誤差の二乗の和を取るのではなく,次のような形状の関数を用いるとよいのではないかという結論に達しました.

2.2 加速度センサ

簡単のためにまずは二次元平面に拘束して実験を行いました.変位を求める前に,先ず自分の姿勢を知る必要があるということで,角加速度を積分した結果が次のグラフです.静止した状態から90°程回して止め,反対方向に回して元の姿勢に戻し,次は一周回して元の姿勢に戻す,ということをした時のデータです.

最初と最後の姿勢が0度であることは分かっているので,ドリフトが一定であるとして補正を掛けたのが橙の補正ありのグラフです.これだけ見ると上手く行っているようなのですが,姿勢0°付近をよく見てみると次のようになっています.

初めと終わりはちゃんと0°になっているのですが,静止しているはずの場所で少しずつ角度が変化していることになっています.これは,補正時にドリフトは一定であると仮定したのに反して,実際にはドリフトの量が角速度に依存することを表しています.これを補正するためには,角速度毎のドリフト量を得ておく必要があると考えましたが,まだ具体的な測定は行っていません.

重力の影響を考慮しなくてよいようにするため,現在はセンサを水平に固定した状態でしか実験を行っていませんが,将来的には人が手に持った状態などでも測位可能なようにしていきたいと考えています.ドローンの制御では,水平方向の加速度は無視できるものとして重力の方向を求めているようなのですが,今回やりたいのは水平方向の加速度を積分して変位を求めることなので同じ方法が使えるのか,検討が必要です.

3.終わりに

元々はこの位置データを使ってやりたいことがあったのですが,当初の予想以上に測位が困難だったためこちらをテーマにしてしまいました.随分難しいとは思っていたのですが,大分後になってから加速度で人の動きを測定するのは不可能に近いと知りました.加速度で測位なんて枯れた技術で普通に行われていることだと思っていたので,これほど身近に実現不可能とされる事柄が存在するというのは驚きで,研究というものへの意欲が掻き立てられました.

そのほかの成果ですが,今回使用した加速度センサ MBX055をRaspberryPiで使うためのJavaのライブラリのようなものを作ったので,もし加速度センサを使いたい方が来年度以降いらっしゃいましたら使っていただければ幸いです.一部だけですが enum定数にしてあったり,final 定数にしてあったりするので全部数値で書くよりは楽かと思います.前提としてJavaでRaspberryPiを動かすためにpi4jが必要です.

最後に,質問・相談に乗ってくださったIoTメディアラボの皆様にお礼を申し上げたいと思います.ありがとうございました.