[Opensim-dev] Questions about Vehicle scripting calls

Dahlia Trimble dahliatrimble at gmail.com
Thu Jun 7 21:59:32 UTC 2012


Timers in opensimulator are usually limited to 0.5 seconds minimum
duration. There is a ini setting to change it at the simulator level,
 however, I've found that using the not_at_target() event gives better
results as it will fire once per simulation frame which is probably what
you would want anyway.

Using llSetPos() and friends is probably not a good idea as it generates a
*lot* of network traffic and overhead in the client stack code in the
simulator. I've heard several LL engineers lament the use of these
functions for motion but "the cat is out of the bag now" and there's not
much they can do about it except promote the use of llSetKeyFramedMotion().

I've had difficulties with the opensimulator implementation of
llMoveToTarget() and I've written my own velocity feedback loop in LSL
(which is kind of an abstract PID controller) and I use it on both SL and
opensimulator. I usually only have to change one constant to get it to
behave the same on either platform. I use not_at_target() and
llApplyImpulse() to correct velocity at each simulation frame. I don't use
any timers at all. It works in all 3 global axes so object rotation doesn't
affect velocity, and motion is fairly constant and smooth. I have made
attempts to understand the existing PID code in opensimulator but it's
unfortunately not very well documented and has a lot of commented out code
and much of the code uses variable names that are not very descriptive, so
I haven't been able to successfully modify it to work as well as my LSL
solution. I'm also somewhat hesitant to commit any changes to that code as
I don't really have much experience with scripting LSL physics and I don't
have confidence that I would make changes that would break other's scripts.
I'm also not sure if any of the PID controller code affects vehicle
functions or not, or if it just applies to llMoveToTarget() and agent
motion.



On Thu, Jun 7, 2012 at 12:09 AM, Mike Higgins <mike at kayaker.net> wrote:

>  On 6/6/12 12:48 AM, Bengt Falke wrote:
>
> I am also interested in physics for vehicles mainly for creating working
> yacht and for making my free moving scripted animals to work in a smooth
> way.
> If there is a way I can contribute I will try to do so.
>
>      Also at the recent OpenSim developers meeting, Andrew Hellershanks
> said (about llSetTImerEvent minimum time limits) "Not sure why you would
> want to use something other [less] than 1.0". I think the developers need
> to know that there are 1000's of scripters in SL DESPERATELY trying to find
> ANY WAY to make simple things like a fish move smoothly through the water
> at a constant velocity. In SL you can usually get timer() events as often
> as once every 0.2 seconds, which is not quite often enough for smooth
> looking motion. timer events more often would be one way to get smoother
> looking motion. I've seen people write scripts that had abominations like:
> while (1) { moveit(); llSleep(0.05); }  The OpenSim developers need to
> throw these guys a bone so they will NOT DO THAT HERE!
>
>     Of course, LL only recently threw them the llSetKeyframedMotion()
> bone. Before that, people tried to use physics and llMoveToTarget() which
> was NEVER DESIGNED TO GENERATE LINEAR MOTION (it is always damped).
> Although you can play games with it and find reasonably linear portions of
> the curve. But that requires accurate llSetTimerEvent durations to stop the
> llMoveToTarget part way through a damped move. And in OpenSim,
> llMoveToTarget is damped 9 times faster than SL (mantis issue 5968) which
> requires pushing it nine times harder to try to capture a linear section
> and even more accurate llSetTimerEvent times to prevent the object from
> running away from you...
>
>      The only other way in SL (before llSetKeframedMotion) to get
> something to move smoothly at a constant velocity is to make it a vehicle.
> Which is sort of like using a 4 ton hydrolic press to insert thumbtacks in
> a cork board.  And even in SL, the vehicle functions are really squirrely.
>
>     So the major reason I am testing the OpenSim vehicle routines is to
> see if I can find a reliable subset of them, or a set of workarounds, that
> will allow me to move a fish smoothly through the water at a constant
> velocity.
>
>     So far I have found a few problems and some workarounds:
> 1) Vehicles crash and burn at the sim boundary, the workaround is to add
> code to detect the sim boundary before the vehicle gets there and prevent
> it from even getting close. But if llSetTimerEvent is not accurate, if your
> timer() event is not called regularly to do this check, the vehicle runs
> into the sim boundary and goes crazy.
> 2)  The angular motor rotates around the wrong axes, but you can
> workaround that by multiplying your vectors by llGetRot (mantis issue
> 6039). I'm guessing that nobody noticed this before because cars and boats
> and helicopters are usually horizontal and their local Z axis is aligned
> with the region Z axis.
> 3) The linear motor vector is clamped or projected onto the region XY
> plane. (mantis issue 6040) A car or a boat or a helicopter might never
> notice this, but with no Z values allowed in linear motors, how can
> airplanes glide up or down? Someone please tell me how to get this to work!
>
>
>
> _______________________________________________
> Opensim-dev mailing list
> Opensim-dev at lists.berlios.de
> https://lists.berlios.de/mailman/listinfo/opensim-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://opensimulator.org/pipermail/opensim-dev/attachments/20120607/57cb629b/attachment-0001.html>


More information about the Opensim-dev mailing list