This page will hold some ideas & thoughts to keep in mind while reorganizing the way axes and joints are described in the ini.

- [TRAJ] coordinated mode in the carthesian world
- [TRAJ] provides definitions about the rest of sections available
- machine actuators are joints, carthesian directions are axes
- there is a n-to-m mapping from joints to axes (e.g. 3 joints<->2 axes | 2 joints<->3axes possible)
- the current [AXIS_*] sections refer actually to joints (only joints should have INPUT/OUTPUT_SCALE, etc), it will be changed to [JOINT_*], and will refer actually to joints
- AXES 0-8 always reffer to X,Y,Z,A,B,C,U,V,W in that order
- the [JOINT_*] sections _must_ exist, so must the [AXIS_*] sections
- each [JOINT_*] section describes the characteristica of that motor/actuator (note: a gantry might be considered as having 2 joints, if they need to be moved independently)
- the [AXIS_*] sections describe supplementar limitations in carthesian space (working space limit - if present, accel/vel limits if present, carthesian home position). The valid sections are AXIS_X,AXIS_Y,AXIS_Z,AXIS_A,AXIS_B,AXIS_C,AXIS_U,AXIS_V,AXIS_W.

proposed way of doing things (no compatibility with older configs):

- init traj (emcInitTraj?() in taskint.cc) by reading the [TRAJ] section, along with number of joints and axes (for trivkins they usually match) (as it is atm: COORDINATES, flags, etc)
- init joints/axes:
- read joints (sections [JOINT_0] .. [JOINT_<num_joints>]) and send params to motion / TP(one day ;)
- read axes (section [AXIS_X] .. [AXIS_W]) and send HOME_POS (in carth space) to motion (maybe even read other carthesian limits)

snips from an imaginary INI file

[TRAJ] LINEAR_UNITS = inch DEFAULT_LINEAR_VELOCITY = 0.2 MAX_LINEAR_VELOCITY = 1.2 DEFAULT_LINEAR_ACCEL = 6 MAX_LINEAR_ACCEL = 20 ANGULAR_UNITS = degree DEFAULT_ANGULAR_VELOCITY = 30 MAX_ANGULAR_VELOCITY = 90 DEFAULT_ANGULAR_ACCEL = 30 MAX_ANGULAR_ACCEL = 60 [AXIS_X] # note that we are not using numbers, axes are _always_ XYZABCUVW HOME = 0 # home location in cartesean space MAX_VELOCITY = 0.7 # rarely used - the [TRAJ] values are used if not present MAX_LIMIT = 10 # these define a workspace in cartesean coordinates MIN_LIMIT = -10 [AXIS_Y] HOME = 0 MAX_LIMIT = 10 MIN_LIMIT = -10 [AXIS_Z] HOME = 0 MAX_LIMIT = 10 MIN_LIMIT = -10 [AXIS_B] HOME = 0 MAX_LIMIT = 180 MIN_LIMIT = -180 [AXIS_C] HOME = 0 MAX_LIMIT = 180 MIN_LIMIT = -180 # the absence of AXIS_A, U, V, W tells EMC that the machine can't move along those axes and they should not appear on the GUI or DRO [KINS] JOINTS = 4 # number of DOFs (e.g. how many motors your machine has) KINEMATICS = trivkins #first joint [JOINT_0] NAME = table TYPE = LINEAR HOME = 0.000 MAX_VELOCITY = 1.2 MAX_ACCELERATION = 20.0 INPUT_SCALE = 4000 <snip>the rest is exactly like [AXIS_*] in emc2 atm #second joint [JOINT_1] NAME = saddle TYPE = ANGULAR AXIS = 3 # 3 = A HOME = 0.000 MAX_VELOCITY = 1.2 MAX_ACCELERATION = 20.0 INPUT_SCALE = 400 <snip>the rest is exactly like [AXIS_*] in emc2 atm # and so on....

Example of a SCARA robot

snips from an imaginary INI file

