I've started moving my linear delta printer using LinuxCNC, and despite using the joints-axis code, I'm still having non-trivial issues with non-trivial kinematics.
Basically, the problem boils down to the "boxy" perspective of LinuxCNC, where most limits (position, velocity, and acceleration) are attributes of a Cartesian coordinate system and are not interrelated. For the linear delta platform, this requires me to either give up a very significant portion of the machine performance or use limits that allow the generation of illegal conditions, which sort of defeats the purpose of having limits in the first place. DETAILS: Position: The odd-shaped movement envelope of a linear-delta machine is most easily approximated with a cylinder. Using a box of (MIN|MAX)_LIMIT for X, Y, and Z to describe the allowable motion range either wastes a *LOT* of usable machine volume, or allows illegal moves into the corners. Velocity & Acceleration: Similar issues exist with velocity and acceleration. If I tune the maximum velocity and acceleration limits so that a move along any axis is within the limits of the machine, then diagonal moves across multiple axis will exceed the machine limits. If I dial the limits down for the worst-case diagonal move, I'm wasting a significant chunk of machine performance almost all of the time. By way of gcode examples: This works all day long: g0 x0 gy y0 g0 x100 g0 y100 <repeat> This fails with a joint following error: g0 x0 y0 g0 x100 y100 <repeat> Relative Joint Positions: Given the construction of a linear delta machine, there are some limits on the joint positions beyond the simple (MIN|MAX)_LIMIT provided for in the joints-axis branch. Basically, all joints need to be within a certain distance of each other or bad things happen. If one of the diagonal rods goes horizontal, the parallelograms keeping the effector platform level degenerate and the effector can pivot in space. Also, if the joints get too far from each other, something will break (the allowable motion range for the joints is longer than the distance covered by two sets of diagonal rods and the effector, so putting one joint at the MIN_LIMIT and one at the MAX_LIMIT will be trying to rip off the arms or tear the effector in half...although on my machine it just makes a lot of noise and skips steps). Homing: I'm also concerned about homing, where it would be very convenient (and on some mechanisms probably required) to do coordinated moves and not a simple "move the joint until the switch closes". IMHO there needs to be a way to write programmable homing routines that can perform coordinated motion in joint and/or world space, But one thing at a time... PROPOSAL: It seems to me that the limit check functions should be plug-able, like the kinematics module. The limits could then be as simple or complex as required by any particular machine. QUESTIONS: Has anyone done anything like this yet? I'd much rather just use something someone else has written than code it myself. :) If I do go about trying to code this up, is there any interest in having this type of feature for "official" LinuxCNC? If so, I would appreciate a few pointers from the active developers, mostly in which version to start modifying. I _think_ I might be able to make these changes to master and merge them forward into the UBC+JA4 branch I'm using, but I haven't examined the code enough to know for sure. -- Charles Steinkuehler char...@steinkuehler.net
signature.asc
Description: OpenPGP digital signature
------------------------------------------------------------------------------ Rapidly troubleshoot problems before they affect your business. Most IT organizations don't have a clear picture of how application performance affects their revenue. With AppDynamics, you get 100% visibility into your Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro! http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk
_______________________________________________ Emc-developers mailing list Emc-developers@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/emc-developers