From f8ece5125e6feb22013fdb5fc710cc09de623b7b Mon Sep 17 00:00:00 2001 From: odaki Date: Fri, 18 Oct 2019 00:19:56 +0900 Subject: [PATCH 1/3] Implement G02 G03 for kinepatics Implement G02 G03 code for the Polar Coaster. --- Grbl_Esp32/motion_control.cpp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/Grbl_Esp32/motion_control.cpp b/Grbl_Esp32/motion_control.cpp index 64b952e8..692d6c56 100644 --- a/Grbl_Esp32/motion_control.cpp +++ b/Grbl_Esp32/motion_control.cpp @@ -102,6 +102,14 @@ void mc_arc(float *target, plan_line_data_t *pl_data, float *position, float *of float rt_axis0 = target[axis_0] - center_axis0; float rt_axis1 = target[axis_1] - center_axis1; +#ifdef USE_KINEMATICS + float previous_position[N_AXIS]; + uint16_t n; + for (n = 0; n < N_AXIS; n++) { + previous_position[n] = position[n]; + } +#endif + // CCW angle between position and target from circle center. Only one atan2() trig computation required. float angular_travel = atan2(r_axis0*rt_axis1-r_axis1*rt_axis0, r_axis0*rt_axis0+r_axis1*rt_axis1); if (is_clockwise_arc) { // Correct atan2 output per direction @@ -187,15 +195,25 @@ void mc_arc(float *target, plan_line_data_t *pl_data, float *position, float *of position[axis_0] = center_axis0 + r_axis0; position[axis_1] = center_axis1 + r_axis1; position[axis_linear] += linear_per_segment; - +#ifdef USE_KINEMATICS + mc_line_kins(position, pl_data, previous_position); + previous_position[axis_0] = position[axis_0]; + previous_position[axis_1] = position[axis_1]; + previous_position[axis_linear] = position[axis_linear]; +#else mc_line(position, pl_data); +#endif // Bail mid-circle on system abort. Runtime command check already performed by mc_line. if (sys.abort) { return; } } } // Ensure last segment arrives at target location. +#ifdef USE_KINEMATICS + mc_line_kins(target, pl_data, previous_position); +#else mc_line(target, pl_data); +#endif } From 26c1f87e824d8c98c808565ba91e8ce57557b3db Mon Sep 17 00:00:00 2001 From: odaki Date: Fri, 18 Oct 2019 00:38:29 +0900 Subject: [PATCH 2/3] prevent division by zero and slower feed rate --- Grbl_Esp32/polar_coaster.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/Grbl_Esp32/polar_coaster.cpp b/Grbl_Esp32/polar_coaster.cpp index 2b1c0ab9..25135ccf 100644 --- a/Grbl_Esp32/polar_coaster.cpp +++ b/Grbl_Esp32/polar_coaster.cpp @@ -134,11 +134,18 @@ void inverse_kinematics(float *target, plan_line_data_t *pl_data, float *positio polar_dist = sqrt( (p_dx * p_dx) + (p_dy * p_dy) +(p_dz * p_dz)); // calculate the total move distance - if (polar_dist == 0 || dist == 0) { // prevent 0 feed rate - polar_dist = dist; // default to same feed rate + float polar_rate_multiply = 1.0; // fail safe rate + if (polar_dist == 0 || dist == 0) { // prevent 0 feed rate and division by 0 + polar_rate_multiply = 1.0; // default to same feed rate + } else { + // calc a feed rate multiplier + polar_rate_multiply = polar_dist / dist; + if (polar_rate_multiply < 0.5) { // prevent much slower speed + polar_rate_multiply = 0.5; + } } - pl_data->feed_rate *= polar_dist / dist; // apply the distance ratio between coord systems + pl_data->feed_rate *= polar_rate_multiply; // apply the distance ratio between coord systems // end determining new feed rate From c428b4aea93b5ccafa6cf2f0547ab9ccbac260b8 Mon Sep 17 00:00:00 2001 From: odaki Date: Fri, 18 Oct 2019 00:39:43 +0900 Subject: [PATCH 3/3] update build version --- Grbl_Esp32/grbl.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Grbl_Esp32/grbl.h b/Grbl_Esp32/grbl.h index b6940c54..389125f5 100644 --- a/Grbl_Esp32/grbl.h +++ b/Grbl_Esp32/grbl.h @@ -20,7 +20,7 @@ // Grbl versioning system #define GRBL_VERSION "1.1f" -#define GRBL_VERSION_BUILD "20191016" +#define GRBL_VERSION_BUILD "20191018" //#include #include