aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/motan
diff options
context:
space:
mode:
authorDmitry Butyugin <dmbutyugin@google.com>2022-09-05 22:28:19 +0200
committerKevinOConnor <kevin@koconnor.net>2023-07-16 19:49:23 -0400
commit5fc5d95ca5f98d513351447ad4c5ccef69c1de20 (patch)
tree03223ba38adb743ceda2ccf7a6f712625af1d9ef /scripts/motan
parent366b0de1c861de2f46bbb08eea4b8a677c0f5829 (diff)
downloadkutter-5fc5d95ca5f98d513351447ad4c5ccef69c1de20.tar.gz
kutter-5fc5d95ca5f98d513351447ad4c5ccef69c1de20.tar.xz
kutter-5fc5d95ca5f98d513351447ad4c5ccef69c1de20.zip
motan: Added pointwise 2-norm motan data analyzer
Signed-off-by: Dmitry Butyugin <dmbutyugin@google.com>
Diffstat (limited to 'scripts/motan')
-rw-r--r--scripts/motan/analyzers.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/scripts/motan/analyzers.py b/scripts/motan/analyzers.py
index 214aeb05..8f913eb0 100644
--- a/scripts/motan/analyzers.py
+++ b/scripts/motan/analyzers.py
@@ -105,6 +105,59 @@ class GenIntegral:
return data
AHandlers["integral"] = GenIntegral
+# Calculate a pointwise 2-norm of several datasets (e.g. compute velocity or
+# accel from its x, y,... components)
+class GenNorm2:
+ ParametersMin = 2
+ ParametersMax = 3
+ DataSets = [
+ ('norm2(<dataset1>,<dataset2>)',
+ 'pointwise 2-norm of dataset1 and dataset2'),
+ ('norm2(<dataset1>,<dataset2>,<dataset3>)',
+ 'pointwise 2-norm of 3 datasets'),
+ ]
+ def __init__(self, amanager, name_parts):
+ self.amanager = amanager
+ self.datasets = []
+ self.datasets.append(name_parts[1])
+ self.datasets.append(name_parts[2])
+ if len(name_parts) == 4:
+ self.datasets.append(name_parts[3])
+ for dataset in self.datasets:
+ amanager.setup_dataset(dataset)
+ def get_label(self):
+ label = self.amanager.get_label(self.datasets[0])
+ units = label['units']
+ datas = ['position', 'velocity', 'acceleration']
+ data_name = ''
+ for d in datas:
+ if d in label['label']:
+ data_name = d
+ break
+ lname = ''
+ for d in self.datasets:
+ l = self.amanager.get_label(d)['label']
+ for r in datas:
+ l = l.replace(r, '').strip()
+ if lname:
+ lname += '+'
+ lname += l
+ lname += ' ' + data_name + ' norm2'
+ return {'label': lname, 'units': units}
+ def generate_data(self):
+ seg_time = self.amanager.get_segment_time()
+ data = []
+ for dataset in self.datasets:
+ data.append(self.amanager.get_datasets()[dataset])
+ res = [0.] * len(data[0])
+ for i in range(len(data[0])):
+ norm2 = 0.
+ for dataset in data:
+ norm2 += dataset[i] * dataset[i]
+ res[i] = math.sqrt(norm2)
+ return res
+AHandlers["norm2"] = GenNorm2
+
# Calculate a kinematic stepper position from the toolhead requested position
class GenKinematicPosition:
ParametersMin = ParametersMax = 1