threadFunction=function()
while simGetSimulationState()~=sim_simulation_advancing_abouttostop do
message,auxiliaryData=simGetSimulatorMessage()
while message~=-1 do
if (message==sim_message_keypress) then
if (auxiliaryData[1]==2007) then
desiredWheelRotSpeed=desiredWheelRotSpeed+wheelRotSpeedDx
end
if (auxiliaryData[1]==2008) then
desiredWheelRotSpeed=desiredWheelRotSpeed-wheelRotSpeedDx
end
if (auxiliaryData[1]==2009) then
desiredSteeringAngle=desiredSteeringAngle+steeringAngleDx
if (desiredSteeringAngle>45*math.pi/180) then
desiredSteeringAngle=45*math.pi/180
end
end
if (auxiliaryData[1]==2010) then
desiredSteeringAngle=desiredSteeringAngle-steeringAngleDx
if (desiredSteeringAngle<-45*math.pi/180) then
desiredSteeringAngle=-45*math.pi/180
end
end
end
message,auxiliaryData=simGetSimulatorMessage()
end
steeringAngleLeft=math.atan(l/(-d+l/math.tan(desiredSteeringAngle)))
steeringAngleRight=math.atan(l/(d+l/math.tan(desiredSteeringAngle)))
simSetJointTargetPosition(steeringLeft,steeringAngleLeft)
simSetJointTargetPosition(steeringRight,steeringAngleRight)
simSetJointTargetVelocity(motorLeft,desiredWheelRotSpeed)
simSetJointTargetVelocity(motorRight,desiredWheelRotSpeed)
simSwitchThread()
end
end
steeringLeft=simGetObjectHandle('Steer_left_joint')
steeringRight=simGetObjectHandle('Steer_right_joint')
motorLeft=simGetObjectHandle('Front_left_joint')
motorRight=simGetObjectHandle('Front_right_joint')
desiredSteeringAngle=0
desiredWheelRotSpeed=0
steeringAngleDx=2*math.pi/180
wheelRotSpeedDx=20*math.pi/180
d=0.755
l=2.5772
res,err=xpcall(threadFunction,function(err) return debug.traceback(err) end)
if not res then
simAddStatusbarMessage('Lua runtime error: '..err)
end