Merge pull request #6045 from thinkyhead/rc_remove_raw_kinematics
Remove delta optimization concepts… for now
This commit is contained in:
commit
af644871bf
6 changed files with 18 additions and 107 deletions
|
@ -9145,7 +9145,7 @@ void ok_to_send() {
|
|||
) \
|
||||
)
|
||||
|
||||
#define DELTA_RAW_IK() do { \
|
||||
#define DELTA_RAW_IK() do { \
|
||||
delta[A_AXIS] = DELTA_Z(A_AXIS); \
|
||||
delta[B_AXIS] = DELTA_Z(B_AXIS); \
|
||||
delta[C_AXIS] = DELTA_Z(C_AXIS); \
|
||||
|
@ -9512,112 +9512,21 @@ void set_current_from_steppers_for_axis(const AxisEnum axis) {
|
|||
// If there's only 1 segment, loops will be skipped entirely.
|
||||
--segments;
|
||||
|
||||
// Using "raw" coordinates saves 6 float subtractions
|
||||
// per segment, saving valuable CPU cycles
|
||||
// Get the logical current position as starting point
|
||||
float logical[XYZE];
|
||||
COPY(logical, current_position);
|
||||
|
||||
#if ENABLED(USE_RAW_KINEMATICS)
|
||||
|
||||
// Get the raw current position as starting point
|
||||
float raw[XYZE] = {
|
||||
RAW_CURRENT_POSITION(X_AXIS),
|
||||
RAW_CURRENT_POSITION(Y_AXIS),
|
||||
RAW_CURRENT_POSITION(Z_AXIS),
|
||||
current_position[E_AXIS]
|
||||
};
|
||||
|
||||
#define DELTA_VAR raw
|
||||
|
||||
// Delta can inline its kinematics
|
||||
// Calculate and execute the segments
|
||||
for (uint16_t s = segments + 1; --s;) {
|
||||
LOOP_XYZE(i) logical[i] += segment_distance[i];
|
||||
#if ENABLED(DELTA)
|
||||
#define DELTA_IK() DELTA_RAW_IK()
|
||||
DELTA_LOGICAL_IK(); // Delta can inline its kinematics
|
||||
#else
|
||||
#define DELTA_IK() inverse_kinematics(raw)
|
||||
inverse_kinematics(logical);
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
// Get the logical current position as starting point
|
||||
float logical[XYZE];
|
||||
COPY(logical, current_position);
|
||||
|
||||
#define DELTA_VAR logical
|
||||
|
||||
// Delta can inline its kinematics
|
||||
#if ENABLED(DELTA)
|
||||
#define DELTA_IK() DELTA_LOGICAL_IK()
|
||||
#else
|
||||
#define DELTA_IK() inverse_kinematics(logical)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#if ENABLED(USE_DELTA_IK_INTERPOLATION)
|
||||
|
||||
// Only interpolate XYZ. Advance E normally.
|
||||
#define DELTA_NEXT(ADDEND) LOOP_XYZ(i) DELTA_VAR[i] += ADDEND;
|
||||
|
||||
// Get the starting delta if interpolation is possible
|
||||
if (segments >= 2) {
|
||||
DELTA_IK();
|
||||
ADJUST_DELTA(DELTA_VAR); // Adjust Z if bed leveling is enabled
|
||||
}
|
||||
|
||||
// Loop using decrement
|
||||
for (uint16_t s = segments + 1; --s;) {
|
||||
// Are there at least 2 moves left?
|
||||
if (s >= 2) {
|
||||
// Save the previous delta for interpolation
|
||||
float prev_delta[ABC] = { delta[A_AXIS], delta[B_AXIS], delta[C_AXIS] };
|
||||
|
||||
// Get the delta 2 segments ahead (rather than the next)
|
||||
DELTA_NEXT(segment_distance[i] + segment_distance[i]);
|
||||
|
||||
// Advance E normally
|
||||
DELTA_VAR[E_AXIS] += segment_distance[E_AXIS];
|
||||
|
||||
// Get the exact delta for the move after this
|
||||
DELTA_IK();
|
||||
ADJUST_DELTA(DELTA_VAR); // Adjust Z if bed leveling is enabled
|
||||
|
||||
// Move to the interpolated delta position first
|
||||
planner.buffer_line(
|
||||
(prev_delta[A_AXIS] + delta[A_AXIS]) * 0.5,
|
||||
(prev_delta[B_AXIS] + delta[B_AXIS]) * 0.5,
|
||||
(prev_delta[C_AXIS] + delta[C_AXIS]) * 0.5,
|
||||
DELTA_VAR[E_AXIS], _feedrate_mm_s, active_extruder
|
||||
);
|
||||
|
||||
// Advance E once more for the next move
|
||||
DELTA_VAR[E_AXIS] += segment_distance[E_AXIS];
|
||||
|
||||
// Do an extra decrement of the loop
|
||||
--s;
|
||||
}
|
||||
else {
|
||||
// Get the last segment delta. (Used when segments is odd)
|
||||
DELTA_NEXT(segment_distance[i]);
|
||||
DELTA_VAR[E_AXIS] += segment_distance[E_AXIS];
|
||||
DELTA_IK();
|
||||
ADJUST_DELTA(DELTA_VAR); // Adjust Z if bed leveling is enabled
|
||||
}
|
||||
|
||||
// Move to the non-interpolated position
|
||||
planner.buffer_line(delta[A_AXIS], delta[B_AXIS], delta[C_AXIS], DELTA_VAR[E_AXIS], _feedrate_mm_s, active_extruder);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#define DELTA_NEXT(ADDEND) LOOP_XYZE(i) DELTA_VAR[i] += ADDEND;
|
||||
|
||||
// For non-interpolated delta calculate every segment
|
||||
for (uint16_t s = segments + 1; --s;) {
|
||||
DELTA_NEXT(segment_distance[i]);
|
||||
DELTA_IK();
|
||||
ADJUST_DELTA(DELTA_VAR); // Adjust Z if bed leveling is enabled
|
||||
planner.buffer_line(delta[A_AXIS], delta[B_AXIS], delta[C_AXIS], DELTA_VAR[E_AXIS], _feedrate_mm_s, active_extruder);
|
||||
}
|
||||
|
||||
#endif
|
||||
ADJUST_DELTA(logical); // Adjust Z if bed leveling is enabled
|
||||
planner.buffer_line(delta[A_AXIS], delta[B_AXIS], delta[C_AXIS], logical[E_AXIS], _feedrate_mm_s, active_extruder);
|
||||
}
|
||||
|
||||
// Since segment_distance is only approximate,
|
||||
// the final move must be to the exact destination.
|
||||
|
|
|
@ -232,6 +232,8 @@
|
|||
#if ENABLED(DELTA)
|
||||
#if DISABLED(USE_XMAX_PLUG) && DISABLED(USE_YMAX_PLUG) && DISABLED(USE_ZMAX_PLUG)
|
||||
#error "You probably want to use Max Endstops for DELTA!"
|
||||
#elif ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
|
||||
#error "DELTA is incompatible with ENABLE_LEVELING_FADE_HEIGHT. Please disable it."
|
||||
#endif
|
||||
#if ABL_GRID
|
||||
#if (ABL_GRID_MAX_POINTS_X & 1) == 0 || (ABL_GRID_MAX_POINTS_Y & 1) == 0
|
||||
|
|
|
@ -932,7 +932,7 @@
|
|||
// Gradually reduce leveling correction until a set height is reached,
|
||||
// at which point movement will be level to the machine's XY plane.
|
||||
// The height can be set with M420 Z<height>
|
||||
#define ENABLE_LEVELING_FADE_HEIGHT
|
||||
//#define ENABLE_LEVELING_FADE_HEIGHT
|
||||
|
||||
//
|
||||
// Experimental Subdivision of the grid by Catmull-Rom method.
|
||||
|
|
|
@ -916,7 +916,7 @@
|
|||
// Gradually reduce leveling correction until a set height is reached,
|
||||
// at which point movement will be level to the machine's XY plane.
|
||||
// The height can be set with M420 Z<height>
|
||||
#define ENABLE_LEVELING_FADE_HEIGHT
|
||||
//#define ENABLE_LEVELING_FADE_HEIGHT
|
||||
|
||||
//
|
||||
// Experimental Subdivision of the grid by Catmull-Rom method.
|
||||
|
|
|
@ -918,7 +918,7 @@
|
|||
// Gradually reduce leveling correction until a set height is reached,
|
||||
// at which point movement will be level to the machine's XY plane.
|
||||
// The height can be set with M420 Z<height>
|
||||
#define ENABLE_LEVELING_FADE_HEIGHT
|
||||
//#define ENABLE_LEVELING_FADE_HEIGHT
|
||||
|
||||
//
|
||||
// Experimental Subdivision of the grid by Catmull-Rom method.
|
||||
|
|
|
@ -922,7 +922,7 @@
|
|||
// Gradually reduce leveling correction until a set height is reached,
|
||||
// at which point movement will be level to the machine's XY plane.
|
||||
// The height can be set with M420 Z<height>
|
||||
#define ENABLE_LEVELING_FADE_HEIGHT
|
||||
//#define ENABLE_LEVELING_FADE_HEIGHT
|
||||
|
||||
//
|
||||
// Experimental Subdivision of the grid by Catmull-Rom method.
|
||||
|
|
Reference in a new issue