So between my bike accident and violent wage strikes in the engineering sector here in South Africa I've managed to make only slight progress. I have figured out all of the forward and inverse kinematics and written a bit of python code check my calculations. It needs to be converted into a kinematics file for Linux CNC but that is fairly straightforward.
With the inverse kinematics the angle of each joint can be calculated from the given x, y, z coordinates and the tool orientation. I have decided to allow the orientation to be specified by the user in any one of 3 different ways.
1) Axis - Angle: this is a vector pointing in the direction of the tool head and an angle of rotation around that axis. This is the easiest to use if the end effector is some type of rotary tool like a drill or router. This is because the angle becomes inconsequential and only the axis contributes to the position of the arm.
2) Rotation matrix: This is a 3 x 3 matrix defining the transformation from the base coordinate frame to the tool coordinate frame. This is a bit clumsy for the end user however I'm converting all input forms to this in order to complete all of the kinematic maths so I've made it a valid input in case the user wants to use it.
3) Euler Angles: This is the pitch roll and yaw of the tool relative to the base coordinate frame. I suspect this will be used the most when a claw manipulator is used.