|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
|
|
Thread Tools | Rate Thread | Display Modes |
|
|
|
#1
|
|||
|
|||
|
Re: Trajectory Calculator (W/ Drag)
Yes, drag is complicated, but also important. If your launcher spins the ball, then lift is important too.
If you don't want this complication, then your best approach is empirical. Get a lot of data on distance vs. your launch parameters and make a table. Then, the robot can use interpolation to work the other way: given a distance, it can get values for the launch parameters. If you are varying two things (launch angle and ball velocity), then this could get complicated. You will have several tables, and will need an algorithm to determine which one to use. Even though I wrote the trajectory calculator, our team is going to use the interpolation approach! |
|
#2
|
||||
|
||||
|
Re: Trajectory Calculator (W/ Drag)
This is pretty much our plan.
|
|
#3
|
|||
|
|||
|
Re: Trajectory Calculator (W/ Drag)
I would appreciate a video of this in action.
|
|
#4
|
|||
|
|||
|
Re: Trajectory Calculator (W/ Drag)
I see a formula for finding the angle to launch at with a constant velocity, but I can't find the opposite (Velocity to launch at with a constant angle) anywhere for the life of me. Does anyone know/have it? I've been going through my kinematic equations for the past 6 hours (I kid you not) and have nothing
|
|
#5
|
||||
|
||||
|
Re: Trajectory Calculator (W/ Drag)
Quote:
Code:
d = horizontal distance (in feet) from launch point to hoop h = vertical height (in feet) of hoop above the launch point a = angle of launch (radians) above the horizontal v = initial speed of ball (in ft/sec) as it leaves the launcher Code:
v = 4*d/(cos(a)*sqrt(d*tan(a)-h)) |
|
#6
|
|||
|
|||
|
Re: Trajectory Calculator (W/ Drag)
Quote:
The computers are definitely fast enough for this, but who knows if the ball actually acts like its supposed to. |
|
#7
|
|||
|
|||
|
Re: Trajectory Calculator (W/ Drag)
Quote:
I would recommend using the trajectory calculator "off-line" to calculate the distance for, say 100 or 200 launch velocities between your fastest and slowest launch speeds. Then store that table of distance vs launch speed in your competition code, and use interpolation to find the velocity you want in a single pass. Much, much faster. |
|
#8
|
||||
|
||||
|
Re: Trajectory Calculator (W/ Drag)
Quote:
Quote:
I'm not saying that's the best way to do it, but it could be done. * I haven't checked it. It's rather ugly. |
|
#9
|
||||
|
||||
|
Re: Trajectory Calculator (W/ Drag)
Here it is, if anyone wants to try it or check my math. I'm sure this could be simplified with a bit of work. Maybe even solved explicitly for Vo?
Code:
h=log(1-Vo^2*K/g)/(2*K)-log(sec(sqrt(-g)*sqrt(K)*((%e^(d*K)-1)/(cos(theta)*Vo*K)-atan((Vo*sqrt(K))/sqrt(-g))/(sqrt(-g)*sqrt(K)))))/K; Last edited by Ether : 23-02-2012 at 20:50. |
|
#10
|
||||
|
||||
|
Re: Trajectory Calculator (W/ Drag)
@gnunes: can you run your trajectory program with the following parameters, and post height vs distance data (say, every foot) and a PNG of a plot of height (above the launch point, in feet) vs distance (horizontal distance from the launch point) with the following parameters: Vo=23 feet/sec, theta=45 degrees, g=-32 ft/sec2, drag = -0.03*V2 ft/sec2, and no spin? Last edited by Ether : 23-02-2012 at 20:49. Reason: error in derivation |
|
#11
|
|||
|
|||
|
Re: Trajectory Calculator (W/ Drag)
I ran your numbers through my dead simple approximator(code at bottom) and got a different result(image + source code is attached)
I am fairly sure that your result cannot be correct due to running it through the standard projectile motion equations. Assuming no loss of energy, the ball will follow the equation: .5*Vy^2 = g * h. (mgh = 1/2 * m * v^2) Plugging this into wolfram alpha(http://www.wolframalpha.com/input/?i=%28%2823+feet+per+second+in+meters+*+sin%2845+d egrees%29%29+**+2++*+.5+%29%2F9.8+meters+per+secon d+squared) ( using meters because I am more used to them) gets me 4.113 ft as the max possible height. Your graph shows the ball approaching 7 m. (When I set the drag to 0 on my code the height reaches a max of about 4ft and change) Oh, and the code attachment shows what I mean by trial and error. Look at findBestCurveWithin. Code:
void calcY(double& x,double& y, double &xVel, double& yVel)
{
double oldxVel = xVel;
double oldyVel = yVel;
xVel += drag * xVel * xVel * timeIncrement;
yVel += (g + drag * yVel * yVel) * timeIncrement;
x += oldxVel * timeIncrement + .5 * timeIncrement * (xVel - oldxVel);
y += oldyVel * timeIncrement + .5 * timeIncrement * (yVel - oldyVel);
}
QVector<QPointF> findCurve(double velocity, double angle, double targetX)
{
QVector<QPointF> result;
double rads = angle * M_PI/180;
double xVel = velocity * cos(rads);
double yVel = velocity * sin(rads);
double x = 0;
double y = 0;
do
{
calcY(x,y,xVel,yVel);
result.push_back(QPointF(x,y));
}
while (fabs(x - targetX) > .01);
return result;
}
Last edited by Lalaland1125 : 23-02-2012 at 20:08. |
|
#12
|
||||
|
||||
|
Re: Trajectory Calculator (W/ Drag)
Quote:
Code:
x3: Vo =subst(0,t,rhs(x2)); <= a small typo on Page 2 x3: Vyo=subst(0,t,rhs(x2)); <= should have been |
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|