aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2021-08-24 10:17:10 -0400
committerKevin O'Connor <kevin@koconnor.net>2021-08-30 12:12:11 -0400
commit15035ed2265b6518be7897abe755fdca7cd4cf7c (patch)
treeb6b403336e0fcddacf2d6ddd748eec4fae00d6a6
parent5e968db3556de9865e31e7eaebe1ddaa37499949 (diff)
downloadkutter-15035ed2265b6518be7897abe755fdca7cd4cf7c.tar.gz
kutter-15035ed2265b6518be7897abe755fdca7cd4cf7c.tar.xz
kutter-15035ed2265b6518be7897abe755fdca7cd4cf7c.zip
motan: Add corexy forward kinematics analyzer
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
-rw-r--r--scripts/motan/analyzers.py28
1 files changed, 28 insertions, 0 deletions
diff --git a/scripts/motan/analyzers.py b/scripts/motan/analyzers.py
index bdb70011..4cafea76 100644
--- a/scripts/motan/analyzers.py
+++ b/scripts/motan/analyzers.py
@@ -91,6 +91,34 @@ class GenKinematicPosition:
return self.amanager.get_datasets()[self.source1]
AHandlers["kin"] = GenKinematicPosition
+# Calculate a toolhead x/y position from corexy stepper positions
+class GenCorexyPosition:
+ ParametersMin = ParametersMax = 3
+ DataSets = [
+ ('corexy(x,<stepper>,<stepper>)', 'Toolhead x position from steppers'),
+ ('corexy(y,<stepper>,<stepper>)', 'Toolhead y position from steppers'),
+ ]
+ def __init__(self, amanager, name_parts):
+ self.amanager = amanager
+ self.is_plus = name_parts[1] == 'x'
+ self.source1, self.source2 = name_parts[2:]
+ amanager.setup_dataset(self.source1)
+ amanager.setup_dataset(self.source2)
+ def get_label(self):
+ axis = 'x'
+ if not self.is_plus:
+ axis = 'y'
+ return {'label': 'Derived %s Position' % (axis,),
+ 'units': 'Position\n(mm)'}
+ def generate_data(self):
+ datasets = self.amanager.get_datasets()
+ data1 = datasets[self.source1]
+ data2 = datasets[self.source2]
+ if self.is_plus:
+ return [.5 * (d1 + d2) for d1, d2 in zip(data1, data2)]
+ return [.5 * (d1 - d2) for d1, d2 in zip(data1, data2)]
+AHandlers["corexy"] = GenCorexyPosition
+
# Calculate a position deviation
class GenDeviation:
ParametersMin = ParametersMax = 2