[TRAJ] LINEAR_UNITS = mm DEFAULT_LINEAR_VELOCITY = 20 MAX_LINEAR_VELOCITY = 120 DEFAULT_LINEAR_ACCEL = 60 MAX_LINEAR_ACCEL = 200 ANGULAR_UNITS = degree DEFAULT_ANGULAR_VELOCITY = 30 MAX_ANGULAR_VELOCITY = 90 DEFAULT_ANGULAR_ACCEL = 30 MAX_ANGULAR_ACCEL = 60 [AXIS_X] # note that we are not using numbers, axes are _always_ XYZABCUVW HOME = 0 # home location in cartesean space MAX_LIMIT = 10 # these define a workspace in cartesean coordinates MIN_LIMIT = -10 [AXIS_Y] HOME = 0 MAX_LIMIT = 10 MIN_LIMIT = -10 [AXIS_Z] HOME = 0 MAX_LIMIT = 10 MIN_LIMIT = -10 [AXIS_C] HOME = 0 MAX_LIMIT = 180 MIN_LIMIT = -180 [KINS] JOINTS = 4 # number of DOFs (e.g. how many motors your machine has) KINEMATICS = scarakins #first joint [JOINT_0] NAME = shoulder TYPE = ANGULAR HOME = 0.000 MAX_VELOCITY = 1.2 MAX_ACCELERATION = 20.0 INPUT_SCALE = 4000 <snip>the rest is exactly like [AXIS_*] in emc2 atm #second joint [JOINT_1] NAME = elbow TYPE = ANGULAR HOME = 0.000 MAX_VELOCITY = 1.2 MAX_ACCELERATION = 20.0 INPUT_SCALE = 400 <snip>the rest is exactly like [AXIS_*] in emc2 atm #third joint [JOINT_2] NAME = z-slide TYPE = LINEAR HOME = 0.000 MAX_VELOCITY = 1.2 MAX_ACCELERATION = 20.0 INPUT_SCALE = 400 <snip>the rest is exactly like [AXIS_*] in emc2 atm #fourth joint [JOINT_3] NAME = wrist TYPE = ANGULAR HOME = 0.000 MAX_VELOCITY = 1.2 MAX_ACCELERATION = 20.0 INPUT_SCALE = 400 <snip>the rest is exactly like [AXIS_*] in emc2 atm

Example of a XYZ table mill with 10 z joints with spindles

[TRAJ] LINEAR_UNITS = mm DEFAULT_LINEAR_VELOCITY = 50 MAX_LINEAR_VELOCITY = 100 DEFAULT_LINEAR_ACCEL = 100 MAX_LINEAR_ACCEL = 300 [AXIS_X] # note that we are not using numbers, axes are _always_ XYZABCUVW HOME = 0 # home location in cartesean space MIN_LIMIT = -1 MAX_LIMIT = 1600 # these define a workspace in cartesean coordinates [AXIS_Y] HOME = 0 MIN_LIMIT = -1 MAX_LIMIT = 2500 [AXIS_Z] HOME = 200 MAX_LIMIT = 201 MIN_LIMIT = 0 [KINS] JOINTS = 12 # number of DOFs (e.g. how many motors your machine has) KINEMATICS = gantrykins # some universal joint mapping kinematics #first joint [JOINT_0] NAME = x axis TYPE = LINEAR HOME = 0.000 MAX_VELOCITY = 110 MAX_ACCELERATION = 310 INPUT_SCALE = 1000 <snip>the rest is exactly like [AXIS_*] in emc2 atm [JOINT_1] NAME = y axis TYPE = LINEAR HOME = 0.000 MAX_VELOCITY = 110 MAX_ACCELERATION = 310 INPUT_SCALE = 1000 <snip>the rest is exactly like [AXIS_*] in emc2 atm [JOINT_2] NAME = spindle 1 TYPE = LINEAR HOME = 0.000 MAX_VELOCITY = 60 MAX_ACCELERATION = 200 INPUT_SCALE = 1000 <snip>the rest is exactly like [AXIS_*] in emc2 atm [JOINT_3] NAME = spindle 2 TYPE = LINEAR HOME = 0.000 MAX_VELOCITY = 60 MAX_ACCELERATION = 200 INPUT_SCALE = 1000 <snip>the rest is exactly like [AXIS_*] in emc2 atm [JOINT_4] NAME = spindle 3 TYPE = LINEAR HOME = 0.000 MAX_VELOCITY = 60 MAX_ACCELERATION = 200 INPUT_SCALE = 1000 <snip>the rest is exactly like [AXIS_*] in emc2 atm and so on to JOINT_12