Oh wow. Thank you for doing testing already. It clears a few questions I had.
I fear, my ramblings were a bit unstructured and we are actually talking about multiple things. Although they are connected, they are not the same:
- The vortex movement you’ve tested, i.e. R1/R2 have to be compensated on L1/L2.
- The safety issue/staying true to the scripted contact point, i.e. R1/R2/L1/L2 have to be compensated on L0 (and optionally L1/L2).
Furthermore, from your animation I take it, that the SR6 does not do any corrections either, but each script axis is just a linear translation of that specific script without cross-dependencies.
Compensation on L1/L2 (Vortex)
It is to be expected, that there will be limitations to what can be compensated at the axes’ limits.
But I must admit, that I didn’t do numerical calculations, just analytical, so here goes:
Looking up the numbers for an SR6, both angles have a max. range of ±30° and both surge and sway have a range of ±30mm. That means that if the sleeve entry protrudes 60mm from the rotational axis (where the main arms are mounted to the receiver) then you would need the full L1/L2 range to correct full R1/R2 amplitude, as you’ve stated. I’ve measured my fleshlight sleeves and they are all around that range (maybe a bit shorter where the actual grip is).
This means that if someone wants to script that specific movement:
- with full angles: surge and sway have to be in the middle for full compensation.
- with smaller angles: there is a small range wherein surge and sway can lie, for the deviations to be compensated fully.
In light of that, I’m beginning to think like you, that compensations affecting L1/L2 should not be done automatically, but that the scripter has to intentionally script it that way. If anything, we can write extensions in OFS to help with a catalog of functions to make different kinds of compensations and patterns.
The downside of course becomes that the playthrough will be sleeve dependent and the difference in protrusion can only be corrected mechanically. So if @2oferagon is still reading, sorry mate 
Compensation on L0 (safety, true to script)
This to me seems more critical because of both the safety implications and improved detail at the tip.
Using the full ranges of the devices, fixing the bottom base point and assuming a linear full translation from the input, the stroke length can reach:
- OSR2+:
121 115% of the range or 28 20 mm outside of max. range.
- SR6:
143 122% of the range or 51 26 mm outside of max. range.
(EDIT: I had speed dependent components in the calculation initially with extreme speeds. Have corrected the values)
(If the kinematics on AyvaStrokerLite are correct, then for an SR6 a change in pitch alone, only affects the top two servosl, so I used the same equations for both devices).
To counteract that, in MFP there’s the Smart Limits, but they only work from L0 → R1/R2/L1/L2. This means that at the tip (if set up at center, at the very top), there can’t be any angles or surge/sway. Which means that if one takes an existing L0 script, it is not possible to just add stuff to it and it actually translating. Additionally there’s the possibility to set up the device lower, which takes away dynamic range at the most sensitive part of the penis, but allows for some deviations with a different SmartLimits setup. (Without Smart Limits: >=26 mm lower than tip, if full R1/R2/L1/L2 ranges are used somewhere in the script)
What I am proposing is the exact opposite direction. If there are deviations in R1/R2/L1/L2, then L0 must be stunted, as to avoid slipping out, while allowing for angles and off-center positions at where there is the most sensitivity. This also has the added effect, that (within limits) the contact point on the penis stays the same as intended in the original script, without changing the original script.
The downside here is that the actual possible range is limited to the nominal max. stroke range of the device, which can mean the lower position is not in contact with the body (which can be the case anyway). So there is a priority judgement from the user, on what to use and how to set up.
To summarize the options:
My Proposal: More variation at the tip, limited to nominal max. range
Safety Margin: More total range with possible contact at base, but far from the tip if not at (full) angle/deviation.
Smart Limits: Reaching the tip only without angles/deviations, limited to nominal max. range
Of course there can be a mix of the second and third options, but is a bit difficult to set up correctly.
Firmware vs. Software
How it is now, the firmware uses the geometry to get specific motor movements, so the axes are isolated. I.e. a roll is only roll, but needs four motors to move in a specific way depending on the geometry.
- The Firmware doesn’t know where the max. range is actually set (the 0-100 limits are set on a software level).
- If we are setting up on software level anyway (axis limits), imho it is less user friendly to have to additionally change values on a firmware level.
- The actual usefulness can be discussed, when talking about actual numbers, e.g. if everybody is using full 0-100 limits, and the protrusions and other parameters are the same for everyone anyway, then firmware makes sense. If people have different parameters, then adding more parameters at the same place they already make adjustments in makes more sense imo.
Bingo! In my OFS extension I got an additional “safety” parameter that reflects that issue and should be set individually, depending on the stiffness of the total mechanical setup, sleeve/penis shape, etc.
Personally to get maximum impact, I have tried to make everything as sturdy as possible, especially the clamping mechanism. And of course it is always advisable to check if all the screws are tightened.