コンピュータを楽しもう!!

今、自分が面白くていろいろやってみたことを書き綴りたいと思います。連絡先はtarosa.yでgmail.comです。

16年前に書いた特許がAndroidで使えるなと思ったけど、無理のようだった

まだ会社勤めをしていたころ、激しい動作を行っても安定して回転角度を検出するセンサの特許を書いたことがありました。当時権利化した記憶があるので、放棄していなければまだ有効ですね。今、特許庁のホームページで調べたら、平成18年に権利化していました。
簡単に説明します。

  • 加速度センサを用いて傾斜を検出しようとするときに、スタティックな状態だと問題無く検出できるけど、ダイナミックな状態では、他の要因が作用して重力加速度のみを検出することが難しい。

これを何とかしましょうというものです。
解決策は簡単で、X,Y,Zの3個の磁気センサを用いて回転角を求めましょうというものです。ただし、磁気センサだけでは、1つの磁気センサが磁気ベクトルと平行となる場合、回転角度が定まらないので、このときは加速度センサの値を使いましょうというものです。
大前提として「磁気ベクトルと重力加速度ベクトルは平行でない」という条件があります。いや、実際、実験してみると、真上から真下に磁気ベクトルが走っている箇所って結構あったりするのですが、それは目を瞑ります。

と、ここまで書いて、もしかして、Androidは2個の磁気センサしか持っていないのかと思いはじめました。だとすると、ダイナミックに全転の回転角度を精度良く求めるのは、無理か・・・。

ボツねたになっちゃった。

気分を戻して

折角だから、特許の概略だけでも。
3次元空間的な向きを2つの角度で示すことにします。1つは、重力加速度方向(重力の向き)に対して垂直な面が傾くことを傾斜としこの角度を傾斜角とします。傾斜角が0と言うことは、重力に直行した方向を向いていることになります。
もう1つは、重力の向きに対して垂直な回転を考えてこの回転角度を回転角とします。回転角と傾斜角を合成すると、3次元的な向きが出てきます。
この2つ角度を3つの磁気センサと1つの加速度センサを用いて求めます。
重力の方向が特定できなくても、ある角度からの相対移動角度だけわかればいい場合は、加速度センサは要らないはすですが、そうも行かない理由があります。

3つの磁気センサだけで全ての回転角度を求めることは難しい

先ほど書きましたが、もう一度書きます。
3つの磁気センサが測定した磁気ベクトルの強さから回転角度と傾斜角度を求めるのですが、ある条件では非常に測定精度が落ちます。それは3つの磁気センサの1つが磁気ベクトルと平行な方向に向いたときです。2個の磁気センサの値が0になってしまうのがその理由です。
よって、並行ではない2つベクトルを参照して、傾斜角と回転角を求める必要が出てきます。

加速度センサは重力以外も検出する

2つのベクトルとは、磁気ベクトルと重力ベクトルです。磁気ベクトルは磁気センサ、重力ベクトルは加速度センサより求めればいいのですが、スタティックな状態(静止状態)は、これでOKです。
ただし、ダイナミックな状態(激しい動作中)は、加速度センサは遠心力や急激に回転を止めた時の慣性力を拾います。
これをノイズと考えて、この遠心力や慣性力成分をフィルタでカットしてやれと言うのが、特許の内容です。

フィルタの考え方

  • 磁気センサより求めた傾斜角と、加速度センサより求めた傾斜角の差分から、運動の激しさを推測した慣性成分除去フィルタを設計する。
  • 磁気センサの信号変化量より回転の激しさを推測して遠心力成分除去フィルタを設計する。 ←これ特許にしてなかった気がする。まっ、公知ということで・・・(^^;。

どのようなフィルタを設計するかは、センサ条件・環境によって違ってくると思います。

詳しい式などは特許を読んで下さい。登録番号 3842316 です。