Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Duet3D/RepRapFirmware.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/Movement/Kinematics/ScaraKinematics.cpp')
-rw-r--r--src/Movement/Kinematics/ScaraKinematics.cpp22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/Movement/Kinematics/ScaraKinematics.cpp b/src/Movement/Kinematics/ScaraKinematics.cpp
index f9b67772..8dbd5845 100644
--- a/src/Movement/Kinematics/ScaraKinematics.cpp
+++ b/src/Movement/Kinematics/ScaraKinematics.cpp
@@ -170,8 +170,9 @@ bool ScaraKinematics::IsReachable(float x, float y) const
// Limit the Cartesian position that the user wants to move to
// TODO take account of arm angle limits
-void ScaraKinematics::LimitPosition(float coords[], size_t numVisibleAxes, uint16_t axesHomed) const
+bool ScaraKinematics::LimitPosition(float coords[], size_t numVisibleAxes, uint16_t axesHomed) const
{
+ bool limited = false;
float& x = coords[X_AXIS];
float& y = coords[Y_AXIS];
const float r = sqrtf(fsquare(x) + fsquare(y));
@@ -179,12 +180,15 @@ void ScaraKinematics::LimitPosition(float coords[], size_t numVisibleAxes, uint1
{
x *= minRadius/r;
y *= minRadius/r;
+ limited = true;
}
else if (r > maxRadius)
{
x *= maxRadius/r;
y *= maxRadius/r;
+ limited = true;
}
+ return limited;
}
// Return the initial Cartesian coordinates we assume after switching to this kinematics
@@ -197,6 +201,22 @@ void ScaraKinematics::GetAssumedInitialPosition(size_t numAxes, float positions[
}
}
+// Return true if the specified endstop axis uses shared motors.
+// Used to determine whether to abort the whole move or just one motor when an endstop switch is triggered.
+bool ScaraKinematics::DriveIsShared(size_t drive) const
+{
+ switch (drive)
+ {
+ case X_AXIS:
+ return crosstalk[0] != 0.0 || crosstalk[1] != 0.0;
+ case Y_AXIS:
+ return crosstalk[2] != 0.0;
+ case Z_AXIS:
+ default:
+ return false;
+ }
+}
+
// Recalculate the derived parameters
void ScaraKinematics::Recalc()
{