1
0
mirror of https://github.com/bdring/Grbl_Esp32.git synced 2025-09-01 18:32:37 +02:00
This commit is contained in:
bdring
2020-09-28 10:13:08 -05:00
parent 776260940a
commit e2a206ef6b
3 changed files with 25 additions and 10 deletions

View File

@@ -115,9 +115,18 @@ void inverse_kinematics(float* target, plan_line_data_t* pl_data, float* positio
float pos_cart[N_AXIS];
KinematicError status;
position[X_AXIS] += gc_state.coord_system[X_AXIS];
position[Y_AXIS] += gc_state.coord_system[Y_AXIS];
position[Z_AXIS] += gc_state.coord_system[Z_AXIS];
grbl_msg_sendf(CLIENT_SERIAL, MsgLevel::Info, "Target: %3.3f %3.3f %3.3f", target[0], target[1], target[2]);
grbl_msg_sendf(CLIENT_SERIAL, MsgLevel::Info, "Sys Po: %3.3f %3.3f %3.3f", sys_position[0], sys_position[1], sys_position[2]);
grbl_msg_sendf(CLIENT_SERIAL, MsgLevel::Info, "Position: %3.3f %3.3f %3.3f", position[0], position[1], position[2]);
/*
// Look for unchanged axes. If there is no position change on an axis in gcode, it will send the angle
// G0Z10 will send the Z10 and the previous values for other axes. Unfortunately those are in angles
// we need to restore them for our previous postision copy.
@@ -126,10 +135,10 @@ void inverse_kinematics(float* target, plan_line_data_t* pl_data, float* positio
target[axis] == last_cartesian[axis];
}
}
*/
// convert the current position to cartesian
calc_forward_kinematics(position, pos_cart);
calc_forward_kinematics(position, pos_cart);
//grbl_msg_sendf(CLIENT_SERIAL, MsgLevel::Info, "From Angs: %3.3f %3.3f %3.3f", position[0], position[1], position[2]);
//grbl_msg_sendf(CLIENT_SERIAL, MsgLevel::Info, "From Cart: %3.3f %3.3f %3.3f", pos_cart[0], pos_cart[1], pos_cart[2]);
@@ -151,15 +160,16 @@ void inverse_kinematics(float* target, plan_line_data_t* pl_data, float* positio
// see if start is in work area...if not skip segments and try to go to target
/*
float start_pos[N_AXIS];
start_pos[X_AXIS] = position[X_AXIS] + gc_state.coord_system[X_AXIS];
start_pos[Y_AXIS] = position[Y_AXIS] + gc_state.coord_system[Y_AXIS];
start_pos[Z_AXIS] = position[Z_AXIS] + gc_state.coord_system[Z_AXIS];
status = delta_calcInverse(start_pos, motor_angles);
*/
status = delta_calcInverse(position, motor_angles);
if (status == KinematicError::OUT_OF_RANGE) {
grbl_msg_sendf(CLIENT_SERIAL, MsgLevel::Info, "Start position error %3.3f %3.3f %3.3f", start_pos[0], start_pos[1], start_pos[2]);
grbl_msg_sendf(CLIENT_SERIAL, MsgLevel::Info, "Start position error %3.3f %3.3f %3.3f", position[0], position[1], position[2]);
start_position_erorr = true;
}
@@ -167,11 +177,11 @@ void inverse_kinematics(float* target, plan_line_data_t* pl_data, float* positio
status = delta_calcInverse(target, motor_angles);
if (status == KinematicError::OUT_OF_RANGE) {
grbl_msg_sendf(CLIENT_SERIAL, MsgLevel::Info, "Target unreachable");
return;
grbl_msg_sendf(CLIENT_SERIAL, MsgLevel::Info, "Target unreachable error %3.3f %3.3f %3.3f", target[0], target[1], target[2]);
//return;
}
target[Z_AXIS] -= delta_z_offset; // restore it
//target[Z_AXIS] -= delta_z_offset; // restore it
memcpy(position, target, sizeof(target));
memcpy(last_angle, motor_angles, sizeof(motor_angles));

View File

@@ -96,11 +96,11 @@ const int MAX_N_AXIS = 6;
//#define CONNECT_TO_SSID "your SSID"
//#define SSID_PASSWORD "your SSID password"
//CONFIGURE_EYECATCH_BEGIN (DO NOT MODIFY THIS LINE)
#define ENABLE_BLUETOOTH // enable bluetooth
//#define ENABLE_BLUETOOTH // enable bluetooth
#define ENABLE_SD_CARD // enable use of SD Card to run jobs
#define ENABLE_WIFI //enable wifi
//#define ENABLE_WIFI //enable wifi
#if defined(ENABLE_WIFI) || defined(ENABLE_BLUETOOTH)
# define WIFI_OR_BLUETOOTH

View File

@@ -264,6 +264,7 @@ static bool axis_is_squared(uint8_t axis_mask) {
// NOTE: There should be no motions in the buffer and Grbl must be in an idle state before
// executing the homing cycle. This prevents incorrect buffered plans after homing.
void mc_homing_cycle(uint8_t cycle_mask) {
bool no_cycle_defined = true; // this will catch if no homing cycle has been defined
#ifdef USE_CUSTOM_HOMING
if (user_defined_homing()) {
return;
@@ -316,6 +317,7 @@ void mc_homing_cycle(uint8_t cycle_mask) {
for (int cycle = 0; cycle < MAX_N_AXIS; cycle++) {
auto homing_mask = homing_cycle[cycle]->get();
if (homing_mask) { // if there are some axes in this cycle
no_cycle_defined = false;
if (!axis_is_squared(homing_mask)) {
limits_go_home(homing_mask); // Homing cycle 0
} else {
@@ -331,6 +333,9 @@ void mc_homing_cycle(uint8_t cycle_mask) {
}
}
}
if (no_cycle_defined) {
}
}
protocol_execute_realtime(); // Check for reset and set system abort.
if (sys.abort) {