Closed loop control of Launch?


#1

Was curious, is it possible to retrieve the current pos of the launch? Or does only the command and button interface exist?


#2

Hi! As far as we know it is not possible to read the current position. The Launch probably doesn’t even know about it.

But you can calculate the position based on a known starting point. Which is exactly what I do in the Funscript format I’ve created :sunglasses:. This does mean that when a command is lost/skipped for whatever reason, the positions will be off. In practice this is not that big of a problem, because this is corrected when there is enough time between some of the commands for the Launch to catch up again.

Oh and if you are building something for the Launch, we would love to know! Maybe we can help, exchange idea’s, etc. :slight_smile: (hint: you could ask @qdot for a Slack invite ;))


#3

I was secretly hoping because position was a input into the control interface that the FL had to know its current position somehow and we could get that back (guess it must be doing a version of your algorithm under the covers, huh?).

You probably don’t want me messing around with the codebase :P. I’m not too experienced in websockets or client/server anything, but I was able to learn enough to write some python to control my Launch using a Buttplug server instance (I’ll share on another thread once I clean that up enough, might help someone else out).

My ultimate goal actually was to write a plugin for CM3D2 that would use the distance between actors to control the launch. Was actually able to get the distance calculation working, just gotta figure out how to filter 100+ distance readings/second into discrete Launch commands without too much lag. Funscript definitely seems promising, (though I think it may be way better suited for videos/fixed content where desired launch positions are known ahead of time). Could definitely try to leverage some of that position prediction from it though!


#4

If you’d like a slack invite, feel free to message me an email address to send it too (anon/temp is fine). Happy to help out where we can, and glad the server instance has been helpful! Sorry we don’t have a python library for it quite yet (funny enough, the original buttplug was ALL python :slight_smile: ). Definitely looking forward to seeing what you’ve got done, as I’d love to get at least a pypi client package up soon.

I hadn’t thought about distance between actors as a metric, how is that working out so far for mapping action (assuming that’s what you’re trying to do)?


#5

Yeah, most people starting to develop have this hope :slight_smile: But is does have another feature that kinda breaks that assumption, you can cancel commands by sending a new one. Using the Launch formula you can calculate where you are at a certain time or when a command will end.

Yeah, that was the goal of Funscript. The algorithm requires knowledge (where+when) of the next position in order to calculate the speed when sending a command.

In a real-time situation the best you can do is trying to predict the next position as best as possible.

Thinking about the problem, there might be another trick you can try to use in addition to predicting positions. As I said, the Launch cancels the previous command as soon as a new one comes in. So when you detect your position prediction was wrong, you can send a new command when the previous one is still moving. To make this work best you can calculate the current position of the Launch based on the last command + time passed, so you can use that as the start position for the new command.

Much less interesting but simplifying the real-time problem is using fixed positions or speed.