加速度センサーから速度を算出してみたいと思い、重力成分の除去をできないか試してみました。ジャイロ(角速度センサー)と組み合わせて行ってみたいと思います。
姿勢ベクトル算出
加速度センサー&ジャイロ(6軸センサー)ではだいたい傾き角度を算出する使い方が多いかと思います。
その際、カルマンフィルター、madgewickフィルターや相補フィルターなどの優秀なフィルターを使えば結構正確な傾き角を算出できます。
せっかくフィルターを通して、正確できれいに算出された姿勢角があるのですから、その値を使って、センサーの姿勢ベクトルを算出します。
▼イメージです▼
ほんとイメージだけです・・・。赤色線がセンサーの傾き(姿勢)のイメージです。
6軸センサーから取得したきれいな姿勢角で回転行列使って、ベクトル(0,0,1)を回転させます。
回転する前のベクトルを重力ベクトル(0,0,1)とすれば、回転後のベクトルがそのまま加速度センサーから取得する加速度値(重力分)となるはず?。(x軸とy軸の値は正負逆になりますが)
しかもフィルター通したきれいな角度を使ってベクトル回転しているため、きれいなラインになるはずです。
▼確認してみました▼
上図ではy軸の加速度をグラフ化しました。センサーを定期的に傾けたり戻したりしてます。遅れなくきれいなラインになってます。
フィルター通過後の姿勢角から回転行列使って方向ベクトル算出して、と少し無駄な手順とってしまいましたが・・・。最初からジャイロ値、加速度値を方向ベクトルで処理して補正すれば二度手間にはなりませんでしたね・・。
さてここで算出した姿勢ベクトルですが、姿勢(角度)から逆算しているため、センサー自体の加速成分はあまり含まれず、重力のみを表現しているはず???。
ですので加速度値から差分とって、座標系もどせば、重力成分を除去した値になる??と思います。
ここから先はまだ試してませんが・・・。もう少し検証を続けたいと思います。加速度センサーのノイズも課題ですが・・。
コメント