From c8917c62d6415706380102c78af3c99a127722ed Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Sun, 12 Jan 2014 12:47:10 +0100 Subject: accela: implement separate rot/trans deadbands --- .../ftnoir_accela_filtercontrols.ui | 152 +++++++++++++-------- ftnoir_filter_accela/ftnoir_filter_accela.cpp | 7 +- ftnoir_filter_accela/ftnoir_filter_accela.h | 6 +- .../ftnoir_filter_accela_dialog.cpp | 3 +- 4 files changed, 104 insertions(+), 64 deletions(-) (limited to 'ftnoir_filter_accela') diff --git a/ftnoir_filter_accela/ftnoir_accela_filtercontrols.ui b/ftnoir_filter_accela/ftnoir_accela_filtercontrols.ui index 54493041..a3deacbd 100644 --- a/ftnoir_filter_accela/ftnoir_accela_filtercontrols.ui +++ b/ftnoir_filter_accela/ftnoir_accela_filtercontrols.ui @@ -9,8 +9,8 @@ 0 0 - 215 - 285 + 261 + 330 @@ -54,19 +54,16 @@ 7 - - + + - + 0 0 - Rotation - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + Translation @@ -98,16 +95,33 @@ - - + + - + 0 0 - Translation + Rotation + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + + + + + Exponent + + + + + + + Order #3 @@ -143,15 +157,8 @@ - - - - Order #3 - - - - + 0 @@ -178,35 +185,6 @@ - - - - Exponent - - - - - - - - 0 - 0 - - - - 3 - - - 0.050000000000000 - - - 100.000000000000000 - - - 0.050000000000000 - - - @@ -232,11 +210,11 @@ background:none; - Deadband + Rotation deadband - + @@ -281,7 +259,29 @@ background:none; - + + + + + 0 + 0 + + + + 3 + + + 0.050000000000000 + + + 100.000000000000000 + + + 0.050000000000000 + + + + @@ -294,8 +294,8 @@ background:none; - - + + 0 @@ -322,8 +322,8 @@ background:none; - - + + 0 @@ -350,6 +350,41 @@ background:none; + + + + Translation deadband + + + + + + + + 0 + 0 + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + 3 + + + 0.000000000000000 + + + 3.000000000000000 + + + 0.050000000000000 + + + 0.000000000000000 + + + @@ -357,7 +392,8 @@ background:none; translation_alpha order_2nd order_3rd - deadzone + rot_deadzone + trans_deadzone expt buttonBox diff --git a/ftnoir_filter_accela/ftnoir_filter_accela.cpp b/ftnoir_filter_accela/ftnoir_filter_accela.cpp index 1e12e4de..558b3189 100644 --- a/ftnoir_filter_accela/ftnoir_filter_accela.cpp +++ b/ftnoir_filter_accela/ftnoir_filter_accela.cpp @@ -89,10 +89,11 @@ void FTNoIR_Filter::FilterHeadPoseData(const double* target_camera_position, const double a = i >= 3 ? s.rotation_alpha : s.translation_alpha; const double a2 = a * s.second_order_alpha; const double a3 = a * s.third_order_alpha; + const double deadzone = i >= 3 ? s.rot_deadzone : s.trans_deadzone; const double velocity = - parabola(a, vec, s.deadzone, s.expt) + - parabola(a2, vec2, s.deadzone, s.expt) + - parabola(a3, vec3, s.deadzone, s.expt); + parabola(a, vec, deadzone, s.expt) + + parabola(a2, vec2, deadzone, s.expt) + + parabola(a3, vec3, deadzone, s.expt); const double result = last_output[0][i] + velocity; const bool done = sign > 0 ? result >= target_camera_position[i] : result <= target_camera_position[i]; new_camera_position[i] = done ? target_camera_position[i] : result; diff --git a/ftnoir_filter_accela/ftnoir_filter_accela.h b/ftnoir_filter_accela/ftnoir_filter_accela.h index e8f077c3..42d9b772 100644 --- a/ftnoir_filter_accela/ftnoir_filter_accela.h +++ b/ftnoir_filter_accela/ftnoir_filter_accela.h @@ -19,7 +19,8 @@ struct settings { translation_alpha, second_order_alpha, third_order_alpha, - deadzone, + rot_deadzone, + trans_deadzone, expt; settings() : b(bundle("Accela")), @@ -27,7 +28,8 @@ struct settings { translation_alpha(b, "translation-alpha", ACCELA_SMOOTHING_TRANSLATION), second_order_alpha(b, "second-order-alpha", ACCELA_SECOND_ORDER_ALPHA), third_order_alpha(b, "third-order-alpha", ACCELA_THIRD_ORDER_ALPHA), - deadzone(b, "deadzone", 0), + rot_deadzone(b, "rotation-deadband", 0), + trans_deadzone(b, "translation-deadband", 0), expt(b, "exponent", 2) {} }; diff --git a/ftnoir_filter_accela/ftnoir_filter_accela_dialog.cpp b/ftnoir_filter_accela/ftnoir_filter_accela_dialog.cpp index 56b76a55..ca321891 100644 --- a/ftnoir_filter_accela/ftnoir_filter_accela_dialog.cpp +++ b/ftnoir_filter_accela/ftnoir_filter_accela_dialog.cpp @@ -16,7 +16,8 @@ FilterControls::FilterControls() : tie_setting(s.translation_alpha, ui.translation_alpha); tie_setting(s.second_order_alpha, ui.order_2nd); tie_setting(s.third_order_alpha, ui.order_3rd); - tie_setting(s.deadzone, ui.deadzone); + tie_setting(s.rot_deadzone, ui.rot_deadzone); + tie_setting(s.trans_deadzone, ui.trans_deadzone); tie_setting(s.expt, ui.expt); } -- cgit v1.2.3