On 04/08/2017 12:18 PM, Kurt Jacobson wrote: > Hello all, > > I have been trying to understand how the axis UI works and came across this > comment starting on line 3333 of bin/axis in a fresh pull of 2.8 pre: > > duplicate_coord_letters = "" > for i in range(len(trajcoordinates)): > if trajcoordinates[i] == " ": continue > if trajcoordinates.count(trajcoordinates[i]) > 1: > duplicate_coord_letters = duplicate_coord_letters + > trajcoordinates[i] > if duplicate_coord_letters != "": > # Can occur, for instance, with trivkins with kinsmodule=both). > # In such kins, the value for a duplicated axis letter will equal the > # value of the highest numbered joint. > # Movements on axis gui display in joint mode (after homing) may be > unexpected, > # e.g., moving a joint that is not the highest number will not > affect the > # corresponding 'identity' coordinate. > print ("Warning: Forward kinematics must handle duplicate coordinate > letters:%s"% > duplicate_coord_letters) > > > I am confused by the sentence "In such kins, the value for a duplicated > axis letter will equal the value of the highest numbered joint." > > What does this mean? > > I though that for an XYYZ config the axis:joint relation should be {X:0, > Y0:1, Y1:2, Z:3} so the value for a duplicated axis letter is actually > unlikely to equal the value of the highest numbered joint. Or is that not > even what the comment is referring to?
The comment that you pointed out seems maybe a little out of place there, but it's highlighting a complication that arises from Axis' attempt to hide the difference between joints and axes from the user. Axis keeps a mapping of axes to joints (this works ok on trivkins machines and not at all on non-trivkins machines). But what should happen on trivkins machines like gantries, which have duplicated axis letters? I'd interpret that comment as saying that when an axis is handled by multiple joints, the axis maps to the highest-numbered of those joints. So i'd expect the mappings in your example to be {X:0, Y:2, Z:3}. Remember, LinuxCNC only knows X, Y, and Z (and A, B, C, U, V, and W), it doesn't know Y1 and Y2. But then i went and read the code, and now i'm confused. Take a look at the jnum_for_aletter() function, which takes an axis letter like "X" or "Y", and returns an integer indicating the joint that moves that axis. On trivkins machines it returns the index of the *first* occurrence of the axis letter, which is opposite of what the comment says. But then that function is not called any more (the calling code was removed), so maybe it doesn't matter and the comment and the dead code should both be removed. The function used to be used by the home & limit indicators on the DRO tab, but they were removed during the massive Joints/Axes cleanup effort. -- Sebastian Kuzminsky ------------------------------------------------------------------------------ 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