Robotic kinematics

@DerAndere I wanted to use IJK, but then searched for alternatives, because IJ has a conflict with G2/G3 parameters. That's the reason why I changed to AC/BC and quaternions for full orientation. There is no GCode standard for quaternions, so I use an artificial currently, until someone tells me which standard to use...
I am using the b) method which supports the RTCP mode mentioned and explained e.g. in the links (the beckhoff one gives the fastest overview):
https://www.cnczone.com/forums/uncategorisedcamdiscussion/413638cncmastercam.html
This method has the advantage that you can configure the robot to calibrate any inexactness of axes, e.g. between X and Y. The kinematics will calculate the true rotations and positions. The idea is to measure the endpoints and calculate back to the config parameters.
LinuxCNC is a great software and I'm taking it as reference sometimes how to propose parameters. It has however only experimental nurbs and bspline support, that's the next topic I want to address.
The Fanuc has IJK support, but they need to change modes before using it (probably because of the G2/G3 problem), so it's a proprietary solution. Fanuc has good manuals. I find only few information about 5 axis CNC, so it's a valuable additional information source.

The current status is that I changed internal calculations to skew symmetric matrices, but there were differences to the quaternion based calculations. The formulae in the internet are inexact (the rotation angle is set to 1), I've found the solution yesterday to get correct results now. Unfortunately from skew to rotation, there are also two solutions(!). As I said, orientations are a beast. I always use forwardinverse algorithms to calculate roundtrip calculation with random parameters. stackexchange and stackoverflow are very valuable information sources!

@DerAndere the different configurations of Haas and Fanuc shows imho that every manufacturer made his proprietary solution in the past. Worse, to get some advanced capabilities, one had to pay for those "options" additionally.
Some combinations were not possible, e.g. changing the tool length for Fanuc prohibited using some special modes afterwards. robot kinematics uses the G10 offset settting of the current tool, so tool change should be no problem.The second problem is that there is no free software to support 5 axis. There are plugins in Blender and FreeCad, but to my knowledge not advanced ones. Currently I think, best would be to develop an own solution based on OpenNurbs, which is an open library developed by Rhino. Rhino itself is a bit expensive if one wants to use it noncommercial as hobby. (Hobby, noncommercial, being not a student => 1000$).

@JoergS5 List of open source CAM software for multi axis FDM (tool path and Gcode generators). I did not test them yet:
 https://github.com/GuoxinFang/ReinforcedFDM (uses Rhino IIRC)
 https://github.com/zhangty019/MultiAxis_3DP_MotionPlanning
 https://github.com/Spiritdude/Slicer4RTN
 https://xyzdims.com/vgcodectl/ : source code release planned

@DerAndere thanks for posting these here. two of them are @xyzdims work!
Also not sure if you saw but the zhangty019 work is been built on further:
https://dl.acm.org/doi/10.1145/3550454.3555516 
@T3P3Tony Hi Tony! Thanks for the update. As a reminder for my future self, here is the source code related to the publication you mentioned: https://github.com/zhangty019/S3_DeformFDM

@DerAndere thanks for the links, I'll check them!

@T3P3Tony this is a very promising article and slicer.
robot kinematics is based on quaternions, this fits. 
I rediscovered a book about screw theory (another name is: exponential coordinates), about robotics by Lynch/Park 2017. I had refused it, because the examples are without solutions (students shall not know the solutions if a teacher uses the tasks). But after review, the rest of the book is very good. I had problems understanding the book of Murray/Li/Sastry about the same topic. Both books together, all became much clearer.
Screw method is an alternative method to DenavitHartenberg and is faster than this method. I will change all internal methods to this new method, but let the configuration parameters at DenavitHartenberg as is. I will add an additional optional input method for screw parameters with the M669
RC parameter (S is unfortunately not free...).Screw method allows more precalculation of the configuration values, so calculation of specific positions is faster. The whole is based on Rodrigues formula and the screws are very similar (and can be transferred to/from) quaternions.
The name screw comes from the similarity of a screw: each actuator's movement is described by a rotation and a translation, like a screw. Forces/torque calculations are also described with this method.
http://hades.mech.northwestern.edu/index.php/Modern_Robotics provides information about the Lynch/Park book. The free preprint version is there also as pdf.
Little update: the following books are about screw theory:
 Lynch/Park 2017 as mentioned above
 Murray/Li/Sastry
 Peter Corke, Robotics, Vision and Control => Matlab extensions, visision analyzing code
 PardosGotor, Screw Theory for Robotics. An illustrated handbook. *)
*) there is a book of the same author named Screw Theory in Robotis, being more expensive. It seems to be similar (I don't know for sure).
I'll use the Corke book to extend the robot kinematics into two directions: improving path planning for smooth curvature (nurbs etc) and to improve quality by camera analysis with help of OpenCV.
Little update Jan 3:
I'll concentrate on implementing the closed form PadenKahan subproblems now, which allows direct algorithmic solutions instead of iterating. The subproblems are explained in the PardosGotor book.I've created a documentation page about screw theory now at https://docs.duet3d.com/en/User_manual/Machine_configuration/robot_screw_theory and will fill it with content.
Happy new year!

I'm currently converting the subproblem code from Matlab of Pador's book into C++ code for the firmware, with performance optimizing.
The results are very promising with respect to speed and quality (all solutions of inverse kinematics are provided), so I'll concentrate on screw theory now and will push back DenavitHartenberg (DH).
I'll remove documentation for DH next week and reorganize documentation, so if someone needs it, please back it up. I'll try to write a converter for DH>screw parameters, but this is low priority. The screw based setup is easier than DH parameters.
The first implemented robot types will be:
 6 axis industrial robot
 serial scara
 CNC, CoreXY, Prusa like 5 axis

@JoergS5 said in Robotic kinematics:
remove documentation for DH next week
rather than removing it, could you update it to say tis not currently being used. You have put a lot of useful information in there, maybe some else will need to use DH in the future.

@T3P3Tony ok, I can do it this way, this makes sense.

I've finished the robot 6 axis inverse kinematics now with PadenKahan algorithms, the time measured on a 2 GHz laptop is 30 microseconds to get the 8 solutions. Maybe factor 10 for a Duet. Optimization is possible by calculating only the nearest angle solutions. (maybe in Limitposition calculating all solutions, and in segmented calculations only one solution).
I'm constantly updating the screw theory page, especially the literature links, if someone is interested following the underlying theory.
Next will be to implement linear axes with screw theory for the CNC/Prusa/CoreXY like 5 axis. Then I'll try to implement PK2 Dimovski et al solution (for 6 axis robot first three axes).