summaryrefslogtreecommitdiffhomepage
path: root/filter-accela/ftnoir_filter_accela.h
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2017-03-27 00:22:15 +0200
committerStanislaw Halik <sthalik@misaki.pl>2017-03-27 00:22:15 +0200
commit9f8c137bf602f6625aab115cad73cc1d8308d928 (patch)
treefd20520975ea658c8f56a60b8cd4265ff055dfd5 /filter-accela/ftnoir_filter_accela.h
parentb78bed514b844e2be7aa85384e578faaa12f287e (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.h14
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);
};