motan: Add corexy forward kinematics analyzer

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor 2021-08-24 10:17:10 -04:00
parent 5e968db355
commit 15035ed226
1 changed files with 28 additions and 0 deletions

View File

@ -91,6 +91,34 @@ class GenKinematicPosition:
return self.amanager.get_datasets()[self.source1] return self.amanager.get_datasets()[self.source1]
AHandlers["kin"] = GenKinematicPosition 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 # Calculate a position deviation
class GenDeviation: class GenDeviation:
ParametersMin = ParametersMax = 2 ParametersMin = ParametersMax = 2