Zapuściłem symulację przy założeniach:
przy braku oporów powietrza
mając jakiś określony ciąg silnika
mając ustalony % udział masy silnika w całkowitej masie rakiety (50%, 75%, 90%)
stały czas pracy silnika
mamy do wyboru tak ksztaltować impuls aby:
narastał liniowo od zera do 100% (ImpulseShaping 0)
był stały (ImpulseShaping 1)
lub opadał liniowo ze 100% do 0% (ImpulseShaping 2)
oraz przypadki pośrednie.
Oczywiste jest że uzyskana prędkość końcowa z silnika o danym impulsie całkowitym przy każdym starcie jest taka sama,
ale uzyskana wysokość na koniec jego pracy jest inna. Wiemy że Epotencjalna=m*g*h, Ekinetyczna=m*v*v/2, zaś całkowita to E=Ep+Ek. Obiekt uzyska największą energię gdy z początku będzie przyśpieszany bardziej (co oczywiście oznacza szybszy wydatek paliwa i spadek masy samego silnika, co też wzięto pod uwagę).
Wykres finalny jak poniżej: Stosując moc spadającą liniowo od 100% do zera, w stosunku do silnika o stałym ciągu, można wygrać 45% więcej wysokości. W przypadku oporów powietrza zysk będzie nieco mniejszy, albowiem prędkość na szczycie będzie mniejsza dla rakiet które miały większą prędkość na początku lotu (albowiem opory wzrastają z kwadratem prędkości).
można zgadnąć że do wygrania jest ok 35% wysokości tą metodą.
Swoją drogą ciekawe jaki kształt krzywej ciągu (inny niż liniowy) jest optymalny.
Kształt krzywej ciągu a wysokość
Kształt krzywej ciągu a wysokość
- Załączniki
-
- RocketImpulseShaping.xls
- (26 KiB) Pobrany 587 razy
Re: Kształt krzywej ciągu a wysokość
Kierując się zdrowym rozsądkiem (z drobną domieszką matematyki ), pewnie coś w ten deseń: na począdku ciąg 100%, puźniej prez 90% czasu ciąg na poziomię 50%. Jeżeli można, prosiłbym o sprawdzenie tej teori ( niedysponuję odpowiednim programem ).
„Wszyscy wiedzą, że czegoś nie da się zrobić. I wtedy pojawia się ten jeden, który nie wie, że się nie da, i on właśnie to coś robi” A. Einstein.
Re: Kształt krzywej ciągu a wysokość
Analiza teoretyczna daje taki oto wynik:
mając silnik którego ciągiem możemy dowolnie sterować, przy braku oporów powietrza,
opłaca się z maksymalnym przyśpieszeniem osiągnąć 'prędkość przelotową' a następnie pozwolić jej maleć w wyniku działania grawitacji (lub ewentualnie zaledwie ten spadek prędkości równoważyć, muszę to rozważyć).
Chodzi o to że impuls całkowity N*s jest tak naprawdę całką po sile którą może przykładać silnik w kierunku ruchu rakiety.
Całka z tej siły daje maksymalną osiągalną prędkość. Kształtując tę siłę w ten sposób że maksymalna osiągalna prędkość jest osiągnięta w nieskończenie krótkiem czasie, maksymalizujemy całkę z prędkości po czasie, czyli przebytą drogę.
W obecności oporów powietrza osiągamy wynik taki sam, tylko że ciąg silnika po momencie przyśpieszenia musi mieć np. 1% mocy startowej aby równoważyć opór powietrza. Wychodzi na to że jeślibyśmy potrafili robić jednakowo lekie i wytrzymałe rakiety i tak samo wydajne silniki dla małych jak i dużych przyśpieszeń, należaloby użyć czegoś w stylu połączenia działa orbitalnego w styklu Projektu HARP http://en.wikipedia.org/wiki/Project_HARP z pociskiem Base Bleed http://en.wikipedia.org/wiki/Base_bleed. W praktyce ograniczeniem jest wytrzymałość obiektów transportowanych, dyszy, rakiety. Natomiast powyższe obliczenia pozostają poprawne dla typowych charakterystyk ciągu silnika jakie osiągamy w rakietach amatorskich.
Obliczenia dla zadanych parametrów za chwilę.
mając silnik którego ciągiem możemy dowolnie sterować, przy braku oporów powietrza,
opłaca się z maksymalnym przyśpieszeniem osiągnąć 'prędkość przelotową' a następnie pozwolić jej maleć w wyniku działania grawitacji (lub ewentualnie zaledwie ten spadek prędkości równoważyć, muszę to rozważyć).
Chodzi o to że impuls całkowity N*s jest tak naprawdę całką po sile którą może przykładać silnik w kierunku ruchu rakiety.
Całka z tej siły daje maksymalną osiągalną prędkość. Kształtując tę siłę w ten sposób że maksymalna osiągalna prędkość jest osiągnięta w nieskończenie krótkiem czasie, maksymalizujemy całkę z prędkości po czasie, czyli przebytą drogę.
W obecności oporów powietrza osiągamy wynik taki sam, tylko że ciąg silnika po momencie przyśpieszenia musi mieć np. 1% mocy startowej aby równoważyć opór powietrza. Wychodzi na to że jeślibyśmy potrafili robić jednakowo lekie i wytrzymałe rakiety i tak samo wydajne silniki dla małych jak i dużych przyśpieszeń, należaloby użyć czegoś w stylu połączenia działa orbitalnego w styklu Projektu HARP http://en.wikipedia.org/wiki/Project_HARP z pociskiem Base Bleed http://en.wikipedia.org/wiki/Base_bleed. W praktyce ograniczeniem jest wytrzymałość obiektów transportowanych, dyszy, rakiety. Natomiast powyższe obliczenia pozostają poprawne dla typowych charakterystyk ciągu silnika jakie osiągamy w rakietach amatorskich.
Obliczenia dla zadanych parametrów za chwilę.
Re: Kształt krzywej ciągu a wysokość
Może zamiast "armatki" HARP od razu coś takiego: http://pl.wikipedia.org/wiki/Electromagnetic_Railgun .
„Wszyscy wiedzą, że czegoś nie da się zrobić. I wtedy pojawia się ten jeden, który nie wie, że się nie da, i on właśnie to coś robi” A. Einstein.
Re: Kształt krzywej ciągu a wysokość
OK trochę realnych danych
//double (*const ThrustFunction)(double)=ThrustFunction_Constant; //2843 reference
double (*const ThrustFunction)(double)=ThrustFunction_100_50; //3095 +9%
//double (*const ThrustFunction)(double)=ThrustFunction_LinearFall;//4148 +46%
//double (*const ThrustFunction)(double)=ThrustFunction_LinearRise;//1849 -35%
//Rocket motor impulse shaping vs altitude
const double MotorMass=0.75;//kg
const double RocketMass=1;//kg
const double IgnitionTime=4;//s
const double TotalImpulse=1000;//N*s
Stosując ciąg 2x nominalny przez 10% czasu a potem normalny, zyskujemy 9% wysokości względem sytuacji ze stałym ciągiem
natomiast mając ciąg spadający liniowo, dostajemy +46% zysku.
double ThrustFunction_100_50(double x)
{
assert(x>=0);
assert(x<=1);
if(x<=0.1)
{
return 1.0;
}
return 0.5;
}
double ThrustFunction_Constant(double x)
{
assert(x>=0);
assert(x<=1);
return 1.0;
}
//double (*const ThrustFunction)(double)=ThrustFunction_Constant; //2843 reference
double (*const ThrustFunction)(double)=ThrustFunction_100_50; //3095 +9%
//double (*const ThrustFunction)(double)=ThrustFunction_LinearFall;//4148 +46%
//double (*const ThrustFunction)(double)=ThrustFunction_LinearRise;//1849 -35%
NormalizeThrustFunction(ThrustFunction);
//Rocket motor impulse shaping vs altitude
const double MotorMass=0.75;//kg
const double RocketMass=1;//kg
const double g=9.81;//m/s2
const double IgnitionTime=4;//s
const double TotalImpulse=1000;//N*s
const double ThrustFunctionScale=TotalImpulse/IgnitionTime*TrustFunctionNormalizationFactor;
const double FuselageMass=RocketMass-MotorMass;
double MotorMassPercentageUsed=0;//0...1
const int nsteps=100;
const double dt=1.0/(double)nsteps;//normalized timestep
const double dtreal=dt*IgnitionTime;//real time step
double velocity=0;//m/s
double altitude=0;//m
for(int i=1; i<=nsteps; i++)
{
const double normalized_time=(double)i/(double)nsteps;
assert(normalized_time>=0);
assert(normalized_time<=1);
const double real_time=normalized_time*IgnitionTime;
assert(real_time>=0);
assert(real_time<=IgnitionTime);
const double tf=ThrustFunction(normalized_time);
assert(tf>=0);
MotorMassPercentageUsed+=dt*TrustFunctionNormalizationFactor*tf;
assert(MotorMassPercentageUsed>=0);
assert(MotorMassPercentageUsed<=1.02);
if(MotorMassPercentageUsed>1)
{
MotorMassPercentageUsed=1;
}
const double ActualMotorMass=MotorMass*(1-MotorMassPercentageUsed);
const double ActualRocketMass=FuselageMass+ActualMotorMass;
const double ActualThrust=ThrustFunctionScale*tf;
double acceleration=-g;//m/s2
if(ActualRocketMass>1e-6)
{
acceleration+=ActualThrust/ActualRocketMass;
}
velocity+=dtreal*acceleration;
altitude+=dtreal*velocity;
printf("%lf %lf %lf %lf %lf\n", real_time, ActualThrust, ActualRocketMass, velocity, altitude);
Niespodziewanka:
o ile zgodnie z założeniami przy braku oporów powietrza, z grawitacją lub bez niej, opłaca się skupić ciąg w dowolnie krótkim czasie, sytuacja jest zupełnie inna w obecności oporów powietrza. Dla ilustracji użyłem trochę zawyżonych oporów powietrza, symulacja zawsze zbiega się do czegoś takiego:
https://imagizer.imageshack.us/v2/685x3 ... HoPBNZ.png
Oznacza to, że w obecności grawitacji i powietrza, dla uzyskania maksymalnego pułapu, należy skupić większość ciągu na początku, potem jest ten moment gdy nie warto silnikiem walczyć z oporami zależnymi of v^2, ale gdy prędkość nieco spadnie należy silnika używać i to tylko na tyle aby zrównoważyć do pewnego stopnia opór powietrza. Wykres optymalnej krzywej ciągu... przypomina wykres ciągu kilku znanych silników rakietowych, przez przypadek zapewne.
//double (*const ThrustFunction)(double)=ThrustFunction_Constant; //2843 reference
double (*const ThrustFunction)(double)=ThrustFunction_100_50; //3095 +9%
//double (*const ThrustFunction)(double)=ThrustFunction_LinearFall;//4148 +46%
//double (*const ThrustFunction)(double)=ThrustFunction_LinearRise;//1849 -35%
//Rocket motor impulse shaping vs altitude
const double MotorMass=0.75;//kg
const double RocketMass=1;//kg
const double IgnitionTime=4;//s
const double TotalImpulse=1000;//N*s
Stosując ciąg 2x nominalny przez 10% czasu a potem normalny, zyskujemy 9% wysokości względem sytuacji ze stałym ciągiem
natomiast mając ciąg spadający liniowo, dostajemy +46% zysku.
double ThrustFunction_100_50(double x)
{
assert(x>=0);
assert(x<=1);
if(x<=0.1)
{
return 1.0;
}
return 0.5;
}
double ThrustFunction_Constant(double x)
{
assert(x>=0);
assert(x<=1);
return 1.0;
}
//double (*const ThrustFunction)(double)=ThrustFunction_Constant; //2843 reference
double (*const ThrustFunction)(double)=ThrustFunction_100_50; //3095 +9%
//double (*const ThrustFunction)(double)=ThrustFunction_LinearFall;//4148 +46%
//double (*const ThrustFunction)(double)=ThrustFunction_LinearRise;//1849 -35%
NormalizeThrustFunction(ThrustFunction);
//Rocket motor impulse shaping vs altitude
const double MotorMass=0.75;//kg
const double RocketMass=1;//kg
const double g=9.81;//m/s2
const double IgnitionTime=4;//s
const double TotalImpulse=1000;//N*s
const double ThrustFunctionScale=TotalImpulse/IgnitionTime*TrustFunctionNormalizationFactor;
const double FuselageMass=RocketMass-MotorMass;
double MotorMassPercentageUsed=0;//0...1
const int nsteps=100;
const double dt=1.0/(double)nsteps;//normalized timestep
const double dtreal=dt*IgnitionTime;//real time step
double velocity=0;//m/s
double altitude=0;//m
for(int i=1; i<=nsteps; i++)
{
const double normalized_time=(double)i/(double)nsteps;
assert(normalized_time>=0);
assert(normalized_time<=1);
const double real_time=normalized_time*IgnitionTime;
assert(real_time>=0);
assert(real_time<=IgnitionTime);
const double tf=ThrustFunction(normalized_time);
assert(tf>=0);
MotorMassPercentageUsed+=dt*TrustFunctionNormalizationFactor*tf;
assert(MotorMassPercentageUsed>=0);
assert(MotorMassPercentageUsed<=1.02);
if(MotorMassPercentageUsed>1)
{
MotorMassPercentageUsed=1;
}
const double ActualMotorMass=MotorMass*(1-MotorMassPercentageUsed);
const double ActualRocketMass=FuselageMass+ActualMotorMass;
const double ActualThrust=ThrustFunctionScale*tf;
double acceleration=-g;//m/s2
if(ActualRocketMass>1e-6)
{
acceleration+=ActualThrust/ActualRocketMass;
}
velocity+=dtreal*acceleration;
altitude+=dtreal*velocity;
printf("%lf %lf %lf %lf %lf\n", real_time, ActualThrust, ActualRocketMass, velocity, altitude);
Niespodziewanka:
o ile zgodnie z założeniami przy braku oporów powietrza, z grawitacją lub bez niej, opłaca się skupić ciąg w dowolnie krótkim czasie, sytuacja jest zupełnie inna w obecności oporów powietrza. Dla ilustracji użyłem trochę zawyżonych oporów powietrza, symulacja zawsze zbiega się do czegoś takiego:
https://imagizer.imageshack.us/v2/685x3 ... HoPBNZ.png
Oznacza to, że w obecności grawitacji i powietrza, dla uzyskania maksymalnego pułapu, należy skupić większość ciągu na początku, potem jest ten moment gdy nie warto silnikiem walczyć z oporami zależnymi of v^2, ale gdy prędkość nieco spadnie należy silnika używać i to tylko na tyle aby zrównoważyć do pewnego stopnia opór powietrza. Wykres optymalnej krzywej ciągu... przypomina wykres ciągu kilku znanych silników rakietowych, przez przypadek zapewne.
Ostatnio zmieniony niedziela, 17 sie 2014, 14:47 przez kbosak, łącznie zmieniany 3 razy.
- filipberet
- ***
- Posty: 97
- Rejestracja: środa, 5 lut 2014, 07:36
- Lokalizacja: Białystok, Choroszcz
Re: Kształt krzywej ciągu a wysokość
Witam
Od dawna szukam najbardziej optymalnego i ekonomicznego sposobu wynoszenia rakiet na orbitę. Najrozsądniejszy na jaki do tej pory wpadłem wydaje się być ten:
1. Pneumatyczna wyrzutnia startowa 2. pocisk startowy z napędem strumieniowym wynoszący rakietę 3. start rakiety "z pokładu" pocisku startowego 4. rakieta z silnikiem marszowym
Pozdrawiam
Działo orbitalne + pocisk = mega przeciążenie na starcie liczone w setkach (może nawet tysiącach) G - elektronika tego nie przetrwa.kbosak pisze:Analiza teoretyczna daje taki oto wynik:
mając silnik którego ciągiem możemy dowolnie sterować, przy braku oporów powietrza,
opłaca się z maksymalnym przyśpieszeniem osiągnąć 'prędkość przelotową' a następnie pozwolić jej maleć w wyniku działania grawitacji (lub ewentualnie zaledwie ten spadek prędkości równoważyć, muszę to rozważyć).
Chodzi o to że impuls całkowity N*s jest tak naprawdę całką po sile którą może przykładać silnik w kierunku ruchu rakiety.
Całka z tej siły daje maksymalną osiągalną prędkość. Kształtując tę siłę w ten sposób że maksymalna osiągalna prędkość jest osiągnięta w nieskończenie krótkiem czasie, maksymalizujemy całkę z prędkości po czasie, czyli przebytą drogę.
W obecności oporów powietrza osiągamy wynik taki sam, tylko że ciąg silnika po momencie przyśpieszenia musi mieć np. 1% mocy startowej aby równoważyć opór powietrza. Wychodzi na to że jeślibyśmy potrafili robić jednakowo lekie i wytrzymałe rakiety i tak samo wydajne silniki dla małych jak i dużych przyśpieszeń, należaloby użyć czegoś w stylu połączenia działa orbitalnego w styklu Projektu HARP http://en.wikipedia.org/wiki/Project_HARP z pociskiem Base Bleed http://en.wikipedia.org/wiki/Base_bleed. W praktyce ograniczeniem jest wytrzymałość obiektów transportowanych, dyszy, rakiety. Natomiast powyższe obliczenia pozostają poprawne dla typowych charakterystyk ciągu silnika jakie osiągamy w rakietach amatorskich.
Obliczenia dla zadanych parametrów za chwilę.
Od dawna szukam najbardziej optymalnego i ekonomicznego sposobu wynoszenia rakiet na orbitę. Najrozsądniejszy na jaki do tej pory wpadłem wydaje się być ten:
1. Pneumatyczna wyrzutnia startowa 2. pocisk startowy z napędem strumieniowym wynoszący rakietę 3. start rakiety "z pokładu" pocisku startowego 4. rakieta z silnikiem marszowym
Pozdrawiam
Up Up and Away
Re: Kształt krzywej ciągu a wysokość
Czy to nie byłby wykres idealnego ciągu:wrx pisze:pewnie coś w ten deseń: na począdku ciąg 100%, puźniej prez 90% czasu ciąg na poziomię 50%.
http://pl.wikipedia.org/wiki/Brachistochrona
Pozdrawiam!
Re: Kształt krzywej ciągu a wysokość
Brachistochrona? Przecież to by wymagało ujemnego ciągu... Jak na razie teoria pokazuje że najbardziej opłaca się maksymalnie krótki pik ciągu i lekkie dymienie po to tylko by zaliczyć czas lotu silnikowego przy braku oporu i maksymalnie krótki pik z następującym 'małym garbem' w przypadku obecności oporów. Wyliczę to wkrótce dla prawdziwych danych rakiety i zobaczymy ponownie jak wielki jets optymalny 'garbik ciągu'.