ごめん、ちょっと言い過ぎた。
でも、旅の途中でiPhoneのコンパスが盛大に狂うのは事実で、それじゃ困るんだ。
だから、Unknotting/Bucephalusはバージョン7.3.0から、コンパスには頼らないことにした。できるだけ。
じゃあどうすることにしたのか?
GPSを使う。
ジャイロを使う。
GPSが教えてくれるのは、緯度経度の位置情報だ。どっちを向いているかという方角情報じゃあない。
とはいえ、位置がどう移動しているのかを追っていけば、どの方角に移動しているのかはわかる。
もし、移動するときは前に向かって進む、という前提が成り立つなら、その方角をコンパス代わりに使うことができるんだ。
これが、バージョン7.3.0での一つめの工夫。
このアプリは、自転車での旅を主な使用状況として想定している。だから、「移動するときは前に向かって進む」という前提がほぼなりたつんだ。自転車は後ろや横には進めないからね。
でも、何か珍しい物を見つけて、自転車を降り、徒歩での移動に切り換えたらどうなるだろう?後ろに進むこともあるかもしれないし、カニ歩きをすることもあるかもしれない。
そこで、徒歩移動ではないことが明らかなほどの高速移動をしているときにだけ、移動方向をコンパス代わりに使うことにしている。
どれくらい速く移動しているときを高速移動と見なすかは、設定・履歴ビューで自由に決められる。自分は歩くのが速いので時速30kmくらいは余裕、という人はそういう設定にしたらいいと思う。
では、ゆっくり移動している時はどうするか?低速で移動しているときは「前に向かって進む」という前提が成り立ち難いだけでなく、GPSの誤差の影響も大きくなる。
だからこのアプリでは、ゆっくり移動しているときや、完全に止まっているときは、ジャイロスコープを使って方角の変化を検出することにしたんだ。
これが、バージョン7.3.0での二つ目の工夫。
ただ、すごくトリッキーな動きにはジャイロがついて行けないし、iPhoneをポケットや鞄に放り込んでいるような場合にもジャイロの値はあまり意味が無い。
だから、変な方角を示してしまうことはある。
そんなときはどうしたら良いかというと、自分で決めておいた「高速移動」の速度で「前に向かって」進むんだ。そうすると、GPS依存の方角推定メカニズムが発動して、(わりと)正しい方角が得られる。同時に、ジャイロによる方角推定メカニズムの誤差も一旦リセットされるので、しばらくは(わりと)正しい方角が低速でも得られることになる。
位置の移動方向とジャイロを使った方角推定メカニズムは、それなりにうまく機能してくれるけれど、どうしてもコンパスに頼らざるを得ない状況というのも存在する。
立ち止まった状態でアプリを起動した直後は、位置の移動がないから、GPSを使った方角推定は不可能。
ジャイロはそもそも方角を教えてくれる機能ではないから、事前にGPSから得られた方角情報を基準値として使う必要がある。基準値が得られていなければ、方角推定は不可能。
そんなときは、コンパスが示す方角を信用するしかない。
だからよろしく頼むよ、コンパス。さっきはキツいこといってごめん。