I would like to add from experience with industrial robots, what could be implemented in LinuxCNC and useful for more machines / cases. The robots I met had electromechanical brakes and either resolvers or single-turn-absolute-encoders on every joint. The original control systems, as I understood, work by an algorithm: ---------- Power on read non-volatile memory For each joint: If joint was marked as calibrated then: Read resolver angle If difference between last_angle and new_angle is less than tolerance (a degree or less, I suppose), then mark joint as calibrated / referenced, calculate pos., etc. Otherwise mark joint as not referenced / not calibrated. If any of joints is not calibrated, inform user and ask for re-calibration (either each or all joints) ... Release brakes ...
After brake engage wait for relays and mechanical brake to work For each joint: wait for joints velocity to reduce to ~0 store is-calibrated flag If joint or robot is calibrated / referenced, then store last_angle ---------- This method relies on a very large probability that if a joint was moved while offline, it was not moved exactly one resolver / single-turn-encoder rotation (+/- small tolerance for backlash and readout accuracy). Furthermore, algorithm may add that if at least 1 joint was moved, don't trust other joints, as this is logical for some machines, like industrial robot.. 01/05/2017 01:16 AM, Rene Hopf rašė: > >> On 4 Jan 2017, at 19:07, Nicklas Karlsson <nicklas.karlsso...@gmail.com> >> wrote: >> >> As I understand it position is already known from absolute encoder so there >> is no need to run machine to a switch is hit? > > there are generally 2 types of abs encoders: multiturn and non multiturn. > non multiturn encoders only give the absolute position to 0-360 deg, so one > shaft revolution. > if you turn it 5 times, the encoder cant tell without power. > multiturn encoders usually have a battery backup, and can count multiple > turns when powered off. > with multiturn encoders its really easy, you just have a fixed offset to your > home position, and it just works. > the idea is to use non multiturn encoders in a multitun way, so you just have > to remember on which rotation the servo is, but not where on that rotation. > so when you assume your motors dont turn more than a full revolution while > the machine is powered off, you can just use the abs position, and full > revolutions to work out the exact position. > of course this also works with resolvers. ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ Emc-developers mailing list Emc-developers@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/emc-developers