===== Effizienzberechnung ===== ==== oder "Wie weit komme ich bei welchem Wind?" ==== \\ \\ === Hintergrund === Fragt man einen Aviation-Laien wie viel länger ein Flugzeug braucht für einen Flug bei konstantem airspeed mit Hin- und Rückflug, wobei der Hinflug mit Rückenwind und der Rückflug mit Gegenwind gleicher stärke erfolgt, so ist ein Großteil der Meinung, dass sich die Winde ausgleichen. Die Flugzeit wäre so unabhängig von der Windgeschwindigkeit. Dieser Irrglaube verpufft schnell, wenn man die Frage in den Raum stellt, ob das auch gilt, wenn airspeed gleich windspeed ist. ;-) Schwieriger wird es dann noch, wenn der Wind von der Seite kommt und komplexer wird es, wenn die Strecke viele Abschnitte hat für die es eine gemeinsame Effizienz zu berechnen gilt. === Ziel === Es gilt ein Framework aufzubauen, dass es ermöglicht die Effizienz, und damit auch den Energieverbrauch, für eine gegebene Strecke zu berechnen. Die einzige Eingabe dafür soll die Windrichtung, Windstärke und das Effizienzprofil des verwendeten Flugzeugs in Watt pro km/s sein. Für eine Suchpattern gilt es vorzuschlagen in welche Himmelsrichtung die Flugbahnen ausgerichtet werden, um am effizientesten zu fliegen. === Formeln === {{ ::abkuerzungen_winddreieck.png? |}} {{ ::formeln_basic.png?400 |}} {{ ::formeln.png? |}} === Algorithmus === ==Konzept== * Relativer Windwinkel der Strecken berechnen * ===Matlab - Skript=== ==Interpolieren der Effizienzwerte== \\ Zum plotten der Kurven und zum genaueren Bestimmen der besten airspeed ist es unerlässlich die durch Messungen erhaltenen Rohdaten zu interpolieren. Zur besseren Darstellung in den plots sind auch Werte für Geschwindigkeiten runter auf 1km/h und etwas höher als die höchste gemessene Geschwindigkeit interessant. Damit diese Extrapolationen die Kurve nicht derart verändern, dass eine fehlerhafte effizienteste Geschwindigkeit ermittelt wird, muss darauf geachtet werdern, dass die extrapolierten Leistungswerte eher ansteigen, als abzufallen. Die interpolationsfunktion interp1 von matlab mit der Methode "spline" ermöglichte dies in diesem Fall. Sollte das mal nicht der Fall sein, können andere Methoden versucht werden. clear all, close all measured_airspeed=[7 8 9 10 11 12 14 16 18 20 22 24 26 28 30]*3.6; %in km/h measured_power=[36.28589708 34.42375852 35.50096102 33.3665519 36.21718883 32.94772362 47.17750566 61.33935748 81.75780878 100.4778223 122.7823714 148.3755128 189.4795868 223.162757 255.8001442]; %in Watt N_v=300; %Anzahl der untersuchten Geschwindigkeitspunkte v_a_max=150; %Maximaler airspeed in km/h v_a = linspace(1,v_a_max,N_v); interp_power = interp1(measured_airspeed, measured_power, v_a,'spline'); % %Interpolierte Effizienzkurve plotten plot(measured_airspeed, measured_power, 'linewidth', 3) hold on plot(v_a, interp_power) hold off legend('Rohdaten','Interpolierte Daten' ) xlabel('airspeed/ km/h') ylabel('Power/ Watt') ylim([0 270]) Das Ergebnis der Interpolation ist in diesem Bild zu sehen. {{ :effizienzberechnung_step1_interpolation.jpeg |}} Weitere scripts benutzen den Funktionsaufruf load_aircraft_eff() um die interpolierte Leistungskurve zu laden. function [v_a,interp_power] = load_aircraft_eff() %load_aircraft_eff Flugzeugeffizienzkurve laden measured_airspeed=[7 8 9 10 11 12 14 16 18 20 22 24 26 28 30]*3.6; %in km/h measured_power=[36.28589708 34.42375852 35.50096102 33.3665519 36.21718883 32.94772362 47.17750566 61.33935748 81.75780878 100.4778223 122.7823714 148.3755128 189.4795868 223.162757 255.8001442]; %in Watt N_v=300; %Anzahl der untersuchten Geschwindigkeitspunkte v_a_max=150; %Maximaler airspeed in km/h v_a = linspace(1,v_a_max,N_v); %Geschwindigkeitsvektor interp_power = interp1(measured_airspeed, measured_power, v_a,'spline'); end ==Berechnung der besten Effizienz== Eine weitere elementare Funktion ist eff_calc. Diese gibt die Geschwindigkeit und die Effizienz zurück, die mit der gegebenen Effizienzkurve möglich sind. Die Effizienz bezieht sich immer auf den windlosen Fall. function [v_best,res_eff_best] = eff_calc(interp_power,v_a, TC, v_w, WD ) %eff_calc calculates the best speed and best efficiency of the plane for a given %efficiency curve, track, wind speed and wind direction WA = (WD-TC)*pi/180; WA_grad = 180/pi*WA; if WA==0 WA=0.0000001; %durch Null teilen verhindern end if WA==pi || WA==-pi WA=pi*1.00001; %Singularität verhindern end v_a(v_w>v_a) = v_w; %complexe Zahlen verhindern durch |asin_argument| < 1 v_g = v_a.*(sin(WA+asin(v_w./v_a.*sin(WA)))) ./ sin(WA); eff=v_g./v_a; for idx=1:numel(v_a) if eff(idx)<0 || v_w>=v_a(idx) eff(idx) = 0; end end res_eff= v_a./interp_power.*eff.*100./max(v_a./interp_power); %Effizienz des Fliegers (Formel hat ggf. Optimierungspotenzial^^) [~,idx_best] = max(res_eff); v_best = v_a(idx_best); res_eff_best = res_eff(idx_best); %Ergebnis soll Strecke/Energie in % sein (Bezug auf Windstille) figure(1) plot(v_a, res_eff); hold on plot(v_a(idx_best), res_eff_best, 'marker','x'); xlabel('airspeed/ km/h') ylabel('efficiency / %') end Für den vereinfachten Fall "Flug gegen den Wind" kann man die beste airspeed sogar recht anschaulich ermitteln. Im folgenden Bild wird gezeigt, wie man durch Geraden, die ihre Ursprünge in der jeweiligen windspeed haben, die Geschwindigeit der besten Effizienz ermitteln kann. Dabei fällt auf, dass negative Winde gegen die Flugrichtung die Geschwindigkeit der besten Effizienz nicht beeinflussen. Erst ab einer Geschwindigkeit von ca. 35km/h wandert die Geschwindigkeit der besten Effizienz nach oben. {{ :v_best_durchzeichnen.png |}} ==Effizienz bei Variation der Windgeschwindigkeit== Mit dem script Effizienzberechnung_Windspeedvariation.m ist es möglich die efficiency für eine Schaar aus Windgeschwindigkeiten zu ermitteln. In diesem Fall wurde eine winddirection von 180° bei einem true course von 0° gewählt (also Gegenwind). Die windspeed wurde von 1 bis 100km/h in 1km/h-Schritten variiert. clear all, close all [v_a,interp_power] = load_aircraft_eff(); v_w=40; %windspeed in km/h WD=-180; %winddirection in ° TC=0; %true course in ° for v_w=1:100 [v_best,res_eff_best(v_w)] = eff_calc(interp_power,v_a, TC, v_w, WD ); end legend('v_w von 1 bis 100 km/h' ) figure(2) plot(1:100,res_eff_best, 'linewidth', 3); xlabel('windspeed/ km/h') ylabel('efficiency / %') {{ ::effizienzberechnung_windspeedvariation_kurve.jpeg |}} Schön zu sehen sind die Sprünge der besten Geschwindigkeit, die der Welligkeit der interpolierten Effizienzkurve geschuldet sind. Folgender Verlauf der Effizienz in Abhängigkeit der Windgeschwindigkeit ergeben sich dabei. Bei dem Wind handelt es sich um Gegenwind, also Wind direkt auf die Nase des Flugzeugs. {{ :effizienzberechnung_windspeedvariation.jpeg |}} Bei einem Wind von 90 von der Seite ergibt sich eine andere Kurve für die Effizienz in Abhängigkeit der Windgeschwindigkeit. Wie man im folgenden Bild sieht, dropped die Effizienz erst bei höheren Windgeschwindigkeiten steil ab und hat einen eher schwachen Einfluss bei geringen Windgeschwindigkeiten. {{ ::effizienzberechnung_windspeedvariation_tc_90.jpeg |}} ==Effizienz bei Variation der Windrichtung== Der Einfluss der wind direction bei konstantem windspeed lässt sich mit folgendem script darstellen. clear all, close all [v_a,interp_power] = load_aircraft_eff() v_w=40 ; %windspeed in km/h WD=60 ; %winddrection in ° for TC=-180:180 [v_best,res_eff_best(TC+181)] = eff_calc(interp_power,v_a, TC, v_w, WD ); end legend('TC von -180° bis 180°' ) figure(2) plot(-180:180,res_eff_best, 'linewidth', 3); xlabel('windspeed/ km/h') ylabel('efficiency / %') Die Plots ähneln dem Verlauf bei der Windgeschwindigkeitsvariation. Der windspeed ist hierfür auf 40 km/h eingestellt und die wind direction liegt bei 60°. {{ ::effizienzberechnung_drehung_kurve.jpeg |}} Beste Effizienz bei Rückenwind...keine Überraschung, aber schön zu sehen, dass das Model stimmt. {{ :effizienzberechnung_drehung.jpeg |}} clear all, close all [v_a,interp_power] = load_aircraft_eff() % % %Interpolierte Effizienzkurve plotten % plot(measured_airspeed, measured_power, 'linewidth', 3) % hold on % plot(v_a, interp_power, 'linewidth', 2) % hold off % legend('Rohdaten','Interpolierte Daten','location','southeast' ) % xlabel('airspeed/ km/h') % ylabel('power/ Watt') % ylim([0 270]) % xlim([-40 120]) v_w=40; %windspeed in km/h WD=45; %windangle in ° %Track points typischer Flug P_x = [0 30 30.5 31 30.5 32 32 33 33 34 34 35 35 36 36 39 20]; P_y = [0 40 35 35.6 43 40 35 34 42 40 35 37 45 44 34 35 5]; % %Track points im Kreis % P_x = [0 1 2 2 1 0 -1 0]; % P_y = [0 1 1 0 -1 -1 0 0]; %Track points einmal hin und her P_x = [0 1 0 ]; P_y = [0 0 0 ]; trip_length=0; for track=1:(numel(P_x)-1) %optional zum debuggen % figure(4) % h = plot([P_x(track) P_x(track+1)] , [P_y(track) P_y(track+1)], 'linewidth', 3); % hold on TC=(atan2d((P_x(track+1)-P_x(track)),(P_y(track+1)-P_y(track)))); track_length(track)= sqrt((P_y(track+1)-P_y(track))^2+(P_x(track+1)-P_x(track))^2); [v_best(track),res_eff_best(track)] = eff_calc(interp_power,v_a, TC, v_w, WD ); trip_length=trip_length+track_length(track); end figure(2) colorbar_eff=jet(200); trip_eff=0; for track=1:(numel(P_x)-1) trip_eff = trip_eff + track_length(track)/trip_length*res_eff_best(track); h = plot([P_x(track) P_x(track+1)] , [P_y(track) P_y(track+1)], 'linewidth', 3); hold on set(h, 'color', squeeze((colorbar_eff(ceil(200-res_eff_best(track)),:)))); end trip_eff legendCell = cellstr(num2str(ceil(v_best)', 'v\\_a\\_best=%-d km/h')); legend([legendCell],'location', 'northwest'); {{ ::flugplan.png |}} trip_eff = 105.8751 ....wie kann das sein? Liegt es am Pfad? Wie kann man besser sein, als ohne Wind? Neuer Flugplan: 1 nach Ost und dann wieder 1 nach West bei Westwind Ergebnis: trip_eff = 107.4352 Gleicher Flugplan bei v_w=44; Ergebnis: trip_eff = 110.0722 v_w=50; Ergebnis: trip_eff = 78.3424 Das schreit doch nach einer weiteren Variation. Also bei Seitenwind kommt das gleiche raus wie oben bei der Windvariation bei TC=90°. Aber was kommt raus, wenn der Wind bei Hin- und Rückflug mal von vorne und mal von hinten kommt, wenn man die Geschwindigkeit auf die beste Effizienz anpasst? {{ ::effizienzberechnung_windspeedvariation_hinundrueckflug.jpeg |}} Kaum zu glauben, es gibt wohl echt ein Fenster, in dem man effizienter fliegt, wenn es Wind gibt. === Implementierungsmöglichkeit für QGroundControl === * Feld ergänzen * Ausgabe erweitern * ==== Abschätzung des Effizienzvorteils durch die Implementierung ==== Am naheliegensten ist die Betrachtung eines typischen Suchflugs bei typischen Windbedingungen. Dafür wird zunächst der vereinfachte Flugplan von oben verwendet mit einem etwas über dem Durschnitt liegenden Meerwind von 6bft (also ~44km/h). Das framework gibt die Effizienz im Bezug zu Windlosigkeit an. Wir würden gerne die Effizienz im Bezug zu Effizienz ohne optimierter Fluggeschwindigkeit ermitteln. {{ ::effizienzvergleich_windspeedvariation_flugplan.jpeg? |}} Zu beachten: Durch Variation der Groundspeed, verändert sich auch das Zeitinterval für den Fotoauslöser! (alternativ kann er auch auf den maximalen Groundspeed eingestellt werden.) == Noch Fragen? == --- //[[Christian.Panhans@HS-Augsburg.DE|Christian Panhans]] 2018/11/19 21:39//