2010/6/15 Andy Pugh <[email protected]>: > On 11 June 2010 13:46, Viesturs Lācis <[email protected]> wrote: > >> 13 double xy_tan = atan2(pos->tran.y - old.y,pos->tran.x - old.x); > > I have been thinking about this some more, and it is too simplistic > and may be causing problems. > > What happens when X and Y are stationary? atan2(0,0) is undefined. > Then as soon as one axis moves fractionally the kinematics will try to > send the head shooting off to the correct tangential position. > > I am not sure how to handle this,it might be that EMC handles such > situations and limits the rates of change of the axes, or it might > have to be handled inside the Kinematics module. > > I don't know if a kinematics module can know anything more about the > machine state than is contained in the emc_pose structure that is > passed to it. In this case the kinematic module needs to know the > direction of travel (and, preferably, the _intended_ direction of > travel...) > > At the very least xy_tan (which is the angular direction of the > current path in the XY plane, or the tangent to the current curve) > needs to hold its last value if the X and Y axes are stopped. >
Yes, You are right about the point, that xy_tan is not defined, if both X and Y are not moving. I think that it is not important, because: 1) if head does not move, then it is not necessary to have the head tilted in a particular direction. 2) if the head does not move, then there is risk that the head is not positioned for the next move and it might want to achieve very high transfer rates in joints [4] and [5] get ready for the required position - I think it can be handled that with max_accel and max_velocity 3) actually risks mentioned in previous point is a case of a normal operation: for example, finishing cutting some rectangle - last move is in X+ direction, then follows rapid move in Y+ direction and then next rectangle is cut with first move in X- direction. The same goes for sharp corners - there is one move, movement stops for a very short moment and then continues in different direction. So it does not really matter, for how long there is this stop or pause in movement. I think that it has to be handled with proper acceleration and max velocity values for both linear and rotary axis - I think that I will need to find a proper balance between linear and rotary axis settings. 4) OpenOffice spreadsheet calculates atan2(0,0) = 0, I think that EMC2 should produce the same outcome, so there shouldn't be any error 5) I think that it is very hard to predict what will be the outcoming result of this module. I think that I have to get it working in my machine, turn on the water and do test cuts and then check the accuracy and quality of cuts and pay attention, how does corners look like - if the head is moved and tilted as needed or no. I think that I will agree with You that it might be useful to store last xy_tan value, if deltaX and delta Y both are 0, because otherwise it will produce new xy_tan value 0, which [most likely] will cause the head to be tilted in the according direction and that in certain circumstances can lead to ruined part. Viesturs ------------------------------------------------------------------------------ ThinkGeek and WIRED's GeekDad team up for the Ultimate GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the lucky parental unit. See the prize list and enter to win: http://p.sf.net/sfu/thinkgeek-promo _______________________________________________ Emc-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/emc-users
