5

enter image description here

I am designing a two dimensional cam profiles. I want to use the "modified sine" method for drawing the position and angle changes. (see attached sketch). The modified sine curve is actually a combination of cycloidal curve at the first and last 1/8 of the curve and a sine curve in the middle 7/8 of the curve. It is easily employed when the terminal velocities are zero. However, often times it is necessary for a cam profile to simply go from one velocity (perhaps zero) to a constant terminal velocity. The terminal velocity is simply an angle on the displacement diagram.

The profile is defined by:

$$ y= \begin{cases} \frac h{4+\pi}\left(\pi\frac\theta\beta-\frac14 \sin \left(4 \pi \frac\theta\beta \right) \right), & 0\lt\theta\lt\frac18\beta \\[2ex] \frac h{4+\pi}\left(2+\pi\frac\theta\beta-\frac94 \sin \left(4\pi\frac\theta{3\beta}+\frac\pi3 \right) \right), & \frac18\beta\lt\theta\lt\frac78\beta \\[2ex] \frac h{4+\pi} \left(4+\pi\frac\theta\beta-\frac14 \sin \left(4\pi\frac\theta\beta \right) \right), & \frac78\beta\lt\theta\lt\beta \end{cases}$$

The maximum velocity which can be achieved is at $45\deg \left( \frac\pi4 \right)$ therefore, only the first half of the curve is usable for my need.

as an example,

what method would you employ to design a curve that would go from point $(0,0)$ at angle zero, to the point $(3,2)$ slope $30$ degrees.

What coefficients $h$ and $\beta$ in the above equations will create a curve such that the slope at point $(3,2)$ is equal to $\frac{30}{180}\pi$?

birdman3131
  • 151
  • 1
  • 3
  • I think you may have some of your math wrong. The terminal velocity is not actually an angle, but rather the derivative $\frac{dy}{d\theta}$ and the maximum velocity occurs at $\theta = 0.5\beta$. I don't know if you can really solve this problem unless you give a desired slope (velocity) instead of a desired angle. Additionally, units would be much appreciated. – regdoug Mar 18 '15 at 23:03

1 Answers1

2

I would use a Hermite interpolation. It uses the following four functions:

$ h_1 = 2s^3 - 3s^2 + 1 $

$ h_2 = -2s^3 + 3s^2 $

$ h_3 = s^3 - 2s^2 + s $

$ h_4 = s^3 - s^2 $

And combines them like this:

$ output = (h_1 * startPoint) + (h_2 * endPoint) + (h_3 * gradientIn) + (h_4 * gradientOut) $

The value $ s $ in the four functions is your interpolating parameter, as it goes from $ 0 $ to $ 1 $ the $ output $ goes from your $ startPoint $ $ (0, 0) $ to your $ endPoint $ $(3, 2) $. Your $ gradientIn $ wasn't specified, but looks to be $ 0 $ and $gradientOut $ is as you specified: $tan(\frac{\pi}{6}) = \frac{1}{\sqrt{3}} $ so removing the terms that will multiply by zero (start point and gradient in):

$ x_s = (h_2 * x_{end}) + (h_4 * tan(\frac{\pi}{6})) = (h_2 * 3) + (h_4 * \frac{1}{\sqrt{3}}) $

$ y_s = (h_2 * y_{end}) + (h_4 * tan(\frac{\pi}{6})) = (h_2 * 2) + (h_4 * \frac{1}{\sqrt{3}}) $

If you want more information about this type of interpolation curve, here is a mathematical description and a more functional description.

jhabbott
  • 5,970
  • 7
  • 30
  • 63
  • Thanks for the work you have done. However, I do not know how to arrive at a general equation from this solution. It seems only to apply to the example. – birdman3131 Mar 17 '15 at 22:21
  • The general equation starts "output = (h1 * startPoint) + ..." - only the bit after that is specific to your example. To understand, use 0 for startPoint and 1 for endPoint and then plot 's' as 'x' and 'output' as 'y'. Try adjusting the gradient in/out to see how the curve is affected and get a feel for it. Then you will see how easy it can be to re-parameterise 's' over multiple segments if you want to build up more complex curves (correcting the gradients for any scaling applied). – jhabbott Mar 18 '15 at 02:17