Thanks for the tips! I was thinking I might do something like that. For the cylinder it would make sense to unwrap it and design a rectangular STL part and wrap it back onto the cylinder. Getting rid of the seam seems difficult though.
or should I being doing something similar to rotary delta with segmented motion? Is that a valid work around? I could change all axes to be linear axes, but use segmented motion instead in the constructor. Would I need to change anything else if I tried that?
I just tried this to see what might happen. I changed my kinematics class to:
MyKinematics::MyKinematics() : Kinematics(KinematicsType::myKinematics, DefaultSegmentsPerSecond, DefaultMinSegmentSize, false), numTowers(UsualNumTowers)
I took the definitions of the defaults from rotary delta kinematics, 100, and 0.2 respectively
I also changed GetMotionType to:
MotionType LinearDelta7DKinematics::GetMotionType(size_t axis) const
Things mostly work now, but the motion is not entirely smooth. It is definitely trying to approximate a straight line, but not quite right. As far as I can tell all of the moves do at least arrive in the correct spot.
I worked out the maths of the Inverse Transform function by solving the simultaneous equations, having at the time failed to find a solution on the Internet. That was before I found that the magic search term was "trilateration". There are lots of ways of doing it, and I expect man of them are more resistant to rounding error than the method I devised.
As I do a lot of radio monitoring stuff (hardware, software) even my keyboard and mouse are wired. And UTP cables tend to be quite noisy so everything in here is FTP or STP. Unfortunately that comes with a lot more rigidity if keeping the costs within reasonable limits! 😞