基于matlab设计固定翼太阳能无人机

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信       无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机 

⛄ 内容介绍

We present the development process behind AtlantikSolar, a small 6.9 kg hand-launchable lowaltitude solar-powered unmanned aerial vehicle (UAV) that recently completed an 81-hour continuous flight and thereby established a new flight endurance world record for all aircraft below 50 kg mass. The goal of our work is to increase the usability of such solar-powered robotic aircraft bymaximizing their perpetual flight robustness to meteorological deteriorations such as clouds or winds. We present energetic system models and a design methodology, implement them in our publicly available conceptual design framework for perpetual flight-capable solar-powered UAVs, and finally apply the framework to the AtlantikSolar UAV. We present the detailed AtlantikSolar characteristics as a practical design example. Airframe, avionics, hardware, state estimation, and control method development for autonomous flight operations are described. Flight data are used to validate the conceptual design framework. Flight results from the continuous 81-hour and 2,338 km covered ground distance flight show that AtlantikSolar achieves 39% minimum state-ofcharge, 6.8 h excess time and 6.2 h charge margin. These performance metrics are a significant improvement over previous solar-powered UAVs. A performance outlook shows that AtlantikSolar allows perpetual flight in a 6-month window around June 21 at mid-European latitudes, and that multi-day flights with small optical-or infrared-camera payloads are possible for the first time. The demonstrated performance represents the current state-of-the-art in solar-powered low-altitude perpetual flight performance. We conclude with lessons learned from the three-year AtlantikSolar UAV development process and with a sensitivity analysis that identifies the most promising technological areas for future solar-powered UAV performance improvements.

⛄ 部分代码

% *************************************************************************

%          AirplaneDesign.m: Solar-powered UAV Conceptual Design

% *************************************************************************

% Descr.: Use this file to perform the conceptual design of your solar- 

%   powered UAV, i.e. analyse its performance (in the form of excess time,

%   charge margin, endurance and minimum battery state-of-charge) as a

%   function of its design variables (wing span b, aspect ratio AR, battery

%   mass m_bat). One can also design configurations considering different

%   atmospheric clearness (e.g. clouds) and turbulence (e.g. wind) values.

% Initialize

clear variables;

close all;

clc;

addpath(genpath('matlab_functions')) 

% -------------------------------------------------------------------------

% STEP 1: DESIGN SETUP

% -------------------------------------------------------------------------

% Set the three variables to choose as design variables here. Choices are the

% labels defined in the file VAR.m (i.e. VAR.WING_SPAN, VAR.BATTERY_MASS,

% VAR.ASPECT_RATIO, VAR.CLEARNESS and VAR.TURBULENCE, VAR.DAY_OF_YEAR, VAR.LATITUDE). 

%

% There is basically two design ways:

% 1. Specify wing span, battery mass and aspect ratio ranges to design your 

%    airplane first

% 2. Then (optionally) choose the optimal wing span and aspect ratio from the 

%    first step, and set 'VAR.BATTERY_MASS','VAR.CLEARNESS' and 'VAR.TURBULENCE'

%    to optimize the partially-fixed configuration in more detail over the 

%    remaining variables.

%

% Example:

% vars(1)= VAR.WING_SPAN;

% vars(1).values = 3:1:5; %Analyse over wing spans from 3 to 5m in 1m steps

%Plot1

vars(1) = VAR.WING_SPAN;

vars(1).values = 3.5:1.0:6.5;

vars(2) = VAR.BATTERY_MASS;

vars(2).values = 2.5:1.0:6.5;

vars(3) = VAR.ASPECT_RATIO;

vars(3).values = 18.5;

% Plot3

% vars(1) = VAR.CLEARNESS; %VAR.BATTERY_MASS;

% vars(1).values = 0.4:0.2:1;

% vars(2) = VAR.TURBULENCE; %VAR.WING_SPAN;

% vars(2).values = 0.0:0.2:0.6; %5.4:0.1:5.8;

% vars(3) = VAR.DAY_OF_YEAR;

% vars(3).values = [floor(3*30.5+21), floor(5*30.5+21)];

% Plot2

% vars(1) = VAR.DAY_OF_YEAR; %VAR.BATTERY_MASS;

