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

Attachment: 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

Reply via email to