diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2017-03-27 00:22:15 +0200 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2017-03-27 00:22:15 +0200 |
commit | 9f8c137bf602f6625aab115cad73cc1d8308d928 (patch) | |
tree | fd20520975ea658c8f56a60b8cd4265ff055dfd5 /filter-accela/ftnoir_filter_accela.h | |
parent | b78bed514b844e2be7aa85384e578faaa12f287e (diff) |
filter/accela: filter all rot/pos DOF together
Apply gain to Euclidean distance of rotation/position change,
rather to each DOF separately. Weight each DOF's separate length
and normalize it.
This makes diagonal movements less staircase-y.
You'll need smaller sensitivity values given Euclid of (x,y,z)
is smaller than |x|+|y|+|z|.
Diffstat (limited to 'filter-accela/ftnoir_filter_accela.h')
-rw-r--r-- | filter-accela/ftnoir_filter_accela.h | 14 |
1 files changed, 4 insertions, 10 deletions
diff --git a/filter-accela/ftnoir_filter_accela.h b/filter-accela/ftnoir_filter_accela.h index 0e558f1d..b23b8e88 100644 --- a/filter-accela/ftnoir_filter_accela.h +++ b/filter-accela/ftnoir_filter_accela.h @@ -20,7 +20,7 @@ public: accela(); void filter(const double* input, double *output) override; void center() override { first_run = true; } - spline rot, trans; + spline spline_rot, spline_pos; private: settings_accela s; bool first_run; @@ -28,13 +28,7 @@ private: double smoothed_input[6]; Timer t; - static double get_delta(double val, double prev, double& degen); - - template <typename T> - static inline int signum(T x) - { - return (T(0) < x) - (x < T(0)); - } + static double get_rot_delta(double val, double prev, double& degen); }; class dialog_accela: public IFilterDialog @@ -53,9 +47,9 @@ private slots: void doCancel(); void update_ewma_display(const slider_value& value); void update_rot_display(const slider_value& value); - void update_trans_display(const slider_value& value); + void update_pos_display(const slider_value& value); void update_rot_dz_display(const slider_value& value); - void update_trans_dz_display(const slider_value&); + void update_pos_dz_display(const slider_value&); void update_rot_nl_slider(const slider_value& sl); }; |