control.c coord_cubic_active && eoffsets: no Drain
plasmac use case: Closing program (m2) after initiating clearing of external offsets exposes transient reset of joint->vel_cmd (2 servo periods) because of cubicDrain() on transition from coord mode to teleop mode. This commit: conditionally disable cubicDrain() if external offsets active at transition Thanks to Phillc,snowgoer540 for isolating problem in a sim config
This commit is contained in:
parent
3ff7a32638
commit
9fc45963f6
1 changed files with 13 additions and 5 deletions
|
|
@ -32,6 +32,7 @@
|
|||
static int ext_offset_teleop_limit = 0;
|
||||
static int ext_offset_coord_limit = 0;
|
||||
static double ext_offset_epsilon;
|
||||
static bool coord_cubic_active = 0;
|
||||
/* kinematics flags */
|
||||
KINEMATICS_FORWARD_FLAGS fflags = 0;
|
||||
KINEMATICS_INVERSE_FLAGS iflags = 0;
|
||||
|
|
@ -835,14 +836,20 @@ static void set_operating_mode(void)
|
|||
if (joint_num < NO_OF_KINS_JOINTS) {
|
||||
/* point to joint data */
|
||||
joint = &joints[joint_num];
|
||||
if (coord_cubic_active && *(emcmot_hal_data->eoffset_active)) {
|
||||
//skip
|
||||
} else {
|
||||
cubicDrain(&(joint->cubic));
|
||||
}
|
||||
positions[joint_num] = joint->coarse_pos;
|
||||
} else {
|
||||
positions[joint_num] = 0;
|
||||
}
|
||||
}
|
||||
coord_cubic_active = 0;
|
||||
/* Initialize things to do when starting teleop mode. */
|
||||
SET_MOTION_TELEOP_FLAG(1);
|
||||
SET_MOTION_COORD_FLAG(0);
|
||||
SET_MOTION_ERROR_FLAG(0);
|
||||
|
||||
kinematicsForward(positions, &emcmotStatus->carte_pos_cmd, &fflags, &iflags);
|
||||
|
|
@ -1308,6 +1315,7 @@ static void get_pos_cmds(long period)
|
|||
} // for(axis_num)
|
||||
|
||||
/* check joint 0 to see if the interpolators are empty */
|
||||
coord_cubic_active = 1;
|
||||
while (cubicNeedNextPoint(&(joints[0].cubic))) {
|
||||
/* they're empty, pull next point(s) off Cartesian planner */
|
||||
/* run coordinated trajectory planning cycle */
|
||||
|
|
|
|||
Loading…
Reference in a new issue