blogTitle.png
p < .05 公式ブログ
コンパスが狂う
Bucephalasについて考える | comments(0)
iPhoneのコンパスに狂いが生じるのはよくあること。狂いが生じてしまうと、実際の進行方向と、iPhone画面上の進行方向が全く一致してくれない。

これが問題になるのは、トラッキングモードを「ヘッディングあり」に設定している場合である。内部的には MKUserTrackingModeFollowWithHeading という長い名前の設定名になっている。自分の進行方向が変わると、それに応じて地図が画面上で回転する。ゴルディアスの結び目は基本的に縦持ち(ポートレート)で使うことを想定しているので、もし道に沿って移動しているのであれば、その道は画面上にだいたい垂直な線として表示されることになる。しかしコンパスが狂ってしまうと、場合によっては水平線に近いようなとんでもない向きで表示されてしまう。

こういった狂いが生じるのはゴルディアスの結び目のコーディングに問題があるからなのかもしれないが、標準の地図アプリなどに切り替えても向きの狂いが反映されているので、iPhone本体のハード的な問題なのではないかと疑っている。不具合の原因を外部に帰属したいだけなのかもしれないけれど。


iOSがコンパスの狂いを検出してくれた場合には、キャリブレーション用の画面が出てくるけれど、出てきて欲しいときには出てきてくれないものである(これ、私の記憶が歪んでいる可能性があるが)。そういった場合には、トラッキングモードを「ヘッディングなし」にしてしまうと実はスッキリする。よっぽど複雑な、迷路のような場所を移動しているのでなければ、進行方向に合わせて地図が回転してくれなくてもそれほど困ることは無い。

問題は音声認識機能を使っている場合である。音声認識機能をオンにしている間は可能なかぎり機能をシンプルにしたいので、トラッキングモードの切り替え機能は封印状態としている。そして、音声認識機能使用中のトラッキングモードは「ヘッディングあり」なのである。であるから、コンパスの狂いが生じたときにも、画面はカオスなままとなってしまう。

これはやはり気持ちが悪いので、実験的に(次バージョンに向けて)ヘッディングのオンオフができるようにしてみた。音声命令[ROTATION]あるいはその互換命令の[回転]を使用する。これらの音声命令はヘッディングのトグルスイッチとして機能し、オンの時に[回転]と叫べばオフになり、もう一度[回転]と叫べばオンに戻る。

キャリブレーション画面を任意のタイミングで呼び出せればその方が確実だしシンプルで良いと思うのだけれど、いまのところそういうAPIは存在しないみたいであるので。