diff options
Diffstat (limited to 'src/Movement/Kinematics/ScaraKinematics.h')
-rw-r--r-- | src/Movement/Kinematics/ScaraKinematics.h | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/src/Movement/Kinematics/ScaraKinematics.h b/src/Movement/Kinematics/ScaraKinematics.h index e229468d..43e1807b 100644 --- a/src/Movement/Kinematics/ScaraKinematics.h +++ b/src/Movement/Kinematics/ScaraKinematics.h @@ -28,18 +28,19 @@ public: // Overridden base class functions. See Kinematics.h for descriptions. const char *GetName(bool forStatusReport) const override; bool Configure(unsigned int mCode, GCodeBuffer& gb, StringRef& reply, bool& error) override; - bool CartesianToMotorSteps(const float machinePos[], const float stepsPerMm[], size_t numVisibleAxes, size_t numTotalAxes, int32_t motorPos[], bool allowModeChange) const override; + bool CartesianToMotorSteps(const float machinePos[], const float stepsPerMm[], size_t numVisibleAxes, size_t numTotalAxes, int32_t motorPos[], bool isCoordinated) const override; void MotorStepsToCartesian(const int32_t motorPos[], const float stepsPerMm[], size_t numVisibleAxes, size_t numTotalAxes, float machinePos[]) const override; - bool IsReachable(float x, float y) const override; - bool LimitPosition(float position[], size_t numAxes, AxesBitmap axesHomed) const override; + bool IsReachable(float x, float y, bool isCoordinated) const override; + bool LimitPosition(float position[], size_t numAxes, AxesBitmap axesHomed, bool isCoordinated) const override; void GetAssumedInitialPosition(size_t numAxes, float positions[]) const override; size_t NumHomingButtons(size_t numVisibleAxes) const override; - const char* HomingButtonNames() const override { return "PDZUVW"; } + const char* HomingButtonNames() const override { return "PDZUVWABC"; } HomingMode GetHomingMode() const override { return homeIndividualMotors; } AxesBitmap AxesAssumedHomed(AxesBitmap g92Axes) const override; const char* GetHomingFileName(AxesBitmap toBeHomed, AxesBitmap alreadyHomed, size_t numVisibleAxes, AxesBitmap& mustHomeFirst) const override; bool QueryTerminateHomingMove(size_t axis) const override; void OnHomingSwitchTriggered(size_t axis, bool highEnd, const float stepsPerMm[], DDA& dda) const override; + void LimitSpeedAndAcceleration(DDA& dda, const float *normalisedDirectionVector) const override; private: static constexpr float DefaultSegmentsPerSecond = 100.0; @@ -48,19 +49,20 @@ private: static constexpr float DefaultDistalArmLength = 100.0; static constexpr float DefaultMinTheta = -90.0; // minimum proximal joint angle static constexpr float DefaultMaxTheta = 90.0; // maximum proximal joint angle - static constexpr float DefaultMinPhi = -135.0; // minimum distal joint angle - static constexpr float DefaultMaxPhi = 135.0; // maximum distal joint angle + static constexpr float DefaultMinPsi = -135.0; // minimum distal joint angle + static constexpr float DefaultMaxPsi = 135.0; // maximum distal joint angle static constexpr const char *HomeProximalFileName = "homeproximal.g"; static constexpr const char *HomeDistalFileName = "homedistal.g"; void Recalc(); + bool CalculateThetaAndPsi(const float machinePos[], bool isCoordinated, float& theta, float& psi, bool& armMode) const; // Primary parameters float proximalArmLength; float distalArmLength; float thetaLimits[2]; // minimum proximal joint angle - float phiLimits[2]; // minimum distal joint angle + float psiLimits[2]; // minimum distal joint angle float crosstalk[3]; // if we rotate the distal arm motor, for each full rotation the Z height goes up by this amount float xOffset; // where bed X=0 is relative to the proximal joint float yOffset; // where bed Y=0 is relative to the proximal joint @@ -73,7 +75,8 @@ private: float twoPd; // State variables - mutable bool isDefaultArmMode; // this should be moved into class Move when it knows about different arm modes + mutable float cachedX, cachedY, cachedTheta, cachedPsi; + mutable bool currentArmMode, cachedArmMode; }; #endif /* SRC_MOVEMENT_KINEMATICS_SCARAKINEMATICS_H_ */ |