PDA

View Full Version : Calculating Speed with sensor


durf
03-13-2009, 09:05 AM
Hello,

Right now I am trying to figure out how to calculate speed with a sensor. I know that speed is the rate of change with respect to time. So change of position / time.

I know I need to get the position(pos) of the sensor first. Then i have to have a def: that will check for its new pos then do the calculation - (new pos - old pos) / time. Then after that I need to start over and set the new pos to old pos.

The problem im having is trying to establish a pos before the def: starts running. Whenever I test for the old position i keep getting 0.0, 0.0, 0.0.

So its going to look something like this:


import viz
viz.go()

PORT_PPT = 6

for x in range(1):
#Create sensors
ppt1 = viz.add('vizppt.dls')
ppt2 = viz.add('vizppt.dls')

ball1 = viz.add('white_vall.wrl')
ball1.scale(1,1,1)
ballLink1 = viz.link(ppt1, ball1)

ball2 = viz.add('white_vall.wrl')
ball2.scale(1,1,1)
ballLink2 = viz.link(ppt2, ball2)

#controls distance in virtual world
ballLink1.postScale([8,1,13],target = viz.LINK_FULL_OP)
ballLink2.postScale([8,1,13],target = viz.LINK_FULL_OP)

#I need to check for ball1 pos before here
def speed():
#need to check for new pos for ball1 here
#need to somehow get old pos of ball1 so i can do the equation
#new pos - old pos /2(=1/2 second)
if speed > 1:
#some reaction happens in here
#need to set old pos = new pos

vizact.ontimer(.5, speed)



Ive been trying to write this to work without errors but i keep getting them. I still new to vizard and python so any explanation would help also.

Thanks

farshizzo
03-13-2009, 10:25 AM
Here is a sample function that takes any sensor object and calculates the speed of it:import viz
viz.go()

sensor = viz.add('testtrack_all.dls')

def CalculateSpeed(obj):

#Get current and last position
current_pos = obj.getPosition()
last_pos = getattr(obj,'last_pos',None)

if last_pos is None:
#This is first call, so save position and set speed to 0
obj.last_pos = current_pos
obj.speed = 0.0
else:
#Compute speed using last position
obj.speed = vizmat.Distance(current_pos,last_pos) / viz.elapsed()
obj.last_pos = current_pos

print obj.speed

vizact.ontimer(0,CalculateSpeed,sensor)