could it be the sleep function ?<br><br><div class="gmail_quote">2009/12/8 Marco Otte <span dir="ltr"><<a href="mailto:m.otte@camera.vu.nl">m.otte@camera.vu.nl</a>></span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">



<div>
<div dir="ltr">
<div dir="ltr"><font color="#000000" face="Arial" size="2">Hi everyone,</font></div>
<div dir="ltr"><font face="Arial" size="2"></font> </div>
<div dir="ltr"><font face="Arial" size="2"><font face="Times New Roman" size="3">I've got a simple car (works fine in SL).<br>I've created a small LSL script (see below) that listens to channel 9 for information about speed and direction. The script inputs this into the standard physics commands to move and turn the car.<br>
Because I want outside (of OpenSIM) control of the car, I've created a small C# program that simply types the speed and direction into the chat box (/9 speed_direction). This because a HTTPrequest from LSL is limited to about 1 call per second and that is too slow.<br>
The whole setup seems to work. The car moves and turns smoothly, BUT after about 5 secs (give or take) moving the script stops responding and the vehicle stops. After StandUp-Sit it resumes for another 5 secs.<br>If the vehicle does not move, the script keeps running.</font><br>
</font></div>
<div dir="ltr"><font face="Arial" size="2">----- script -----</font></div>
<div dir="ltr"><font face="Arial" size="2"><font face="Times New Roman" size="3">//This car uses a C# program that send keypresses containing the speed and direction.<br>//A Listen() event picks up these numbers and pushes these into the VEHICLE<br>
string sit_message = "Ride"; //Sit message<br>string not_owner_message = "You are not the owner of this vehicle ..."; //Not owner message<br>key requestid; //Used for the HTTPREQUEST<br>float SpeedSet = 0; //Translated speed from bike speed<br>
float TurnRatioSet = 0; //Calculated turn adjustment<br>integer TurnLeftThreshold = 1070; //Upper bound for straight ahead from bike<br>integer TurnRightThreshold = 1050; //Lower bound for straight ahead from bike<br>integer TurnLeftMax = 1243; //Maximum value from bike at full left steering<br>
integer TurnRightMin = 809; //Minimum value from bike at full right steering<br>integer Handle = 0;<br><br>default<br>{<br>    state_entry()<br>    {<br>        llSetSitText(sit_message);<br>        llSitTarget(<0.2,0.2,0.5>, ZERO_ROTATION ); // forward-back,left-right,updown, ZERO_ROTATION<br>
        <br>        llSetCameraEyeOffset(<-0.2, 0.0, 1.0>);<br>        llSetCameraAtOffset(<5.0, 0.0, 0.0>);<br>        <br>        //car<br>        llSetVehicleType(VEHICLE_TYPE_CAR);<br><br>        llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0.8);//0.8<br>
        llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 0.10);//0.1<br>        llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_TIMESCALE, 0.1);//1.0 Lower is more responsive<br>        llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 0.1);//0.2<br>
        llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, <20.0, 20.0, 10.0>);//1000,2,1000<br><br>        llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0.2);//0.2 - not much difference on its own<br>
        llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 0.10);//0.1<br>        llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_TIMESCALE, 0.1);//0.1 Low is better, less after turning<br>        llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 0.1);//0.5<br>
        llSetVehicleVectorParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, <20.0, 20.0, 20.0>);//20,20,1000<br><br>        llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.10);//0.5<br>        llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 0.50);//0.5<br>
    }<br>    <br>    changed(integer change)<br>    {<br>        if (change & CHANGED_LINK)<br>        {<br>            key agent = llAvatarOnSitTarget();<br>            if (llKey2Name(agent) == "Blithe Crosswater")<br>
            { <br>                if (agent != llGetOwner())<br>                {<br>                    llSay(0, not_owner_message);<br>                    llUnSit(agent);<br>                    llPushObject(agent, <0,0,50>, ZERO_VECTOR, FALSE);<br>
                }<br>                else<br>                {<br>                    llListenRemove(Handle);<br>                    llSetStatus(STATUS_PHYSICS, TRUE);<br>                    llSleep(.1);<br>                    llListen(9,"","","");<br>
                    requestid = llHTTPRequest("</font><a href="http://127.0.0.1:8002/?1%22,%5BHTTP_METHOD,%22GET%22%5D,%22%22%29;" target="_blank"><font face="Times New Roman" size="3">http://127.0.0.1:8002/?1",[HTTP_METHOD,"GET"],"");</font></a><font face="Times New Roman" size="3"> [</font><a href="http://127.0.0.1:8002/?1%22,%5BHTTP_METHOD,%22GET%22%5D,%22%22%29;" target="_blank"><font face="Times New Roman" size="3">^</font></a><font face="Times New Roman" size="3">] //This is to start the C# program inputting Speed and Direction<br>
                    llSleep(.4);<br>                }<br>            }<br>            else<br>            {<br>                llListenRemove(Handle);<br>                llSetStatus(STATUS_PHYSICS, FALSE);<br>                llSleep(.4);<br>
                llTargetOmega(<0,0,0>,PI,0);<br>                requestid = llHTTPRequest("</font><a href="http://127.0.0.1:8002/?0%22,%5BHTTP_METHOD,%22GET%22%5D,%22%22%29;" target="_blank"><font face="Times New Roman" size="3">http://127.0.0.1:8002/?0",[HTTP_METHOD,"GET"],"");</font></a><font face="Times New Roman" size="3"> [</font><a href="http://127.0.0.1:8002/?0%22,%5BHTTP_METHOD,%22GET%22%5D,%22%22%29;" target="_blank"><font face="Times New Roman" size="3">^</font></a><font face="Times New Roman" size="3">] //Stops the C# program<br>
                llResetScript();<br>            }<br>        }<br>        <br>    }<br><br>    http_response(key request_id, integer status, list metadata, string body)<br>    {<br>        //Catch the response of the C# program, a dummy method<br>
    }<br><br>    listen(integer chan, string name, key id, string message)<br>    {<br>        //llSay(0,message);<br>        integer Separator = llSubStringIndex(message,"-");<br>        float speed = llGetSubString(message, 0, Separator - 1); //Extract speed<br>
        float direction = llGetSubString(message, Separator + 1, llStringLength(message)); //Extract DIRECTION<br>        <br>            SpeedSet = (30 * speed) / 7000; //Transform to [0-30] range<br>        <br>            if (direction > TurnRightThreshold && direction < TurnLeftThreshold) //Is steering in the middle?<br>
            {<br>                //Straight ahead<br>                TurnRatioSet = 0;<br>            }<br>            if (direction > TurnLeftThreshold) //Steering left?<br>            {<br>                //Set steering in VR to [0-1.65]<br>
                TurnRatioSet = (direction - TurnLeftThreshold) / ((TurnLeftMax - TurnLeftThreshold)/1.65);<br>            }<br>            if (direction < TurnRightThreshold) //Steering right?<br>            {<br>                TurnRatioSet = (TurnRightThreshold - direction) / ((TurnRightThreshold - TurnRightMin)/1.65);<br>
            }<br>            <br>            if(SpeedSet < 0.5) {TurnRatioSet = 0;} //Low speed then no steering<br>            <br>            vector angular_motor; //use vector<br><br>            llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <SpeedSet,0,0>); //Set speed<br>
            <br>            if (direction > TurnLeftThreshold) //If left<br>            {<br>                angular_motor.z += TurnRatioSet; //then increase rotation angle<br>            }<br>            if (direction < TurnRightThreshold) //If right<br>
            {<br>                angular_motor.z -= TurnRatioSet; //decrease rotation angle<br>            }<br><br>            //llSay(0,(string)SpeedSet + " --- " + (string)angular_motor.z); //Diagnostic<br><br>
            llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, angular_motor); //Set rotation<br>    }</font><br>---- end script ---</font></div>
<div dir="ltr"><font color="#000000" face="Arial" size="2"></font> </div></div>
<div dir="ltr"><pre>With kind regards, 

Marco Otte
CAMeRA @ VU University Amsterdam
De Boelelaan 1081
1081 HV  AMSTERDAM
Netherlands

Visiting address: 
Metropolitan Building
Buitenveldertselaan 3
1082 VA Amsterdam (room Z539)
T +31 (0)20 598 6807
M +31 (0)6 46025037
E <a href="mailto:m.otte@camera.vu.nl" target="_blank">m.otte@camera.vu.nl</a> 

</pre></div></div>
<br>_______________________________________________<br>
Opensim-users mailing list<br>
<a href="mailto:Opensim-users@lists.berlios.de">Opensim-users@lists.berlios.de</a><br>
<a href="https://lists.berlios.de/mailman/listinfo/opensim-users" target="_blank">https://lists.berlios.de/mailman/listinfo/opensim-users</a><br>
<br></blockquote></div><br>