Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update KalmanFilter. KF -> EKF and RPY -> Quaternion #296

Conversation

eisoku9618
Copy link
Contributor

#295 で書いた

  • 内部でRPYを使っている
  • 直立姿勢周りでの近似

を直そうと思い,KalmanFilter.cpp/hを

  • Quaternionを使う
  • ExtendedKalmanFilterにする

というように変えてみました.

これにより, start-jsk/rtmros_tutorials#76 のテストプログラムにて,

(main :deflection-ypr-angle (float-vector 0 (/ pi 18) 0) :wrt :local :init-ypr-angle (float-vector 0 (/ pi 2) 0) :time 1500)

の動作が
i
だったのが
ii
になり,

(main :deflection-ypr-angle (float-vector 0 (/ pi 6) 0) :wrt :local :init-ypr-angle (float-vector 0 0 (/ -pi 2)) :time 1500)

の動作が
j
だったのが
jj
になりました.

@k-okada
Copy link
Contributor

k-okada commented Aug 10, 2014

Test PASSed.
Refer to this link for build results: http://jenkins.jsk.imi.i.u-tokyo.ac.jp:8080job/hrpsys-qnx/1561/

@eisoku9618
Copy link
Contributor Author

補足ですが,

  • 加速度・ジャイロにノイズが乗らないhrpsys-simulatorにて add test program for kf precision start-jsk/rtmros_tutorials#76 のテストコードが良い挙動を示すようなパラメータを設定しました
  • RPYしか対応していない+RPYでないと比較できないので,QuaternionをRPYに変換していますが,状態量はQuaternionとドリフト項です
  • 変数名は wikipedia に準拠しています
  • 姿勢推定EKFに需要があるか分からなかったのでコードが汚い部分がありますがPRを送りました.レビューしていただければ幸いです.

気づいている問題点

  • yawが思ったよりずれてしまう
  • VRUやAHRSにはEKFというよりはAdaptive Kalman Filterがよく使われている気がしますが,このPRはEKFです

また, #218 はついでに直してあります.

@eisoku9618
Copy link
Contributor Author

http://en.wikipedia.org/wiki/Extended_Kalman_filter を元に,

状態方程式は以下

1

観測方程式は以下

2

になります.

fkanehiro added a commit that referenced this pull request Aug 10, 2014
…on-and-bias

update KalmanFilter. KF -> EKF and RPY -> Quaternion
@fkanehiro fkanehiro merged commit d2f6cb9 into fkanehiro:master Aug 10, 2014
@eisoku9618 eisoku9618 deleted the ExtendedKalmanFilter-quaternion-and-bias branch August 11, 2014 16:13
@@ -50,7 +50,7 @@ KalmanFilter::KalmanFilter(RTC::Manager* manager)
m_debugLevel(0),
dummy(0)
{
m_service0.kalman(this);
m_service0.kalman(this);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

趣味もあるけど,こういう変更は,結局何を変更したかわかりづらいので,
ー 中の振る舞いを変えるならその変更のコミットを
ー インデントなどのフォーマットをかえるならそのコミットを
と分けるのが良いです.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants