Interpolation
I've been working hard all day to get this to work.
I'm playing around with the math module in python. I eventually want the following code to help me control the speed of a servo motor. The idea is to get the servo speed to accelerate and then decelerate as it reaches its set position--in a parabolic way you might say.
The problem is I'm getting wavy numbers apparently from the algorithm I've set up and it needs to be a nice smooth transition.
from __future__ import division
import math
import time
def Interpolation():
EffectPercentage = 1
Step = 1
nSteps = 32
MovementStepPercentage = EffectPercentage/nSteps*Step
print MovementStepPercentage
while Step << 32:
Interpolation = (1-math.sin(MovementStepPercentage*180+90))/2*EffectPercentage+MovementStepPercentage*(1-EffectPercentage)
print "Interpolation =", Interpolation
Step = Step+1
print "Step =", Step
MovementStepPercentage = EffectPercentage/nSteps*Step
print MovementStepPercentage
time.sleep(0.0035)
if Step == 32:
break
Interpolation()
I know a thing or two about math, but not enough to get this to work apparently... any pointers?
Seagull One
Junior Poster in Training
61 posts since Aug 2007
Reputation Points: 10
Solved Threads: 0
This is left bit shift
while Step << 32:
#
while Step < 32: ## instead?
If you want to increase the speed of a motor, at higher motor speeds the same increase will yield a greater increase in the speed of the motor because of the initial friction which may be part of the reason that there isn't a smooth increase.
Also, depending on the version of Python you are using, you may be getting an integer instead of a floating point.
MovementStepPercentage = EffectPercentage/nSteps*Step ## an integer
MovementStepPercentage = float(EffectPercentage)/nSteps*Step ## convert the result to float
#
# which affects this
Interpolation = (1-math.sin(MovementStepPercentage*180+90))/2*EffectPercentage+MovementStepPercentage*(1-EffectPercentage)
#
# note that the above line is the same as
# (and not sure if you want it this way or not)
(1-math.sin( (MovementStepPercentage*180) +90))
woooee
Nearly a Posting Maven
2,454 posts since Dec 2006
Reputation Points: 777
Solved Threads: 714
Did that solve the problem?
woooee
Nearly a Posting Maven
2,454 posts since Dec 2006
Reputation Points: 777
Solved Threads: 714