% vars(1).values = [5*365/12+21 5*365/12+30 6*365/12+15];%floor(0*30.5):5:floor(11*30.5+29);

% vars(2) = VAR.LATITUDE; 

% vars(2).values = 47.6;%0:2.5:70;

% vars(3) = VAR.ASPECT_RATIO;

% vars(3).values = 18.5;

% Airplane general technological parameters first

initParameters;

params.structure.corr_fact = 1.21;    % Structural mass correction factor. Set to 

                                      % * 1.0 to use the original model without correction.

                                      % * 1.21 to correspond to AtlantikSolar initial structural mass calculation by D. Siebenmann

% This is the default configuration for our design variables! 

% (which is only used if we don't design over b, m_bat or AR)

plane.struct.b = 5.6;

plane.struct.AR = 18.5;

plane.bat.m = 2.9;

%This is the other plane-specific data. 

plane.avionics.power = 6.0;

plane.avionics.mass = 1.20;

plane.payload.power = 0;

plane.payload.mass = 0.0;

plane.prop.P_prop_max = 180.0;

% Set environment

environment.dayofyear = 5*30.5+21;

environment.lat = 47.6;                     % 1: Barcelona 2:Tuggen/CH

environment.lon = 8.53;

environment.h_0 = 416+120;                  % with 120m AGL flight altitude for enough safety

environment.h_max = 700;                   % Barcelona: 4000ft

environment.T_ground = 25+273.15;

environment.turbulence = 0;

environment.turbulence_day = 0.0;           % Relative increase of power consumption during the day, e.g. due to thermals

environment.clearness = 1.0;

environment.albedo = 0.12;

environment.add_solar_timeshift = -3600;    % [s], due to Daylight Saving Time (DST), actually used for solar income calculations

environment.plot_solar_timeshift = -1.533;  % [h], just used for plotting results (to plot them in solar time), does not affect anything else

%Evaluation settings

settings.DEBUG = 0;                         % Force DEBUG mode

settings.dt = 100;                          % Discretization time interval [s]

settings.climbAllowed = 0;

settings.SimType = 0;                       % 0 = Start on t_eq, 1 = start on specified Initial Conditions

settings.SimTimeDays = 2;                   % Simulation Time in days (e.g. 1 = std. 24h simulation)

settings.InitCond.SoC = 0.46;               % State-of-charge [-]

settings.InitCond.t = 4.0*3600 + 32*60;     % [s]launch time

settings.evaluation.findalt = 0;            % if 1, it finds the maximum altitude for eternal flight

%settings.optGRcruise       =  0;           % 1 to allow cruise at optimal glide ratio & speed when max altitude reached 

settings.useAOI = 0;                        % 1 to enable the use of angle-of-incidence dependent solar module efficiency

settings.useDirDiffRad = 0;                 % 1 to enable the use of separate diffuse and direct radiation solar module efficiencies

% -------------------------------------------------------------------------

% STEP 2: Calculate performance results

% -------------------------------------------------------------------------

% Number of configurations calculated

N = numel(vars(1).values) * numel(vars(2).values) * numel(vars(3).values);

disp(['Number of configurations to be calculated: ' num2str(N)]);

h=waitbar(0,'Progress');

% Calculate performance results

str='';

ctr = 0;

for i = 1:numel(vars(3).values)

    for k = 1:numel(vars(2).values)

        for j = 1:numel(vars(1).values)

            

            ctr = ctr+1;

            varval(3)=vars(3).values(i);

            varval(2)=vars(2).values(k);

            varval(1)=vars(1).values(j);

            

            %Assign variables dynamically

            idx = find(vars == VAR.WING_SPAN,1,'first');

            if ~isempty(idx) ; plane.struct.b = varval(idx); end

            idx = find(vars == VAR.BATTERY_MASS,1,'first');

            if ~isempty(idx) ; plane.bat.m = varval(idx); end

            idx = find(vars == VAR.ASPECT_RATIO,1,'first');

            if ~isempty(idx) ; plane.struct.AR = varval(idx); end

            idx = find(vars == VAR.CLEARNESS,1,'first');

            if ~isempty(idx) ; environment.clearness = varval(idx); end

            idx = find(vars == VAR.TURBULENCE,1,'first');

            if ~isempty(idx) ; environment.turbulence = varval(idx); end

            idx = find(vars == VAR.DAY_OF_YEAR,1,'first');

            if ~isempty(idx) ; environment.dayofyear = varval(idx); end

            idx = find(vars == VAR.LATITUDE,1,'first');

            if ~isempty(idx) ; environment.lat = varval(idx); end

            

            [PerfResults(i,k,j),DesignResults(i,k,j),flightdata(i,k,j)] = ...

               evaluateSolution(plane,environment,params,settings);

           

            if(abs(environment.plot_solar_timeshift) > 0.01)

                PerfResults(i,k,j).t_eq2 = PerfResults(i,k,j).t_eq2 + environment.plot_solar_timeshift * 3600;

                PerfResults(i,k,j).t_fullcharge = PerfResults(i,k,j).t_fullcharge + environment.plot_solar_timeshift * 3600;

                PerfResults(i,k,j).t_sunrise = PerfResults(i,k,j).t_sunrise + environment.plot_solar_timeshift * 3600;

                PerfResults(i,k,j).t_max = PerfResults(i,k,j).t_max + environment.plot_solar_timeshift * 3600;

                PerfResults(i,k,j).t_sunset = PerfResults(i,k,j).t_sunset + environment.plot_solar_timeshift * 3600;

                PerfResults(i,k,j).t_eq = PerfResults(i,k,j).t_eq + environment.plot_solar_timeshift * 3600;

            end 

           

           str = [str sprintf('#%d| Set: b:%g m_bat:%g AR:%g   DoY=%g,Lat=%g,CLR=%g,Turb=%g   Res:Soc_min=%.2f%%,T_exc=%.2fh,T_cm=%.2fh,T_end=%.2fh   CharTimes:t_sr=%.2fh t_eq1=%.2fh t_fc=%.2fh t_fc90=NA t_eq2=%.2fh t_ss=%.2fh m=%.2f P=%.2f\n',ctr,...

                flightdata(i,k,j).b,flightdata(i,k,j).m_bat,flightdata(i,k,j).AR,...

                environment.dayofyear,environment.lat,environment.clearness,environment.turbulence,...

                PerfResults(i,k,j).min_SoC*100,PerfResults(i,k,j).t_excess,PerfResults(i,k,j).t_chargemargin,PerfResults(i,k,j).t_endurance,...

                PerfResults(i,k,j).t_sunrise/3600,PerfResults(i,k,j).t_eq/3600,PerfResults(i,k,j).t_fullcharge/3600, PerfResults(i,k,j).t_eq2/3600, PerfResults(i,k,j).t_sunset/3600,...

                DesignResults(i,k,j).m_no_bat+DesignResults(i,k,j).m_bat,PerfResults(i,k,j).P_elec_level_tot_nom)];

            

            completedRatio = ((i-1)*numel(vars(2).values)*numel(vars(1).values) + (k-1)*numel(vars(1).values) + j)/N;

            waitbar(completedRatio,h,[num2str(completedRatio*100.0,'Progress: %.0f\n') '%']);

        end

    end

end

close(h)

display('*** Performance solutions ***');

display(str);

% -------------------------------------------------------------------------

% STEP 3: Plotting

% -------------------------------------------------------------------------

% Note: Plotting scripts are located in the matlab_functions/PlotScripts

% folder. Please modify and call these scripts if you want to modify the 

% plots

Plot_AirplaneDesign_Standard(PerfResults, DesignResults, environment, plane, params, flightdata, vars);

%Plot_AirplaneDesign_ASFinalPaper_PlotOrderChanged(PerfResults, DesignResults, environment, plane, params, flightdata, vars);

if(numel(vars(1).values)*numel(vars(2).values)*numel(vars(3).values)==1)

    Plot_BasicSimulationTimePlot(flightdata,environment,params, plane)

end

⛄ 运行结果

⛄ 参考文献

⛳️ 代码获取关注我

❤️部分理论引用网络文献,若有侵权联系博主删除

❤️ 关注我领取海量matlab电子书和数学建模资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值