THE UNIVERSITY OF QUEENSLAND

Development of a UAV Design Software Framework Using an Aeromechanics Design Analysis

Student Name: Rowan CONAGHAN

Course Code: MECH4500

Supervisor: Dr Ingo Jahn, Senior Lecturer in Mechanical Engineering

Submission date: 25 October 2018

Faculty of Engineering, Architecture and Information Technology

P a g e | iv

This page is intentionally left blank

P a g e | v DECLARATION

All work contained here within is my own work unless explicitly stated. P a g e | vi

This page is intentionally left blank P a g e | vii DEDICATION

“Once you have tasted flight, you will forever walk the earth with your eyes turned skyward, for there you have been, and there you will always long to return.”

– Leonardo Da Vinci [1] .

Ever since my first flight in a Boeing-737 when I was a child, I have dreamt about reaching for the skies, flapping my arms and soaring high above the earth. Flight had dawned mankind for many millennia, and has been at the forefront of my mind ever since my youth; and my first taste of it. In the words of Leonardo Da Vinci, I yearn to return. As such I have taken every step since my later school years developing the knowledge and expanding upon it.

This thesis is dedicated to my family who have supported me so extensively throughout my early development and my schooling career. To my parents, Anthony and Karen Conaghan; without your constant love, support and guidance, I wouldn’t be the person I am today. I dedicate this work to you.

To my supervisor, Dr Ingo Jahn. For believing in me and assisting me in achieving my best. For the constant meetings sharing your expertise and guidance. For wanting to offer all your knowledge in one go, however refraining and allowing me to develop and learn at my own pace. I hope I was able to take your guidance and wisdom, and make you proud. Thank you for believing in me and showing me the way. P a g e | viii

This page is intentionally left blank P a g e | ix ACKNOWLEDGEMENTS

This project and thesis could never have come to fruition if it weren’t for a number of people who have helped and lend a hand across the entirety of my engineering career.

At the forefront, is my supervisor Dr Ingo Jahn. Without whom, this thesis would not have at all been possible.

To my mentor, Andrew Stephens. For guiding my way, giving me a go, and having faith in my abilities. Without having you offer your mentorship to me, and offering me the chance to prove myself, I am not sure I’d be on the path that I am on today. I want to thank you for your encouragement, suggestions of improvement, and your constant upbeat ‘don’t let things get you down attitude’. Days at the Innovative Cardiovascular Engineering and Technology Laboratory (ICE-T Labs) would not have been so enjoyable if it weren’t for the knowledge that you were looking out for me and pointing me in the right directions.

To all lecturers and academic staff at the University of Queensland who have assisted in the operation and running of the undergraduate Bachelors of Mechanical and Aerospace Engineering.

To my peers. The undergraduate students who I’ve had the pleasure of spending countless hours in the library with working away on assessments. To all those who I’ve worked with in group assignments and projects. We’ve all shared an experience here at UQ that will last a lifetime, and that we’ll carry long into our professional careers.

Lastly, to all those who I’ve crossed paths with on my engineering journey, I want to extend my sincerest thankyou to you all. I truly appreciate the love and support, and hope I can deliver. P a g e | x

This page is intentionally left blank P a g e | xi ABSTRACT

Uninhabited Aerial Vehicles (UAVs) are powered flying robotic aircraft which can operate in adverse weather conditions, military zones and for operations. The use cases for UAVs are infinite, however traditional design practices are still predominately being implemented with limited historical data available for UAV design [2]. Current designs are based off empirical designs, modifying existing data to meet specific mission requirements; opposed to the costly process of generating new designs. Furthermore, new ground-up designs are costly, time intensive and usually only pertain to a certain mission scenario.

Although there are many existing preliminary rotorcraft design tools on the market, most require expensive license fees or have been designed to be deliberately incomplete or incorrect. This shows a direct need for an accessible open-source rapid multi-design tool that can reduce costs for design teams, and reduce the conceptual and preliminary design stages of development.

This project uses MathWorks Matlab software, utilising an object oriented framework approach. Rankine-Froude Momentum theory and Blade Element Theory have been jointly used to evaluate the power requirements of a simple rotorcraft. Initial steps involved coding an environmental model, a set of mission profiles for testing and geometric models to test and validate designs. The environmental model allows all atmospheric data to be sourced specific to the mission profile tested. Geometric models contain geometric properties as well as weights and specified constraints. Six mission profiles have been scripted ranging from simple trajectories to comprehensive mission scenarios. An energy analysis has been executed with range, endurance and fuel cost results acquired for the six missions. Ideal and profile power requirements for hovering, as well as climbing power have been added into the computer model to provide accurate fuel usage results.

Initial stages in developing an optimization module have been made, with further refinements required to complete. The optimization module includes a cost function based on performance requirements, and geometric/weight parameters. This computer framework provides a foundation for a UAV rotorcraft design software. When completed, this tool will allow the rapid prototyping of rotorcraft for any mission scenario, constrained to user specified constraints. Returned data from the software can then be used as the basis for detailed designs, for further investigation and refinement. Primary code validation has taken place using a simplified mission scenario to meet the UAV biennial challenge requirements. The UAV design model tested, is designed to fly at 200 ft. AGL, carry a 0.25kg payload and fly a range of 60 Km. P a g e | xii

This page is intentionally left blank P a g e | xiii

CONTENTS

Declaration...... v

Dedication ...... vii

Acknowledgements ...... ix

Abstract ...... xi

Contents ...... xiii

List of Figures ...... xvii

List of Tables ...... xix

Abbreviations and Nomenclature ...... xx

1 Introduction ...... 1

1.1 Project Motivation and Inspiration ...... 2

1.2 Project Aim ...... 2

1.3 Project Objectives ...... 2

1.4 Project Goals ...... 3

1.5 Project Scope ...... 3

1.6 Project Chapter Outlines ...... 4

2 Project Outline - Aircraft Design...... 5

2.1 Significance of Project ...... 5

2.2 UAV Design Challenge ...... 6

2.3 Significance of EMS Rotorcraft...... 6

3 Existing Preliminary Rotorcraft Sizing Tools ...... 7

3.1 Current Sizing Programs ...... 7

3.2 Current Limitations on Existing Programs ...... 10

4 Literature Review ...... 11

4.1 Main Components of ...... 12 P a g e | xiv

4.1.1 Swash Plate ...... 13

4.2 Existing Rotorcraft ...... 15

4.3 Existing UAV Rotorcopters ...... 17

4.4 Pros and Cons of Various Airborne Crafts ...... 20

4.4.1 Effects of Rotorcraft Components on Flight Properties ...... 21

4.5 How Rotorcraft Achieve Flight ...... 22

4.6 Two Main Theories of Aerodynamic Analysis ...... 22

4.6.1 Rankine-Froude Momentum Theory ...... 22

4.6.2 Blade Element Theory ...... 25

4.7 Momentum or Blade Element Theory ...... 26

5 Flight Performance ...... 27

5.1 Hovering Flight ...... 27

5.2 Straight and Level, Forward Flight ...... 29

5.2.1 Straight and Level, Forward Flight – Power ...... 31

5.3 Climbing Forward Flight ...... 34

6 Coding Methodology ...... 41

6.1 Why MathWorks Matlab ...... 41

6.2 Coding and Software Methodology ...... 42

6.3 Optimizer and Cost Function ...... 43

7 Model Methodology ...... 45

7.1 Environmental Model ...... 45

7.2 Geometric Modelling ...... 46

7.2.1 Geometric Model One – Point-Mass ...... 46

7.2.2 Geometric Model Two – Rectangular Prism ...... 47

7.2.3 Geometric Model Three – Single Main Rotor ...... 47

7.2.4 Geometric Modelling Coding ...... 49

7.3 Mission Profiles ...... 50

8 Simulation Methodology ...... 55 P a g e | xv

8.1 Model One – Simplified Energy Analysis ...... 56

8.1.1 Model One Trajectory ...... 56

8.1.2 Model One Equations ...... 57

8.1.3 Model One Initial Conditions ...... 58

8.1.4 Model One Computer Analysis Program Coding Structure ...... 59

8.1.5 Model One Results ...... 61

8.1.6 Model One Discussion ...... 63

8.2 Model Two – Hovering Power ...... 64

8.2.1 Model Two Assumptions ...... 64

8.2.2 Model Two Equations ...... 65

8.2.3 Model Two Initial Conditions ...... 66

8.2.4 Model Two Computer Analysis Program Coding Structure ...... 67

8.2.5 Model Two Results ...... 72

8.2.6 Model Two Discussion ...... 74

8.2.7 Model Two Assumptions Discussion ...... 76

8.3 Model Three – Power Required to Climb ...... 77

8.3.1 Model Three Equations ...... 77

8.3.2 Model Three Assumptions ...... 79

8.3.3 Model Three Initial Conditions ...... 80

8.3.4 Model Three Computer Analysis Program Coding Structure ...... 80

8.3.5 Model Three Results ...... 82

8.3.6 Model Three Discussion ...... 83

9 Multi-Dimensional Model-Fitting Simulation ...... 85

9.1 Multi-Dimensional Model Discussion ...... 89

10 Conclusion ...... 91

11 Recommendations ...... 93

11.1 Future Work ...... 94

12 References ...... 95 P a g e | xvi

Appendix A Comparison of Coaxial, Tandem and Single Rotor Helicopter Types ...... 105

Appendix B 3-Dimensional Drag Coefficients ...... 106

Appendix C Velocity Induced Calculations ...... 107

Appendix D Climbing Forward Flight Thrust Derivation ...... 110

Appendix E UAV Outback Challenge Payload / Blood Samples ...... 112

Appendix F Rotorcraft Design using An Aeromechanics Analysis – RAW Code ...... 113

Appendix G Classes – Geometries and Environmental model...... 183

Appendix H Multi-Dimensional Model Generation Code ...... 201

Appendix I Multi-Dimensional Model – Parallel Axis Plot Sourcing ...... 203

Appendix J Multi-Dimensional Model – Parallel Axis Plot Graph ...... 205

Appendix K Multi-Dimensional Model – Parallel Axis Plot Graph Isolating for the Top 200 Results 206 P a g e | xvii LIST OF FIGURES

Figure 4.1: Helicopter Assembly and Identification of Key Components ...... 12 Figure 4.2: Messerschmitt-Bölkow-Blohm Bo 105 Rotor Head and Swash Plate ...... 13 Figure 4.3: Various Existing Types of Rotorcraft Configurations...... 15 Figure 4.4: Various Existing Types of UAV Rotorcraft Configurations ...... 18 Figure 4.5: Rankine-Froude Momentum Theory for Hovering Craft ...... 23 Figure 5.1: Forces and Moments of Rotorcraft in Hovering Flight ...... 27 Figure 5.2: Hovering Rotorcraft: Rotor Blade Angle of Attack and Blade Tip Velocities ...... 28 Figure 5.3: Forces and Moments of Rotorcraft in Forward Level Flight ...... 29 Figure 5.4: Straight and Level, Forward Flight: Angle of Attack of Rotor Blades and Differences in Rotor Blade Tip Flight Velocities ...... 30 Figure 5.5: High Forward Flight Velocity Effect on Induced Velocity ...... 33 Figure 5.6: Forces and Moments of Rotorcraft in Forward Climbing Flight ...... 34 Figure 5.7: Drag Coefficients for Vertical Drag Calculations in Climbing Forward Flight .... 36 Figure 5.8: Areas of Rotorcraft In and Out of Rotor Wake Whilst Forward Climbing Flight . 37 Figure 5.9: Fluid Flow through Main Rotors Whilst under Various Flight Conditions ...... 38 Figure 6.1: Coding Methodology for Preliminary Rotorcraft Design ...... 42 Figure 6.2: Detailed Coding Methodology for Preliminary Rotorcraft Design ...... 43 Figure 6.3: Detailed Coding Methodology Optimizer/Cost Function for Preliminary Rotorcraft Design ...... 44 Figure 7.1: Point-Mass Equilibrium of Forces in Flight ...... 46 Figure 7.2: Flying Point-Mass with Aerodynamic Drag of a Rectangular Prism ...... 47 Figure 7.3: Flying Single Main Rotorcraft Helicopter ...... 47 Figure 7.4: Flying Single Main Rotorcraft Helicopter Equilibrium of Forces in Flight ...... 48 Figure 7.5: Mission Profiles: Class Properties ...... 50 Figure 7.6: Mission Profiles: Mission Number 1 ...... 50 Figure 7.7: Mission Profiles: Mission Number 2 ...... 51 Figure 7.8: Mission Profiles: Mission Number 3 ...... 51 Figure 7.9: Mission Profiles: Mission Number 4 ...... 52 Figure 7.10: Mission Profiles: Mission Number 5 ...... 52 Figure 7.11: Mission Profiles: Mission Number 6: Full Flight Simulation UAV Challenge ... 53 Figure 8.1: Model One Flight Profile Based off First Leg of Mission Number 4 ...... 56 Figure 8.2: Model One Energy and Fuel Analysis Block Diagram ...... 59 P a g e | xviii

Figure 8.3: Model Two Rotor Rotational Speed and Maximum Blade Radius Block Evaluation Diagram ...... 68 Figure 8.4: Model Two Hovering Ideal Induced Power (Momentum Theory) Diagram ...... 69 Figure 8.5: Model Two Hovering Profile Power (Blade Element Method) Diagram ...... 70 Figure 8.6: Model Two Energy and Fuel Analysis Block Diagram ...... 71 Figure 8.7: Potential Flow Field around Flying Single-Rotor in Climbing Forward Flight .... 78 Figure 8.8: Model Three Vertical Climbing Drag Force Program Diagram ...... 80 Figure 8.9: Model Three Energy and Fuel Analysis Block Diagram ...... 81 Figure 9.1: Normalized Parallel Coordinate Axis Plot for Multi-Dimensional Model Fitting Simulation ...... 86 Figure 9.2: Normalized Parallel Coordinate Axis Plot for Multi-Dimensional Model Fitting Simulation Isolating Top 200 Results ...... 87 Figure 9.3: Normalized Parallel Coordinate Axis Plot for Multi-Dimensional Model Fitting Simulation Isolating Top 2000 Results ...... 88 Figure 12.1: Comparison of Coaxial, Tandem and Single Rotor Helicopters ...... 105 Figure 12.2: 3D Drag Coefficients for Various Bodies ...... 106 Figure 12.3: Power Loading (N/kW) vs Effective (N/m^2) ...... 107 Figure 12.4: Rankine-Froude Momentum Theory Flow Analysis for Hovering Craft ...... 108 Figure 12.5: Resolving Thrust Force Acting on Rotorcraft in Forward Climbing Flight ...... 110 Figure 12.6: UAV Outback Challenge Payload/Blood Vials ...... 112 P a g e | xix LIST OF TABLES

Table 1.1: Project Objectives...... 2 Table 1.2: Project Goals ...... 3 Table 1.3: Scope of Project Rotorcraft Design ...... 3 Table 3.1: Current Existing Helicopter Programs ...... 8 Table 4.1: Advantages and Disadvantages of Various Aircraft Types...... 20 Table 8.1: Model One Initial Atmospheric Conditions and Environmental Parameters ...... 58 Table 8.2: Model One Model Specific Initial Conditions ...... 58 Table 8.3: Model One Point Mass - Mass Fuel Rate Results ...... 61 Table 8.4: Model One Point Mass - Mass Fuel Results ...... 61 Table 8.5: Model One Flying Point-Mass-RP - Mass Fuel Rate Results ...... 62 Table 8.6: Model One Flying Point-Mass-RP - Mass Fuel Results ...... 62 Table 8.7: Model Two Initial Geometric Conditions, Test Conditions and Propulsion Parameters ...... 66 Table 8.8: Model Two Point Mass - Mass Fuel Rate Results ...... 72 Table 8.9: Model Two Point Mass - Mass Fuel Results ...... 72 Table 8.10: Model Two Flying Point-Mass-RP - Mass Fuel Rate Results ...... 73 Table 8.11: Model Two Flying Point-Mass-RP - Mass Fuel Results ...... 73 Table 8.12: Model Two Single Rotor - Mass Fuel Rate Results ...... 74 Table 8.13: Model Two Single Rotor - Mass Fuel Results ...... 74 Table 8.14: Model Three Initial Test Conditions ...... 80 Table 8.15: Model Three Single Rotor - Mass Fuel Rate Results ...... 82 Table 8.16: Model Three Single Rotor - Mass Fuel Results ...... 82 Table 8.17: Model Two vs Three Single Rotor - Mass Fuel Results ...... 83 P a g e | xx ABBREVIATIONS AND NOMENCLATURE

ABBREVIATIONS

AGL Above ground level APAv2 Amazon prime air version 2 BEMT Blade element momentum theory BET Blade element theory CFD Computational fluid dynamics CIRADS Concept Independent Rotorcraft Analysis and Design Software CPACS Common Parametric Aircraft Configuration Scheme DLR German Aerospace Center DOF Degrees of freedom DUODECUPLE Consisting of twelve EDEN Evaluation and Design of Novel Rotorcraft Configurations EMS Emergency medical services GARTEUR AG06 Group for Aeronautical Research and Technology in Europe - Action Group 06 GPS Global navigation system GRCAS Graphical Rotorcraft Comprehensive Analysis System GUI Graphical user interface HOST Helicopter Overall Simulation Tool JPL Jet Propulsion Laboratory JSK LAB Jouhou System Kougaku Laboratory NASA National Aeronautics and Space Administration NOTAR No tail rotor (reference to no tail rotor helicopter designs) OCTUPLE Consisting of eight ONERA French Aerospace Lab PMSM Permanent magnet synchronous motors POINT-MASS-RP Point-mass with aerodynamic drag of a rectangular prism RAPID/RaTE Rotorcraft Analysis for Preliminary Design / Rand Technologies & Engineering RFMT Rankine-Froude momentum theory P a g e | xxi

RIDE Rotorcraft Integrated Design and Evaluation R-TPP Rotor-tip path plane SCDR Sextuple clover design rotor UAV Uninhabited aerial vehicles UQ University of Queensland VTOL Vertical take-off and landing

ROMAN SYMBOLS

퐴푀 Portion of in the wake of the main rotors (projected area)

Δ퐴푧 Portion of airframe not in the wake of the main rotors (projected area)

퐴푓푟표푛푡푎푙 Frontal area of rotorcraft

퐴퐷 Main rotor disk area 푏 Main rotor blade span 푐 Main rotor blade chord

퐶푑0 Section profile drag coefficient (assumed constant)

퐶퐷 Drag coefficient

퐶퐷,푓푝푒 Equivalent flat plate drag coefficient

퐶푙 Lift coefficient

퐶푙훼 Lift curve slope in 2D of the aerofoil

퐶푃 Main rotor power coefficient

퐶푇 Rotor thrust coefficient

퐷퐹푃 Parasitic drag in forward propulsion flight

퐷퐹퐶푃 Parasitic drag in forward climbing propulsion flight 퐷퐿 Disk loading

퐷푣 Vertical drag force

퐷푣,ℎ표푣푒푟 Vertical drag force in hover

퐷푣,푐푙𝑖푚푏 Vertical drag force in climb 푒 Oswald efficiency factor 퐹표푀 Figure of merit

퐺푤 Gross weight

퐾푣 Kilovolt rating of engine/propulsion system 퐿 Main rotor lift P a g e | xxii

푚̇ Mass flow rate of air through main rotors 푀 Mach number

푀푓 Fuel mass

푀𝑖 Initial vehicle mass with no fuel

푀0 Mass of vehicle with full fuel and payload 푀1, 푀2, 푀3 Model One, Model Two, Model Three, etc.

푁푏 Number of rotor blades 푃 Power

푃푐푙𝑖푚푏 Climbing power of rotorcraft

푃𝑖 Ideal induced power

푃𝑖,ℎ표푣푒푟 Ideal induced power in hovering flight

푃𝑖,퐹푃 Ideal induced power in forward propulsion flight 푃퐿 Power loading

푃0 Profile power of main rotor blade system 푞 Free stream dynamic pressure

푞푙 Local dynamic pressure at main rotors 푆 Rotorcraft surface area 푇 Main rotor thrust

푉푏푎푡푡 Size of battery

푉푐 Absolute climbing velocity of rotorcraft (푉푐 = 푉퐹푃 cos(훼퐹푃 − 휃퐹푃))

푉퐹푃 Absolute flight path velocity of rotorcraft

푉∞ Far field velocity

푣퐹푃 Flight velocity in forward propulsion flight

푣𝑖 Induced velocity through main rotors

푣𝑖,푐 Induced climb velocity through main rotors

푣𝑖,푣 Vertical induced velocity through main rotors

푣푟 Resultant induced velocity through the rotor disk

푊푘 Work on fluid by main rotors P a g e | xxiii

GREEK SYMBOLS

Aspect ratio

훼0 Zero lift angle 훼 Main rotor blade angle of attack

훼퐹푃 Main rotor blade angle of attack in forward propulsion flight

훼퐹퐶푃 Main rotor blade angle of attack in forward climbing propulsion flight 휙 Spanwise variation in inflow/radius 휃 Blade pitch angle

휃퐹푃 Flight path angle 휌 Density Ω Rotational speed of the rotor blades 휆 Inflow fluid flow 휎 Solidity ratio, (main rotor blade disk area / main rotor area) 휂 Engine efficiency P a g e | xxiv

This page is intentionally left blank P a g e | 1

1 INTRODUCTION

Uninhabited Aerial Vehicles (UAVs) are powered flying robotic aircraft which are controlled remotely by a pilot, or autonomously by on board flight systems and embedded controllers. These aircraft can operate independently, flying a designated flight plan via global navigation system (GPS) or they can be piloted remotely via cellular networks [3] and operate on a series of waypoints. Drones can be used in numerous applications and fields, with such industries and sectors of humanitarian aid, emergency medical services, search and rescue, agriculture, mineral exploration, military use and conservation [4], [5], [6], [7]. The advantages of UAVs over conventional flight systems is that due to the increased safety offered by the craft having no on-board personnel, these crafts can be deployed into areas where other systems are not allowed to operate. This can include operations in adverse weather conditions such as hurricanes [8], [9], for military use in war zones [10], [11], [12], or for dangerous rescue operations in mountainous areas and inaccessible terrains [3], [4], [5], [13].

The use cases for UAVs are infinite, however traditional design practices are still predominately being implemented with limited historical data available for UAV design [2]. The last century of flight has seen distinguished aircraft designs requiring on-board personnel. Current designs are based off these empirical designs, and as such, correctional factors are being used to convert existing manned aircraft data, to UAVs [14] & [15]. Furthermore, new ground-up designs are costly, time intensive and usually only pertain to a certain mission scenario. These designs are then reused for further craft designs, with factors being changed to meet current requirements. The changing of certain factors, can in some aspects, require the need for a complete redesign/rebuild; or a flying craft that meets its requirements however isn’t an optimized design. A program that can take multiple mission scenarios, geometric/weight requirements, and power targets would be a vital asset in the rapid prototyping of designs. This would allow rapid development of initial designs in the conceptual and design stages, reducing overall costs and development time, and provide an optimized solution.

Rapid technological advancements have helped foster the growth of UAV firms in the public sector. A growing need has been shown in both developing countries with low infrastructure and countries were citizens live in remote locations and inaccessible environments for a rapid and reliable delivery vehicle. UAVs, fit this description and can be an inexpensive yet truly innovative means to service millions of disadvantaged persons across the globe [16]. P a g e | 2

1.1 PROJECT MOTIVATION AND INSPIRATION

The biennial UAV Medical Express Outback Challenge is a challenge set to drive progress in UAV design, whilst providing a way multiple persons/organisations can come together and collectively engage in research and development in an area that needs it most. The purpose of this study is propose and design an initial computer software framework for use in the biennial Medical Express Outback Challenge. With primary motivation focused on designing a software framework which designs a UAV model that can assist in deploying and retrieving medical samples to those who live in areas that are bounded by difficult terrains, or large land masses. Further details of this challenge are outlined in Section 2.2 UAV Design Challenge.

1.2 PROJECT AIM

The execution of this project will develop an open source rapid multi evaluation design tool, which will be able to provide rapid prototype designs. This will allow design teams to swiftly develop an initial preliminary design to refine and optimize for any mission scenario. Overall, reducing costs, and reducing development time. This UAV rotorcraft design software will allow for the rapid prototyping of rotorcraft for any mission scenario, constrained to user specified constraints. Returned data from the software can then be used as the basis for detailed designs, for further investigation and refinement.

1.3 PROJECT OBJECTIVES The objective of this study is to culminate current literature and design practices, and design a working computer program that will process a large number of rotor craft geometric designs and rank potential designs against an included scripted mission profile; generated off the UAV Medical Express Challenge competition rules (Section 2.2). These returned designs can then be analysed further, giving design teams initial preliminary designs to further explore. The two key objectives of this project are outlined in Table 1.1: Project Objectives.

Table 1.1: Project Objectives

Project Objective Description Produce an open source rapid multi design tool, which allows preliminary designs to be achieved given a mission profile/scenario. Provide an optimal preliminary rotorcraft design to be investigated P a g e | 3

Table 1.1 provides details of the project objectives, with key focus being on producing and creating an open source rapid multi evaluation design tool to be used in the student chapter of UQ’s UAV society in participation in the UAV biennial Outback Medical Challenge. The short term goals to achieve the overarching project objectives is outlined in Section 1.4 Project Goals.

1.4 PROJECT GOALS The long term goals of the project are outlined in Table 1.2: Project Goals.

Table 1.2: Project Goals

Project Goal Description Understand key system parameters and how they interlink affecting the design of the rotorcraft air-frame and affect overall UAV performance Learn and implement a design strategy using the forward design approach and understand how key decisions made affect the outcomes of the design Apply optimization and decision-making skills to the design problem To design an optimizing software framework to be used in initial preliminary design evaluations

Key goal targets are to apply optimization and decision-making skills in the design process of the software framework. Whilst applying an understanding of the fundamentals of helicopter / rotorcopter design to the project objectves to deliver a working computer software model.

1.5 PROJECT SCOPE

Due to the complexity of designing an open source rapid multi evaluation design tool, many facets/factors will be have to be delayed for implementation at later stages. As such, a clearly defined scope is essential in the design and delivery of the program which will evaluate rotorcopter designs. Table 1.3 identifies the key areas that will be inscope and out of scope for this project.

Table 1.3: Scope of Project Rotorcraft Design

In Scope Out of Scope Aeromechanics relating to rotorcraft flight, including Fixed wing aircraft and Ornithopters rotorcraft geometry design Development of rapid multi design tool which uses Design of: numerical methods to converge design against Engine and propulsion systems, Main rotor/gearbox chosen requirements assembly, swash plate, & Tail Empennage Optimum overall airframe design based on any Detailed design, flight guidance and control systems mission profile script, & test against 5 mission profiles & Automation of rotorcraft P a g e | 4

1.6 PROJECT CHAPTER OUTLINES Chapter 2 Provides the project outline and identifies the significance of the project. It additionally provides the motivation behind this thesis, by outlining the UAV Design challenge.

Chapter 3 & 4 contain the main literature review. Ch.3 explores current existing rotorcraft design software on the market, and outlines current limitations of these programs. Ch.4 provides essential background information into rotorcraft as well as identifying key areas for the design and analysis stages. Information identifying the essential components to flight, key parameters, and governing equations and theorems are explored and presented.

Chapter 5 provides an analysis of rotorcraft flight performance. The chapter extends the literature review into the specifics of helicopter flight. The three principal flight conditions of a rotorcraft are outlined; hovering flight, straight and level flight, and climbing/descending flight. These three primary flight conditions are analysed in this chapter where the essential equations are delineated for coding and program execution.

Chapter 6 outlines the methodology and concepts behind the coding design process, as well as delineates the process of design and the strategies used. The software program used for the thesis and software framework is additionally outlined.

Chapter 7 outlines the model methodology. This chapter outlines the initial code development, explaining the environmental model, geometric models, and mission profiles which are required for all subsequent simulation modules.

Chapter 8 outlines the simulation methodology. A systematic approach is outlined which simplifies the project objectives, and provides key milestone models which further develop the code towards a working result. Key results of the various model milestones are presented, as well as discussions on their limitations and validity of results.

Chapter 9 outlines the multi-dimensional model-fitting simulation running the program in its entirety. Key design parameters are tested and evaluated, with crucial parameters affecting fuel performance identified.

Chapter 10 & 11 describes the conclusions produced, provides recommendations for future work, and how this project could be extended. P a g e | 5

2 PROJECT OUTLINE - AIRCRAFT DESIGN

Aircraft design can be described as the process of generating an airworthy aircraft considering weight and balance, mission requirements, and cost verse time. Eren Turanoĝuz [5], proposes that the main topics in the aircraft design process are aerodynamics, structures, weight, designed payload requirements, production, cost, propulsion systems, stability and control. This thesis will explore and analyse existing rotorcraft models, and evaluate a design utilising Anderson Jr’s [2] philosophical approach in conjunction with the three stage preliminary design techniques outlined by Austin [17], Raymer [15, p. 4], S´obester & Keane [18] to meet the UAV Medical Express Outback Challenge requirements. Methodology is outlined in Section 6, with conventional helicopter preliminary design processes adapted for UAV design from Raymond Prouty [19] and J. Gordon Leishmann [7].

A systems engineering approach will be made within the design process, using an iterative heuristic approach via an initial simplified MATLAB code that can be expanded and revised over the year. An optimization module has partly been added which allows the user to select key design parameters for optimization. The optimization module is based on a user defined cost function, which is principally based on performance requirements, and or geometric/weight parameters.

2.1 SIGNIFICANCE OF PROJECT The significance of this project extends to adding value to not only the aerospace community, however to any of the humanitarian aid, emergency medical services, search and rescue, agriculture, mineral exploration and conservation industries. This project aims to provide a program that can be used in the design of a UAV craft for any mission scenario, thus its successful completion and implementation can result in the advancement of industries who otherwise wouldn’t utilise drones due to operation and enactment costs. Furthermore, as further elaborated in Section 3, this program will allow UQ to further research UAV rotorcraft, by using a software that was developed in-house. Such as what has happened with UQ’s Eilmer 4 compressible flow simulation software tool [20]. In addition to scholars being able to utilise the code to produce optimized specific designs, general hobbyists and aviation enthusiasts who don’t have access to comprehensive commercial products can utilise the code for their own means. This sofware provides free access to a tool that can be further refined by academics to truly produce a comprehenisve open-source tool that can be used in generating designs specific to user constraints. All at a fraction of the cost, and time; due the its use of validated simplifications and approximations from literature and peer reviewed publications / sources. P a g e | 6

2.2 UAV DESIGN CHALLENGE The UAV Medical Express Outback Challenge is an open-to-all biennial challenge which incorporates robotics, electronics, avionics, structural aircraft build/design, autonomous flight planning and participate management in a competition set out to use UAVs to deliver and receive medical supplies in remote locations and inaccessible terrains. The event provides a medium to showcase and develop potential civilian applications of UAVs [21], particularly cases of medical necessity and lifesaving emergencies [22]. Participation in the challenge is free and voluntary; with the event being regarded as a, “world-class proving ground for technology that’s on the leading edge of where unmanned aerial vehicles are going in public use” [23]. The current 2018 UAV Medical Express Outback Challenge involves an autonomous aircraft that can deliver and retrieve medical samples [22].

The challenge aims include:  A fully automatic UAV flight system that can navigate through a geo-fenced transit corridor;  A minimum flight time of at least 1 hour;  A minimum payload capacity of 25 grams;  A minimum flight altitude of 250 feet AGL; and  A range of 60 km. Further competition rules can be found in the official competition rules [22].

2.3 SIGNIFICANCE OF EMS ROTORCRAFT Helicopters and rotorcraft play a significant role in emergency medical services (EMS) [24]. Results from [25, p. 995] show that 43.4% of a total of 916 patients recorded using EMS helicopters, “benefited from the rapid delivery … provided by the emergency helicopter service.” Sullivent, Wald, & Faul [26], highlight that the odds of death are 39% lower in those transported by helicopter EMS compared with those transported by ground ambulance using data for 56,744 adults. However, Bledsoe [27] questions the increasing price of patient transport and the reliance on helicopter services; with Dan Hankins, MD [28] claiming that EMS helicopters priority should be given to persons living in rural areas who don’t have access to trauma care. Dan Hankins, MD [28] continues to comment on the difficulty of maintaining air medical services in such rural areas, with Bledsoe [27] stating the annual cost of maintaining helicopter flight can be up to $1,000,000 a year. This shows a great need to develop a low cost emergency service airborne delivery system. This thesis aims to fill this void, by developing a software program framework, which can be used in the design of rotorcraft for participation in the Uninhabited Aerial Vehicle (UAV) Medical Express Outback Challenge.

P a g e | 7

Chapter 3

3 EXISTING PRELIMINARY ROTORCRAFT SIZING TOOLS Existing Preliminary Rotorcraft Sizing and Analysis Tools

This chapter outlines existing helicopter pre-sizing software suites on/off the market. It outlines what each program aims to achieve and the limitations of each program. It is not an exhaustive list, however provides affirmation of the need of an open-source, comprehensive preliminary sizing program. A short review of each program is additionally provided.

3.1 CURRENT SIZING PROGRAMS There are many current pre-sizing tools in existence. These range from comprehensive suites, to unfinished tools where a subscription is needed to access further refined modules [29]. Current existing rotorcraft design tools are based upon detailed knowledge of existing helicopter models and heavily rely on the use of empirical models [30]. Table 3.1 displays the current existing programs, and whether they are open to private or public sectors.

EDEN/RIDE Both the Evaluation and Design of Novel Rotorcraft Configurations (EDEN) and Rotorcraft Integrated Design and Evaluation (RIDE) programs, were developed by teams from the German Aerospace Center (DLR). These two projects have been completed however remain under the control of the DLR.

GRCAS Graphical Rotorcraft Comprehensive Analysis System (GRCAS) is a program offered exclusively for US residents, and created by the firm, Advanced Rotorcraft Technology, INC [31]. It is a comprehensive GUI model tool for aeroelastic analysis and stability. This software comes with an expensive licence and it doesn’t operate as a preliminary design tool.

P a g e | 8

Table 3.1: Current Existing Helicopter Programs Program Company/Corporation Private Public Open- Source

GRCAS Advanced Rotorcraft Technology, INC  

EDEN German Aerospace Center (DLR) 

RIDE German Aerospace Center (DLR) 

French Aerospace Lab (ONERA),

HOST Eurocopter Foundation, & 

German Aerospace Center (DLR)

Group for Aeronautical Research and Technology in Europe (GARTEUR),

French Aerospace Lab (ONERA), GARTEUR Eurocopter Foundation,  AG06 German Aerospace Center (DLR),

Netherlands Aerospace Centre (NLR), &

United Kingdom Defence Research Agency (DRA)

French Aerospace Lab (ONERA), German Aerospace Center (DLR), CPACS Royal Institute of Technology Stockholm (KTH),   Delft University of Technology (TU Delft), & Stanford University RAPID/RaTE Technion - Israel Institute of Technology   

Vahana Vahana   

CIRADS Georgia Institute of Technology   

LaSRS++ NASA, & Jet Propulsion Laboratory (JPL)   

GyroCalc Jukka Tervamaki (푇푒푟푣푎푚푎̈푘푖 퐸푛푔푖푛푒푒푟푖푛푔)   

JSK-Dragon Jouhou System Kougaku Lab (University of Tokyo)    Note: Data collected from various sources: EDEN from [32], RIDE from [33], GRCAS from [31], HOST from [34], GARTEUR AG06 from [35], CPACS from [36], RAPID/RaTE from [37], Vahana from [38], CIRADS from [39], LaSRS++ from [40], CyroCalc from [41] and JSK-Dragon from [42].

HOST Helicopter Overall Simulation Tool (HOST) is a joint venture product that was created with the collaboration of the German Aerospace Center, the French Aerospace Lab (ONERA) and the Eurocopter Foundation [34]. Main functions of the program include evaluating helicopter trim conditions, time domain simulation, and roll/yaw/pitch rate calculations.

P a g e | 9

GARTEUR AG06 Group for Aeronautical Research and Technology in Europe (GARTEUR) Action Group 06 (AG06), is a joint venture simulation tool used to model and simulate rotorcraft flying qualities such as dynamic stability, flight trim conditions, and responses to control inputs [35]. This program provides simulation capabilities, however doesn’t offer preliminary design capabilities. It is also based heavily off the Messerschmitt-Bölkow-Blohm Bo 105 helicopter, and uses its empirical data as a basis of modelling.

CPACS The Common Parametric Aircraft Configuration Scheme (CPACS), establishes multi- disciplinary design optimization protocols and allows the unification of a single program suite where fixed wing and novel rotorcraft configurations can be designed and evaluated [36]. This suite is no longer supported and has been opened to the public as open source software.

RAPID/RaTE Rotorcraft Analysis for Preliminary Design/Rand Technologies & Engineering (RAPID/RaTE) uses a compiled database of over 180 designs, and is used to model general rotorcraft configurations, provide vibration and aeroelastic analysis, and stability results [37]. This is one of the most advanced desktop software suites, however has an expensive license to use.

VAHANA Vahana open source software suite is user friendly and provides a preliminary design tool for rotorcraft helicopter and tiltrotor design [38]. It is a new program (2017) and doesn’t have an extensive readme. It is a tool that provides power loading and cost vs range for generated designs. Vahana software suite is based around a single operated tiltrotor design with allowances for passengers and passenger safety systems. This limits this tool for UAV design.

CIRADS Concept Independent Rotorcraft Analysis and Design Software (CIRADS) provides a comprehensive design tool which can calculate rotorcraft configuration from mission scenarios, calculate weight breakdowns and evaluate engine performance [39].

LaSRS++ LaSRS++ is a program produced by NASA and the Jet Propulsion Laboratory (JPL). This program was designed in C++ and took the design team under 3 months to produce [40]. It allowed rapid development and analysis of aircraft performance whilst providing a framework were developers could reuse code and focus on mission specific constraints and limitations.

P a g e | 10

GyroCalc GyroCalc has no limitations and is opensource, however; it provides preliminary performance calculations on gyrocopters, which have a single main unpowered rotor, and an engine driven propulsion propeller. The program returns rates of climb/descent, glide ratio, and rotor coning angle. However, it is limited in use as a preliminary design tool, as it requires users to input rotor dimensions, weights, chord lengths, select an airfoil for the rotor blades, and all the performance requirements of the engine propeller.

JSK-DRAGON Researchers at JSK lab/University of Tokyo have recently developed a modular flying robotic octocopter which can transform itself in mid-air into various shapes and forms [43]. They used in-house programs at JSK, such as JSK-Dragon; in assisting in the development of a craft whose potential use cases are limitless. One such potential includes disaster search and rescue [44] through fallen buildings; by being able to contort it self through tight confines. The progams used by JSK labs are private, however they have released an extensive amount of papers and research into the matter.

Having reviewed current software, there was some clear limitations of each program. The limitations of the current existing programs is outlined in Section 3.2.

3.2 CURRENT LIMITATIONS ON EXISTING PROGRAMS The main current limitations on the existing programs is that the tools that have been developed essentially reside in-house with the developer, or are very expensive programs to purchase licenses for general use. Additionally, most of them are deliberately limited in nature, incorrect, incomplete or not user friendly. Furthermore, many of the programs are discipline specific or target a certain area of design. Out of the two programs that are open source, Vahana is the most recent and comprehensive program, however has been tailored towards a specific framework for human inhabited flight. To meet the UAV challenge requirements, there exists a need to develop an open source rapid multi design tool, in which assists in the decision making phase during the conceptual and preliminary design stages. By developing this program, full control of the software remains in-house, as well as advancements to the functionality of the program. The University of Queensland can utilise this software and further research into the possibilities of UAV drones and other flying rotorcraft/vehicles. With the need for the development of this thesis software framework established, a review of current helicopter/rotorcraft aeromechanics was carried out. The next chapter provides a literature review on and helicopters.

P a g e | 11

Chapter 4

4 LITERATURE REVIEW Literature Review

The literature of helicopter design is well established. With textbooks from Raymond Prouty’s, Helicopter Performance, Stability, and Control [19]; J. Gordon Leishmann’s Principles of Helicopter Aerodynamics [7], J. Seddon’s and Simon Newman’s Basic Helicopter Aerodynamics: An Account of First Principles in the Fluid Mechanics and Flight Dynamics of the Single Rotor Helicopter [45], to Wayne Johnson’s Rotorcraft Aeromechanics [46]. Whilst the theory behind lift generation is well recognized and documented, as well as helicopter design methodologies, comprehensive programs that provide a one-and-all solution exist predominately within the major helicopter manufacturers, and are governed by intellectual property restrictions. This literature analysis provides the necessary background and pertinent information to the creation of the open-source rapid multi evaluation design tool.

This literature review serves two purposes. To provide essential information on how rotary- wing aircraft (rotorcraft) fly, and to identify the essential components affecting flight performance. This literature review additionally examines the governing established theories pertaining to rotorcraft flight, and the mathematics behind them.

The following sections explain the main principles behind rotorcrafts, enabling flight mechanisms, how rotorcrafts fly, key design components, as well as outlining the advantages and disadvantages of current and existing designs.

P a g e | 12

4.1 MAIN COMPONENTS OF HELICOPTERS The main components of a helicopter are shown on Figure 4.1: Helicopter Assembly and Identification of Key Components.

Figure 4.1: Helicopter Assembly and Identification of Key Components Source: [47]. Figure in Public domain (CC BY-SA 3.0)

There are many components that go into the design of a rotorcraft. One of the most essential and significant components is the engine. Suitable engines were not developed until the advent of the internal combustion engine writes Leishmann (2006), which allowed the breakthrough of the power-to-weight ratios so flight could occur. The engine provides power to the rotor blades indirectly by rotating the mast which consequently rotates the rotors causing lift to occur. Knowing the power required for the helicopter to achieve flight will be a key component for determining the design required to meet the UAV outback challenge requirements.

Another key component apart from the main rotor dimensions, and geometry, is the tail rotor. This tail rotor is needed in most single rotor craft to counteract the rotor-torque reaction. However, modern developments have seen the introduction of no tail rotor (NOTAR) designs which eliminate the need for a tail rotor and gear box. Current NOTAR designs use a ducted

P a g e | 13 fan which dispels air to the side to achieve the desired anti-main rotor torque, by redirecting part of the main rotor blade downwash through the tail boom. Essentially, if a helicopter is to fly, it requires a shell (fuselage, tail boom and tail empennage), a motor/propulsion device with transmission systems and gearbox, a control system to regulate inputs, and lastly a means of converting the rotating motion of the motor through to the main blades. With the key components identified, the last differentiating factor in controlling of the rotorcraft, is called the swash plate. The swash plate’s role in controlling the helicopter is outlined in Section 4.1.1.

4.1.1 Swash Plate The swash plate is a sophisticated mechanical device that provides the mechanism for the helicopter to control the angle of the velocity thrust vector. The rotor blade plane is angled by the swash plate which allows the rotorcraft to tilt, and thus direct the desired thrust vector of flight. The swashplate achieves this through changing the blades angle of attack in one area of the blades 360° rotation plane, thus causing increases/decreases in lift generation in a specific area of the blade rotation path. A cyclic input via three independent control rods allows the rotor blades to change pitch. Figure 4.2 shows the swash plate with the components required to transmit angular displacement to the rotor blade pitch horns, allowing cyclic feathering of the rotor blades to occur.

Main rotor hub Pitch horns

Rotating swash plate

Pitch change links

Follower/Scissor link

Control rods input Stationary swash plate

Figure 4.2: Messerschmitt-Bölkow-Blohm Bo 105 Rotor Head and Swash Plate Adapted from: [48]. Figure in public domain (CC BY 2.0)

P a g e | 14

Due to the complexity of such a design, multiple rotors can be used in replace of the swash plate. By having multiple rotors, multi-rotor designs simplify the mechanics of flight, by having the rotors themselves be the only source of rotation on the craft [49]. This replacement of the swashplate allows the velocity thrust vector to be controlled by changing the rotation speed of a separate motor/blade assembly system; instead of changing the pitch in each blade during its revolution in the 360° rotation plane.

Furthermore, multi-rotors that use simple motor systems, such as brushless DC motors, or permanent magnet synchronous motors PMSM can easily have their velocity of rotation controlled with a simple speed controller. The rotation of the blades remain at the same angle of attack throughout each cycle of rotation, and the secondary motors change blade rotation speeds to change the angle vector. Thus designs utilising simple multi-rotors require less maintenance than a swashplate which is highly prone to mechanical failure. Design, coding and physical creation of the swash plate and its tilting mechanisms is highly complex, and as such multi-rotor designs that allow velocity vectors to be angled without the need for a swashplate are desired for the UAV Medical Express Outback Challenge.

Current existing rotorcraft designs, principle configurations and design advantages and disadvantages are outlined in Section 4.2.

P a g e | 15

4.2 EXISTING ROTORCRAFT Figure 4.3 shows the current various existing types of rotorcraft configurations.

Single Main Rotor Coaxial Rotor

(Bell UH-1 Iroquois) ( Ka-50)

Tandem Rotor Coaxial Tandem Rotor (Piasecki H-21) (Concept Model)

Hybrid Single Main Rotor with Tilt Rotor Dual Tilt Rotors (Eurocopter X3) (Bell Boeing V-22 Osprey) Figure 4.3: Various Existing Types of Rotorcraft Configurations. Images for Bell UH-1 from [50]; Piasecki H-21 VTOL CH-21B from [51]; Concept Model from [52]; Kamov Ka-50 from [53]; Eurocopter X3 from [54]; Bell Boeing V-22 Osprey from [55]. All figures in public domain (CC BY 2.0)

Figure 4.3 shows various helicopter designs. The principle configurations shown have been designed with different mission purposes; with the main considerations including:  Complexity and cost of system;  Vibration modes and characteristics; and their transmitted forces to the airframe;  Aerofoil selection of rotor blades;  Performance for hover, vertical and forward flight;  Solidity ratio; and  Weight and propulsion systems [56]. Differences in the number of rotor blades for the various designs, as well as contra-rotating coaxial rotor systems and tandem configurations can be seen in Figure 4.3.

P a g e | 16

The coaxial rotor configuration (Karmov Ka-50) provides a reduced moment of inertia relative to the vertical and lateral axes, providing a significant increase in the controllability of the rotorcopter through aerodynamic damping [57]. Furthermore, the reactive moment produced by the single-rotor helicopters main blades (Bell UH-1) doesn’t need to be compensated for with a tail rotor; as the configuration of the contra-rotating blades compensates for the reaction moment by individually adjusting rotation of the top or lower blade systems during flight. By utilising the power that would be required for a tail rotor, an increase in 6-10% efficiency of the coaxial contra-rotation design can be achieved [58], [57]. The coaxial design is widely used in transport operations, due to the high power efficiency that exists over single-rotor designs, and the higher payloads [59]. The advantages that the coaxial rotor provide over single rotor craft are advantageous for the UAV challenge in regards to the higher payload capacity, and lower moment of inertia with greater controllability. However, there exists an increased complexity in the preceding preliminary design phase calculations for the coaxial design, as well as the increased complexity that comes with a physical model.

Tandem helicopter designs (Piasecki H-21, Figure 4.3), are able to carry larger weights with reduced helicopter blade radii. This is due to the designs not requiring a tail rotor, and being able to direct the extra power to lift generation. This allows them to carry larger payloads then single-rotors. However, the increased maintenance and advanced transmission systems for operating the secondary helicopter system can be a disadvantage. In comparing similar sized helicopters for coaxial, tandem, and single-rotor; the coaxial configuration achieves a reduction in moment of inertia of 1.5 – 2 times less than that of a single-rotor [60]; and the tandem configurations (Piasecki H-21), contain an increase of roughly twice that of similar sized single- rotors [46]. These varying moment of inertia forces affect the controllability and manoeuvrability of the helicopters in flight.

The technological advancements of tandem helicopter designs require sophisticated components and gearboxes to maximize the performance of the helicopter, UAVs don’t have this same issue. Simple motor systems (permanent magnet synchronous motors PMSM) with speed controllers can be used to achieve the same affect and still obtain the advantages that tandem craft provide. The designs shown in Figure 4.3 all have their own separate advantages and disadvantages with further analysis on parasitic drag differences and power requirements shown in Appendix A - Comparison of Coaxial, Tandem and Single Rotor Helicopter Types.

P a g e | 17

Hybrid and tiltrotor combine the VTOL capability of rotorcraft, with the speed, range and high altitude capability of fixed wing turboprops [61]. These craft have advantages over single rotorcraft, and that is they can effectively transform into hybrid fixed wing craft during forward flight and achieve greater speeds by transforming their main rotors that are used for vertical flight, into turboprops. In regards to the Bell Boeing V-22 Osprey, the tiltrotor can fly twice as fast as most military helicopters and has a range two to five times greater [62]. The V-22 additionally has a higher payload capacity than the Eurocopter X3, due to the lifting power provided by the two tandem main rotors.

The power per kilogram force of gross weight is an important measure when undertaking preliminary design of rotorcraft. This is due to the fact that the lower the power required for kilo of gross weight, the less fuel will be required to fly. Colin P. Coleman [58] refers to the ideas of Stepniewski (1986), who concluded that although the coaxial helicopter has an increased parasite drag in comparison to the tandem and single rotor configurations, it offers lower power required per gross weight. This is closely followed by tandem craft designs with single-rotor designs requiring the most power per gross weight for flight (see Figure 12.1; Appendix A).

Even though each individual design has its own merits, it is due to the larger carrying capacity of the tandem rotors, the longer range due to the ability to shift into forward flight, and the greater speeds of travel from a-to-b that make the tiltrotor the best candidate for the UAV Outback Challenge.

4.3 EXISTING UAV ROTORCOPTERS Existing UAV rotorcraft predominately use multiple rotors, as opposed to the mechanical complexity of the swashplate and its higher maintenance requirements. This is due to the simplicity of design and inexpensive maintenance that multi-rotors require. These UAVs use multiple rotors, where select rotors are isolated to provide a higher lift vector where required to cause the craft to tilt, controlling attitude and position. A few rotorcopter UAV designs are shown in Figure 4.4: Various Existing Types of UAV Rotorcraft Configurations. Rotorcraft is certainly not limited to these few designs, however the graphic showcases various existing designs in production.

P a g e | 18

Sextuple Clover Design Rotor Octuple in Plane Symmetric Rotor (Unnamed vehicle) (Interspect UAS B 3.1)

Dual Tilt Rotors with Duodecuple VTOL Octocopter Main Wing Rotor Rotors (Project Wing – Series 5000) with Dial Rotors on Empennage (NASA GL-10)

Hybrid Single Main Thrust Rotor with Tandem Quadcopter Coaxial Octuple Rotors (Amazon Prime Air v2) (DJI Phantom FC40)

Figure 4.4: Various Existing Types of UAV Rotorcraft Configurations Images for Sextuple Clover Design from [6]; Interspect UAS B3.1 from [63]; DJI from [64]; GL-10 from [65]. All figures in public domain (CC BY 2.0); besides Amazon Prime Air, [66] and Project Wing from [67].

Many of the existing facets of helicopter design have been incorporated into UAV design, although there are some significant differences. From Figure 4.4, it can be seen that the majority of UAV craft contain multiple rotors. This is in part due to the cheaper motors in existence for these multi-craft, but mainly due to their own specific design requirements. Oosedo, Abiko, Narasaki, Kuno, Konno, and Uchiyama [68], proposed a quad tilt rotor UAV that solves the issue of underactuated quadcopter crafts by enabling the missing 2 degrees of freedom (DOF) control inputs to be included in the flight systems. Their experiements proved flight of a tiltrotor UAV that could operate comprehensively in 6 DOFs. By designing their tiltrotor UAV, the craft had the capability of flying to an arbitrary position and attitude independently [68]. This tilt rotor design gives the UAV craft the ability to operate and change attitude and orientation in smaller confines. Tilt rotor designs offer a higher degree of mobility in comparison to single

P a g e | 19 rotors, and as such become ideal for operation within the UAV challenge; where the UAV may involve motion under cliffs, around trees/powerlines, or in tight confines.

Figure 4.4 shows six types of UAV rotorcrafts. The UAV rotorcraft from Project Wing (Series 5000) exhibits dual main tilt rotors, which act as turboprops enabling 120 km/h high speed forward flight, and has a maximum flight ceiling of 400 feet altitude [69]. The Duodecuple VTOL rotors are used for two primary reasons, for hovering and slow flight capabilities, and for the increase in payload capacity. This design currently serves in rural Australia and allows the delivery of packages to precise coordinates. Performance data is quite limited on this model, however it is clear that extra 12 VTOL rotors are not needed for smaller payload packages such as the 25 gram UAV outback challenge requirement. The extra power could be conserved using a lower amount of rotors for extended range and endurance capabilities.

The Amazon Prime Air v2 (APAv2) operates with the same purpose, to deliver goods right to customers’ door steps. The APAv2 uses one single main rotor as the main forward flight propulsion device, with octuple tandem coaxial rotors for hovering and payload capability. The APAv2 can reach a maximum speed of 95 km/h, has a maximum flight ceiling of 400 feet, has a flight range of 24 km, and a maximum payload of 5 pounds (2.23 kg) [70]. This design allows the carriage of large payloads, however the payload location increases the parasitic drag, requiring more fuel/power to fly. This causes a reduction in the operational range.

The Interspect UAS B 3.1 in plane octuple symmetric rotor system was developed for 3- dimensional photogrammetric surveying of mines, nature conservation areas and built environments. It uses three main stabilisation legs, and eight main rotors for stabilisation of the Light Detection and Ranging (LIDAR), and 3-D imagery components. It has a smaller range than the tiltrotor hybrid designs, and has a lower flight speed. The UAS B 3.1 is similar in design to the Sextuple Clover Design Rotor (SCDR), and the quadcopter DJI Phantom FC40.

The DJI Phantom FC40 has a top speed of 36 km/h and a maximum range of 3 km with modifications [71], and an endurance limited to 12 minutes [72]. This quadcopter is slower than the tiltrotor options due to it not having the capability of tilting far enough to transition the VTOL rotors into effective turboprops. Additionally, there is no main wing/aerofoil for lift generation. Coupled with its smaller battery size, it has limited endurance and range that would make its design inadequate for the UAV outback challenge. The advantages and disadvantages of the three main types of rotorcraft are outlined in Section 4.4.

P a g e | 20

4.4 PROS AND CONS OF VARIOUS AIRBORNE CRAFTS

Table 4.1: Advantages and Disadvantages of Various Aircraft Types has been generated compiling the strengths and weaknesses of the various types of rotor copter.

Table 4.1: Advantages and Disadvantages of Various Aircraft Types

Pros Cons  VTOL  Swash plate requires constant  Hover maintenance  Less fuel/energy consumption  Expensive to purchase and maintain Single Rotor  Long endurance time  Mechanical complexity of design (helicopter)  Greater efficiency in comparison to requires constant maintenance multirotor  Challenging to fly balancing forces and  Fast forward flight compared to moments multi-rotor  Heavy landings do considerable damage

 VTOL  Smaller flight times, high battery drain  Hover  Smaller payload capability compared to  Stabilisation and positioning control single rotor Multi-rotor of aircraft great for aerial  More motors to maintain photography  Limited Endurance and range  Easier to control than single rotor  High precision throttle changes required  No need for complex swash plate for stability (∴ limited to electric motors)

 VTOL  Efficiency of vertical flight and forward Hybrid /  Hover flights are reduced due to dual Tiltrotor  Longer endurance time capabilities  Combine benefits of rotorcraft with (fixed-wing benefits of fixed wing with rotors)  Faster forward flight then other rotors  No need for complex swash plate Ornithopters  Mimics natural flight of animals  Complexity of design and operation

Note: Data collected from Chapman [73], Austin [17], Anderson Jr. [2], Harasani [74], Leishmann [7], Prouty [19], Turanoĝ uz [5], and Wheeler, Bloom, & Lerch [47].

Table 4.1 highlights key differences between the various models. All aircraft have vertical take- off and landing capabilities, which is essential for quick and rapid deployment to meet the challenge requirements. The single-rotor helicopter is fast, uses less fuel/energy consumption and has the highest efficiency of all the rotorcrafts, and would be the ideal candidate for large scale, human piloted operations. However, the UAV challenge requires a UAV vehicle, as such, replacement of the required swash plate drastically decreases mechanical maintenance and the price of the overall craft. It is clear then, that for the UAV challenge requirements to be met, the most suitable rotorcraft will be a tiltrotor/hybrid (fixed-wing with rotors). This is due to the ability of the rotor to achieve high horizontal speeds, long endurance time, high range capabilities, and the replacement of the complex swash plate.

P a g e | 21

4.4.1 Effects of Rotorcraft Components on Flight Properties It is important to determine how the individual components of the rotorcraft affect the overal performance of the design. The UAV challenge requires highspeed forward flight, long endurance, long range, and VTOL capabilites. Identifying the key components of the rotorcopter that can achieve these desired aspects is essential in the conceptual and preliminary design stages.

Larger rotor blades increase the efficiency of the rotorcraft by requiring less power when the helicopter is in hover [19], however there are limitations of a larger rotor blade; which are [7], [19], [46]:  Reduced clearance to objects in VTOL;  Increased static droop of rotor blades and reduced ground clearance of blade tips;  Blade sailing and flexing potentially damaging the fuselage and other components;  Increased empty weight for helicopter;  Increased parasitic drag of the main rotor hub assembly; and  Decreased cruising flight efficiency.

Rotor diameter and disk area will be a key parameter in the design of the craft as changes to both greatly affect the power required for flight, and the gross weight of the vehicle.

Tilt rotor aircrafts have higher forward speeds. This is essential for the UAV challenge design, if it is meant to operate as an emergency medical services vehicle. As explaned in Section 2.1 Significance of Project, the advantages of the speed of the aircraft make it a desirable vehicle to be used in emergency situations. The extra speed is achieved by offsetting the lift that is generated from the main rotor by using a conventional wing [75]. However, a disadvantage to using the tiltrotor configuration is that it grealty increases the empty weight fraction and power requirements. However, the UAV challenge offers the freedom where there is no size/weight limit, and the advantagous qualities of increased speed and range offset this limitation.

Overall, the tiltrotor/hybrid (fixed-wing with rotors) meets all the conceptual requirements of the UAV challenge and has merits in its design.

P a g e | 22

4.5 HOW ROTORCRAFT ACHIEVE FLIGHT Helicopters and rotorcraft achieve flight by rotating cambered aerofoils through an atmosphere at a specific angle of attack, producing lift forces. These aerodynamic forces are created by the relative motion of the helicopter blades through the air. There are two main principles that can be used in rotorcraft aeromechanic analysis, these are the Rankine-Froude momentum theory (RFMT); and Blade element theory (BET); which are analysed in Section 4.6. The significance of how a rotorcraft achieves flight provides the basis for the primary analysis. Understanding the flight mechanisms allow code generation and implementation.

4.6 TWO MAIN THEORIES OF AERODYNAMIC ANALYSIS There are two main theories relating to aerodynamic analysis of a rotorcraft. These are: 1) Rankine-Froude Momentum Theory; and 2) Blade Element Theory

4.6.1 Rankine-Froude Momentum Theory The Rankine-Froude momentum theory (RFMT) applies to any rotorcraft, and its easiest application is when considering hovering flight. Momentum theory allows the derivation of a first-order estimation of the thrust and power of a rotor [7]. It also shows the relation between these elements and downwash (velocity) through the rotors, see Figure 4.5: Rankine-Froude Momentum Theory for Hovering Craft. Disk loading provides a means of using the theory to determine hovering efficiency of a helicopter vs effective disk loading (푁/푚2). The theory shows that designs should aim to minimize the disk loading.

Using the conservation of fluid mass applied to a control volume surrounding a rotor and its downwash, the general governing equation is:

∬ 휌푉⃑ . 푑푆 = 0 (1) 푠

For unconstrained flow, [7]

1 2 푊푘 = ∬ (휌푉⃑ . 푑푆 )|푉⃑ | = 0 (2) 푠 2

P a g e | 23

푉푢푝 푠푡푟푒푎푚, 푢푝푠푡푟푒푎푚 푉푒푙표푐푖푡푦

Rotor Lift/Thrust, 퐿, 푇

Rotor-Tip Path 푉𝑖, 퐼푛푑푢푐푒푑 푉푒푙표푐푖푡푦 Plane, 푅 − 푇푃푃

Centre of Gravity Parasitic Drag Download on Horizontal Stabiliser

Weight, 푊

푉∞, 푓푎푟 푓푖푒푙푑 푉푒푙표푐푖푡푦

Figure 4.5: Rankine-Froude Momentum Theory for Hovering Craft

Equation (2) provides a scalar answer and states that the work (푊푘) on the fluid via the rotor blades is due to kinetic energy of the fluid in the rotor slipstream per unit time. The induced velocity through the rotor disk, is: 1 푣 = 푣 (3) 𝑖 2 ∞

Thrust required by the rotor to support the helicopter in hovering condition is given by the following Eq. [19]:

퐷푉 푇 = (1 + ) 퐺푊 (4) 퐺푊

Where 푇ℎ푟푢푠푡 = 푇, 퐷푉 = 퐷푟푎푔 푣푒푟푡푖푐푎푙, 퐺푊 = 퐺푟표푠푠 푊푒푖푔ℎ푡

P a g e | 24

Further derivation of the formulas give ideal power requirements, which is:

3/2 푇 3 푃 = 푇푣𝑖 = = 2휌퐴푣𝑖 (5) √2휌퐴

As evident the induced velocity is related to the thrust produced, and the power requirements of the craft during flight. As such the changing effects of this induced velocity depending on the rotorcrafts flight conditions will be explored in a later section of this literature review.

A further parameter is defined which outlines the disk loading (DL), measured in N/푚2 which is denoted as:

퐷퐿 = 푇/퐴퐷 (6)

This disk loading parameter for a hovering craft is

푊 푊 퐷퐿 = = 2 (7) 퐴퐷 휋푅

Where 푊 = 푤푒푖푔ℎ푡, 푅 = 푅표푡표푟 푏푙푎푑푒 푟푎푑푖푢푠, 퐴퐷 = 푀푎푖푛 푟표푡표푟 푑푖푠푘 푎푟푒푎

An important parameter in determining the hovering power required is power loading (PL), measured in N/kilowatt or Kg/kilowatt. 푃퐿 = 푃/푇 (8)

Ideal designs of rotorcraft require the maximisation of the inverse of PL. That is 푇/푃. This is because this ratio tells the minimum required power for the helicopter to hover at a given weight.

4.6.1.1 Limitations of Momentum Theory This method has its merits, in the fact that it provides rapid iterations and designs to be made by evaluating the performance of a rotor in hover, climb and forward flight configurations.

Limitations of the theory include:  It doesn’t give any information about distribution of load across the blades;  Or given any insight into how the blades should be designed; o Twist, size, aerofoil/geometry, taper, planform.  Effects of flapping is also excluded.

P a g e | 25

4.6.2 Blade Element Theory Blade element theory (BET) offers the same performance evaluations that momentum theory offers, however allows further insights into preliminary rotorcraft design at the earlier stage. The basic principle behind the theory is to represent airloads on a quasi-2-dimensional section of blade, and then integrating the total area to determine performance effects on the entire rotor. Unlike the momentum theory, this method allows the airfoil/geometric input of the blades to be considered, as well as the effects of Mach number.

Standard linearized aerodynamics can be used to determine the blade lift coefficient which is:

퐶푙 = 퐶푙훼 (훼 − 훼0) = 퐶푙훼 (휃 − 훼0 − 휙) (9)

Where

퐶푙훼 = lift curve slope in 2D of the aerofoil, 훼0 = zero lift angle 휆 inflow 휙 = = spanwise variation in 휃 = Blade pitch angle 푟 radius

Further derivations for the general equation above, for untwisted blades with uniform flow give

1 1 1 1 휃 푟3 휆푟2 퐶 = 휎퐶 ∫ (휃 푟2 − 휆푟)푑푟 = 휎퐶 [ 0 − ] (10) 푇 2 푙훼 0 2 푙훼 3 2 0 0

푇 Where 퐶 = ; is the rotor thrust coefficient; further information [7] 푇 휌퐴(ΩR)2

The power required to rotate the rotor blades is determined by the rotor blades geometry and the drag coefficients. The drag coefficient is a function of Mach number and Reynolds Number. These values vary across the rotor blades span.

Analysing the sectional drag forces along the blade radii by an element-by-element method results in profile power. This profile power is found to be

1 푃 = 휌푁 Ω3푐퐶 푅4 (11) 0 8 푏 푑0

P a g e | 26

Where 푁푏 = 푛푢푚푏푒푟 표푓 푟표푡표푟 푏푙푎푑푒푠, Ω = 푟표푡푎푡푖표푛푎푙 푠푝푒푒푑 표푓 푡ℎ푒 푟표푡표푟 푏푙푎푑푒푠,

푐 = 푟표푡표푟 푏푙푎푑푒 푐ℎ표푟푑, 퐶푑0 = 푠푒푐푡푖표푛 푝푟표푓푖푙푒 푑푟푎푔 푐표푒푓푓푖푐푖푒푛푡 (푎푠푠푢푚푒푑 푐표푛푠푡푎푛푡)

By dividing profile power by constant values, a standard profile power coefficient is determined. This is: 1 푁 푐 1 퐶 = ( 푏 ) 퐶 = 휎퐶 (12) 푃0 8 휋푅 푑0 8 푑0

Where the solidity ratio 휎 is defined as, 푏푙푎푑푒 푑푖푠푘 푎푟푒푎 푁 푐 휎 = = 푏 (13) 푟표푡표푟 푑푖푠푘 푎푟푒푎 휋푅

Power can also be approximated and is:

3/2 퐶푇 1 퐶푃 = + 휎퐶푑 (14) √2 8 0

푃 Where 퐶 = ; is the rotor power coefficient. 푃 휌퐴(ΩR)3

Further information can be found in Leishman’s Principles of Helicopter Aerodynamics [7].

4.7 MOMENTUM OR BLADE ELEMENT THEORY In comparison of the two main theories, blade element theory has greater merits and is the more useful of the two. The BET method provides another method of determining performance calculations whilst also permitting design of the rotor blades. The azimuthal and radial distributions over the airfoil blade can be estimated, as well as the calculation of non- axisymmetric air loads over the entire rotor disk. However, Momentum theory allows rapid evaluation in the preliminary stages of design. The combined theory Blade Element Momentum Theory (BEMT) utilises both of the models and combines basic principles of both theories. This paper will utilise both theories in its analysis of rotorcraft aeromechanics in providing a preliminary design for use in the UAV challenge. Initial stages in coding will use Rankine- Froude Momentum theory for analysis, with further Blade Element Theory modules being added in later instalments where required. Furthermore, both methods are utilised in Chapter 5.

P a g e | 27

Chapter 5

5 FLIGHT PERFORMANCE Flight Performance

This chapter explores the forces and aerodynamic moments acting on the rotorcraft whilst in three various stages of flight. Flight stage one, is where the rotorcraft is in the hovering condition. Flight stage two, is where the rotorcraft is in straight and level, forward flight. And lastly, flight stage three is where the rotorcraft is in climbing, forward ascension flight. The last stage also implies descending flight, where the rotor lift thrust vector would be smaller than the weight of the overall vehicle. Knowledge of these forces assists the reader in understanding later chapters outlining coding, modelling and simulation methodologies. The same principles of analysis explained throughout have been used in the coding stages.

5.1 HOVERING FLIGHT For determining the power required for hovering flight, the forces about the vertical & horizontal planes as well as the moments about the centre of gravity need to be analysed. These forces are shown in Figure 5.1: Forces and Moments of Rotorcraft in Hovering Flight.

Rotor Lift/Thrust, Rotor-Tip Path 퐿, 푇 Plane, 푅 − 푇푃푃

Rotor Hub Moment

Aerodynamic Centre of Gravity Moment Flight Path Parasitic Drag Velocity, 푉퐹푃 Download on Horizontal Stabiliser

Weight, 푊 Figure 5.1: Forces and Moments of Rotorcraft in Hovering Flight

P a g e | 28

From Figure 5.1, a hovering helicopter only requires the lift force from the rotor to equal the weight of the overall vehicle. There are two types of power required to produce the hovering rotorcopter; induced power and profile power. Induced power is the power associated with the production of the rotor thrust during a hover, whereas profile power, is the power required to rotate the blades and overcome skin friction drag and form drag [76, p. 185]. During a hover, induced power is at its highest value, equating to between 60-85% of the total main rotor power, with profile power equating to be between 15-45% of the main rotor power [77]. For hovering flight, the total vertical drag force [19] and rotor thrust vectors are:

2 퐷푣 ℎ표푣푒푟 = 0.3 ∗ 2휌푣𝑖 , 푇 = 푊 = 푚푔 (15)

For the hovering rotor, the blade tip speed is constant all throughout a cycle. That is, at all positions around the blade disk area. This is shown in Figure 5.2. Additionally, the rotor angle of attack is constant at all positions. These two properties will be assumed throughout the coding process for all three flight stages. The tendency for the hovering rotorcraft to drift in the same direction as the antitorque rotor thrust will not be accounted for in the modelling.

Blade speed = Blade tip speed rotation speed 푀 ≈ 0.6 for Blade hovering rotors [6, p. 56]. rotation direction

Tail rotor Drift / thrust Translating direction tendency Rotor Angle of Attack, 훼퐹푃 is the same at all positions around the blade disk

Body torque direction Tail rotor torque direction

Figure 5.2: Hovering Rotorcraft: Rotor Blade Angle of Attack and Blade Tip Velocities

P a g e | 29

5.2 STRAIGHT AND LEVEL, FORWARD FLIGHT

The second stage of flight analysis occurs when the rotorcraft is in steady, straight and level flight. For determining the power required, an analysis and resolution of the forces and bending moments is shown in Figure 5.3: Forces and Moments of Rotorcraft in Forward Level Flight.

Propulsive Force

Rotor Thrust, 푇 Rotor Lift, 퐿

Rotor-Tip Path Plane, 푅 − 푇푃푃

훼퐹푃 Rotor Hub Moment

Rotor Angle of Attack, 훼퐹푃 Centre of Gravity

Aerodynamic Download on Moment Flight Path Horizontal Stabiliser Velocity, 푉퐹푃 Parasitic Drag, 퐷퐹푃 Weight, 푊 Figure 5.3: Forces and Moments of Rotorcraft in Forward Level Flight

The drag force (Drag forward propulsion, 퐷퐹푃) acting on the craft is determined by:

1 2 퐷퐹푃 = ⁄2 ∗ 휌 ∗ 푉 ∗ 퐶퐷 푓푙푎푡 푝푙푎푡푒 푒푞푢𝑖푣. (16)

Where 퐶퐷 푓푙푎푡 푝푙푎푡푒 푒푞푢𝑖푣. = 푒푞푢푖푣푎푙푒푛푡 푓푙푎푡 푝푙푎푡푒 푑푟푎푔

The total rotor thrust vector is thus:

2 2 푇 = √푊 + 퐷퐹푃 (17)

These forces are used in analysis in later chapters as a part of Chapters 7 & 8; Model and Simulation Methodologies. Figure 5.3, exaggerates the rotor angle of attack. This is to clearly show the differences in angle of attack for the rotor blades when in fore and aft positions. The angles of attack the rotor blades make vary in flight; a diagrammatic is shown in Figure 5.4.

P a g e | 30

Advancing rotor blades have higher Potential supersonic speed area speed than retreating side of advancing blades

Blade rotation Blade speed = Rotor Angle of direction speed rotation + Attack, 훼퐹푃 is less on advancing side forward airspeed

Tail rotor thrust direction

Blade tip speed 푀 ≈ 0.78 for forward flight rotors [6, p. 56]. Flight Path Velocity, 푉퐹푃

Body torque direction Tail rotor torque direction Blade speed = Rotor Angle of Attack, speed rotation - 훼퐹푃 is greater on forward airspeed retreating side

Retreating rotor blades have Potential stall area of Lower speed than advancing side retreating blades

Figure 5.4: Straight and Level, Forward Flight: Angle of Attack of Rotor Blades and Differences in Rotor Blade Tip Flight Velocities

Figure 5.4: Straight and Level, Forward Flight: Angle of Attack of Rotor Blades and Differences in Rotor Blade Tip Flight Velocities shows an aerial view of a helicopter in flight, and identifies two main regions where the rotor angle of attack changes for the craft during flight. In forward flight, dissymmetry of lift occurs via the advancing rotor blades travelling at a faster speed than the retreating blades due to the vector addition/subtraction of the forward airspeed. It is due to this difference, that the rotor blades need to have a varying angle of attack to compensate and maintain equal lift generation across the entire rotor disk. Two regions have been identified where the speed difference of the rotor blade tips are at their largest.

If the speed of the retreating blade is too slow, rotor tip stall can occur, causing the rotorcraft to nose dive. If the rotor blade is travelling too fast on the advancing side, it can near the speed of sound. This can cause devastating affects to the craft, with the blade coming apart, and the helicopter being uncontrollable. Although the speed that the rotorcraft can travel from its hanger

P a g e | 31 to the target location is of paramount importance for the UAV challenge, the rotorblades will be controlled electronically and kept below Mach 0.8 at all times to ensure the blades do not enter the transonic region [78]. Keeping in line with Leishmann’s [7] work, the rotor tip blades will be kept at a maximum below M = 0.78.

It is important to know these parameters of the helicopter, however rotorblade angles and variances in advancing and retreating rotor blade tip speeds will not be accounted for in simulation and designing of the initial preliminary design. This is because these factors will affect the flight performance, the design choice of blades, airfoil camber and the swash plate mechanism needed for the varying rotor angles of attack. However the intended design will have multiple rotors, as such; the swash plate is not needed. To compensate for the design not having a swash plate, lift vectors will be changed by increasing/decreasing the select rotor assembly from the tandem tiltrotor design.

5.2.1 Straight and Level, Forward Flight – Power

As the rotorcraft transitions from hovering to forward flight, the parasitic drag experienced varies greatly with forward flight speed, affecting the total power requirements [79, p. 51]. The total power needed for the craft changes due to the effects of translational velocity on the main rotor blades, as such the total power required becomes:  Ideal induced power by the main rotors;  Profile power to overcome parasitic drag by the main rotors;  Overall geometry parasitic drag power required; and  Power for miscellaneous aspects such as tail rotor, control systems, mechanical losses throughout the system, and so forth.

Rankine-Froude` Momentum Theory (Section 4.6.1) is used for the primary analysis of ideal induced power. As outlined in R.B. Richards US Naval textbook on the principles of helicopter performance [79], the mass flow rate of air moving through the main rotor blades increases with an increased forward flight speed, which is due to the translational effect on the rotors. This consequently reduces the induced velocity flow required for a certain rotor thrust. This can additionally be seen in Figure 12.1: Comparison of Coaxial, Tandem and Single Rotor Helicopters; Appendix A.

P a g e | 32

5.2.1.1 Straight and Level, Forward Flight Induced Velocity: Power Applying Newton’s law to steady flow within Momentum theory [79],

퐹 = 푚̇ Δ푉 (18)

Applying this law to the flow of fluid (air) through the rotor blades, and concentrating only on providing an analysis for determining the induced power which counteracts the weight force of the rotor, than the vertical induced velocity 푣𝑖,푣 is [79]:

푊 푣𝑖,푣 = (19) 2휌퐴퐷푣푟 Where:

푣푟 = 푟푒푠푢푙푡푎푛푡 푖푛푑푢푐푒푑 푣푒푙표푐푖푡푦 푡ℎ푟표푢푔ℎ 푡ℎ푒 푟표푡표푟푑푖푠푘, 퐴퐷 = 푅표푡표푟 푑푖푠푘 푎푟푒푎

And:

2 2 푣푟 = √푣퐹푃 + 푣𝑖,푣 (20)

Where:

푣퐹푃 = 푓표푟푤푎푟푑 푓푙푖푔ℎ푡 푣푒푙표푐푖푡푦, (푓푙푖푔ℎ푡 푝푎푡ℎ 푣푒푙표푐푖푡푦: Figure 5.3)

Rearranging Eq. (19)

푊 2 푣푟푣𝑖,푣 = = 푣𝑖 (21) 2휌퐴퐷 As such, 2 푣𝑖,푣 = 푣𝑖 /푣푟 (22)

Or, if using Eq. (20) 푣𝑖,푣 푖푠 [79],

2 푣2 푣2 푣 = √− 퐹푃 + √( 퐹푃) + 푣4 (23) 𝑖,푣 2 2 𝑖

As evident, only a positive radical of the quadratic equation has any importance. Non- dimensionalising the equation [79]:

2 푣 푣2 /푣2 푣2 /푣2 𝑖,푣 = √− 퐹푃 𝑖 + √( 퐹푃 𝑖 ) + 1 (24) 푣𝑖 2 2

P a g e | 33

The non-dimensional form show that the induced velocity value decreases with an increase in forward flight speed. Further analysing forward flight, a relation for induced power, and its association with forward flight velocity can be obtained. This relationship is given by [79]:

푃𝑖,퐹푃 푊 푣𝑖,푣 푣𝑖,푣 = ∗ = (25) 푃𝑖,ℎ표푣푒푟 푊 푣𝑖 푣𝑖

Figure 5.5: High Forward Flight Velocity Effect on Induced Velocity shows how the induced velocity through the rotor disk plane become minimised as flight velocity is increased.

Figure 5.5: High Forward Flight Velocity Effect on Induced Velocity

This implies, that 푣푟 ≈ 푣퐹푃. Substituting this into Eq. (22)

2 2 푣𝑖,푣 = 푣𝑖 /푣푟 = 푣𝑖 /푣퐹푃 (26)

2 Using Eq. (21), and substituting in 푣𝑖

2 푃𝑖,퐹푃 = 푊 ∗ 푣𝑖,푣 = 푊 /(2휌퐴퐷푉퐹푃) (27)

Evaluating this using an Oswald’s efficiency factor of 푒 = 1:

2 2 푊 푉퐹푃 푊 푃𝑖 = = (28) 1 2 휋 푞푆 ⁄2 휌휋푟 푉퐹푃

P a g e | 34

Where:

= 퐴푠푝푒푐푡 푟푎푡푖표, 푞 = 푑푦푛푎푚푖푐 푝푟푒푠푠푢푟푒, 푆 = 푠푢푟푓푎푐푒 푎푟푒푎

This approximation for evaluating the induced airflow through the rotors for high speed forward flight will be used in consequent models and will be outlined in Chapter 8 - Simulation Methodology. The next section outlines the rotorcraft in climbing forward flight condition.

5.3 CLIMBING FORWARD FLIGHT

The third stage, expands on straight and level, forward flight by adding in the propulsive power to ascend or descend the aircraft. Power required for forward, climbing flight is shown in Figure 5.6: Forces and Moments of Rotorcraft in Forward Climbing Flight.

Propulsive Force

Rotor Thrust, 푇 Rotor Lift, 퐿 Rotor-Tip Path Plane, 푅 − 푇푃푃 훼퐹푃 − 휃퐹푃 푉푐 Relative Wind, 푉∞

Flight Path

Angle, 휃퐹푃 Rotor Hub Moment

Rotor Angle of Attack, 훼퐹푃 Centre of Gravity Aerodynamic Flight Path Download on Moment Horizontal Stabiliser Velocity, 푉퐹푃

Parasitic Drag, 퐷퐹퐶푃 Weight, 푊 Figure 5.6: Forces and Moments of Rotorcraft in Forward Climbing Flight

Likewise to the rotorcraft in forward flight, the helicopter in forward climbing flight experiences the same forces in flight. The aft blades still need to travel at a higher angle of attack than the blades in the advancing to retreating positions. This is to ensure that the lift vector generated at the rear side of the craft is larger than the lift generated by the fore blades. This variance in lift causes the helicopter to act like a pendulum, rotating around the rotor hub head.

P a g e | 35

The vertical drag force acting on the climbing rotor is given by [19, p. 111]:

퐷푣 ℎ표푣푒푟 휌 2 휌 2 퐷푣 푐푙𝑖푚푏 = 4 ( ) (푣𝑖푛푑푢푐푒푑 푐푙𝑖푚푏 + 푉푐) 퐴푚 + (Δ퐴푧퐶퐷 푎푟푒푎 푛표푡 𝑖푛 푤푎푘푒) 푉푐 (29) 푊ℎ표푣푒푟 2 2

Where

퐷푣 푐푙𝑖푚푏 = 푣푒푟푡푖푐푎푙 푑푟푎푔 푢푛푑푒푟 푐푙푖푚푏, 퐷푣 ℎ표푣푒푟 = 푣푒푟푡푖푐푎푙 푑푟푎푔 푢푛푑푒푟 ℎ표푣푒푟,

푣𝑖푛푑푢푐푒푑 푐푙𝑖푚푏 = 푖푛푑푢푐푒푑 푐푙푖푚푏 푣푒푙표푐푖푡푦 푡ℎ푟표푢푔ℎ 푡ℎ푒 푟표푡표푟 푡푖푝 푝푎푡ℎ 푝푙푎푛푒,

푉푐 = 푐푙푖푚푏푖푛푔 푣푒푙표푐푖푡푦 표푓 푟표푡표푟푐푟푎푓푡 = 푉퐹푃 cos(훼퐹푃 − 휃퐹푃)

퐴푚 = 푝표푟푡푖표푛 표푓 푎푖푟푓푟푎푚푒 푖푛 푡ℎ푒 푤푎푘푒 표푓 푡ℎ푒 푚푎푖푛 푟표푡표푟푠,

Δ퐴푧 = 푝표푟푡푖표푛 표푓 푎푖푟푓푟푎푚푒 푛표푡 푖푛 푡ℎ푒 푤푎푘푒 표푓 푡ℎ푒 푚푎푖푛 푟표푡표푟푠

Therefore, the drag force (Drag forward climbing propulsion, 퐷퐹퐶푃) acting on the climbing forward flight rotor is given by:

퐷푣 푐푙𝑖푚푏 퐷퐹퐶푃 = (30) cos(훼퐹푃 − 휃퐹푃)

퐷푣 ℎ표푣푒푟 휌 2 휌 2 4 ( ) (푣𝑖푛푑푢푐푒푑 푐푙𝑖푚푏 + 푉푐) 퐴푚 + (Δ퐴푧퐶퐷 푎푟푒푎 푛표푡 𝑖푛 푤푎푘푒) 푉푐 푊ℎ표푣푒푟 2 2 (31) 퐷퐹퐶푃 = cos(훼퐹푃 − 휃퐹푃)

Using trigonometry relations, the resultant thrust vector is (for full derivation see Appendix D):

2 2 푇 = √(퐷퐹퐶푃 sin(훼퐹푃 − 휃퐹푃)) + (푊표푣푒푟푎푙푙 푟표푡표푟 + 퐷퐹퐶푃 cos(훼퐹푃 − 휃퐹푃)) (32)

To determine the portion of the airframe within and not-within the main rotor wake (퐴푚, Δ퐴푧), vertical drag coefficients needed to be calculated for geometric segments of the rotorcraft. The drag coefficients for climbing forward fight were determined using shape approximations of established drag coefficient data (see Figure 12.2: 3D Drag Coefficients for Various Bodies Appendix B 3-Dimensional Drag Coefficients). This was achieved taking the plan view of the rotorcraft, and splitting the geometry into sections divided by concentric circles around the main rotor mast (see Figure 5.7: Drag Coefficients for Vertical Drag Calculations in Climbing Forward Flight).

P a g e | 36

14 10 11 15

Figure 5.7: Drag Coefficients for Vertical Drag Calculations in Climbing Forward Flight Figures based upon ideas by Raymond Prouty [19, p. 279]

As shown in Figure 5.7, the wake of the main rotor blades can be projected onto the rotorcraft. These geometric sections have various drag coefficients depending on the geometry. For the example rotorcraft shown in Figure 5.7, the areas of the airframe in and out of the wake of the main rotor can be calculated using the same method by dividing projected plan view of the rotorcraft into two main sections. 퐴푚 is the projected area within the wake, and 훥퐴푧 is the portion of the airframe not within the wake.

P a g e | 37

For the depicted rotorcraft, 퐴푚 would be sections 1, 2, 3, 4, 5, 6, 7, 8, and 9. Whereas, Δ퐴푧 would be sections 10, 11, 12, 13, 14, 15, and 16. These values will be used in calculation of the power required for the rotorcraft to climb, in Section 8.3. Figure 5.8 shows the flow through the rotor for the climbing forward flight condition. The areas of the rotorcraft within the main rotor wake will vary depending on:  geometry of the craft;  velocity and direction of the rotorcraft;  angle of attack; and  wind direction and magnitude. These will have to be taken into consideration in the coding stages of Model Three, in section

8.3 Model Three – Power Required to Climb. It is important to note that the areas 퐴푚 and 퐴푧 refer to the top view, plan view wake projection onto the frame, and not the entire surface area.

Flight Path Velocity, 푉퐹푃

Figure 5.8: Areas of Rotorcraft In and Out of Rotor Wake Whilst Forward Climbing Flight

As evident in Figure 5.8: Areas of Rotorcraft In and Out of Rotor Wake Whilst Forward

Climbing Flight, the projection areas 퐴푚 and 퐴푧 will change depending on the operating condition of the rotorcraft. This is further evident in Figure 5.9: Fluid Flow through Main Rotors Whilst under Various Flight Conditions. Which shows how the projected area in and out of the wake changes due to various conditions outlined above.

P a g e | 38

퐴푚 = 푝표푟푡푖표푛 표푓 푎푖푟푓푟푎푚푒 푖푛 푡ℎ푒 푤푎푘푒 표푓 푡ℎ푒 푚푎푖푛 푟표푡표푟, 푔푟푒푦 푝푟표푗푒푐푡푒푑 푎푟푒푎,

Δ퐴푧 = 푝표푟푡푖표푛 표푓 푎푖푟푓푟푎푚푒 푛표푡 푖푛 푡ℎ푒 푤푎푘푒 표푓 푡ℎ푒 푚푎푖푛 푟표푡표푟푠, 푏푙푢푒 푝푟표푗푒푐푡푒푑 푎푟푒푎

(a) Hovering Flow through Main Rotors

(b) Straight and Level Flight Flow through Main Rotors

(c) Climbing Forward Flight Flow through Main Rotors

Figure 5.9: Fluid Flow through Main Rotors Whilst under Various Flight Conditions

To solve this type of problem, some clear assumptions will have to be outlined, else computational fluid dynamics (CFD) equations including the Navier-Stokes, and the simplified Reynolds-averaged Navier–Stokes equations as well as potential flow would have to be used in determining precise locations where the flow field intersects the airframe.

P a g e | 39

Key assumptions will be outlined in Section 8.3.2 Model Three Assumptions, when undertaking coding of these outlined equations, and projected areas. Furthermore, swirl, gyroscopic precession, Coriolis Effect, law of angular momentum, ground effect, and or coning will not be analysed in the creation of the computer framework. For more information, see works by Raymond Prouty [19], Gordon Leishman [7], or any helicopter aerodynamics textbook. However, later modules that can contain these advanced compensating techniques can be added into the software at a later time. Chapter 6 outlines the coding methodology used to commence creation of the program.

P a g e | 40

This page is intentionally left blank

P a g e | 41

Chapter 6

6 CODING METHODOLOGY Coding Methodology This section will outline the methodology and concept behind the design process, as well as delineate the process of design and the strategies used.

6.1 WHY MATHWORKS MATLAB

Having established the need for a program suite to rapidly iterate through designs in the initial conceptual and design stages, MathWorks Matlab suite was selected to produce the program. This is because all engineering students at the University of Queensland (UQ) undertake Matlab studies across their disciplines. As such a familiarity with the program is expected. Furthermore, Matlab can produce standalone executable programs that can be downloaded and run on operating machines that don’t have a MathWorks Matlab license [39, p. 72]. This means that the end user of the program doesn’t require any special software or drivers to operate the executable. Furthermore, Matlab can easily be used with its graphical user interface (GUI) software coding structure, Simulink. In the most recent versions of Matlab, a GUI tool has been established to allow users to easily produce a GUI for their programs. This can additionally be saved as an offline executable and can operate on computers without a MathWorks license. In addition, the ample amount of resources available within the MathWorks community, makes troubleshooting very easy. The above reasons are why MathWorks Matlab was chosen to code the program.

P a g e | 42

6.2 CODING AND SOFTWARE METHODOLOGY

The diagrammatic notation for the preliminary design process is documented in Figure 6.1: Coding Methodology for Preliminary Rotorcraft Design.

Design/Geometry Model Aeromechanics Evaluation Environmental Model Input Analysis Deck Deck Geometric Evaluation

Initial Settings/Parameters Mission Mission Scenario and Analysis Attitude and Altitude Profiles Calculations

Optimizer (cost) Functions

Output Results Deck Figure 6.1: Coding Methodology for Preliminary Rotorcraft Design

Figure 6.1 shows the block diagram model of the initial conceptual design phase. This flowchart provides the basis for the design, with each block to be coded in MathWorks Matlab software suite. This iterative heuristic approach allows variations to the main input geometry file to generate data for analysis and comparison to the key parameter requirements outlined in the mission scenario and profile file. The Input Deck will contain the geometry of the aircraft being tested, the environmental model, and initial attitude in 3D space. The attitude uses North-East- Down coordinates, with the Euler angle rates yaw 휓̇, pitch 휃̇ and roll 휙̇. This is used to position the aircraft for initial aerospace and geometric outputs to be calculated.

The Analysis Deck contains functions for the calculation for various aeromechanics and geometric evaluations. These include power/motor requirements, lift and drag values, pitching, yawing and rolling moments, fuel consumption rates and payload volume. The Input Deck and Analysis Deck is then loaded against a mission profile, where altitude and attitude calculations take place over the mission scenario. An Output Deck contains all calculated and returned performance/ geometry values evaluated against the selected mission profile. With fuel required, available payload mass and overall flight performance being calculated.

P a g e | 43

Simplifications will be made to the aeromechanics of helicopter flight, with simple models being preliminarily tested. Further iterations of the program will then see simple models replaced with advanced dynamic modules. An in-depth diagrammatic flow chart outlining the above process is presented in Figure 6.2: Detailed Coding Methodology for Preliminary Rotorcraft Design.

INPUTS: Aero Evaluation: Results/Data “Geometry  Generated lift / drag Analysis: parametrisation and  Power/motor  Fuel consumption, i.e. dimensionality” requirements range/endurance  Pitching, yawing and  Mass properties  Available payload rolling moments mass  Chord lengths  etc. etc.  Flight performance  Wing spans  etc. etc.  Various Aspect Ratios  Fuselage, empennage, and aircraft dimensions Geometry Model: Mission Profile:  Profile of aircraft “Generates Aerospace “Key mission  Sweep angles OUTPUTS and parameters”  Attitude. etc. etc. Geometric OUTPUTS”  Endurance, range,

flight time, size etc. Environmental Model: etc “Outlines initial Geometric environmental data for Decision and flight/aerodynamic OUTPUTS: Design Selection analysis”  Payload volume “Is this a valid model  Density, pressure, temp.  Fuel/battery volume altitude. etc.  Fuselage weight to further analyse?”

 Figure 6.2: Detailed Coding Methodology for Preliminary Rotorcraft Design

6.3 OPTIMIZER AND COST FUNCTION

Due to the vast amount of design requirements that rotorcraft design entails, there exists a large number of objective/target functions (cost functions) and modules. It is for this reason, that an optimizer module with user defined objective functions is essential in streamlining the design process and returning optimized specific designs. The optimizer module contains cost functions, which are based upon performance requirements, and geometric / weight parameters. The methodology outlining the process is shown in shown in Figure 6.3: Detailed Coding Methodology Optimizer/Cost Function for Preliminary Rotorcraft Design.

P a g e | 44

ROTORCRAFT OPTIMIZER INPUTS DESIGN VARIABLES Amounts  Number of Main Blades  Main Rotor Blade Radius GLOBAL MODEL ENVIRONMENTAL  Main Rotor Blade Chord  Number of Tail Blades ASSUMPTIONS  Number of Main Rotor MODEL  Main Rotor Blade Velocity

Assemblies  Vehicle Cruise Velocity  Fuel Energy Density  Number of Engine Devices  Density  Propulsion Engine Rating  Fuel/Battery Volume  Temperature  Specific Energy  Battery C value and S Mission Profile Weights  Pressure (abs)  Battery Capacity and cell numbers  Single Main Blade  Altitude Discharge  Motor Efficiency  Endurance  Single Tail Blade  Dynamic Viscosity  Gross Take-off Mass  Rotor Blade Maximum  Range  Rotor Assembly  Gravity Tip Mach Number  Flight Time  Rotor Pylon COST FUNCTION  Mach number limits for  Flight Leg Lengths  Fuselage hover, forward flight,  Flight Leg Time  Tailboom  Maximum Endurance forward climbing flight  Hover time  Tail Stabilisers  Maximum Range  Vertical Rate of Climb -  Reserve Fuel

 Landing Skid Positioning and  Maximum Flight Altitude VROC  Cruise Velocity  Maximum Flight Forward  Empennage Misc.  Waypoint Data  Payload  Profile of aircraft Velocity  Misc. Electrical, control  Sweep angles  Maximum Climbing GLOBAL MODEL Velocity systems, transmission etc.  Blade aspect ratio CONSTANTS  Blade tip speed  Gross Vehicle Empty Weight Geometry  Attitude  Weight of Fuselage,  Payload volume  Fuselage, empennage, and  Roll, pitch, yaw empennage, rotor blades, aircraft dimensions  Euler angle rates tailboom, tail stabilisers

Figure 6.3: Detailed Coding Methodology Optimizer/Cost Function for Preliminary Rotorcraft Design

As Figure 6.3: Detailed Coding Methodology Optimizer/Cost Function for Preliminary Rotorcraft Design shows, there will be several costs functions. These can be selected by the user to assist in design of their rotorcraft. The first iteration of this program, Model One; is outlined in Section 8, after initiation of the Input Deck; which is outlined in Chapter 7.

P a g e | 45

Chapter 7

7 MODEL METHODOLOGY Model Methodology - Code Initial Development

CODING ENVIRONMENTAL MODEL, GEOMETRIC MODELS, & MISSION PROFILES

The initial steps of initialising the computer framework is setting up the required functions and classes of the ‘Input Deck’ as shown in Figure 6.1. This includes the environmental model, the design/geometric models, and the initial settings/parameters. This chapter additionally contains a section on initialising separate mission scenarios for future proofing the code and testing each module/model that is coded and outlined in Chapter 8 – Simulation Methodology. This chapter starts with the section ‘Code Initial Development and Requirements’, which represents the preliminary stage of the base code that all consequential models will utilise and operate upon. It contains the classes and functions for the environmental model, the geometric models, and the mission profiles.

7.1 ENVIRONMENTAL MODEL The environmental model is a class that allows initial environment flight conditions to be loaded. The model loads an excel file of standard atmospheric conditions, with interpolation and other functions that extract the following key values for any altitude:  Geo potential altitude above mean sea level;  Temperature;  Average gravitational constant;  Absolute pressure;  Density; and  Dynamic Viscosity. This environmental model provides accurate atmospheric data to be used in calculations for fuel flow rates and payload capacity to be determined later on.

P a g e | 46

7.2 GEOMETRIC MODELLING Initially, three geometric models were created. This was to constantly be able to test the code, and verify its backwards capabilities with various geometric models.

7.2.1 Geometric Model One – Point-Mass The first geometric model coded was a ‘point-mass’. The point-mass has been implemented as a 5.5 DOF system with the ‘crafts’ rolling movement along the longitudinal axis restricted. This was to simplify the coding, as well as mimic real operations of the designed craft which isn’t required to bank at sharp angles under the UAV challenge requirements. Initial attitude in 3D space was assigned, as well as pitch and yaw rates. North-East-Down (NED) coordinates have been used with the Euler angle rates yaw 휓̇, pitch 휃̇ and roll 휙̇. Figure 7.1 shows the equilibrium of forces acting on the point-mass as it is in flight from A-B. The point-mass is in climbing forward flight formation. 퐵 퐿 푃 Δ푡, 푙 . 푉∞ 푉푦 퐷 Δ푡 = 푡푖푚푒, 푙 = 푙푒푛푔푡ℎ 푊 L = lift, 푃 = 푃푟표푝푢푙푠푖표푛 퐹표푟푐푒

퐴 W = Weight, 퐷 = 퐷푟푎푔 퐹표푟푐푒 푉푥 Figure 7.1: Point-Mass Equilibrium of Forces in Flight

7.2.1.1 Geometric Model One – Point-Mass Equations From Figure 7.1: Point-Mass Equilibrium of Forces in Flight, the balancing of forces can take place. This balancing of forces leads to a ‘Cost’ function which we can use to compare different geometric designs to determine the overall efficiency of each design.

퐿 퐿 (33) 푉∞ = , Δ푡 = Δ푡 푉∞

1 2 (34) 퐷 = ⁄2 휌 ∗ 푉∞ ∗ 퐶퐷 ∗ 퐴푓푟표푛푡푎푙 = 푃

퐿 = 푚 ∗ 푔 (35)

Δ푡 Δ푡 (36) 퐶표푠푡 = 푤퐿 ∗ ∫ 퐿 푑푡 + 푤푃 ∗ ∫ 푃 푑푡 0 0

This cost provides a means of evaluating the point-mass and the amount it needs to travel from point-A to point-B. This cost function is based upon a lift force and propulsion force.

P a g e | 47

7.2.2 Geometric Model Two – Rectangular Prism

The second geometric model is a ‘point-mass with aerodynamic drag of a rectangular prism’ (point-mass-RP). This brick was modelled with the dimensions of a conventional brick and was used to test and verify the code after successful testing of the point-mass. NED coordinates were also used as well as Euler angle rates to define the bricks attitude and orientation in 3D.

The point-mass-RP utilises the same equations as the flying point-mass, however, its geometric properties are loaded and evaluated; see Figure 7.2.

ℎ = 76푚푚

푤 = 110푚푚 푙 = 230푚푚

Figure 7.2: Flying Point-Mass with Aerodynamic Drag of a Rectangular Prism

7.2.3 Geometric Model Three – Single Main Rotor Helicopter

A ‘single main rotor’ helicopter design was added to the geometric classes. This preliminary design entailed adding rotor blades to the flying rectangular prism design. The rotorcraft preliminary testing design can be seen in Figure 7.3: Flying Single Main Rotorcraft Helicopter.

ℎ = 76푚푚

푤 = 110푚푚 푙 = 230푚푚

Figure 7.3: Flying Single Main Rotorcraft Helicopter

P a g e | 48

7.2.3.1 Geometric Model Three – Single Main Rotor Helicopter Equations

This main rotor design was evaluated in climbing forward flight, and is shown in Figure 7.4: Flying Single Main Rotorcraft Helicopter Equilibrium of Forces in Flight.

퐵 퐹푟표푡표푟 퐿 푃 Δ푡, 푙 푉∞ . 푉 푦 퐷 Δ푡 = 푡푖푚푒, 푙 = 푙푒푛푔푡ℎ 푊 L = lift, 푃 = 푃푟표푝푢푙푠푖표푛 퐹표푟푐푒 퐴 W = Weight, 퐷 = 퐷푟푎푔 퐹표푟푐푒 푉푥

Figure 7.4: Flying Single Main Rotorcraft Helicopter Equilibrium of Forces in Flight

1 2 퐷 = ⁄2 휌 ∗ 푉∞ ∗ 퐶퐷 ∗ 퐴푓푟표푛푡푎푙 + 퐷퐴푒푟표푑푦푛푎푚𝑖푐 (37) Where

퐷퐴푒푟표푑푦푛푎푚𝑖푐 = 퐴푒푟표푑푦푛푎푚푖푐 푑푟푎푔 푓표푟푐푒 푐푟푒푎푡푒푑 푏푦 푡ℎ푒 푟표푡표푟 ℎ푢푏 푎푛푑 푟표푡표푟 푏푙푎푑푒푠

Adding in the rotor blades and main rotor assembly means extra parasitic, skin friction and induced drag need to be accounted for. These new terms represent 퐷퐴푒푟표푑푦푛푎푚𝑖푐. The skin friction drag is included in the derivation of induced drag [19].

퐷퐴푒푟표푑푦푛푎푚𝑖푐 = (푃푎푟푎푠푖푡푖푐 퐷푟푎푔 + 퐼푛푑푢푐푒푑 퐷푟푎푔)푅표푡표푟 (38)

From Raymond Prouty [19, p. 130]: 푇2 퐼푛푑푢푐푒푑 퐷푟푎푔푅표푡표푟 = 2 (39) 2휌퐴푓푟표푛푡푎푙푉∞

From Raymond Prouty [19, p. 308]: 푞 1 퐿/푏 2 푃푎푟푎푠푖푡푖푐 퐷푟푎푔 = 퐿 [퐶 퐴 + ( ) ] (40) 푅표푡표푟 푞 푑0 푓푟표푛푡푎푙 휋푒 푞

Thus, total drag Eq. 푞 1 퐿/푏 2 푇2 퐿 (41) 퐷퐴푒푟표푑푦푛푎푚𝑖푐 = [퐶푑0퐴푓푟표푛푡푎푙 + ( ) ] + 2 푞 휋푒 푞 2휌퐴푓푟표푛푡푎푙푉∞

P a g e | 49

Where:

푞퐿 = 푙표푐푎푙 푑푦푛푎푚푖푐 푝푟푒푠푠푢푟푒 푎푡 푟표푡표푟푠, 푞 = 푓푟푒푒 푠푡푟푒푎푚 푑푦푛푎푚푖푐 푝푟푒푠푠푢푟푒 푒 = 표푠푤푎푙푑 푒푓푓푖푐푖푒푛푐푦 푓푎푐푡표푟 (푢푠푒 0.8 푎푠 푟표푢푔ℎ 푒푠푡푖푚푎푡푒 [19]), 퐿 = 푠푝푎푛 푙표푎푑푖푛푔 푏 푇 = 푅표푡표푟 푇ℎ푟푢푠푡

Therefore, the total drag force:

푞 1 퐿/푏 2 푇2 퐷 = 1⁄ 휌푉2퐶 퐴 + 퐿 [퐶 퐴 + ( ) ] + (42) 2 ∞ 퐷 푓푟표푛푡푎푙 푑0 푓푟표푛푡푎푙 2 푞 휋푒 푞 2휌퐴푓푟표푛푡푎푙푉∞

7.2.4 Geometric Modelling Coding

With the above geometries calculated, functions for returning all forces acting on the aircrafts were created. These functions recognise the loaded model, and use the mathematical model that pertains to the loaded geometry. This ensures backwards capability is upheld. Additionally functions were made to identify and calculate drag coefficients for each loaded geometry. This is further explained in Chapter 8 – Simulation Methodology.

P a g e | 50

7.3 MISSION PROFILES Five mission profiles were coded using flat-Earth assumptions, ready for the testing models to call upon and implement. An initial class was setup which contained the properties shown in Figure 7.5: Mission Profiles: Class Properties.

properties MissionNumber % Mission Number, value assignment of mission Endurance % time of endurance in minutes (min) Range % range in (Km) Payload % payload in (Kg) Cruise_speed % measured in (m/s) VROC % measured in (m/s) Hover_time % time in minutes (min) Length_leg_1 % length in metres of first leg (min) Length_leg_2 % length in metres of second leg (min) Length_leg_3 % length in metres of third leg (min) Length_leg_4 % length in metres of fourth leg (min) Length_leg_5 % length in metres of fifth leg (min) Length_leg_6 % length in metres of sixth leg (min) Length_leg_7 % length in metres of seventh leg (min) Time_leg_1 % time in minutes of first leg (min) Time_leg_2 % time in minutes of second leg (min) Time_leg_3 % time in minutes of third leg (min) Time_leg_4 % time in minutes of fourth leg (min) Time_leg_5 % time in minutes of fifth leg (min) Time_leg_6 % time in minutes of sixth leg (min) Time_leg_7 % time in minutes of seventh leg (min) Waypoint_Data % Waypoints, (x,y,z) of legs

Figure 7.5: Mission Profiles: Class Properties

The mission profile class is loaded as a structure file ‘struct’, and can contains ‘double’ values and ‘cell’ data types.

The waypoints data cell contains various (x,y,z) coordinates of the assigned mission.

Mission Profile 1: The first mission profile involved straight, level and forward flight. It involved a straight line of 5000 metres, at the UAV challenge required minimum altitude of flight, 76.2 metres. The first mission is shown in Figure 7.6: Mission Profiles: Mission Number 1.

(0,0,76.2) 푉푥 = 푉푎푏푠 퐵 (5000,0,76.2) 퐴 Alt = 250 feet = 76.2 m

Figure 7.6: Mission Profiles: Mission Number 1

P a g e | 51

Mission Profile 2: The second mission profile depicts a simple hop mission. It contains four waypoints, and has time values and lengths assigned to each of the legs. The second mission is shown in Figure 7.7: Mission Profiles: Mission Number 2.

(0,0,76.2) 30 mins 퐶 (5000,0,76.2) 퐵 Alt = 250 feet = 76.2 m

5 mins 5 mins

퐴 (0,0,0) 퐷 (5000,0,0) Ground

Figure 7.7: Mission Profiles: Mission Number 2

This mission profile extends from mission profile 1 by adding in the elevation change. This is to allow the code to test that the power required for climbing hovering flight was correctly executed.

Mission Profile 3: The third mission profile extends from mission profile 2, by adding in a hover at point ‘C’. The aircraft then returns to base along the path it followed (A-B-C, hover, C-B-A). The third mission is shown in Figure 7.8: Mission Profiles: Mission Number 3.

5 mins (0,0,76.2) 30 mins 퐶 (5000,0,76.2) 30 mins 퐵 (0,0,76.2) 퐵 Alt = 250 feet = 76.2 m 5 mins 5 mins

퐴 (0,0,0) 퐴 (0,0,0) Ground Figure 7.8: Mission Profiles: Mission Number 3

As can be seen in Figure 7.8, mission profile 3 extends from mission profile 2, by adding a 5 minute hover at point ‘C’. This was used to test that the power required for non-climbing, hovering flight was correctly executed.

P a g e | 52

Mission Profile 4: The fourth mission profile extends from mission profile 1 & 2, by adding in climbing, forward flight. The fourth mission is shown in Figure 7.9: Mission Profiles: Mission Number 4.

(76.2,0,76.2) 30 mins 퐶 (5076.2,0,76.2) 퐵 Alt = 250 feet = 76.2 m 5 mins 5 mins

(0,0,0) θ θ (5152.4,0,0) 퐴 퐷 Ground

Figure 7.9: Mission Profiles: Mission Number 4

The mission has been coded with an assumed flight path angle to the horizon of 45°s. However, the length of the A-B path automatically updates depending on the angle chosen.

Mission Profile 5: The fifth mission profile combines elements of all previous mission profiles into one. This mission profile is an extra precautionary mission, which ensures all aspects of power generation and fuel mass flow rates have been evaluated and coded correctly. The mission can be seen in Figure 7.10: Mission Profiles: Mission Number 5.

퐵 (0,0,76.2) 퐶 (1000,0,76.2) Alt = 250 feet 퐹 (1310.96,0,76.2) 퐺 (2310.96, 20 mins 20 mins θ = 76.2 m θ 0, 76.2)

5 mins 5 mins 5 mins 5 mins

20 mins (1030.48,0,45.72) 퐷 퐸 (1280.48,0,45.72)

퐴 (0,0,0) (2310.96,0,0) 퐻 Ground Figure 7.10: Mission Profiles: Mission Number 5

Likewise to mission profile 4, an assumed flight path angle to the horizon of 45°s was used. An arbitrary value of 100 feet drop was used from the flight altitude of 250 feet to 150 feet at point ‘D’ and ‘E’. The distance travelled was also added to the x value and was equated using trigonometry with the same 휃 = 45° angle.

P a g e | 53

Mission Profile – Full Flight Simulation for UAV Challenge:

Lastly, a full flight simulation of the UAV Medical express challenge was coded. It is based upon the rules outlined in [22] which state the total round trip distance to be covered by competing vehicles will be minimum 40 km and maximum 60 km. Additionally, a minimum flight altitude of at least 100 feet must be held at all times throughout. The representative flight was coded and its diagrammatic representation is shown in Figure 7.11: Mission Profiles: Mission Number 6: Full Flight Simulation UAV Challenge.

(76.2,0,76.2) (25076.2,0,76.2) (30119.31,0,76.2) (55119.31,0,76.2) 퐵 퐶 Alt = 250 feet 퐹 퐺 20 mins θ = 76.2 m 20 mins θ 0.5 mins 0.5 mins

1 mins 1 mins Alt = 150 feet 10 mins = 45.72 m θ 퐷 퐸 θ (25097.75,0,45.72) 퐴 (0,0,0) (30097.75,0,45.72) (55195.51,0,0) 퐻 Ground Figure 7.11: Mission Profiles: Mission Number 6: Full Flight Simulation UAV Challenge

As shown in Figure 7.11, the mission has been coded to have a total length of greater than 55km. This was to deliberately match the high side requirement of the UAV challenge. Furthermore a constant height of 250 feet above the ground was used when travelling to and from the target site, with 150 feet above the ground being used when the rotorcraft undertakes its 5km searching pattern to deliver its payload (for payload; see Appendix E: UAV Outback Challenge Payload / Blood Samples). As the flight guidance, control systems & automation of rotorcraft is out of the design scope, a distance of 5 km was added to the mission profile to simulate the rotorcrafts searching pattern to find the target for the payload drop.

With the environmental model, geometric models, and mission profiles coded, the coding scripts were ready to be implemented.

P a g e | 54

This page is intentionally left blank

P a g e | 55

Chapter 8

8 SIMULATION METHODOLOGY Simulation Methodology

Due to the complexity of modelling the tiltrotor/hybrid rotorcopter in a single instance, this chapter outlines a systematic approach which simplifies the code generation into steps that can be built upon. A number of simulation and program models have been created for this process. This chapter outlines the separate models, outlining the milestones that have been met which further progress the code towards a full comprehensive computer framework. Each subsequent section extends from the last, and provides the following outline; starting with Model One:  each model is delineated;  appropriate equations are identified and explicated;  key equation specific and model specific assumptions are outlined;  results attained are presented;  a discussion on the results outlined; and  the code for each model is provided in the appendices.

Model One Provides an energy analysis of an object in 3D space. Kinetic and potential energy analysis takes place, which allows straight and level flight, and forward climbing flight to be modelled simplistically.

Model Two Extends Model One, by adding in hovering power. It utilises Rankine-Froude Momentum theory for ideal power calculations and Blade Element Theory for the profile power requirements consumed by the rotor blade mechanisms.

Model Three Extends Model Two, by adding in the power required by the rotor to climb.

P a g e | 56

8.1 MODEL ONE – SIMPLIFIED ENERGY ANALYSIS This model provides the basis for all other models. It is the initial layer where code generation is built upon, advancing the code towards the project objective of producing an open source rapid multi design tool; which allows preliminary designs to be achieved given a mission profile/scenario.

This preliminary model uses an energy balance simplified model to evaluate the mass flow rate of the fuel for a point-mass, and point-mass-RP. However, the main limitation of this initial method, is that it doesn’t take into account the power required for hovering the vehicle. The model assumes that the rotorcraft can already maintain hover, without power. Additional limitations is that air friction and wind aren’t considered.

8.1.1 Model One Trajectory

The initial model analyses the vehicle using a simplified trajectory of moving the vehicle from a-b as seen in Figure 8.1: Model One Flight Profile Based off First Leg of Mission Number 4. The trajectory simulates a forward climb.

푀 0+1

(푐) 푉푦 Δ푦 푉 (푏) 푎푏푠

푀0 Δ푡 = 푡푖푚푒 (푎) 푉푥 Arbitrary Height

Figure 8.1: Model One Flight Profile Based off First Leg of Mission Number 4

This trajectory represents a segment of the flying conditions that the rotorcraft will be subject too, however provides a means to identify the energy requirements for its flight. By setting Δ푦 to a value of zero, a simple horizontal flight can be achieved. This will be tested against Mission Profile 1. By setting Δ푥 to a value of zero, a simple vertical flight can be achieved. This will be tested against the first flight leg of Mission Profile 2. By including both the Δ푥 and Δ푦 terms, forward climbing/descending flight can be analysed. This simplified analysis allows all the mission profiles to be tested and evaluated, except the hovering capabilities of Leg 3 in Mission 3. This hovering power will be added to Model Two. The equations of the energy requirements for flight are outlined in the following section.

P a g e | 57

8.1.2 Model One Equations The governing equations for this model are based upon a simplified energy analysis.

Energy Input:

퐸𝑖푛 = 푚̇ 푓푢푒푙 ∗ Δ푡 ∗ 푒푓, 푒푓 = 푓푢푒푙 푒푛푒푟푔푦 푑푒푛푠푖푡푦 (43)

Evaluating Part (a) of the trajectory (Figure 8.1)

푃표푤푒푟 = 퐹표푟푐푒 ∗ 푉푎푏푠 (44)

1 3 (45) 푃표푤푒푟푎 = ⁄2 ∗ 휌 ∗ 퐶퐷 ∗ 퐴푐 ∗ 푉푎푏푠

Where 퐶퐷 is fixed and based on geometry of rotorcraft.

퐸푛푒푟푔푦푎 = 푃표푤푒푟푎 ∗ Δ푡 (46)

Evaluating Part (b) of the trajectory (Figure 8.1) in terms of potential energy U

Δ푦 (47) 푃표푤푒푟 = 푀 ∗ 푔 ∗ ( ) 푏 0 Δ푡

퐸푛푒푟푔푦Δ푦 = 푃표푤푒푟푏 ∗ Δ푡 (48)

Combining both Part (a) and Part (b); the energy for Model One (M1) is:

퐸푀1 = 휂푒푛푔𝑖푛푒 ∗ 퐸𝑖푛,푀1 (49)

Where 휂 is assumed to be 75% of the engines efficiency.

1 (50) 퐸𝑖푛,푀1 = ( ) ∗ ( 퐸푛푒푟푔푦푎 + 퐸푛푒푟푔푦Δ푦) 휂푒푛푔𝑖푛푒

1 (51) 1 3 퐸𝑖푛,푀1 = ( ) ∗ ( ⁄2 ∗ 휌 ∗ 퐶퐷 ∗ 퐴푐 ∗ 푉푎푏푠 ∗ Δ푡 + 푀0 ∗ 푔 ∗ Δ푦) 휂푒푛푔𝑖푛푒

퐸𝑖푛,푀1 (52) 푚̇ 푓푢푒푙 = [푘푔/푠] Δ푡 ∗ 푒푓

Δ푚푓푢푒푙 = 푚̇ 푓푢푒푙 ∗ Δ푡 = 퐸𝑖푛,푀1/푒푓 [푘푔] (53)

These last two equations allow for comparison of various geometric models under the same flight scenarios. Thus a comparison of fuel requirements, range, and endurance can be achieved for the geometric model. The initial conditions of this analysis are shown in the next section.

P a g e | 58

8.1.3 Model One Initial Conditions

Initial conditions and parameters were loaded to generate results. These initial conditions for the simulation are tabulated in Table 8.1: Model One Initial Atmospheric Conditions and Environmental Parameters.

Table 8.1: Model One Initial Atmospheric Conditions and Environmental Parameters

Description Value Name Value Units Altitude of flight (m) (based off 250 feet AGL) Alt_0 76.20 푚

Initial flight level of aircraft Alt_Current 0.00 푚

Data Average Gravitational Constant on Earth Gravity 9.81 푚/푠2 Average Pressure Absolute Pressure_Abs 10.04 푁/푚2 Average Density rho 1.22 푘푔/푚3

Atmospheric Average Dynamic Viscosity Dynamic_Viscos 1.78 푁푠/푚2 Temperature of Air at initial Altitude in Celsius (C) Temp_init_C 24.00 °퐶

Temperature of Air at initial Altitude in Kelvin (K) Temp_init_K 297.15 퐾 Temperature of Air at Altitude in Celsius (C) Temp_C 14.50 °퐶

Model

Initialise Temperature of Air at Altitude in Kelvin (K) Temp_K 287.66 Environmental 퐾

These initial conditions, are loaded at the commencement of the program. The values for all properties loaded are updated when a mission profile is called, and the program starts iterating through each mission profile leg.

Model Specific Initial Conditions

The three various models have various specific initial conditions. The initial conditions pertaining to the individual models are shown in Table 8.2. This table shows the fuel mass and overall vehicle mass for each model. The fuel used is jet fuel (Kerosene), with a specific energy of 46 MJ/Kg [80]. The point mass was assigned 100ml of fuel, whilst the flying point-mass-RP and single rotor were assigned 5 litres of fuel each. Table 8.2: Model One Model Specific Initial Conditions

Units: Kg Value Name Point Mass Flying Brick Single Rotor Mass fuel M.f 7.3722e-02 3.6861 3.6861 Mass initial M.i 3.5000 3.5000 3.5000 (vehicle mass no fuel) Mass full fuel and payload M.0 3.5737 7.1861 7.1861

P a g e | 59

8.1.4 Model One Computer Analysis Program Coding Structure A simplified block diagram model outlining the two separate functions created for Model One is shown in Figure 8.2.

Function 1 Evaluate Fuel for loaded Mission and Geometry Function 2 Model One Energy Analysis

INPUTS INPUTS

 Filename; containing the properties configuration file  Filename; containing the properties configuration file  Mission Requirements; containing the mission profile for  e; (MJ/Kg) where e is fuel energy density evaluation; and all needed variables, (# of legs, length of legs, time for  CD; Coefficient of Drag for loaded geometry 2 each leg, waypoints)  Ac; (푚 ) Characteristic area of loaded air vehicle in flight  Geometry model; containing all properties of the geometry model  푽풂풃풔; (m/s) Absolute velocity of flying craft (geometry, mass, weight, characteristic area, calculated drag  횫풚; (m) change in height step BLOCK DIAGRAMBLOCK coefficients based off geometry)  횫풕; (s) change in time

 풎ퟎ; (kg) current overall mass of vehicle  Geometry model contains all properties of the geometry model EVALUATIONS

 Identify loaded geometry model, and assign fuel amount  Calculate flight velocity for each leg of mission EVALUATIONS  Calculate Δ푦 for each flight leg  Calculate power for horizontal change  Assign fuel flow energy density specific to motor/propulsion device  Calculate power for vertical change according to geometry model loaded  Evaluate energy requirements  Iterate through mission legs & calculate fuel needed and mass flow rates

OUTPUTS OUTPUTS  Mass Fuel Rate  Mass of fuel required for flight legs  횫 풎풂풔풔 풇풖풆풍 for horizontal and vertical steps  Mass Fuel Rate required for flight legs  Total Mass/Weight properties for each leg and total mission

Figure 8.2: Model One Energy and Fuel Analysis Block Diagram

P a g e | 60

As shown in Figure 8.2: Model One Energy and Fuel Analysis Block Diagram, there were two main functions created to evaluate the energy analysis. Both functions contain the properties configuration file (Filename). It contains all geometric and environmental parameters pertaining to the model and mission selected, with initial conditions already loaded. This master config file is updated upon iteration through the program for each flight leg. Function one, takes three main inputs:  Filename;  Mission Requirements; and  Geometric Model.

The mission requirements has been outlined in Section 7.3 Mission Profiles, and can contain any of the 5 coded missions. The geometry model loads the parameters outlined in Section 7.2 Geometric Modelling, and contain the point-mass, point-mass-RP, or the single rotor rotorcraft. This function (Function 1) then calls upon Function 2, and processes the energy analysis. The inputs for Function 2 are shown in Figure 8.2. These inputs include discretised Δ푦 terms from the loaded mission profile in Function 1.

Function 2 takes the discretised values of the mission profile, and iterates through each step calculating and returning values for mass fuel rate and the amount of fuel needed for each step. This is summed in Function 1, which returns the mass fuel flow rate for each leg of its loaded mission, and the total mass of the fuel required. Additionally the final weight of the craft after its mission is returned. The results of this evaluation are shown overleaf, in Section 8.1.5 Model One Results.

P a g e | 61

8.1.5 Model One Results

Results for the simplified energy analysis for the point-mass is shown in Table 8.3: Model One Point Mass - Mass Fuel Rate Results and Table 8.4: Model One Point Mass - Mass Fuel Results.

Table 8.3: Model One Point Mass - Mass Fuel Rate Results

Point Mass Leg # Mission 1 Mission 2 Mission 3 Mission 4 Mission 5 Full Sim. 1 1.8892e-11 2.1504e-08 2.1504e-08 8.6012e-10 8.6010e-10 2.1507e-08 2 - 1.8892e-11 1.8892e-11 1.8892e-11 5.1009e-13 7.9702e-09 Mass flow 3 - 2.1504e-08 0 8.6012e-10 3.4403e-10 3.4404e-08 rate of fuel 4 - - 1.8892e-11 - 7.9702e-15 5.1009e10 (푚̇ 푓푢푒푙) 5 - - 2.1504e-08 - 3.4403e-10 3.4404e-08 Kg/s 6 - - - - 5.1009e-13 7.9702e-09 7 - - - - 8.6010e-10 2.1507e-08

Table 8.4: Model One Point Mass - Mass Fuel Results

Point Leg # Mission 1 Mission 2 Mission 3 Mission 4 Mission 5 Full Sim. Mass 1 3.4006e-08 1.2902e-06 1.2902e-06 2.5804e-07 2.5803e-07 1.2904e-06 Change in 2 - 3.4006e-08 3.4006e-08 3.4006e-08 6.1211e-10 9.5643e-06 Fuel mass 3 - 1.2902e-06 0.0000 2.5804e-07 1.0321e-07 1.0321e-06 over leg 4 - - 3.4006e-08 - 9.5643e-12 3.0606e-07

(푚푓푢푒푙) 5 - - 1.2902e-06 - 1.0321e-07 1.0321e-06 Kg 6 - - - - 6.1211e-10 9.5643e-06 7 - - - - 2.5803e-07 1.2904e-06 ∑ Total 3.4006e-06 2.6145e-06 2.6485e-06 5.5008e-07 7.2371e-07 2.4080e-05

As evident in Table 8.3 and Table 8.5, the mass fuel rates for both the point-mass and flying point-mass-RP are zero for when the aircrafts are in hover in leg 3 of mission 3. This will be addressed in Model Two. The values for mass flow rate and the change in fuel mass are significantly small, especially in the mission legs where there was no height change. This is due to the energy analysis used and how the 퐸푛푒푟푔푦Δ푦 term goes to zero under straight and level flight conditions.

Furthermore, the point mass starting off with a mass of 3.5kg, and contained only 100 ml of fuel. The dimensions of 10mm x 10mm x 10mm also ensure that the energy required to move between flight levels is minimal; due to the drag coefficient being so small. The results for the

P a g e | 62 flying brick are shown in Table 8.5: Model One Flying Point-Mass-RP - Mass Fuel Rate Results and Table 8.6: Model One Flying Point-Mass-RP - Mass Fuel Results overleaf.

Table 8.5: Model One Flying Point-Mass-RP - Mass Fuel Rate Results

Point- Leg # Mission 1 Mission 2 Mission 3 Mission 4 Mission 5 Full Sim. Mass-RP 1 7.7087e-09 4.3973e-08 4.3973e-08 1.7461e-09 1.7354e-09 4.5320e-08 2 - 7.7087e-09 7.7087e-09 7.7087e-09 2.0813e-10 3.2521e-06 Mass flow 3 - 4.3973e-08 0.000 1.7461e-09 6.9216e-10 6.9518e-08 rate of fuel 4 - - 4.3973e-08 - 3.2521e-12 2.0813e-07 (푚̇ 푓푢푒푙) 5 - - 7.7087e-09 - 6.9216e-10 6.9517e-08 Kg/s 6 - - - - 2.0813e-10 3.2521e-06 7 - - - - 1.7354e-09 4.5273e-08

Table 8.6: Model One Flying Point-Mass-RP - Mass Fuel Results

Point- Leg # Mission 1 Mission 2 Mission 3 Mission 4 Mission 5 Full Sim. Mass-RP 1 1.3876e-05 2.6384e-06 2.6384e-06 5.2384e-07 5.2061e-07 2.7192e-06 Change in 2 - 1.3876e-05 1.3876e-05 1.3876e-05 2.4976e-07 0.0039 Fuel mass 3 - 2.6384e-06 0.0000 5.2384e-07 2.0765e-07 2.0855e-06 over leg 4 - - 1.3876e-05 - 3.9025e-09 1.2488e-04

(푚푓푢푒푙) 5 - - 2.6384e-06 - 2.0765e-07 2.0855e-06 Kg 6 - - - - 2.4976e-07 0.0039 7 - - - - 5.2061e-07 2.7192e-06 ∑ Total 1.3876e-05 1.9152e-05 3.3028e-05 1.4923e-05 1.9599e-06 0.0079

The results for the single rotor rotorcraft are not presented due to the model having the same geometry as the point-mass-RP. The single rotor results will be added in consequent models.

P a g e | 63

8.1.6 Model One Discussion

The results from Model One (Table 8.3 - Table 8.6) show very low mass fuel rates and fuel mass needed to execute the mission scenarios. Part of the reason for this, is due to the analysis not taking into account the power required for the geometric model to stay in the air. The analysis assumes that the craft is able to fly without exerting any power, and the power required is an analysis to move the craft from point a-b.

Furthermore, the model doesn’t account for the angle of attack of the flying craft or any external wind forces. It assumes the model is operating in a wind free atmosphere, and at a constant zero degree angle of attack. Additionally, air friction isn’t taken into account under the current model analysis.

Discrepancies in results for horizontal flight and vertical / forward-climbing flight can be seen and is due to the energy analysis not considering the aircrafts weight in straight and level trajectories. This is due to the term Δ푦 → 0 within the analysis. As such, this model will be updated in Section 8.2 Model Two; to include the rotorcraft power needed to overcome the weight of the vehicle and hover the craft.

P a g e | 64

8.2 MODEL TWO – HOVERING POWER

Model Two extends model one by incorporating the power required for hovering the vehicle. This model advances the code towards the project objective of producing an open source rapid multi design tool, for effective preliminary design of rotorcraft. It uses the ideal power required for a vehicle to hover from Rankine-Froude Momentum theory as well as the profile power required and consumed by the rotor blade mechanisms, defined in Blade Element Theory.

8.2.1 Model Two Assumptions

This model makes the assumption that there is no tail rotor, and that the craft is not suceptible to the torque affect. Additionally, it is assumed that the craft does not drift in hovering conditions.

The key momentum theory assumptions used in determing ideal power are:

 The craft was assumed to be in perfect hover; that is, no forward speed and no vertical speed;  The flow travelling through the main rotor blades is axisymmetric around the main rotor mast;  The rotor blades add momentum and energy into the flow; and  The flow is inviscid, irrotational, steady, one-dimensional, and incompressible. o Flow is also uniform through the main rotor disk plane.

The limitations imposed by including profile power is that the profile power analysis assumes that the rotor blades are rectangular in shape (not tapered) and that the coefficient of drag is assumed to be constant. The drag coefficient is assumed independent of Mach number and Reynolds number.

The key blade element theory assumptions used in determining profile power are:

 Rotor blade elements are aerodynamically independent from each other;  Rotor blade forces are only affected and calculated by lift and drag coefficient forces;  An airfoil section is deemed to be a narrow strip / element of the rotor blade aerofoil extending from the centre mast outwards, of chord length ‘c’, and width ‘dr’.

P a g e | 65

8.2.2 Model Two Equations

Extending on Chapter 5.1 Hovering Flight, the momentum theory outlined in Chapter 4.6.1, and the blade element method outlined in Chapter 4.6.2 Blade Element Theory, the ideal power required for the hovering rotor is given by Eq. (5)

3 푃𝑖 = 2휌퐴푣𝑖

However this ideal power doesn’t include viscous affects. Profile power of the rotor blade system needs to be accounted for. Profile power is determined from Chapter 4.6.2 Blade Element Theory, Eq. (11). 1 푃 = 휌푁 Ω3푐퐶 푅4 0 8 푏 푑0

Thus the power required for the rotorcraft to hover (assuming no ground-affects) is given by addition of the ideal induced power and profile power [7];

푃푟표푡표푟 = 푃𝑖 + 푃0 (54) Therefore: 1 푃 = 2휌퐴푣3 + 휌푁 Ω3푐퐶 푅4 (55) 푟표푡표푟 𝑖 8 푏 푑0 Thus:

퐸푛푒푟푔푦ℎ표푣푒푟 = 푃푟표푡표푟Δ푡 (56)

Extending on Model One’s energy analysis result, Eq. (50)

1 퐸𝑖푛,푀1 = ( ) ∗ ( 퐸푛푒푟푔푦푎 + 퐸푛푒푟푔푦Δ푦) 휂푒푛푔𝑖푛푒

And incorporating the 퐸푛푒푟푔푦푎 term within the energy of the rotor becomes:

1 퐸𝑖푛,푀2 = ( ) ∗ [퐸푛푒푟푔푦Δ푦 + 퐸푛푒푟푔푦ℎ표푣푒푟] (57) 휂푒푛푔𝑖푛푒

1 3 1 3 4 퐸𝑖푛,푀2 = ( ) ∗ ( 푀0푔Δ푦 + 2휌퐴푣𝑖 + 휌푁푏Ω 푐퐶푑0푅 ) (58) 휂푒푛푔𝑖푛푒 8

P a g e | 66

This then allows the mass flow rate of fuel calculation to be updated as well as the change in fuel for a mission. These new formuale become:

퐸𝑖푛,푀2 (59) 푚̇ 푓푢푒푙 푀2 푢푝푑푎푡푒푑 = [푘푔/푠] Δ푡 ∗ 푒푓

Δ푚푓푢푒푙 푀2 푢푝푑푎푡푒푑 = 푚̇ 푓푢푒푙 ∗ Δ푡 = 퐸𝑖푛,푀2/푒푓 [푘푔] (60)

Equations (59) and (60) allow for the comparison of various geometric models under the same flight conditions and mission profiles. Thus a comparison of fuel requirements, range, and endurance can be achieved for the geometric model. The initial conditions and results of this analysis are shown in the following section.

8.2.3 Model Two Initial Conditions

Initial conditions and parameters were loaded to generate results. These initial conditions consist of rotor geometry and the testing environmental conditions. Model Two needs the same initial atmospheric and environmental conditions initialised in Model One, Table 8.1: Model One Initial Atmospheric Conditions and Environmental Parameters. The initial conditions for the rotor blade geometry for the simulation are tabulated and are presented in Table 8.7: Model Two Initial Geometric Conditions, Test Conditions and Propulsion Parameters.

Table 8.7: Model Two Initial Geometric Conditions, Test Conditions and Propulsion Parameters

Description Value Name Value Units Number of Main Rotor Blades N_MainBlades 4 -

Number of Tail Rotor Blades N_TailRotorBlades 4 - Number of Main Rotor Blade Assemblies N_Rotor_Assembly 1 - Number of Engines N_Engine_Motor 1 Rotorcraft Main Rotor Blade Chord Blade_Chord 0.08 푚 Geometric Main Rotor Blades Radius Blade_Radius 0.30 Parameters 푚 Main Rotor Blades Wingspan Wingspan 0.60 푚 Main Rotor Blade Loading Blade_loading 1 - Main Rotor Blade Aspect Ratio Blade_AR 7.52 - Main Rotor Blade Circumference Circumference_rotor 1.88 m Speed of Sound a 339.38 푚/푠 Test Conditions Main Rotor Blades Tip Speed Blade_tip_speed 183.26 푚/푠 Propulsion / Kilovolt Rating of Engine/Propulsion PMSM kv_rating 960 푘푉 Motor Parameters Size of Battery battery_size 12.60 푉

P a g e | 67

From Table 8.7, the number of rotor blades has been initialised, as well as the number of engines used. The main geometric properties of the main rotor assembly is also initialised, including blade chord, radius, aspect ratio, circumference and blade loading. Initial testing conditions are initialised with the main rotor blades tip speed kept to Mach 0.6 of the ambient speed of sound conditions as outlined in Section 5.1 Hovering Flight. The blade radius and wingspan was evaluated using the propulsion/motor parameters indicated.

All these initial conditions are loaded at the commencement of the Model Two code. The values for all properties loaded are updated when the program iterates through the updated energy analysis. The coding structure of Model Two is outlined in Section 8.2.4 Model Two Computer Analysis Program Coding Structure.

8.2.4 Model Two Computer Analysis Program Coding Structure

The code required for Model Two involved several functions. An initial function needed to be created to determine the maximum rotorcraft radius. This function evaluates and determines the maximum rotorcraft radius depending on maximum power applied to the permanent magnet synchronous motor (PMSM) used as the propulsion device on the rotorcraft. A block diagram for the program that evaluates the rotors rotational speed is shown overleaf, and is labelled Function 3. Function 4 evaluates maximum rotorcraft radius using Mach number restrictions.

P a g e | 68

Function 3 Rotor Rotational Speed Given Motor Requirements Function 4 Maximum Blade Radius and Blade Velocity

INPUTS INPUTS

 Filename; containing the properties configuration file  Filename; containing the properties configuration file  Engine Condition; This value allows the program to determine the  Velocity of Blades; Velocity of rotating blades rotational speed of the main rotor blades for hover, forward flight, vertical ascension, and descension flight  kV Rating; kilovolt rating of engine/propulsion mechanism EVALUATIONS

 Battery Size; size of the battery used

BLOCK DIAGRAMBLOCK  Compare velocity of blades to speed of sound

o If velocity ≥ speed of sound, apply maximum Mach number restriction (0.78) and evaluate for maximum blade radius EVALUATIONS  Calculate blade radius for hovering condition with Mach number restriction (0.6)  Identify blade radius from main geometry file  Evaluate and update blade radius and velocity of blades  Calculate RPM from kV rating and battery size  Update RPM depending on the engine condition

 Calculate Rotor blade RPM/RPS and omega OUTPUTS  Calculate Velocity of the blades for the engine condition

 Velocity of Blades; Velocity of rotating blades  Maximum Blade Radius; for all conditions and for hovering condition OUTPUTS

 Omega; Angular/rotational speed of the rotor blades  Blade RPM/RPS; Blade revolutions per minute and second  Velocity of Blades; Velocity of rotating blades

Figure 8.3: Model Two Rotor Rotational Speed and Maximum Blade Radius Block Evaluation Diagram

Figure 8.3 highlights the two functions created to evaluate maximum rotor blade radius based off the propulsion device used, and the velocity of the rotating blades. Function 3 allows the calculation of the rotational speed of the main rotor blades depending on the engine condition. This correlates to the mission profile. If the rotorcraft ‘off’, the rotation speed is zero. If the rotorcraft is in forward flight, the function returns the respective speed. This is

P a g e | 69 consistent for all rotorcraft conditions. Function 4 is used for identifying the maximum main rotorcraft blade radius based off the kV rating and battery size used. An optimization script for changing the kV rating and battery size will be implemented in further sequential models. Which can then utilize this function for model analysis and comparisons.

Functions for the power required for the craft to hover (ideal power) and the power required to rotate the rotorcraft blades (profile power) was created. The block diagram outlining the function created for evaluating the power required for hovering is shown in Figure 8.4. It is important to note that this function and model does not take into account viscous affects.

Function 5 Hovering Ideal Induced Power – Momentum Theory

INPUTS

 Filename; containing the properties configuration file

EVALUATIONS

 Identify blade radius from main geometry file

DIAGRAMBLOCK  Identify density from environmental file for current rotorcraft alt.  Identify speed of sound from main environmental file  Calculate blade velocity based on a 10% added safety factor, and blades operating at 60% of the this maximum velocity  Calculate Velocity induced through the main rotor blades  Calculate Rotor disk area  Evaluate Ideal Induced Power required to hover

OUTPUTS

 P ideal induced; Ideal Induced Power required to hover

Figure 8.4: Model Two Hovering Ideal Induced Power (Momentum Theory) Diagram

Figure 8.4 highlights the needed evaluations to determine the induced hovering power for the rotorcraft. It requires the calculation of density for the given altitude, the speed of sound through the identified flown atmosphere, and calculations of the blade velocities under the hovering condition, and the induced velocity of air through the main rotor blade assembly. This function returns the ideal hovering power in watts.

The function created for profile power is shown overleaf in Figure 8.5: Model Two Hovering Profile Power (Blade Element Method) Diagram.

P a g e | 70

Function 6 Hovering Profile Power – Blade Element Method

INPUTS Function 7 3-Dimensional Drag Coefficient

 Filename; containing the properties configuration file  Geometry model; containing all properties of the geometry model INPUTS (geometry, mass, weight, characteristic area, calculated drag  Filename; containing the properties configuration file coefficients based off geometry)  Geometry model; containing all properties of the geometry model (geometry, mass, weight, characteristic area, calculated drag coefficients based off geometry) DIAGRAMBLOCK EVALUATIONS   Identify blade radius from main geometry file EVALUATIONS  Identify density from environmental file for current rotorcraft alt  Identify number of blades from main geometry file  Evaluate Drag coefficient given geometry of vehicle  Identify blade chord from main geometry file  Identify speed of sound from main environmental file

 Calculate Drag coefficient using craft geometry OUTPUTS  Calculate Velocity of the blades for hovering condition  Calculate Profile Power required to hover  CD; Drag coefficient

OUTPUTS

 P profile; Profile Power required to hover

Figure 8.5: Model Two Hovering Profile Power (Blade Element Method) Diagram

Figure 8.5 calculated the profile power required for the hovering vehicle. It uses a 10% safety factor reduction, equating to 90% of the maximum rotor blade velocity given the speed of sound in the flying atmosphere medium. Furthermore, the velocity of the blades was then set to 60% of this maximum rotor blade speed due to most conventional hovering rotorcrafts using a blade rotation speed of approximately 60% of the speed of sound [7, p. 56]. With the ideal power required for the craft to hover and the profile power required to rotate the rotorcraft blades calculated, an updated energy analysis function was created to incorporate the hovering power. The two separate functions created for Model Two is shown in Figure 8.6.

P a g e | 71

Function 8 Updated Evaluate Fuel for loaded Mission and Geometry Function 9 Model Two Energy Analysis

INPUTS INPUTS

 Filename; containing the properties configuration file  Filename; containing the properties configuration file  Mission Requirements; containing the mission profile for  e; (MJ/Kg) where e is fuel energy density evaluation; and all needed variables, (# of legs, length of legs, time for  CD; Coefficient of Drag for loaded geometry each leg, waypoints)  Ac; (푚2) Characteristic area of loaded air vehicle in flight

 Geometry model; containing all properties of the geometry model  푽풂풃풔; (m/s) Absolute velocity of flying craft (geometry, mass, weight, characteristic area, calculated drag  횫풚; (m) change in height step

BLOCK DIAGRAMBLOCK coefficients based off geometry)  횫풕; (s) change in time

 풎ퟎ; (kg) current overall mass of vehicle  Geometry model contains all properties of the geometry model

EVALUATIONS   Identify loaded geometry model, and assign fuel amount EVALUATIONS  Calculate flight velocity for each leg of mission  Calculate Δ푦 for each flight leg  Calculate power for horizontal change Function 5  Assign fuel flow energy density specific to motor/propulsion device  Calculate power for vertical change Function 6 according to geometry model loaded  Calculate power to hover (ideal power and profile power)  Iterate through mission legs & calculate fuel needed and mass flow rates  Evaluate energy requirements Function 7

OUTPUTS OUTPUTS

 Mass of fuel required for flight legs  Mass Fuel Rate  Mass Fuel Rate required for flight legs  횫 풎풂풔풔 풇풖풆풍 for horizontal and vertical steps  Total Mass/Weight properties for each leg and total mission

Figure 8.6: Model Two Energy and Fuel Analysis Block Diagram

Figure 8.6 shows the block diagram for the updated energy analysis functions created to include hovering power. Function 8 evaluates the fuel for the loaded mission and geometry, by discretising loaded mission profiles into useable data. This data, as well as the geometry model, and other key parameters of flight is sent to Function 9 for evaluation. Function 9 calculates the power needed for the craft and calls upon Functions 5, 6, and 7.

P a g e | 72

8.2.5 Model Two Results

Results for the updated energy analysis with hovering power for the point-mass is shown in Table 8.8: Model Two Point Mass - Mass Fuel Rate Results and Table 8.9: Model Two Point Mass - Mass Fuel Results.

Table 8.8: Model Two Point Mass - Mass Fuel Rate Results

Point Mass Leg # Mission 1 Mission 2 Mission 3 Mission 4 Mission 5 Full Sim. 1 3.6682e-06 3.6893e-06 3.6893e-06 3.6691e-06 3.6691e-06 3.6893e-06

2 - 3.6682e-06 3.6682e-06 3.6682e-06 3.6682e-06 3.6762e-06 Mass flow 3 - 3.6893e-06 3.6682e-06 3.6691e-06 3.6686e-06 3.7019e-06 rate of fuel 4 - - 3.6682e-06 - 3.6682e-06 3.6687e-06 (푚̇ 푓푢푒푙) 5 - - 3.6892e-06 - 3.6686e-06 3.7019e-06 Kg/s 6 - - - - 3.6682e-06 3.6762e-06

7 - - - - 3.6691e-06 3.6892e-06

Table 8.9: Model Two Point Mass - Mass Fuel Results

Point Mass Leg # Mission 1 Mission 2 Mission 3 Mission 4 Mission 5 Full Sim. 1 0.0066 2.2136e-04 2.2136e-04 0.0011 2.2136e-04 0.0011

Change in 2 - 0.0066 0.0066 0.0066 0.0044 0.0044 Fuel mass 3 - 2.2136e-04 0.0011 0.0011 1.1106e-04 0.0011 over leg 4 - - 0.0066 - 0.0022 0.0044

(푚푓푢푒푙) 5 - - 2.2135e-04 - 1.1106e-04 0.0011 Kg 6 - - - - 0.0044 0.0044

7 - - - - 2.2135e-04 0.0011

∑ Total 0.0066 0.0070 0.0147 0.0088 0.0117 0.0176

As shown in both Table 8.8 and Table 8.10, the mass fuel flow rate for the point-mass and flying point-mass-RP varies depending on the flight leg. However this isn’t the case, the change in fuel rate for manoeuvring the vehicle (Model One) is small relative to the large amount of fuel needed to hover the vehicle. The results for the flying brick are shown in Table 8.10: Model Two Flying Point-Mass-RP - Mass Fuel Rate Results and Table 8.11: Model Two Flying Point- Mass-RP - Mass Fuel Results.

P a g e | 73

Table 8.10: Model Two Flying Point-Mass-RP - Mass Fuel Rate Results

Point- Leg # Mission 1 Mission 2 Mission 3 Mission 4 Mission 5 Full Sim. Mass-RP 1 0.0030 0.0030 0.0030 0.0030 0.0030 0.0030 Mass flow 2 - 0.0030 0.0030 0.0030 0.0030 0.0030 rate of 3 - 0.0030 0.0030 0.0030 0.0030 0.0030 fuel 4 - - 0.0030 - 0.0030 0.0030

(푚̇ 푓푢푒푙) 5 - - 0.0030 - 0.0030 0.0030 Kg/s 6 - - - - 0.0030 0.0030 7 - - - - 0.0030 0.0030

Table 8.11: Model Two Flying Point-Mass-RP - Mass Fuel Results

Point- Leg # Mission 1 Mission 2 Mission 3 Mission 4 Mission 5 Full Sim. Mass-RP 1 5.4728 0.1824 0.1824 0.9121 0.1824 0.9121 Change in 2 - 5.4728 5.4728 5.4728 3.6524 3.6485 Fuel mass 3 - 0.1824 0.9121 0.9121 0.0912 0.9121 over leg 4 - - 5.4728 - 1.8244 3.6485

(푚푓푢푒푙) 5 - - 0.1824 - 0.0912 0.9121 Kg 6 - - - - 3.6524 3.6485 7 - - - - 0.1824 0.9121 ∑ Total 5.4728 5.8377 12.2226 7.2971 9.6766 14.5941

The change in mass for the mission profiles loaded for both the point mass, and flying point- mass-RP can be seen in Table 8.9 and Table 8.11. As evident, the returned values are now in the kilograms, as opposed to the minute kilogram values returned under the first energy analysis model.

P a g e | 74

The results for the flying single rotor are shown in Table 8.12: Model Two Single Rotor - Mass Fuel Rate Results and Table 8.13: Model Two Single Rotor - Mass Fuel Results.

Table 8.12: Model Two Single Rotor - Mass Fuel Rate Results

Single Rotor Leg # Mission 1 Mission 2 Mission 3 Mission 4 Mission 5 Full Sim. 1 0.0030 0.0030 0.0030 0.0030 0.0030 0.0030

2 - 0.0030 0.0030 0.0030 0.0030 0.0030 Mass flow 3 - 0.0030 0.0030 0.0030 0.0030 0.0030 rate of fuel 4 - - 0.0030 - 0.0030 0.0030 (푚̇ 푓푢푒푙) 5 - - 0.0030 - 0.0030 0.0030 Kg/s 6 - - - - 0.0030 0.0030 7 - - - - 0.0030 0.0030

Table 8.13: Model Two Single Rotor - Mass Fuel Results

Single Rotor Leg # Mission 1 Mission 2 Mission 3 Mission 4 Mission 5 Full Sim. 1 5.4728 0.1824 0.1824 0.9121 0.1824 0.9121

Change in 2 - 5.4728 5.4728 5.4728 3.6524 3.6485 Fuel mass 3 - 0.1824 0.9121 0.9121 0.0912 0.9121 over leg 4 - - 5.4728 - 1.8244 3.6485

(푚푓푢푒푙) 5 - - 0.1824 - 0.0912 0.9121 Kg 6 - - - - 3.6524 3.6485

7 - - - - 0.1824 0.9121

∑ Total 5.4728 5.8377 12.2226 7.2971 9.6766 14.5941

8.2.6 Model Two Discussion

The values obtained for the flying point-mass-RP and the single rotor rotorcopter are the same to five significant figures. This implies that the added weight of the rotor blades/shaft/ mast/assembly and the added weight of the tail empennage, tail boom and tail rotor do not add any significant difference to the fuel mass flow rate or fuel needed for operations. However this is due to the assumptions of the model. Further revisions will see that these general assumptions can be resolved and accounted for producing an increase in accuracy of the results. These results will be validated with the testing mission profiles outlined in section 7.3.

P a g e | 75

This updated model includes the power required for the rotorcraft to hover, and the power required to manoeuvre anywhere in 3D space. However under the momentum theory analysis for the hovering ideal induced power, viscous affects have been neglected. This is an appropriate assumption as the hovering craft is designed in this program to operate at speeds less than 78% of the speed of sound.

Additionally, ground-affects have been disregarded for the model. This means that for take-off and landing, the power required for hovering near to the ground is inaccurate. However for when the craft is hovering out of the ground affects, the hovering power is will defined and provides relatively accurate results as a first order estimate technique.

Another source of inaccuracy for the model is substantiated when calculating profile power. Whilst using blade element theory for this analysis, the rotor blades are assumed to be rectangular in shape (not tapered). This means that his profile power module would have to be updated in consequent revisions to calculate profile power given any rotor blade aerofoil. However, as the goal of this thesis project is to provide a computer framework that can provide preliminary designs in the initial conceptual stages, this assumption remains valid for initial designs, as the fuselage geometry, gross weight of the vehicle, and propulsion device affect the overall performance to a higher degree than allowing the rotor blades geometry to vary.

This analysis is also based on a constant drag coefficient based upon the geometry of the vehicle. It is further assumed that this drag coefficient is independent of Mach number and Reynolds number (viscous affects).

P a g e | 76

8.2.7 Model Two Assumptions Discussion

The overall analysis of this calculation of hover power (profile plus ideal induced power) has many key fundamental simplified assumptions. These assumptions affect the overall analysis in their own way, with some assumptions holding greater bearing on results than others that produce negligible differences. Identifying these key assumptions is essential in the application of revised and extended area specific modules that can be added into the software suite. As such, the key assumptions that were made in this analysis with short descriptions of their effects is outlined within this section. The assumptions have been split into momentum theory assumptions and blade element method assumptions as Model Two made use of both methods.

Momentum Theory Assumptions

The inflow velocity through the blades is assumed to be uniform over the entire rotor disk area. That is, it is uniformly distributed, using a 1-Dimensional analysis. In reality, this is incorrect, however is an appropriate assumption in the preliminary conceptual and design stages.

Blade Element Method Assumptions

The blade elements along the rotor disk plane are not aerodynamically independent from one another and these relations will need to be added into extended more advanced models of this program. Additionally it is assumed that the entire rotor disk produces lift, however the lift producing sections of the rotor blades starts at a distance outwards from the centre of rotation. The tips of the rotor blades don’t produce the same amount of lift as the centre of the blades, do to swirl, turbulence wake, and other effects.

General Assumptions

The rotor blades are rectangular, rigid, don’t flex, have no torsion/twisting moments, constant chord length, and the vortices extending off the rotor blades do not affect the angle of attack / lifting capabilities of the next advancing blade. All these assumptions have great effect on the rotorcraft and further modules can be added to the program identifying and targeting any of these specific assumptions to increase the accuracy of the rotorcraft analysis program.

P a g e | 77

8.3 MODEL THREE – POWER REQUIRED TO CLIMB

Model Three extends on Model Two by incorporating the power required for climbing the rotorcraft. In the previous model, the hovering power was added. However this didn’t account for the difference in the power required between climbing performance and hovering. This excess power is added into the model, by using the total thrust result outlined in Section 5.3 Climbing Forward Flight (comprehensively derived in Appendix D).

The power required to climb is larger in magnitude to the hovering power due to the craft having to overcome changes in potential energy as it climbs. Addition effects of this analysis include an increase in vertical drag, and a decrease in induced power for the rotors.

8.3.1 Model Three Equations The total thrust value (Eq. (32)) for climbing forward flight was found to be (Section 5.3 Climbing Forward Flight):

2 2 푇 = √(퐷퐹퐶푃 sin(훼퐹푃 − 휃퐹푃)) + (푊표푣푒푟푎푙푙 푟표푡표푟 + 퐷퐹퐶푃 cos(훼퐹푃 − 휃퐹푃))

Extending on Eq. (32), the power for climb is:

Pclimb = 푇 푉푎푏푠 (61)

2 2 푃푐푙𝑖푚푏 = √(퐷퐹퐶푃 sin(훼퐹푃 − 휃퐹푃)) + (푊표푣푒푟푎푙푙 푟표푡표푟 + 퐷퐹퐶푃 cos(훼퐹푃 − 휃퐹푃)) 푉푎푏푠 (62)

Converting to energy:

퐸푛푒푟푔푦푐푙𝑖푚푏 = 푃푐푙𝑖푚푏Δ푡 (63)

Extending on Model Two’s energy analysis result Eq. (57);

1 퐸𝑖푛,푀2 = ( ) ∗ [퐸푛푒푟푔푦Δ푦 + 퐸푛푒푟푔푦ℎ표푣푒푟] 휂푒푛푔𝑖푛푒

Energy for model three (M3) is:

1 퐸𝑖푛,푀3 = ( ) ∗ [(퐸푛푒푟푔푦Δ푦 + 퐸푛푒푟푔푦ℎ표푣푒푟) + 퐸푛푒푟푔푦푐푙𝑖푚푏] (64) 휂푒푛푔𝑖푛푒

P a g e | 78

1 3 1 3 4 퐸𝑖푛,푀3 = ( ) ∗ (푀0푔Δ푦 + 2휌퐴푣𝑖 + 휌푁푏Ω 푐퐶푑0푅 + ⋯ ) 휂푒푛푔𝑖푛푒 8

2 2 … [√(퐷퐹퐶푃 sin(훼퐹푃 − 휃퐹푃)) + (푊표푣푒푟푎푙푙 푟표푡표푟 + 퐷퐹퐶푃 cos(훼퐹푃 − 휃퐹푃)) 푉푎푏푠] Δ푡)

(65) Where:

퐷푣 ℎ표푣푒푟 휌 2 휌 2 4 ( ) (푣𝑖푛푑푢푐푒푑 푐푙𝑖푚푏 + 푉푐) 퐴푚 + (Δ퐴푧퐶퐷 푎푟푒푎 푛표푡 𝑖푛 푤푎푘푒) 푉푐 푊ℎ표푣푒푟 2 2 퐷퐹퐶푃 = cos(훼퐹푃 − 휃퐹푃)

퐴푚 = 푝표푟푡푖표푛 표푓 푎푖푟푓푟푎푚푒 푖푛 푡ℎ푒 푤푎푘푒 표푓 푡ℎ푒 푚푎푖푛 푟표푡표푟,

Δ퐴푧 = 푝표푟푡푖표푛 표푓 푎푖푟푓푟푎푚푒 푛표푡 푖푛 푡ℎ푒 푤푎푘푒 표푓 푡ℎ푒 푚푎푖푛 푟표푡표푟푠

A potential flow tool by Dr. Ingo Jahn [81] has been used to determine the flow field acting on the flying single rotor rotorcraft. The scaling of the axis and positioning of the two vortices symbolising the vortexes at the rotorcraft rotor blade tips has been accurate in accordance to the initial conditions of the craft set out in Sections 8.1.3 and 8.2.3. A uniform flow was added with an assumed angle of 45°, approximating a climbing flight scenario. The generated flow field and the superimposed rotorcraft geometry can be seen in Figure 8.7. The flow field would then be used to determine the x and y coordinates for the areas within the flow wake.

-0.3 0.3

Figure 8.7: Potential Flow Field around Flying Single-Rotor in Climbing Forward Flight Program Code From: Potential flow program generated by works from Dr. Ingo Jahn [81]

P a g e | 79

From Figure 8.7, the calculation of 퐴푚 was relatively straight forward for the point-mass-RP and single-rotor, as the radius for the rotor blades covered the entire craft leaving no portion of the airframe not within the wake. Thus, for the geometric models 1, 2, and 3; Δ퐴푧 = 0.

Additionally, 퐴푚 = projected area from the plan view of the flying crafts; which equals the top area of the rectangular prism shape. In this case, the projected plan view area is 230푚푚 푥 110푚푚.

This additionally makes a perfect 3D plate to generate the drag coefficient. The drag coefficient is calculated from approximations shown in Appendix B: 3-Dimensional Drag Coefficients.

8.3.2 Model Three Assumptions

Key assumptions need to be defined in the calculation of 퐴푚 and Δ퐴푧. Potential flow theory needs to be used with assumed irrotational vortexes with strength k=100, and a uniform flow with angle 45°s. This is to replicate a rotorcraft in forward climbing flight. Furthermore, the flow assumes a 2-Dimensional not allowing for the 3rd dimension. Rotor blade swirl, gyroscopic precession, Coriolis Effect, law of angular momentum, ground effect, and coning are not incorporated into this analysis. Furthermore, the flying object had to be superimposed onto the potential flow results; this introduces quantifiable errors into calculations especially when the flow field is increased. Additionally, the analysis doesn’t take into account the angle of attack of the craft, the speed in which the craft is travelling through the flow medium, and it assumes no wind. It is suggested that further modules will need to automate this process of calculating

퐴푚 and 퐴푧, for various rotorcraft speeds, angles of attack, and geometries.

Power Required in Climb Assumptions

The assumptions pertaining to the power required for climb relate to the equation of momentum. Furthermore, it is assumed in this analysis that there is no tail rotor, and that there is no helicopter drift.

For calculation of the rotor angle of attack 훼퐹푃, it will be assumed that the fore and aft rotor blades will be inline and parallel with each other and in the same plane. Additionally, this will be in alignment with the top plane of the rotorcraft. For this model, a value of −10° from the horizontal will be assumed for all forward climbing flight conditions. The flight path angle 휃퐹푃 will be calculated from the mission waypoint data. This angle will be the pitch of the craft and will be aligned with the earth’s surface under flat-Earth assumptions.

P a g e | 80

8.3.3 Model Three Initial Conditions As model three is extending on models one and two, the same initial conditions loaded in Table 8.1: Model One Initial Atmospheric Conditions and Environmental Parameters and Table 8.7: Model Two Initial Geometric Conditions, Test Conditions and Propulsion Parameters. Additional to these loaded parameters, the model specific conditions are shown in Table 8.14: Model Three Initial Test Conditions. Table 8.14: Model Three Initial Test Conditions

Description Value Name Value Units Rotor Blade Angle of Attack AoA -10 ° Test Portion of airframe in the wake of the main rotor Am 0.0253 푚2 Conditions Portion of airframe not in the wake of the main rotor Az 0 푚2

8.3.4 Model Three Computer Analysis Program Coding Structure The first step of initializing the climbing power was to create a function for calculating the vertical climbing drag force. This function is shown in Figure 8.8.

Function 10 Vertical Climbing Drag Force

INPUTS

 풗풊; velocity induced; (velocity through the main rotor blades )  풎ퟎ; (kg) current overall mass of vehicle  푽풂풃풔; (m/s) Absolute velocity of flying craft 3  흆; (푘푔/푚 ) density of aircraft for current altitude  AoA; (°) Rotor blade angle of attack

 푭푷풂풏품풍풆; Flight path angle (aircraft pitch) BLOCK DIAGRAMBLOCK  Geometry model; contains all properties of the geometry model  Mission profile; contains the loaded mission model

EVALUATIONS  Calculate Area within main rotor wake  Calculate Area not within main rotor wake  Calculate Drag coefficient for area not within main rotor wake  Evaluate Vertical drag force for hovering condition  Normalize Drag force with respect to hovering vehicle gross weight  Evaluate Vertical drag force for forward climbing flight rotorcraft

OUTPUTS

 푫풓풂품풇풐풓풘풂풓풅 풄풍풊풎풃풊풏품 풑풓풐풑풖풍풔풊풐풏; Drag required to climb

Figure 8.8: Model Three Vertical Climbing Drag Force Program Diagram

P a g e | 81

Function 11 Updated Evaluate Fuel for loaded Mission and Geometry Function 12 Model Three Energy Analysis

INPUTS INPUTS

 Filename; containing the properties configuration file  Filename; containing the properties configuration file  Mission Requirements; containing the mission profile for  e; (MJ/Kg) where e is fuel energy density evaluation; and all needed variables, (# of legs, length of legs, time for  CD; Coefficient of Drag for loaded geometry each leg, waypoints)  Ac; (푚2) Characteristic area of loaded air vehicle in flight  Geometry model; containing all properties of the geometry model  푽풂풃풔; (m/s) Absolute velocity of flying craft (geometry, mass, weight, characteristic area, calculated drag  횫풚; (m) change in height step BLOCK DIAGRAMBLOCK coefficients based off geometry)  횫풕; (s) change in time

 풎ퟎ; (kg) current overall mass of vehicle  Geometry model contains all properties of the geometry model EVALUATIONS   Identify loaded geometry model, and assign fuel amount

 Calculate flight velocity for each leg of mission EVALUATIONS Function 5  Calculate Δ푦 for each flight leg  Calculate power for horizontal change  Assign fuel flow energy density specific to motor/propulsion device  Calculate power for vertical change Function 6 according to geometry model loaded  Calculate power to hover (ideal power and profile power)  Iterate through mission legs & calculate fuel needed and mass flow rates Return values Function 7  Calculate power to climb Function 10  Evaluate energy requirements OUTPUTS  Mass of fuel required for flight legs OUTPUTS  Mass Fuel Rate required for flight legs  Total Mass/Weight properties for each leg and total mission  Mass Fuel Rate  횫 풎풂풔풔 풇풖풆풍 for horizontal and vertical steps

Figure 8.9: Model Three Energy and Fuel Analysis Block Diagram

Figure 8.9 shows the block diagram of the updated analysis. Function 12 evaluates and calculates the power required for hovering, rotating and overcoming friction drag, and evaluates the climbing power required for flight. These values are then returned to Function 11 were fuel data is returned.

P a g e | 82

8.3.5 Model Three Results

The results from adding in the climbing power required for the flying single rotor is shown in Table 8.15: Model Three Single Rotor - Mass Fuel Rate Results and Table 8.16: Model Three Single Rotor - Mass Fuel Results.

Table 8.15: Model Three Single Rotor - Mass Fuel Rate Results

Single Rotor Leg # Mission 1 Mission 2 Mission 3 Mission 4 Mission 5 Full Sim. 1 0.0030 0.0030 0.0030 0.0030 0.0030 0.0030

2 - 0.0030 0.0030 0.0030 0.0030 0.0031 Mass flow 3 - 0.0030 0.0030 0.0030 0.0030 0.0030 rate of fuel 4 - - 0.0030 - 0.0030 0.0031 (푚̇ 푓푢푒푙) 5 - - 0.0030 - 0.0030 0.0030 Kg/s 6 - - - - 0.0030 0.0032

7 - - - - 0.0030 0.0030

Table 8.16: Model Three Single Rotor - Mass Fuel Results

Single Rotor Leg # Mission 1 Mission 2 Mission 3 Mission 4 Mission 5 Full Sim. 1 5.4784 0.1826 0.1826 0.9124 0.1827 0.9123

Change in 2 - 5.4782 5.4782 5.4777 3.7467 3.6498 Fuel mass 3 - 0.1825 0.9121 0.9122 0.0913 0.9122 over leg 4 - - 5.4790 - 1.8332 3.6487

(푚푓푢푒푙) 5 - - 0.1825 - 0.0912 0.9122 Kg 6 - - - - 3.8351 3.6501 7 - - - - 0.1825 0.9123

∑ Total 5.4817 5.8466 12.2451 7.3052 10.2894 14.5977

P a g e | 83

8.3.6 Model Three Discussion

The results for the change in fuel required for model two and model three is shown in Table 8.17: Model Two vs Three Single Rotor - Mass Fuel Results; with Mission 5 results omitted.

Table 8.17: Model Two vs Three Single Rotor - Mass Fuel Results

Model # 2 3 2 3 2 3 2 3 2 3 Single Leg Rotor # Mission 1 Mission 2 Mission 3 Mission 4 Full Sim. 1 5.4728 5.4784 0.1824 0.1826 0.1824 0.1826 0.9121 0.9124 0.9121 0.9123 2 - 5.4728 5.4782 5.4728 5.4782 5.4728 5.4777 3.6485 3.6497

3 - 0.1824 0.1825 0.9121 0.9121 0.9121 0.9122 0.9121 0.9122

) Kg 4 - - 5.4728 5.4790 - 3.6485 3.6487

푓푢푒푙

(

in mass Fuel over 5 - - 0.1824 0.1825 - 0.9121 0.9122 leg 6 - - - - 3.6485 3.6501

Change 7 - - - - 0.9121 0.9123 ∑ Total 5.4728 5.4784 5.8377 5.8467 12.2226 12.2451 7.2971 7.3052 14.5941 14.5977

As evident, the results have increased due to the added climbing power term. However many simplifications needed to occur for this evaluation to take place. The assumption that the craft is flying at a constant −10° angle of attack is an approximation, and a further module calculating the specific angle of attack will need to be added in further revisions.

Additionally, the program discretises and iterates through the loaded mission script via way- points. This doesn’t included varying angles of attack or flight path angles that would exist in real world operations with natural environmental effects such as wind, variable humidity, and Coriolis Effect.

A module that automates the areas within and not within the main rotors wake as the rotorcraft changes orientations and attitude in 3D space will need to be implemented to drastically increase the validity of these produced results. This could include incorporating a program that calls upon the potential flow code, and automatically creates vortices in place of the rotorcrafts main rotor blade radius. As well as superimposing the geometry of the evaluated craft into the wake field, to determine the areas. Else a CFD module may need to be researched.

P a g e | 84

At the present, the program provides results for the rectangular craft. Model Four would need to be created to iterate through the first three modules so that a large amount of geometries could be weighed against user specified cost functions. These could be requirements of, range, endurance, gross vehicle weight, number of engines, propulsion system used, number of rotor blades, rotor blade camber, main rotor blade diameter, rotor blade ground clearance and droop, and other such parameters.

Further modules for swirl, gyroscopic precession, law of angular momentum, ground effect, and or coning will need to be implemented. The next chapter iterates through the first three models and highlights certain preliminary results for further analysis in the preliminary design of the rotorcraft.

P a g e | 85

Chapter 9

9 MULTI-DIMENSIONAL MODEL-FITTING SIMULATION Multi-Dimensional Model Fitting Simulation and Evaluation

This chapter analyses and provides a discussion on the results obtained by a multi-dimensional model fitting simulation. Key parameters that were changed within this simulation include:  Rotor blade radius;  Rotor blade chord;  Rotor blade wingspan;  Rotor blade aspect ratio;  Rotor blade tip path circumference;  Rotor blade tip velocity;  Kilovolt rating of the engine propulsion system;  Size of the battery, and its rate of discharge;  Rotor blade solidity;  Overall vehicle mass; and  The amount of fuel mass added to the vehicles gross weight. To achieve these objectives, a few functions were created to iterate through the first three models (Model One-Three). These three functions can be found in Appendix H Multi- Dimensional Model Generation Code, Appendix I Multi-Dimensional Model – Parallel Axis Plot Sourcing, and Appendix J Multi-Dimensional Model – Parallel Axis Plot Graph. The results obtained by this code is shown in Figure 9.1: Normalized Parallel Coordinate Axis Plot for Multi-Dimensional Model Fitting Simulation. The individual axis contain the minimum and maximum values for their data range. So for the first data axis, ‘blade radius’, the minimum value tested was 0.1metres, and the maximum evaluated data was 2.5 metres.

P a g e | 86

Figure 9.1: Normalized Parallel Coordinate Axis Plot for Multi-Dimensional Model Fitting Simulation

Figure 9.1 shows the normalized geometric and evaluated values for the key parameters used in the full simulation of the entire software framework. All variables have been normalised by their respective largest numbers, such that the y-axis is scaled to values between 0 and 1. In addition to these key parameters that are changed, the calculated fuel required values for each of the six coded missions (Section 7.3) is returned; for specifically the single rotor rotorcopter. This allows an analysis to take place on the various parameters that have been changed to identify the vital and crucial factors that tailor lower fuel usage.

Lower fuel usage is desired due to the craft requiring lower costs to operate and run. Additionally, the lower fuel amount reduces the gross take-off weight, reducing the need for selection of stronger, more expensive materials for bracing the structure against weight restrictions. Moreover, the less weight means the craft can potentially fly at faster speeds, and thus reach its destination in a shorter time-frame; accentuating the required parameter of EMS vehicles.

Due to this data set containing over 15,500 evaluations, it was essential to produce code to isolate for the top 200 results providing information on the parameters that lead to lower fuel usage. The graph isolating for the top 200 and 2000 results are shown in Figure 9.2: Normalized Parallel Coordinate Axis Plot for Multi-Dimensional Model Fitting Simulation Isolating Top 200 Results and Figure 9.3 respectively.

P a g e | 87

Figure 9.2: Normalized Parallel Coordinate Axis Plot for Multi-Dimensional Model Fitting Simulation Isolating Top 200 Results

P a g e | 88

Figure 9.3: Normalized Parallel Coordinate Axis Plot for Multi-Dimensional Model Fitting Simulation Isolating Top 2000 Results

P a g e | 89

Figure 9.2 indicates the top 200 results leading to the lowest amount of fuel used. Whereas, Figure 9.3 indicates the top 2000 results. These preliminary results are not comprehensive and complete, as they reflect the assumptions and constraints applied to the analysis outlined in the respective methodology sections.

9.1 MULTI-DIMENSIONAL MODEL DISCUSSION

Both Figure 9.2 and Figure 9.3 in the preceding section indicate that there is a strong correlation between a small rotor blade disk area, and low main rotor blade tip speed; and producing low fuel results. The rating of the engine additionally shows little to no major effect on fuel usage. This is also the case for the size of the battery selected. The total vehicle mass doesn’t appear to have a major effect on the overall fuel requirements, as the figures indicate that the top 2000 evaluations fall between 0.1Kg and 40Kg.

The graphs indicate that there appears to be a dependency on a high solidity ratio. This is incorrect, and is due to the readings of the simulation and the evaluation process. Additionally, the reason behind this ‘dependency’ is due to the fact that solidity is defined as the ratio of total blade area compared to the rotor blade disk area. As such, no other factors are considered in the analysis. The analysis hasn’t incorporated any factors pertaining to evaluating various aerofoils. Furthermore, the aerofoil used throughout the evaluation was assumed to be a flat rectangular planform with no taper, or camber. In reality the wing can be specifically designed for high lift generation. Which would correlate with the low rotation speeds of the blade tip in flight.

Another important factor that hasn’t been modelled is the fact that (Section 5.2; Figure 5.4) occurs in forward flight procedures. The large solidity ratio implies a large stall margin. This is the margin between the maximum lift coefficients and the average values.

Overall this framework and multi-dimensional model fitting simulation solution provides the basis to evaluate further models and modules as they are added to the code. Further refinements and module suggestions are outlined in Chapter 11 Recommendations.

P a g e | 90

This page is intentionally left blank

P a g e | 91

10 CONCLUSION

Overall this thesis has provided a computer framework to be implemented, with an initial optimization code. Further modules are advised for code further development. Rankine-Froude Momentum theory and Blade Element Theory have been jointly used to evaluate the power requirements of a simple rotorcraft against 5 mission scenarios and one full scale UAV Challenge simulation. The program framework provides accurate fuel requirements for the designed and evaluated single rotor rotorcraft in various flight conditions. Although advanced environmental modelling which includes viscous affects, and sources of wind haven’t been implemented into the framework yet, the work produced sets out a foundation to be developed and refined. When complete this open source multi rapid design tool can be used as a preliminary design tool to rapidly provide designs in the conceptual and preliminary design stages. It would allow fast and efficient modelling to occur where designs can be selected having been weighed against user defined constraints and cost functions.

This tool would provide a means for processing a large number of rotor craft geometric designs whilst using an optimizer module to process and evaluate successful mission completing designs. Primary motivation for this work stemmed from the need of using aircraft to rapidly transport medical supplies to patrons living in inaccessible terrains and hazardous locations. The primary results obtained by this thesis are: 1. Six mission profiles have been coded and have been integrated into the software framework; 2. A point-mass, a point-mass with aerodynamic drag of a rectangular prism (point-mass- RP), and a single main rotor helicopter have been coded and implemented for evaluation; 3. Ideal induced power and profile power required for hovering has been implemented and its validity tested; and 4. An optimization coding structure has been preliminarily implemented which returns data on the ideal rotor blade radius, chord, tip velocity, propulsion kV rating, vehicle overall mass and battery size to use to minimize fuel costs for the simulated trajectories.

Although currently in an incomplete state, recommendations have been made to further this work and is outlined in section 11 Recommendations.

P a g e | 92

This page is intentionally left blank

P a g e | 93

11 RECOMMENDATIONS

The following proposed modules would assist in driving this project to completion as an open source rapid multi design tool that can be used by designers and design teams to quickly iterate through thousands of potential design solutions. The further proposed modules include:

Module Four Incorporating the effects of forward flight speed on induced velocity flow. This module would greatly increase the accuracy of the generated fuel results as induced velocity, and as a consequence, induce power required is reduced with increases in forward flight speed.

Module Five Automating the calculation of the in wake and out of wake flow projected areas. This module is essential in providing accurate power needed to climb/descend the rotorcraft in 3D space.

Module Six Comprehensive module for discretising the entire body of the rotorcraft into various sections for calculation of ideal drag coefficients. This module would allow drag coefficients for any flight condition to be automated thus increasing the accuracy of the modelling simulation.

Module Seven Implementation of the optimizer module that can take in user defined constraints. This would allow users to control the cost function and to select and process designs based off their required mission scenarios; and or payload/geometric constraints.

Module Eight Evaluate through all existing modules and process a large number of designs. Return the designs in an easy to read and comprehendible manner so that users can make the most of the program.

Module Nine This module would look to optimize existing modules by reassessing the proposed assumptions and identifying those which need to be updated to improve the models accuracy.

It is recommended that the modules above be created to complete the program. The next section Future Work identifies where the current modules could be revised and the current existing limitations in place.

P a g e | 94

11.1 FUTURE WORK

The following work is proposed to refine and update the current existing coded modules.

Module 2 uses Blade Element Theory in the calculation of profile power. This assumes that the rotor blades are rectangular in shape (not tapered) and that the coefficient of drag is assumed to be constant. This would have to be updated and addressed, as the majority of all helicopters use tapered aerofoils as well as blades with non-constant chord lengths. Additionally the drag coefficient was assumed independent of Mach number and Reynolds number; this would need to be addressed to and the module would have to be revised to compensate for this assumption.

Module 3 uses a non-automated method of determining the areas within and not within the main rotor wake. This would have to be addressed so that the mission profiles could be comprehensively iterated through returning a higher accuracy of results. This could be achieved through incorporation of the potential flow module created by Dr. Ingo Jahn [81]. Or by using computational fluid dynamics relations and assigning vortices at the rotor blade tips. This would then allow the areas to be determined off the flow field’s projection onto the rotorcraft body.

Modules would need to be created that address the following assumptions relating to the rotor blades; the rotor blades are:  rectangular;  rigid;  don’t flex;  have no torsion/twisting moments; and  constant chord length.

Additionally a module that addresses the vortices extending off the rotor blades and the flows effect on the next advancing blades angle of attack / lifting capabilities could be used to increase accuracy in results.

The multi-dimensional model-fitting code module would need to be updated to include the new modules/models added to the framework. This should only necessitate simple modifications to the code.

P a g e | 95

12 REFERENCES

[1] R. Branson, “Eyes turned skyward,” 28 November 2013. [Online]. Available: https://www.virgin.com/richard-branson/eyes-turned-skyward. [2] J. D. Anderson Jr, Introduction to Flight, Singapore: McGraw-Hill Education, 2016. [3] A. Toor, “This startup is using drones to deliver medicine in Rwanda,” 5 April 2016. [Online]. Available: https://www.theverge.com/2016/4/5/11367274/zipline-drone- delivery-rwanda-medicine-blood. [4] A. R. A. Bappy, M. Asfak-Ur-Raf, M. S. Islam, A. Sajjad and K. N. Imran, “Design and Development of Unmanned Aerial Vehicle (Drone) for Civil Applications,” BRAC University, Dhaka, 2015. [5] E. Turanoĝuz, “Design of a Medium Range Tactical UAV and Improvement of its Performance by Using Winglets,” Middle East Technical University, Ankara, 2014. [6] D. Calma, “IAEA Imagebank - Unmanned Aerial Vehicles (02010226),” International Atomic Energy Agency - IAEA, 15 May 2013. [Online]. Available: https://www.flickr.com/photos/iaea_imagebank/8747705786/in/album- 72157633501501349/. [7] J. G. Leishmann, Principles of Helicopter Aerodynamics, New York: Cambridge University Press, 2006. [8] F. Dwyer, “Send in the drones: thousands of UAVs to be deployed to help following Hurricane Florence,” 17 September 2018. [Online]. Available: https://www.wetalkuav.com/thousands-of-uavs-deployed-following-hurricane- florence/. [Accessed 18 September 2018]. [9] National Oceanic & Atmospheric Administration - Atlantic Oceanographic and Meteorological Laboratory (NOAA/AOML), “Hurricane Scientists Bring a New Wave of Technology to Improve Forecasts,” May 2006. [Online]. Available: http://www.aoml.noaa.gov/keynotes/keynotes_0814_new_hurricane_research.html. [Accessed 15 July 2018]. [10] M. Zenko, “Obama’s Embrace of Drone Strikes Will Be a Lasting Legacy,” 12 January 2016. [Online]. Available: https://www.nytimes.com/roomfordebate/2016/01/12/reflecting-on-obamas-

P a g e | 96

presidency/obamas-embrace-of-drone-strikes-will-be-a-lasting-legacy. [Accessed 18 September 2018]. [11] BBC, “Drones: What are they and how do they work?,” 31 January 2012. [Online]. Available: https://www.bbc.com/news/world-south-asia-10713898. [Accessed October 21 2018]. [12] BAE Systems, “Taranis,” 2012. [Online]. Available: https://www.baesystems.com/en/product/taranis. [Accessed 20 October 2018]. [13] T. Embury-Dennis, “British climber presumed dead is rescued after being spotted by drone in Himalayas,” 17 July 2018. [Online]. Available: https://www.independent.co.uk/news/world/asia/british-climber-rescued-drone- mount-peak-himalayas-rick-allen-a8451391.html. [Accessed 18 September 2018]. [14] A. S´obester, A. K. Keane, J. Scanlan and N. W. Bresslof, “Conceptual Design of UAV Using a Generic Geometry Service,” Conference: Infotech@Aerospace, p. 10, 26 September 2005. [15] D. P. Raymer, Aircraft Design: A Conceptual Approach: (Aiaa Education Series), 3rd ed., Washington DC: AIAA (American Institute of Aeronautics & Astronautics), 1999. [16] L. Kolodny, “Zipline raises $25 million to deliver medical supplies by drone,” 10 November 2016. [Online]. Available: https://techcrunch.com/2016/11/09/zipline- raises-25-million-to-deliver-medical-supplies-by-drone/. [17] R. Austin, Unmanned Aircraft Systems: UAVs Design, Development and Deployment, Chippenham: Wiley: A John Wiley and Sons, Ltd., 2010. [18] A. S´obester and A. J. Keane, “Multidisciplinary Design Optimization of UAV Airframes,” 47th AIAA/ASME/ASCE/AHS/ASC Structures, Structural Dynamics, and Materials Conference, pp. 1-13, 2006. [19] R. W. Prouty, Helicopter Performance, Stability, and Control, Boston: PWS Publishers, 1986. [20] P. A. Jacobs and R. J. Gollan, “Eilmer: a Compressible Flow Simulation Tool,” 2018. [Online]. Available: http://cfcfd.mechmining.uq.edu.au/eilmer/. [Accessed 10 October 2018]. [21] UAV Challenge, “UAV Challenge,” 2018. [Online]. Available: https://uavchallenge.org/about/.

P a g e | 97

[22] UAV Challenge, “UAV Challenge,” 25 May 2017. [Online]. Available: https://drive.google.com/file/d/0B5JgqjkRDqw8bDl5Q1p6Mzd3TlU/view. [23] J. Walker, “The Weekend Australian,” 5 October 2016. [Online]. Available: https://www.theaustralian.com.au/news/inquirer/drones-do-it-better-as-the- technology-leaps-ahead/news-story/5aac165a03de6146115da0c35ae3fad7. [24] A. I. Rivkind and G. Almogy, “Civilian Use of Helicopters Improves Access to Trauma Care and Increases Chances of Survival,” Israel Medical Association Journal, pp. 56-57, January 2006. [25] L. F. Urdaneta, B. K. Miller, B. J. Ringenberg, A. E. Cram and D. H. Scott, “Role of an Emergency Helicopter Transport Service in Rural Trauma,” Arch Surg, vol. 122, pp. 992-996, September 1987. [26] E. E. Sullivent, M. M. Wald and M. Faul, “Reduced Mortality in Injured Adults Transported by Helicopter Emergency Medical Services,” Prehospital Emergency Care, pp. 295-302, 2011. [27] B. E. Bledsoe, “EMS myth #6. Air medical helicopters save lives and are cost- effective,” Emergency medical services, pp. 88-90, September 2003. [28] J. Greene, “Rising Helicopter Crash Deaths Spur Debate Over Proper Use of Air Transport,” Annals of Emergency Medicine, vol. 53, no. 3, p. A15–A17, March 2009. [29] P.-M. Basset, A. Tremolet, N. Bartoli and T. Lefebvre, “Helicopter Presizing by MultiDisciplinary - Mult Objective Optimization,” 1st International Conference on Engineering and Applied Sciences Optimization, no. 1, pp. 1-22, June 2014. [30] M. Lier, A. Krenik, P. Kunze, D. Kohlgrüber, M. Lützenburger and D. Schwinn, “A Toolbox for Rotorcraft Preliminary Design,” AHS 71st Annual Forum, pp. 1-14, 5-7 May 2015. [31] Advanced Rotorcraft Technology, INC, “GRCAS: Graphical Rotorcraft Comprehensive Analysis System (U.S. only),” November 2017. [Online]. Available: https://www.flightlab.com/grcas.html. [Accessed 11 September 2018]. [32] P. Weiand and A. Krenik, “A multi-disciplinary toolbox for rotorcraft design,” Rotorcraft Virtual Engineering Conference 2016, pp. 1-15, 8-10 November 2016. [33] M. Lier, K. Harbig, D. Kohlgrüber, M. Lützenburger, P. Kunze and A. Krenik, “Studies on Rotorcraft Integrated Design and Evaluation at DLR - First Results,” 38th European Rotorcraft Forum, vol. I, pp. 568-580, 4-7 September 2012.

P a g e | 98

[34] B. Benoit, A. M. Dequin, B. Gimonet, W. v. Grünhagen, K. Kampa and P.-M. Basset, “HOST, a General Helicopter Simulation Tool for Germany and France,” American Helicopter Society, 56th Annual Forum and Technology, pp. 1-23, 2-4 May 2004. [35] G. D. Padfield, P.-M. Basset, W. von Grünhagen, A.-M. Dequin, D. Haddon, H. Haverdings, K. Kampa and A. T. McCallum, “Predicting Rotorcraft Flying Qualities through Simulation Modelling. A Review of Key Results from GARTEUR AG06.,” The 22nd European Rotorcraft Forum, pp. 71-85, 17-19 September 1996. [36] B. Nagel, D. Böhnke, V. Gollnick, P. Schmollgruber, A. Rizzi, G. La Rocca and J. J. Alonso, “Communication in Aircraft Design: Can we establish a Common Language?,” 28th International Congress of the Aeronautical Sciences, pp. 1-13, 2012. [37] O. Rand and V. Khromov, “Helicopter Sizing by Statistics,” Journal of the American Helicopter Society, vol. 49, no. 3, pp. 300-317, 11-13 June 2002. [38] Vahana, “Vahana-open-source,” 3 December 2017. [Online]. Available: https://github.com/VahanaOpenSource/vahanaTradeStudy. [Accessed 20 August 2018]. [39] J. Davis, “Design Methodology for Developing Concept Independent Rotorcraft Analysis and Design Software,” Georgia Institute of Technology , Georgia, 2007. [40] P. S. Kenney, R. A. Leslie, D. W. Geyer, K. Cunningham, P. C. Glaab and M. M. Madden, “Rapid Prototyping of an Aircraft Model in an Object-Oriented Simulation,” AIAA Modeling and Simulation Technologies Conference and Exhibit, vol. 291, p. 382, 1 January 2003. [41] J. Tervamaki, “Performance Calculation of Gyros,” 26 August 2015. [Online]. Available: http://www.tervis.fidisk.fi/JTsite/gyrocomp.html. [Accessed 15 September 2018]. [42] Jouhou System Kougaku Laboratory - University of Tokyo (JSK Labs/UT), “Multi- Link Aerial Robot,” July 2017. [Online]. Available: http://www.jsk.t.u- tokyo.ac.jp/research/multilink.html. [Accessed 22 October 2018]. [43] M. Zhao, T. Anzai, F. Shi, X. Chen, K. Okada and M. Inaba, “Design, Modeling and Control of Aerial Robot DRAGON: Dual-Rotor Embedded Multilink Robot with the Ability of Multi-Degree-of-Freedom Aerial Transformation,” Institute of Electrical and Electronics Engineers (IEEE): International Conference on Robotics and Automation (ICRA), May 2018.

P a g e | 99

[44] L. Dormehl, “Emerging Tech: Watch this Japanese ‘dragon’ drone slither through the air like a flying snake,” 21 June 2018. [Online]. Available: https://www.digitaltrends.com/cool-tech/university-of-tokyo-dragon-drone/. [Accessed 22 October 2018]. [45] J. Seddon and S. Newman, Basic Helicopter Aerodynamics: An Account of First Principles in the Fluid Mechanics and Flight Dynamics of the Single Rotor Helicopter, London: Blackwell Science, 2002. [46] W. Johnson, Rotorcraft Aeromechanics, New York: Cambridge, 2013. [47] R. Wheeler, G. Bloom and R. Lerch, “Helicopter Anatomy,” 2005. [Online]. Available: https://en.wikipedia.org/wiki/File:Helicopter_AnatomySVG.svg. [48] E. Ziemen, “Heli-Treff 2006 in Halle-Oppin,” 18 October 2006. [Online]. Available: http://www.mfg-wipshausen.de/phpBB2/album_showpage.php?pic_id=521. [49] P. E. I. Pounds, “Design, Construction and Control of a Large Quadrotor Micro Air Vehicle,” The Australian National University, pp. 1-193, 2007. [50] R. Stowe, “Huey Helicopter,” June 2014. [Online]. Available: https://ccsearch.creativecommons.org/image/detail/7DWjCa0QeSivnJSEXVhpTw==. [51] U.S. Air Force photo, “Vertol CH-21B Workhorse,” 26 December 2005. [Online]. Available: http://www.nationalmuseum.af.mil/Visit/Museum-Exhibits/Fact- Sheets/Display/Article/198068/vertol-ch-21b-workhorse/. [52] D. F. Heinlin, “File:Tandemrotor.jpg,” 24 June 2006. [Online]. Available: https://commons.wikimedia.org/wiki/File:Tandemrotor.jpg. [53] S. Vladimirov, “Ka-52 Helicopter at MAKS-2009 aeroshow,” 2009. [Online]. Available: https://ccsearch.creativecommons.org/image/detail/4xtW72uhsJv3GwnXyjRviQ==. [54] B. Brincken, “Eurocopter X3 at the ILA Berlin 2012,” 14 September 2012. [Online]. Available: https://commons.wikimedia.org/wiki/File:Ila12_X3_0600_b1.jpg. [55] R. Moose, “CV-22 Osprey lands at Goodfellow,” 30 May 2017. [Online]. Available: http://www.2af.aetc.af.mil/News/Article-Display/Article/1201562/cv-22-osprey- lands-at-goodfellow/. [56] J. Yang, “How many rotor blades do helicopters have, and why? What are the practical minimum and maximum numbers?,” 15 September 2015. [Online].

P a g e | 100

Available: https://www.quora.com/How-many-rotor-blades-do-helicopters-have-and- why-What-are-the-practical-minimum-and-maximum-numbers. [57] E. Petrosyan, “Aerodynamic Features of Coaxial Configuration Helicopter,” Kamov Company, 1995. [Online]. Available: http://www.checksix- forums.com/download/file.php?id=16353. [58] C. P. Coleman, “A Survey of Theoretical and Experimental Coaxial Rotor Aerodynamic Research,” NASA Ames Research Center; Moffett Field, CA United States, pp. 1-34, 1 March 1997. [59] L. Chen and P. J. McKerrow, “Modelling the Lama Coaxial Helicopter,” Proceedings of the Australasian Conference on Robotics and Automation, pp. 1-9, 2007. [60] MilitaryForces, “Kamov KA-50/KA-52 Helicopter - Russia: "Black Shark",” April 2002. [Online]. Available: https://www.military-forces.net/helicopters/kamov-ka-50/. [61] Augusta Westland, “Faster, Further, Higher: AW609 TiltRotor,” Augusta Westland: A Finmeccanica Company, April 2014. [Online]. Available: http://www.leonardocompany.com/documents/63265270/69071306/body_AW609_1. pdf. [62] R. Whittle, “The Osprey: Half-airplane, half-helicopter, totally badass,” News Pty Limited Copyright, 25 May 2015. [Online]. Available: https://nypost.com/2015/05/24/the-osprey-half-airplane-half-helicopter-totally- badass/. [63] B. Gábor, “The Interspect UAS B 3.1,” 15 March 2012. [Online]. Available: https://commons.wikimedia.org/wiki/File:Interspect_UAS_B_3.1.jpg. [64] DJI technologies, “DJI technologies: Phantom FC40 quadcopter,” 9 January 2014. [Online]. Available: https://commons.wikimedia.org/wiki/File:DJI-Phantom- FC40.png. [65] NASA, “NASA GL-10 Greased Lightning,” 19 August 2014. [Online]. Available: https://www.nasa.gov/sites/default/files/gl10_test013_8-19-14.jpg. [66] Amazon, “Amazon Prime Air,” June 2017. [Online]. Available: https://www.amazon.com/Amazon-Prime-Air/b?ie=UTF8&node=8037720011. [67] X Development LLC, “What if we all had access to the sky?,” 2017. [Online]. Available: https://x.company/intl/en_au/wing/our-approach/.

P a g e | 101

[68] A. Oosedo, S. Abiko, S. Narasaki, A. Kuno, A. Konno and M. Uchiyama, “Flight control systems of a quad tilt rotor Unmanned Aerial Vehicle for a large attitude change,” 2015 IEEE International Conference on Robotics and Automation (ICRA), 26 May 2015. [69] X Company LLC, “Wing: Transforming the way goods are transported,” 2018. [Online]. Available: https://x.company/projects/wing/. [70] L. Johnson, “9 things you need to know about the Amazon Prime Air drone delivery service,” 7 February 2017. [Online]. Available: http://www.digitalspy.com/tech/feature/a820748/amazon-prime-air-drone-delivery- service/. [71] IIVII, “My FC40 Transformation / 3.6km = 11,800ft FPV,” 6 December 2014. [Online]. Available: https://phantompilots.com/threads/my-fc40-transformation-3- 6km-11-800ft-fpv.30865/. [72] Ready Quadcopters, “DJI PHANTOM FC40 QUADCOPTER DRONE,” July 2015. [Online]. Available: https://www.readyquadcopters.com/dji-phantom-fc40- quadcopter-drone/. [73] A. Chapman, “Types of Drones: Multi-Rotor vs Fixed-Wing vs Single Rotor vs Hybrid VTOL,” June 2016. [Online]. Available: https://www.auav.com.au/articles/drone-types/. [74] W. I. Harasani , “Design, Build and Test an Unmanned Air Vehicle,” JKAU: Eng. Sci., vol. 21, no. 2, pp. 105-123, 2010. [75] A. Gessow, “Excalibur: The Cutting Edge in Tiltrotor Technology: Flying Further, Higher, Faster,” University of Maryland, Maryland, 2011. [76] C. H. Latimer-Needham, Aircraft Design: Volume One: Aerodynamics, London: Chapman & Hall Ltd., 1939. [77] C. Hollingsworth, “Introduction to Helicopter Aerodynamics TH-57,” 18 April 2013. [Online]. Available: https://www.cnatra.navy.mil/local/docs/pat-pubs/P-401.pdf. [78] T. A. Talay, Introduction to Aerodynamics of Flight, Washington D.C.: National Aeronautics and Space Administration (NASA), 1975. [79] R. B. Richards, Naval Test Pilot School Textbook: Principles of Helicopter Performance, Patuxent River: Department of the Navy, Naval Air Test Center, 1968.

P a g e | 102

[80] “Energy density,” 28 December 2016. [Online]. Available: https://www.pssurvival.com/PS/Batteries/Energy_Density-2016.pdf. [Accessed 16 September 2018]. [81] I. Jahn, “pflow.py a Potential Flow Solver and Visualizer,” Mechanical Engineering Technical Report 2017/12, Vols. The University of Queensland, Australia, 2017. [82] A. I. Shalaby, Fluid Mechanics for Civil and Environmental Engineers, Boca Raton: CRC Press, 2018. [83] UAV Challenge, “Day 3 of UAV Challenge Week 2018,” 26 September 2018. [Online]. Available: https://uavchallenge.org/2018/09/26/day-3-of-uav-challenge- week-2018/. [Accessed 10 October 2018]. [84] D. R. Sterkenburg, B. Rahm, D. T. K. Eismain, G. McNeill, T. Forenz and P. Wang, Aviation Maintenance Technician Handbook - Airframe, Vol 1, vol. I, United States Department of Transportation, Federal Aviation Administration, Airman Testing Standards Branch, 2012. [85] D. P. M. Mohite, “Chapter 4 - Aircraft Basic Construction,” 25 July 2017. [Online]. Available: http://home.iitk.ac.in/~mohite/hal.html. [86] A. Pelsser, “The Postal History of ICAO: Aviation History : Achieving the Dream,” 1 March 2018. [Online]. Available: https://www.icao.int/secretariat/PostalHistory/aviation_history_achieving_the_dream. htm. [87] M. Lacoste, “Paris Air Show 2017 racer,” 23 June 2017. [Online]. Available: https://en.wikipedia.org/wiki/File:Paris_Air_Show_2017_Airbus_racer_(cropped).jpg . [88] J. Roberts, D. Frousheger, B. Williams, D. Campbell and R. Walker, “How the UAV Challenge Outback Rescue was finally won,” IEEE Robotics and Automation Magazine, pp. 54-62, 18 December 2015. [89] S. G. Tzafestas and K. P. Valavanis, Advances in Unmanned Aerial Vehicles: State of the Art and the Road to Autonomy, vol. 33, Dordrecht: Springer, 2007.

P a g e | 103

Appendices

Appendix A Comparison of Coaxial, Tandem and Single Rotor Helicopter Types 105 Appendix B 3-Dimensional Drag Coefficients 106 Appendix C Velocity Induced Calculations 107 Appendix D Climbing Forward Flight Thrust Derivation 110 Appendix E UAV Outback Challenge Payload / Blood Samples 112 Appendix F Rotorcraft Design using An Aeromechanics Analysis – RAW Code 113 Appendix G Classes – Geometries and Environmental model 181 Appendix H Multi-Dimensional Model Generation Code 199 Appendix I Multi-Dimensional Model – Parallel Axis Plot Sourcing 201 Appendix J Multi-Dimensional Model – Parallel Axis Plot Graph 203 Appendix K Multi-Dimensional Model – Parallel Axis Plot Graph Isolating for the Top 200 Results 204

P a g e | 104

This page is intentionally left blank

P a g e | 105

APPENDIX A COMPARISON OF COAXIAL, TANDEM AND SINGLE ROTOR HELICOPTER TYPES

Colin P. Coleman (1997) [58] refers to the ideas of Stepniewski (1986), who concluded that although the coaxial helicopter has an increased parasite drag in comparison to the tandem and single rotor configurations, it offers lower power required per gross weight. This is shown in Figure 12.1: Comparison of Coaxial, Tandem and Single Rotor Helicopters.

Figure 12.1: Comparison of Coaxial, Tandem and Single Rotor Helicopters Source: Coleman (1997) [58]

Furthermore, for the coaxial configuration, a reduction of 21% is experienced in the induced power losses when in comparison to a single-rotor helicopter with the same blade diameter and double blade solidity.

P a g e | 106

APPENDIX B 3-DIMENSIONAL DRAG COEFFICIENTS

Various 3D drag coefficients are shown in Figure 12.2: 3D Drag Coefficients for Various Bodies, sourced from [82].

Figure 12.2: 3D Drag Coefficients for Various Bodies Source: Ahlam I. Shalaby (2018) [82]

P a g e | 107

APPENDIX C VELOCITY INDUCED CALCULATIONS

Using momentum theory outlined in Section 4.6.1 on pg. 22, the hovering efficiency vs effective disk loading was graphed creating Figure 12.3: Power Loading (N/kW) vs Effective Disk Loading (N/m^2).

Pure Single Rotor, Rotorcraft

Figure 12.3: Power Loading (N/kW) vs Effective Disk Loading (N/m^2) Based Upon Momentum Theory Outlined in Leishmann (2006) [7]

From Leishmann’s reference text [7], momentum theory was used to graph power loading vs effective disk loading. The effective disk loading for pure

P a g e | 108

single rotor rotorcrafts is identified as 8 pounds per square foot. This equates to 39.0594 kg per square metre. Multiplying this by the average gravitational constant, 9.81 equates to an effective disk loading value of 383.172714 Newtons per square metre.

If we assume incompressible flow, we can apply momentum theory for analysis. For momentum theory, we can use Bernoulli’s equation from states 1-2, 1-∞, and 3-∞.

푝 푣2 푝 푣2 1 + 1 + 푧 = 2 + 2 + 푧 (66) 휌푔 2푔 1 휌푔 2푔 2

State 1

Rotor-Tip Path Rotor Lift/Thrust, 퐿, 푇 Plane, 푅 − 푇푃푃 푉𝑖, 퐼푛푑푢푐푒푑 푉푒푙표푐푖푡푦

State 2 State 3

Centre of Gravity Parasitic Drag Download on Horizontal Stabiliser

Weight, 푊

State ∞

Figure 12.4: Rankine-Froude Momentum Theory Flow Analysis for Hovering Craft

P a g e | 109

However we can’t use it across the rotor blades (2-2) as energy is added into the system via the rotors. Applying Bernoulli’s equation between the states 1 and 2; see Figure 12.4, we can arrange for the difference in pressures of the states.

1 푝 = 푝 = 푝 + 휌푣2 (67) 1 ∞ 2 2 2

Applying Bernoulli’s to states 3-∞;

푝 푣2 푝 푣2 3 + 3 + 푧 = ∞ + ∞ + 푧 (68) 휌푔 2푔 3 휌푔 2푔 ∞

푣2휌 푣2 휌 푝 + 3 = 푝 + ∞ (69) 3 2 ∞ 2 We know:

푣𝑖 = 푣3 Thus: 휌 휌 푝 + 푣2 = 푝 + 푣2 (70) 3 2 𝑖 ∞ 2 ∞

Assuming that the pressure difference across the rotor disk (2-3) is uniform, 푝3 − 푝2 = Δ푝

Thus it can be inferred from the analysis and from Figure 12.4 that this change in pressure across the rotor disk must equal:

푅표푡표푟 푇ℎ푟푢푠푡 / 푅표푡표푟 푑푖푠푘 푎푟푒푎 = 퐷퐿 (71)

푇 퐷퐿 = = Δ푝 = 푝 − 푝 [푁/푚2] (72) 휋푅2 3 2

Therefore, recalling the 383.172714 Newtons per square metre effective disk loading value;

푇 = 383.172714 ∗ 휋푅2 [푁] (73)

P a g e | 110

APPENDIX D CLIMBING FORWARD FLIGHT THRUST DERIVATION

The derivation of the thrust vector for climbing forward flight using trigonometric relations is shown in this section. Figure 12.5 depicts the forces acting on the climbing forward flight rotorcraft (a) with (b) showing the resolved forces, and (c) showing the exaggerated case for clarity.

Propulsive Force

Rotor Thrust, 푇 Rotor Lift, 퐿 Rotor-Tip Path Plane, 푅 − 푇푃푃 훼퐹푃 − 휃퐹푃

Parasitic Drag, 퐷퐹퐶푃 Weight, 푊 (a) Climbing Forward Flight Rotorcraft

Weight, 푊 Weight, 푊 |Rotor Thrust, 푇| |Rotor Thrust, 푇|

훼퐹푃 − 휃퐹푃 Parasitic Drag, 퐷퐹퐶푃

훼퐹푃 − 휃퐹푃

Parasitic Drag, 퐷퐹퐶푃

(b) Resolved Forces (c) Exaggerated Resolved Forces

Figure 12.5: Resolving Thrust Force Acting on Rotorcraft in Forward Climbing Flight

P a g e | 111

To determine the magnitude of the rotor thrust vector, vector addition needs to occur.

|푇| = 푤 + 퐷퐹퐶푃 (74)

Resolving weight into x and y components:

푤푥 = 0; (75) 푤푦 = 푤

Resolving drag force into x and y components:

퐷퐹퐶푃푥 = 퐷퐹퐶푃 sin(훼퐹푃 − 휃퐹푃) ; (76) 퐷퐹퐶푃푦 = 퐷퐹퐶푃 cos(훼퐹푃 − 휃퐹푃) Therefore,

2 √ 2 (77) |푇| = (푤푥 + 퐷퐹퐶푃푥) + (푤푦 + 퐷퐹퐶푃푦)

2 2 |푇| = √(퐷퐹퐶푃 sin(훼퐹푃 − 휃퐹푃)) + (푤표푣푒푟푎푙푙 푟표푡표푟 + 퐷퐹퐶푃 cos(훼퐹푃 − 휃퐹푃)) (78)

|푇|

퐷 휌 휌 2 푣 ℎ표푣푒푟 2 2 = √([4 ( ) (푣𝑖푛푑푢푐푒푑 푐푙𝑖푚푏 + 푉푐) 퐴푚 + (Δ퐴푧퐶퐷 푓푙푎푡 푝푙푎푡푒 푒푞푢𝑖푣.) 푉푐 ] tan(훼퐹푃 − 휃퐹푃)) … 푊ℎ표푣푒푟 2 2

퐷 휌 휌 2 푣 ℎ표푣푒푟 2 2 √… + (푤 + [4 ( ) (푣𝑖푛푑푢푐푒푑 푐푙𝑖푚푏 + 푉푐) 퐴푚 + (Δ퐴푧퐶퐷 푓푙푎푡 푝푙푎푡푒 푒푞푢𝑖푣.) 푉푐 ]) 푊ℎ표푣푒푟 2 2

(79)

P a g e | 112

APPENDIX E UAV OUTBACK CHALLENGE PAYLOAD / BLOOD SAMPLES

The program has been designed to include the carrying capacity of a 25 gram blood vial. This is shown in Figure 12.6: UAV Outback Challenge Payload/Blood Vials.

Figure 12.6: UAV Outback Challenge Payload/Blood Vials Source: UAV Challenge (2018) [83]

P a g e | 113

APPENDIX F ROTORCRAFT DESIGN USING AN AEROMECHANICS ANALYSIS – RAW CODE

The computer program, ‘Rotorcraft Design using an Aeromechanics Analysis’, or RDAA for short is provided in this appendix. The following page provides the contents of the various sections of the code, and contains the main function definitions. Appendix F contains the main script program. Where Appendix G outlines the classes, functions and scripts used in creation of the geometries, environmental model, and mission profiles as outlined in Chapter 7.

P a g e | 114

Contents

. EVALUATE FLYING POINT MASS MODEL ONE . EVALUATE FLYING BRICK MODEL ONE . EVALUTION MODEL TWO . EVALUATE FLYING POINT MASS MODEL TWO . EVALUATE FLYING BRICK MODEL TWO . EVALUATE FLYING SINGLE ROTOR MODEL TWO . EVALUTION MODEL THREE . EVALUATE FLYING POINT MASS MODEL THREE . EVALUATE FLYING BRICK MODEL THREE . EVALUATE FLYING SINGLE ROTOR MODEL THREE . POWER LOADING AND DISK LOADING . Graph and Data for Rotorcraft Hovering Efficiency . Graph and Data for Power Coefficient and Thrust Coefficient . Graph and Data for Figure of Merit (FOM) . FUNCTIONS: Load the Three Initial Geometries for Evaluation . FUNCTION: MODEL ONE FUEL EVALUATION . Select Weight of vehicle depending on geometry loaded . EVALUATE AND RUN SCRIPT . FUNCTION: MODEL ONE: SIMPLIFIED ENERGY ANALYSIS . Loading all the parameters . Evaluation of everything . FUNCTION: RETURN VALUE FROM MASTER CONFIG FILE . ERROR HANDLING . FUNCTION: RETURN VALUE AND WRITE NEW VALUE TO/FROM MASTER CONFIG FILE . FUNCTION: Create mission profiles . FUNCTION: Evaluate Main Rotor Rotation Speed . Momentum Theory - HOVER . FUNCTION: Disk loading / Ideal Induced Power / Power loading / Coefficients of T and P . Blade Element Method . FUNCTION: Rotor Solidity . FUNCTION: Figure of Merit (FOM) . FUNCTION: Maximum Blade Radius and Blade Velocity . Blade Element Theory . FUNCTION: Profile power . FUNCTION: Coefficient of Drag . FUNCTION: Profile power . FUNCTION: Evaluate power to hover . FUNCTION: MODEL TWO FUEL EVALUATION . Select Weight of vehicle depending on geometry loaded . EVALUATE AND RUN SCRIPT . FUNCTION: MODEL TWO: Adding Hovering Power . Loading all the parameters . Evaluation of everything . FUNCTION: Velocity Induced . FUNCTION: Vertical Drag Force Evaluation . FUNCTION: MODEL THREE: Adding forward climbing power . Loading all the parameters . Evaluation of everything . FUNCTION: MODEL THREE FUEL EVALUATION . Select Weight of vehicle depending on geometry loaded . EVALUATE AND RUN SCRIPT

P a g e | 115

% ######################################################## % ######################################################## % # ## % # MECH4500: THESIS ## % # Candidate Airframe for UQ-UAS ## % # ## % # Development of a UAV Rotorcraft Design Software ## % # Framework Using an Aeromechanics Design Analysis ## % # ## % # Rowan Conaghan 43903863 ## % # Created: 25th October 2018 ## % # ## % ######################################################## clear variables; clear global; clc;

% Main script. Evaluating point mass. filename = 'inputs.txt'; create_inputs_txt(filename); Run_Environmental_Model; Run_Geometry_Model; [~,~,input_values] = read_inputs_filter_write_outputs('Dynamic_Viscos', filename, 'outputs.txt'); input_values_table = table(input_values{1},input_values{2}); a = return_value('GM.a ', filename); % speed sound txt = ''; a = return_value(txt, filename); to call upon values: x = input_values_table.Var1(y)

MISSION SCENARIO AND EVALUTION MODEL ONE

% Run the mission requirements model % Straight and level flight; = 1 Mission_Requirements0 = mission_requirements(0); % Selecting simple hop scenario for evaluation; = 2 Mission_Requirements1 = mission_requirements(1); % Simple hop with hover midway, then return to base = 3 Mission_Requirements2 = mission_requirements(2); % % Forward axial climb, then cruise flight then forward axial descend = 4 Mission_Requirements3 = mission_requirements(3); % % Hope and Dive under with extra Hop = 5 Mission_Requirements4 = mission_requirements(4); % % Full UAV Mission Scenario = 6 Mission_Requirements5 = mission_requirements(5); % % Vertical Climbing Flight = 7 Mission_Requirements6 = mission_requirements(6);

P a g e | 116

EVALUATE FLYING POINT MASS MODEL ONE

[M.mission0,W.mission0,mdot_fuel.mission0,delta_mass_fuel.mission0,Total_fuel_mass. mission0] = evaluate_fuel_mission(filename,Mission_Requirements0,load_point_mass());

[M.mission1,W.mission1,mdot_fuel.mission1,delta_mass_fuel.mission1,Total_fuel_mass. mission1] = evaluate_fuel_mission(filename,Mission_Requirements1,load_point_mass());

[M.mission2,W.mission2,mdot_fuel.mission2,delta_mass_fuel.mission2,Total_fuel_mass. mission2] = evaluate_fuel_mission(filename,Mission_Requirements2,load_point_mass());

[M.mission3,W.mission3,mdot_fuel.mission3,delta_mass_fuel.mission3,Total_fuel_mass. mission3] = evaluate_fuel_mission(filename,Mission_Requirements3,load_point_mass());

[M.mission4,W.mission4,mdot_fuel.mission4,delta_mass_fuel.mission4,Total_fuel_mass. mission4] = evaluate_fuel_mission(filename,Mission_Requirements4,load_point_mass());

[M.mission5,W.mission5,mdot_fuel.mission5,delta_mass_fuel.mission5,Total_fuel_mass. mission5] = evaluate_fuel_mission(filename,Mission_Requirements5,load_point_mass());

[M.mission6,W.mission6,mdot_fuel.mission6,delta_mass_fuel.mission6,Total_fuel_mass. mission6] = evaluate_fuel_mission(filename,Mission_Requirements6,load_point_mass());

Point_Mass.M = M;

Point_Mass.W = W;

Point_Mass.mdot_fuel = mdot_fuel;

Point_Mass.delta_mass_fuel = delta_mass_fuel;

Point_Mass.Total_fuel_mass = Total_fuel_mass;

clear M W mdot_fuel delta_mass_fuel Total_fuel_mass

P a g e | 117

EVALUATE FLYING BRICK MODEL ONE

[M.mission0,W.mission0,mdot_fuel.mission0,delta_mass_fuel.mission0,Total_fuel_mass. mission0] = evaluate_fuel_mission(filename,Mission_Requirements0,load_flying_brick());

[M.mission1,W.mission1,mdot_fuel.mission1,delta_mass_fuel.mission1,Total_fuel_mass. mission1] = evaluate_fuel_mission(filename,Mission_Requirements1,load_flying_brick());

[M.mission2,W.mission2,mdot_fuel.mission2,delta_mass_fuel.mission2,Total_fuel_mass. mission2] = evaluate_fuel_mission(filename,Mission_Requirements2,load_flying_brick());

[M.mission3,W.mission3,mdot_fuel.mission3,delta_mass_fuel.mission3,Total_fuel_mass. mission3] = evaluate_fuel_mission(filename,Mission_Requirements3,load_flying_brick());

[M.mission4,W.mission4,mdot_fuel.mission4,delta_mass_fuel.mission4,Total_fuel_mass. mission4] = evaluate_fuel_mission(filename,Mission_Requirements4,load_flying_brick());

[M.mission5,W.mission5,mdot_fuel.mission5,delta_mass_fuel.mission5,Total_fuel_mass. mission5] = evaluate_fuel_mission(filename,Mission_Requirements5,load_flying_brick());

[M.mission6,W.mission6,mdot_fuel.mission6,delta_mass_fuel.mission6,Total_fuel_mass. mission6] = evaluate_fuel_mission(filename,Mission_Requirements6,load_flying_brick());

Flying_Brick.M = M;

Flying_Brick.W = W;

Flying_Brick.mdot_fuel = mdot_fuel;

Flying_Brick.delta_mass_fuel = delta_mass_fuel;

Flying_Brick.Total_fuel_mass = Total_fuel_mass;

clear M W mdot_fuel delta_mass_fuel Total_fuel_mass

P a g e | 118

EVALUTION MODEL TWO EVALUATE FLYING POINT MASS MODEL TWO

[M.mission0,W.mission0,mdot_fuel.mission0,delta_mass_fuel.mission0,Total_fuel_mass. mission0] = evaluate_fuel_mission_model_two(filename,Mission_Requirements0,load_point_mass());

[M.mission1,W.mission1,mdot_fuel.mission1,delta_mass_fuel.mission1,Total_fuel_mass. mission1] = evaluate_fuel_mission_model_two(filename,Mission_Requirements1,load_point_mass());

[M.mission2,W.mission2,mdot_fuel.mission2,delta_mass_fuel.mission2,Total_fuel_mass. mission2] = evaluate_fuel_mission_model_two(filename,Mission_Requirements2,load_point_mass());

[M.mission3,W.mission3,mdot_fuel.mission3,delta_mass_fuel.mission3,Total_fuel_mass. mission3] = evaluate_fuel_mission_model_two(filename,Mission_Requirements3,load_point_mass());

[M.mission4,W.mission4,mdot_fuel.mission4,delta_mass_fuel.mission4,Total_fuel_mass. mission4] = evaluate_fuel_mission_model_two(filename,Mission_Requirements4,load_point_mass());

[M.mission5,W.mission5,mdot_fuel.mission5,delta_mass_fuel.mission5,Total_fuel_mass. mission5] = evaluate_fuel_mission_model_two(filename,Mission_Requirements5,load_point_mass());

[M.mission6,W.mission6,mdot_fuel.mission6,delta_mass_fuel.mission6,Total_fuel_mass. mission6] = evaluate_fuel_mission_model_two(filename,Mission_Requirements6,load_point_mass());

% Return values in clear to read format Point_Mass_Model_Two.M = M; Point_Mass_Model_Two.W = W; Point_Mass_Model_Two.mdot_fuel = mdot_fuel; Point_Mass_Model_Two.delta_mass_fuel = delta_mass_fuel; Point_Mass_Model_Two.Total_fuel_mass = Total_fuel_mass; clear M W mdot_fuel delta_mass_fuel Total_fuel_mass

P a g e | 119

EVALUATE FLYING BRICK MODEL TWO

[M.mission0,W.mission0,mdot_fuel.mission0,delta_mass_fuel.mission0,Total_fuel_mass. mission0] = evaluate_fuel_mission_model_two(filename,Mission_Requirements0,load_flying_brick()) ;

[M.mission1,W.mission1,mdot_fuel.mission1,delta_mass_fuel.mission1,Total_fuel_mass. mission1] = evaluate_fuel_mission_model_two(filename,Mission_Requirements1,load_flying_brick()) ;

[M.mission2,W.mission2,mdot_fuel.mission2,delta_mass_fuel.mission2,Total_fuel_mass. mission2] = evaluate_fuel_mission_model_two(filename,Mission_Requirements2,load_flying_brick()) ;

[M.mission3,W.mission3,mdot_fuel.mission3,delta_mass_fuel.mission3,Total_fuel_mass. mission3] = evaluate_fuel_mission_model_two(filename,Mission_Requirements3,load_flying_brick()) ;

[M.mission4,W.mission4,mdot_fuel.mission4,delta_mass_fuel.mission4,Total_fuel_mass. mission4] = evaluate_fuel_mission_model_two(filename,Mission_Requirements4,load_flying_brick()) ;

[M.mission5,W.mission5,mdot_fuel.mission5,delta_mass_fuel.mission5,Total_fuel_mass. mission5] = evaluate_fuel_mission_model_two(filename,Mission_Requirements5,load_flying_brick()) ;

[M.mission6,W.mission6,mdot_fuel.mission6,delta_mass_fuel.mission6,Total_fuel_mass. mission6] = evaluate_fuel_mission_model_two(filename,Mission_Requirements6,load_flying_brick()) ;

Flying_Brick_Model_Two.M = M;

Flying_Brick_Model_Two.W = W;

Flying_Brick_Model_Two.mdot_fuel = mdot_fuel;

Flying_Brick_Model_Two.delta_mass_fuel = delta_mass_fuel;

Flying_Brick_Model_Two.Total_fuel_mass = Total_fuel_mass;

clear M W mdot_fuel delta_mass_fuel Total_fuel_mass

P a g e | 120

EVALUATE FLYING SINGLE ROTOR MODEL TWO

[M.mission0,W.mission0,mdot_fuel.mission0,delta_mass_fuel.mission0,Total_fuel_mass. mission0] = evaluate_fuel_mission_model_two(filename,Mission_Requirements0,load_single_rotor(EM ));

[M.mission1,W.mission1,mdot_fuel.mission1,delta_mass_fuel.mission1,Total_fuel_mass. mission1] = evaluate_fuel_mission_model_two(filename,Mission_Requirements1,load_single_rotor(EM ));

[M.mission2,W.mission2,mdot_fuel.mission2,delta_mass_fuel.mission2,Total_fuel_mass. mission2] = evaluate_fuel_mission_model_two(filename,Mission_Requirements2,load_single_rotor(EM ));

[M.mission3,W.mission3,mdot_fuel.mission3,delta_mass_fuel.mission3,Total_fuel_mass. mission3] = evaluate_fuel_mission_model_two(filename,Mission_Requirements3,load_single_rotor(EM ));

[M.mission4,W.mission4,mdot_fuel.mission4,delta_mass_fuel.mission4,Total_fuel_mass. mission4] = evaluate_fuel_mission_model_two(filename,Mission_Requirements4,load_single_rotor(EM ));

[M.mission5,W.mission5,mdot_fuel.mission5,delta_mass_fuel.mission5,Total_fuel_mass. mission5] = evaluate_fuel_mission_model_two(filename,Mission_Requirements5,load_single_rotor(EM ));

[M.mission6,W.mission6,mdot_fuel.mission6,delta_mass_fuel.mission6,Total_fuel_mass. mission6] = evaluate_fuel_mission_model_two(filename,Mission_Requirements6,load_single_rotor(EM ));

Single_rotor_Model_Two.M = M;

Single_rotor_Model_Two.W = W;

Single_rotor_Model_Two.mdot_fuel = mdot_fuel;

Single_rotor_Model_Two.delta_mass_fuel = delta_mass_fuel;

Single_rotor_Model_Two.Total_fuel_mass = Total_fuel_mass; clear M W mdot_fuel delta_mass_fuel Total_fuel_mass

P a g e | 121

EVALUTION MODEL THREE EVALUATE FLYING POINT MASS MODEL THREE

[M.mission0,W.mission0,mdot_fuel.mission0,delta_mass_fuel.mission0,Total_fuel_mass. mission0] = evaluate_fuel_mission_model_three(filename,Mission_Requirements0,load_point_mass()) ;

[M.mission1,W.mission1,mdot_fuel.mission1,delta_mass_fuel.mission1,Total_fuel_mass. mission1] = evaluate_fuel_mission_model_three(filename,Mission_Requirements1,load_point_mass()) ;

[M.mission2,W.mission2,mdot_fuel.mission2,delta_mass_fuel.mission2,Total_fuel_mass. mission2] = evaluate_fuel_mission_model_three(filename,Mission_Requirements2,load_point_mass()) ;

[M.mission3,W.mission3,mdot_fuel.mission3,delta_mass_fuel.mission3,Total_fuel_mass. mission3] = evaluate_fuel_mission_model_three(filename,Mission_Requirements3,load_point_mass()) ;

[M.mission4,W.mission4,mdot_fuel.mission4,delta_mass_fuel.mission4,Total_fuel_mass. mission4] = evaluate_fuel_mission_model_three(filename,Mission_Requirements4,load_point_mass()) ;

[M.mission5,W.mission5,mdot_fuel.mission5,delta_mass_fuel.mission5,Total_fuel_mass. mission5] = evaluate_fuel_mission_model_three(filename,Mission_Requirements5,load_point_mass()) ;

[M.mission6,W.mission6,mdot_fuel.mission6,delta_mass_fuel.mission6,Total_fuel_mass. mission6] = evaluate_fuel_mission_model_three(filename,Mission_Requirements6,load_point_mass()) ;

Point_Mass_Model_Three.M = M;

Point_Mass_Model_Three.W = W;

Point_Mass_Model_Three.mdot_fuel = mdot_fuel;

Point_Mass_Model_Three.delta_mass_fuel = delta_mass_fuel;

Point_Mass_Model_Three.Total_fuel_mass = Total_fuel_mass; clear M W mdot_fuel delta_mass_fuel Total_fuel_mass

P a g e | 122

EVALUATE FLYING BRICK MODEL THREE

[M.mission0,W.mission0,mdot_fuel.mission0,delta_mass_fuel.mission0,Total_fuel_mass. mission0] = evaluate_fuel_mission_model_three(filename,Mission_Requirements0,load_flying_brick( ));

[M.mission1,W.mission1,mdot_fuel.mission1,delta_mass_fuel.mission1,Total_fuel_mass. mission1] = evaluate_fuel_mission_model_three(filename,Mission_Requirements1,load_flying_brick( ));

[M.mission2,W.mission2,mdot_fuel.mission2,delta_mass_fuel.mission2,Total_fuel_mass. mission2] = evaluate_fuel_mission_model_three(filename,Mission_Requirements2,load_flying_brick( ));

[M.mission3,W.mission3,mdot_fuel.mission3,delta_mass_fuel.mission3,Total_fuel_mass. mission3] = evaluate_fuel_mission_model_three(filename,Mission_Requirements3,load_flying_brick( ));

[M.mission4,W.mission4,mdot_fuel.mission4,delta_mass_fuel.mission4,Total_fuel_mass. mission4] = evaluate_fuel_mission_model_three(filename,Mission_Requirements4,load_flying_brick( ));

[M.mission5,W.mission5,mdot_fuel.mission5,delta_mass_fuel.mission5,Total_fuel_mass. mission5] = evaluate_fuel_mission_model_three(filename,Mission_Requirements5,load_flying_brick( ));

[M.mission6,W.mission6,mdot_fuel.mission6,delta_mass_fuel.mission6,Total_fuel_mass. mission6] = evaluate_fuel_mission_model_three(filename,Mission_Requirements6,load_flying_brick( ));

Flying_Brick_Model_Three.M = M;

Flying_Brick_Model_Three.W = W;

Flying_Brick_Model_Three.mdot_fuel = mdot_fuel;

Flying_Brick_Model_Three.delta_mass_fuel = delta_mass_fuel;

Flying_Brick_Model_Three.Total_fuel_mass = Total_fuel_mass; clear M W mdot_fuel delta_mass_fuel Total_fuel_mass

P a g e | 123

EVALUATE FLYING SINGLE ROTOR MODEL THREE

[M.mission0,W.mission0,mdot_fuel.mission0,delta_mass_fuel.mission0,Total_fuel_mass. mission0] = evaluate_fuel_mission_model_three(filename,Mission_Requirements0,load_single_rotor( EM));

[M.mission1,W.mission1,mdot_fuel.mission1,delta_mass_fuel.mission1,Total_fuel_mass. mission1] = evaluate_fuel_mission_model_three(filename,Mission_Requirements1,load_single_rotor( EM));

[M.mission2,W.mission2,mdot_fuel.mission2,delta_mass_fuel.mission2,Total_fuel_mass. mission2] = evaluate_fuel_mission_model_three(filename,Mission_Requirements2,load_single_rotor( EM));

[M.mission3,W.mission3,mdot_fuel.mission3,delta_mass_fuel.mission3,Total_fuel_mass. mission3] = evaluate_fuel_mission_model_three(filename,Mission_Requirements3,load_single_rotor( EM));

[M.mission4,W.mission4,mdot_fuel.mission4,delta_mass_fuel.mission4,Total_fuel_mass. mission4] = evaluate_fuel_mission_model_three(filename,Mission_Requirements4,load_single_rotor( EM));

[M.mission5,W.mission5,mdot_fuel.mission5,delta_mass_fuel.mission5,Total_fuel_mass. mission5] = evaluate_fuel_mission_model_three(filename,Mission_Requirements5,load_single_rotor( EM));

[M.mission6,W.mission6,mdot_fuel.mission6,delta_mass_fuel.mission6,Total_fuel_mass. mission6] = evaluate_fuel_mission_model_three(filename,Mission_Requirements6,load_single_rotor( EM));

Single_rotor_Model_Three.M = M;

Single_rotor_Model_Three.W = W;

Single_rotor_Model_Three.mdot_fuel = mdot_fuel;

Single_rotor_Model_Three.delta_mass_fuel = delta_mass_fuel;

Single_rotor_Model_Three.Total_fuel_mass = Total_fuel_mass; clear M W mdot_fuel delta_mass_fuel Total_fuel_mass

P a g e | 124

POWER LOADING AND DISK LOADING r = return_value('GM.Blade_Radius ', filename); % blade radius rho = return_value('EM.rho ', filename); % density of air [omega,blade_RPM, blade_RPS, velocity_blades] = rotor_rotational_speed(filename,4,960,12.6); % 4=hover, 960Kv, 12.6V

[blade_radius_max_all_conditions,velocity_blades] = Maximum_Blade_Radius_and_Blade_Velocity(filename, velocity_blades);

Graph and Data for Rotorcraft Hovering Efficiency fig1=figure('Name','Rotorcraft Hovering Efficiency (Power Loading - N/kW) vs Effective Disk Loading (N/m^2)'); set(gcf, 'color', 'w'); % Sets graph background colour to white v_end = 50; % velocity m/s step_size = 0.125/2; % arbitrary step size atm

DL_list = zeros(1,length(0:step_size:v_end)); P_list = zeros(1,length(0:step_size:v_end)); PL_list = zeros(1,length(0:step_size:v_end)); C_T_list = zeros(1,length(0:step_size:v_end)); C_P_list = zeros(1,length(0:step_size:v_end)); vel_induced = 0:step_size:v_end; for kk = 1 for j = 1:length(0:step_size:v_end) [DL_list(j),P_list(j),PL_list(j),C_T_list(j),C_P_list(j)] = power_to_hover(r,vel_induced(j),1,rho,omega); end

% Graph hold on grid on grid minor title('Power Loading (N/kW) vs Effective Disk Loading (N/m^2)','FontSize',30) xlabel('Effective Disk Loading (N/m^2)','FontSize',22) % x-axis label ylabel('Power Loading (N/kW)','FontSize',22) % y-axis label xlim([300 450]) ylim([0 100]) plot(DL_list,PL_list) hold off end

% Modified Momentum with blade element theory k_nonideal = 1.15; % Non-ideal losses; induced power correction factor k_ideal = 1; % Ideal losses; induced power correction factor

% List generation for plotting C_Pi_list_ideal = C_P_list*k_ideal; % generating C_Pi list C_Pi_list_nonideal = C_P_list*k_nonideal; % generating C_Pi list

Number_blades = return_value('N_MainBlades ', filename); % blade radius Blade_chord = return_value('Blade_Chord ', filename); % blade chord

P a g e | 125

sigma = rotor_solidity(Number_blades, Blade_chord, r);

C_d0 = 0.01; % Make an assumption and guess C_d0 value C_P_list_modi_ideal = C_Pi_list_ideal+((sigma*C_d0)/8); C_P_list_modi_non = C_Pi_list_nonideal+((sigma*C_d0)/8);

Graph and Data for Power Coefficent and Thrust Coefficient fig2=figure('Name','Power Coefficent (CP) vs Thrust Coefficient (CT)'); set(gcf, 'color', 'w'); % Sets graph background colour to white

% Graph hold on grid on grid minor title('Power Coefficent (C_P) vs Thrust Coefficient (C_T)','FontSize',30) xlabel('Thrust Coefficient (C_T)','FontSize',22) % x-axis label ylabel('Power Coefficent (C_P)','FontSize',22) % y-axis label xlim([0 0.01]) %ylim([0 1.65]) plot(C_T_list,C_P_list, '--') plot(C_T_list,C_P_list_modi_ideal, '.') plot(C_T_list,C_P_list_modi_non) hold off lgd1 = legend('Simplified Momentum Theory','Modified Momentum Theory, with k = 1, C_d0 = 0.01 (Ideal Losses)','Modified Momentum Theory, with k = 1.15, C_d0 = 0.01 (Non-Ideal Losses)'); lgd1.Location = 'northwest'; set(gca, 'YTickLabel', num2str(get(gca,'YTick')','%g')); % force y axis to display decimals over scientific notation %lgd1.Title.String = ({['Simplified Momentum Theory and' newline 'Modified Momentum Theory']}); lgd1.FontSize = 14;

Graph and Data for Figure of Merit (FOM) fig3=figure('Name','Figure of Merit, FM vs Thrust Coefficient, C_T'); set(gcf, 'color', 'w'); % Sets graph background colour to white FM_simple_list = zeros(1,length(0:step_size:v_end)); FM_modify_ideal_list = zeros(1,length(0:step_size:v_end)); FM_modify_nonideal_list = zeros(1,length(0:step_size:v_end)); for kk = 1 for j = 1:length(0:step_size:v_end) [FM_simple_list(j),FM_modify_ideal_list(j),FM_modify_nonideal_list(j)] = figure_of_merit(C_T_list(j),C_P_list(j), C_d0,sigma); end

% Graph for Figure of Merit hold on grid on

P a g e | 126

grid minor title('Figure of Merit, FM vs Thrust Coefficient, C_T','FontSize',30) xlabel('Thrust Coefficient, C_T','FontSize',22) % x-axis label

ylabel('Figure of Merit, FM','FontSize',22) % y-axis label

xlim([0 0.025]) ylim([0 1.0]) plot(C_T_list,FM_simple_list,'-'); % maths; this = 1 plot(C_T_list,FM_modify_ideal_list,'.') plot(C_T_list,FM_modify_nonideal_list) plot([0, 0.025], [1/k_nonideal, 1/k_nonideal],'--'); %plots FM = 1/k line hold off lgd2 = legend('Maximum FM = 1','Modified Momentum Theory, with k = 1, C_d0 = 0.01 (Ideal Losses)','Modified Momentum Theory, with k = 1.15, C_d0 = 0.01 (Non- Ideal Losses)','FM = 1/k'); lgd2.Location = 'southeast'; %set(gca, 'YTickLabel', num2str(get(gca,'YTick')','%g')); % force y axis to display decimals over scientific notation %lgd2.Title.String = ({['Simplified Momentum Theory and' newline 'Modified Momentum Theory']}); lgd2.FontSize = 14; end

Clean up extra variables clear j k_ideal k_nonideal kk lgd1 lgd2 Number_blades FM_modify_ideal_list clear FM_modify_nonideal_list FM_simple_list P_list PL_list r rho sigma clear step_size v_end vel_induced DL_list C_d0 C_P_list C_P_list_modi_ideal clear C_P_list_modi_non C_Pi_list_ideal C_Pi_list_nonideal C_T_list clear a Blade_chord blade_radius_max_all_conditions blade_RPM blade_RPS

Power Required to hover the craft = Power Profile + Power Ideal = Pi+Po

%P = evaluate_power_to_hover(filename); %P_0 = evaluate_profile_power(filename, load_flying_brick());

FUNCTIONS: Load the Three Initial Geometries for Evaluation function [FlyingPointMass] = load_point_mass() % load class of model to input. i.e. point-mass % Load Flying point-mass FlyingPointMass = Point_Mass; FlyingPointMass.length = 10*10^-3; % m long FlyingPointMass.width = 10*10^-3; % m wide FlyingPointMass.height = 10*10^-3; % m high FlyingPointMass.weight = 3.5; % weight [kg] end function [FlyingBrick] = load_flying_brick() % load class of model to input. i.e. brick % Load Flying brick FlyingBrick = Brick; FlyingBrick.length = 230*10^-3; % m long

P a g e | 127

FlyingBrick.width = 110*10^-3; % m wide FlyingBrick.height = 76*10^-3; % m high FlyingBrick.weight = 3.5; % weight [kg] end

function [FlyingSingleRotor] = load_single_rotor(EM) % load class of model to input. i.e. single-rotor % Load Flying single-rotor % INPUT Parameter File % % Returns: - Number of rotor blades % o main rotor, and tail rotor % - Mass properties % o Main blades, tail blades, rotor assembly, pylon, % fuselage, tailboom, empennage, and langing gear % - Geometric dimensions % o Blade chord, blade aspect ratio, blade loading, % main blade total area, tail blade total area % - Main blade tip speed % - Motor max speeds % - Number of engines % o internal combustion, or PMSM (i.e. brushless PMSM) % - Speed of sound at altitude % - Airframe orientation for evaluation % % N.B. All weights in grams, unless explicitly defined as kg % FR = Single_Rotor;

FR.N_MainBlades = 4; % Number of main rotor blades FR.N_TailRotorBlades = 4; % Number of tail rotor blades FR.N_Rotor_Assembly = 1; % Number of rotor assemblies supporting rotor blades FR.N_Engine_Motor = 1; % Number of engines / motors on craft

% MASS PROPERTIES: i.e. weight distrubution % Main Blades FR.W_MainBlade = 50; % Weight of individual Blade

% Rotor Assembly: Includes Teetering Hinge, Jesus Nut, Blade Grips, Control % rod, etc etc. FR.W_Rotor_Assembly = 15; % Weight of rotor assembly

% Pylon Support: Rotor Mast FR.W_Pylon = 15; % Weight of supporting pylon of rotor assembly

% Fuselage: Main Airframe Body FR.W_Fuselage = 3500; % Main fuselage weight % Tail Boom FR.W_Tailboom = 260; % Weight of tailboom % Tail Blades FR.W_TailBlade = 35;

% Main Rotor Empennage: Fin and Horizontal Stabiliser FR.W_Empennage = 140; % Weight of empennage systems

P a g e | 128

FR.W_Payload = 0.025; % payload mass in Kg

% Geometric Dimensions FR.Blade_Chord = 0.08; % Mean Aerodynamic Chord length in (m)

FR.Wingspan = 0.6; % Length of wingspan in meters (m)

FR.Blade_loading = 1; % Blade Loading FR.Blade_Radius = 0.3; % Blade Radius (m)

gamma = 1.4; % Gamma R = 286; % Universial Gas constant %GM.R = 8.314; % Universial Gas constant FR.a = sqrt(gamma*R*EM.Temp_K); % Speed of Sound

% Airframe Orientation FR.Roll_0 = 0; %} FR.Pitch_0 = 0; %}Orientation of Airframe FR.Yaw_0 = 0; %}

FR.length = 230*10^-3; % m long FR.width = 110*10^-3; % m wide FR.height = 76*10^-3; % m high FR.weight = 4.8; % weight [kg]

FlyingSingleRotor = FR; end

FUNCTION: MODEL ONE FUEL EVALUATION function [M,W,mdot_fuel,delta_mass_fuel,Total_fuel_mass] = evaluate_fuel_mission(filename,Mission_Requirements,Geometry_model) % Function Evaluates the energy analysis of any loaded geomeric model % and applies it to the 5 mission scenarios. % % Parameters: filename; properties config file with all variables % eg. filename = 'inputs.txt' % Mission_Requirements; This is the mission profile for % evaluation % Geometry_model; This is the geometry model that % is loaded for evaluation % % Returns: M; contains the following: % - M.f; kilograms onboard fuel storage % - M.i; mass of vehicle with no fuel % - M.naught; mass with full fuel and payload % - M.FullFuel_Payload = M.i+M.f; Gross vehicle % mass = mass with full fuel and payload % % W; contains the following: % - W.f_litres; Litres onboard fuel storage % - W.f; weight of fuel load % - W.naught = M.naught*g; Gross vehicle weight % = weight with full fuel and payload

P a g e | 129

% % mdot_fuel; Mass flow rate of fuel for each leg % evaluated for the mission loaded % % delta_mass_fuel; Change in mass of fuel for each leg % evaluated for the mission loaded

%

% Total_fuel_mass; Total fuel mass required for each % leg evaluated for the mission loaded %

% Load gravity value for weight and mass calcs % g = return_value('EM.Gravity ', filename); % Gravity g = 9.806771; % gravity

% fuel_consumption = weight * time; % excess_cost = mass* delta_height + (Drag * Velocity) * delta_t

Let; W = weight of vehicle at any instant W.naught = Gross vehicle weight. = weight with full fuel and payload W_f = weight of fuel load W_i = weight vehicle with no fuel Thus: W_i = W.naught - W_f

% Weight of air vehicle without fuel = M_naught W.f_litres = 5; % Litres onboard fuel storage % Converting litres to kilograms % https://www.simetric.co.uk/si_liquids.htm and % https://www.metric-conversions.org/volume/liters-to-cubic-meters.htm M.f = (737.22/1000)*W.f_litres; % kilograms onboard fuel storage % M.f = 0; % kilograms onboard fuel storage W.f = M.f*g; % weight onboard fuel storage in Newtons (N)

Select Weight of vehicle depending on geometry loaded

Load mass value: Weight of air vehicle without fuel; Mass Initial = M.i

if Geometry_model.GeometryID == 1 M.i = Geometry_model.weight; W.f_litres = 0.100; % Litres onboard fuel storage M.f = (737.22/1000)*W.f_litres; % kilograms onboard fuel storage W.f = M.f*g; % weight onboard fuel storage in Newtons (N)

elseif Geometry_model.GeometryID == 2 M.i = Geometry_model.weight; % Assigning brick weight elseif Geometry_model.GeometryID == 3 M.i = Geometry_model.weight; % Assigning single rotor weight end

M.naught = M.i+M.f; % Gross vehicle mass = mass with full fuel and payload M.FullFuel_Payload = M.i+M.f; % Gross vehicle mass = mass with full fuel and payload W.naught = M.naught*g; % Gross vehicle weight = weight with full fuel and payload

P a g e | 130

Determine flight velocity:

P a g e | 131

Rotorcraft_velocity.leg1 = Mission_Requirements.Length_leg_1 / ... Mission_Requirements.Time_leg_1 / 60; % m/s

% Checks if value is empty, then fills with zero. if isempty(Rotorcraft_velocity.leg1) == 1 Rotorcraft_velocity.leg1 = 0; else end

Rotorcraft_velocity.leg2 = Mission_Requirements.Length_leg_2 / ... Mission_Requirements.Time_leg_2 / 60; % m/s

% Checks if value is empty, then fills with zero. if isempty(Rotorcraft_velocity.leg2) == 1 Rotorcraft_velocity.leg2 = 0; else end

Rotorcraft_velocity.leg3 = Mission_Requirements.Length_leg_3 / ... Mission_Requirements.Time_leg_3 / 60; % m/s

% Checks if value is empty, then fills with zero. if isempty(Rotorcraft_velocity.leg3) == 1 Rotorcraft_velocity.leg3 = 0; else end

Rotorcraft_velocity.leg4 = Mission_Requirements.Length_leg_4 / ... Mission_Requirements.Time_leg_4 / 60; % m/s

% Checks if value is empty, then fills with zero. if isempty(Rotorcraft_velocity.leg4) == 1 Rotorcraft_velocity.leg4 = 0; else end

Rotorcraft_velocity.leg5 = Mission_Requirements.Length_leg_5 / ... Mission_Requirements.Time_leg_5 / 60; % m/s

% Checks if value is empty, then fills with zero. if isempty(Rotorcraft_velocity.leg5) == 1 Rotorcraft_velocity.leg5 = 0; else end

Rotorcraft_velocity.leg6 = Mission_Requirements.Length_leg_6 / ... Mission_Requirements.Time_leg_6 / 60; % m/s

% Checks if value is empty, then fills with zero. if isempty(Rotorcraft_velocity.leg6) == 1 Rotorcraft_velocity.leg6 = 0; else end

Rotorcraft_velocity.leg7 = Mission_Requirements.Length_leg_7 / ...

P a g e | 132

Mission_Requirements.Time_leg_7 / 60; % m/s

% Checks if value is empty, then fills with zero. if isempty(Rotorcraft_velocity.leg7) == 1 Rotorcraft_velocity.leg7 = 0; else end

Determine change in time (seconds) Mission_Requirements.Time_leg_1 = 5;

Tsecs = 60; % 60 seconds in a minute Total_seconds_to_fly.leg1 = Mission_Requirements.Time_leg_1 * Tsecs; % Checks if value is empty, then fills with zero. if isempty(Total_seconds_to_fly.leg1) == 1 Total_seconds_to_fly.leg1 = 0; else end

Total_seconds_to_fly.leg2 = Mission_Requirements.Time_leg_2 * Tsecs; % Checks if value is empty, then fills with zero. if isempty(Total_seconds_to_fly.leg2) == 1 Total_seconds_to_fly.leg2 = 0; else end Total_seconds_to_fly.leg3 = Mission_Requirements.Time_leg_3 * Tsecs; % Checks if value is empty, then fills with zero. if isempty(Total_seconds_to_fly.leg3) == 1 Total_seconds_to_fly.leg3 = 0; else end Total_seconds_to_fly.leg4 = Mission_Requirements.Time_leg_4 * Tsecs; % Checks if value is empty, then fills with zero. if isempty(Total_seconds_to_fly.leg4) == 1 Total_seconds_to_fly.leg4 = 0; else end

Total_seconds_to_fly.leg5 = Mission_Requirements.Time_leg_5 * Tsecs; % Checks if value is empty, then fills with zero. if isempty(Total_seconds_to_fly.leg5) == 1 Total_seconds_to_fly.leg5 = 0; else end

Total_seconds_to_fly.leg6 = Mission_Requirements.Time_leg_6 * Tsecs; % Checks if value is empty, then fills with zero. if isempty(Total_seconds_to_fly.leg6) == 1 Total_seconds_to_fly.leg6 = 0; else end Total_seconds_to_fly.leg7 = Mission_Requirements.Time_leg_7 * Tsecs; % Checks if value is empty, then fills with zero. if isempty(Total_seconds_to_fly.leg7) == 1 Total_seconds_to_fly.leg7 = 0;

P a g e | 133

else end

Determine change in y (metres); AND time step dt **** DEPENDS ON MISSION SELECTED ****

if Mission_Requirements.MissionNumber == 0 delta_y.leg1 = (Mission_Requirements.Waypoint_Data{2}(3) - ... Mission_Requirements.Waypoint_Data{1}(3)) /... (Mission_Requirements.Time_leg_1*60); % 60 seconds in a min

elseif Mission_Requirements.MissionNumber == 1 delta_y.leg1 = (Mission_Requirements.Waypoint_Data{2}(3) - ... Mission_Requirements.Waypoint_Data{1}(3)) /... (Mission_Requirements.Time_leg_1*60); % 60 seconds in a min delta_y.leg2 = (Mission_Requirements.Waypoint_Data{3}(3) - ... Mission_Requirements.Waypoint_Data{2}(3)) /... (Mission_Requirements.Time_leg_2*60); % 60 seconds in a min delta_y.leg3 = (Mission_Requirements.Waypoint_Data{4}(3) - ... Mission_Requirements.Waypoint_Data{3}(3)) /... (Mission_Requirements.Time_leg_3*60); % 60 seconds in a min

elseif Mission_Requirements.MissionNumber == 2 delta_y.leg1 = (Mission_Requirements.Waypoint_Data{2}(3) - ... Mission_Requirements.Waypoint_Data{1}(3)) /... (Mission_Requirements.Time_leg_1*60); % 60 seconds in a min delta_y.leg2 = (Mission_Requirements.Waypoint_Data{3}(3) - ... Mission_Requirements.Waypoint_Data{2}(3)) /... (Mission_Requirements.Time_leg_2*60); % 60 seconds in a min delta_y.leg3 = (Mission_Requirements.Waypoint_Data{4}(3) - ... Mission_Requirements.Waypoint_Data{3}(3)) /... (Mission_Requirements.Time_leg_3*60); % 60 seconds in a min delta_y.leg4 = (Mission_Requirements.Waypoint_Data{5}(3) - ... Mission_Requirements.Waypoint_Data{4}(3)) /... (Mission_Requirements.Time_leg_4*60); % 60 seconds in a min delta_y.leg5 = (Mission_Requirements.Waypoint_Data{6}(3) - ... Mission_Requirements.Waypoint_Data{5}(3)) /... (Mission_Requirements.Time_leg_5*60); % 60 seconds in a min

elseif Mission_Requirements.MissionNumber == 3 delta_y.leg1 = (Mission_Requirements.Waypoint_Data{2}(3) - ... Mission_Requirements.Waypoint_Data{1}(3)) /... (Mission_Requirements.Time_leg_1*60); % 60 seconds in a min delta_y.leg2 = (Mission_Requirements.Waypoint_Data{3}(3) - ... Mission_Requirements.Waypoint_Data{2}(3)) /... (Mission_Requirements.Time_leg_2*60); % 60 seconds in a min delta_y.leg3 = (Mission_Requirements.Waypoint_Data{4}(3) - ... Mission_Requirements.Waypoint_Data{3}(3)) /... (Mission_Requirements.Time_leg_3*60); % 60 seconds in a min

elseif Mission_Requirements.MissionNumber == 4 delta_y.leg1 = (Mission_Requirements.Waypoint_Data{2}(3) - ... Mission_Requirements.Waypoint_Data{1}(3)) /... (Mission_Requirements.Time_leg_1*60); % 60 seconds in a min delta_y.leg2 = (Mission_Requirements.Waypoint_Data{3}(3) - ... Mission_Requirements.Waypoint_Data{2}(3)) /... (Mission_Requirements.Time_leg_2*60); % 60 seconds in a min

P a g e | 134

delta_y.leg3 = (Mission_Requirements.Waypoint_Data{4}(3) - ... Mission_Requirements.Waypoint_Data{3}(3)) /... (Mission_Requirements.Time_leg_3*60); % 60 seconds in a min

delta_y.leg4 = (Mission_Requirements.Waypoint_Data{5}(3) - ...

Mission_Requirements.Waypoint_Data{4}(3)) /... (Mission_Requirements.Time_leg_4*60); % 60 seconds in a min delta_y.leg5 = (Mission_Requirements.Waypoint_Data{6}(3) - ... Mission_Requirements.Waypoint_Data{5}(3)) /... (Mission_Requirements.Time_leg_5*60); % 60 seconds in a min delta_y.leg6 = (Mission_Requirements.Waypoint_Data{7}(3) - ... Mission_Requirements.Waypoint_Data{6}(3)) /... (Mission_Requirements.Time_leg_6*60); % 60 seconds in a min delta_y.leg7 = (Mission_Requirements.Waypoint_Data{8}(3) - ... Mission_Requirements.Waypoint_Data{7}(3)) /... (Mission_Requirements.Time_leg_7*60); % 60 seconds in a min

elseif Mission_Requirements.MissionNumber == 6 delta_y.leg1 = (Mission_Requirements.Waypoint_Data{2}(3) - ... Mission_Requirements.Waypoint_Data{1}(3)) /... (Mission_Requirements.Time_leg_1*60); % 60 seconds in a min else delta_y.leg1 = (Mission_Requirements.Waypoint_Data{2}(3) - ... Mission_Requirements.Waypoint_Data{1}(3)) /... (Mission_Requirements.Time_leg_1*60); % 60 seconds in a min delta_y.leg2 = (Mission_Requirements.Waypoint_Data{3}(3) - ... Mission_Requirements.Waypoint_Data{2}(3)) /... (Mission_Requirements.Time_leg_2*60); % 60 seconds in a min delta_y.leg3 = (Mission_Requirements.Waypoint_Data{4}(3) - ... Mission_Requirements.Waypoint_Data{3}(3)) /... (Mission_Requirements.Time_leg_3*60); % 60 seconds in a min delta_y.leg4 = (Mission_Requirements.Waypoint_Data{5}(3) - ... Mission_Requirements.Waypoint_Data{4}(3)) /... (Mission_Requirements.Time_leg_4*60); % 60 seconds in a min delta_y.leg5 = (Mission_Requirements.Waypoint_Data{6}(3) - ... Mission_Requirements.Waypoint_Data{5}(3)) /... (Mission_Requirements.Time_leg_5*60); % 60 seconds in a min delta_y.leg6 = (Mission_Requirements.Waypoint_Data{7}(3) - ... Mission_Requirements.Waypoint_Data{6}(3)) /... (Mission_Requirements.Time_leg_6*60); % 60 seconds in a min delta_y.leg7 = (Mission_Requirements.Waypoint_Data{8}(3) - ... Mission_Requirements.Waypoint_Data{7}(3)) /... (Mission_Requirements.Time_leg_7*60); % 60 seconds in a min end % time step: velocity = dx/dt % dt = dx/velocity % dt held constant at 1 second delta_t = 1;

Evaluate fuel flow Set energy fuel density

e = 46e6; % J/Kg - Jet fuel (Kerosene) %M_naught = total mass of craft with fuel %Every iteration of mdot needs to subtract mass of fuel off M_naught.

P a g e | 135

% AND need to add fuel to fuel total

P a g e | 136

EVALUATE AND RUN SCRIPT

Fuel_mass = 0;

for i = 1:Total_seconds_to_fly.leg1 [mdot_fuel.Leg1, delta_mass_fuel.leg1] = model_naught(filename,e, Geometry_model.CD, Geometry_model.Ac, Rotorcraft_velocity.leg1, delta_y.leg1, Total_seconds_to_fly.leg1, M.naught); if mdot_fuel.Leg1 <= 0 mdot_fuel.Leg1 = 0; Fuel_mass = Fuel_mass + mdot_fuel.Leg1*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg1*delta_t; %Update mass to subtract fuel off first leg else Fuel_mass = Fuel_mass + mdot_fuel.Leg1*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg1*delta_t; %Update mass to subtract fuel off first leg end if isnan(delta_mass_fuel.leg1) == 1 M.naught = M.naught; end end if isempty(Mission_Requirements.Length_leg_2) == 1 && ... isempty(Mission_Requirements.Time_leg_2) == 1 mdot_fuel.Leg2 = 0; delta_mass_fuel.leg2 = 0; else for i = 1:Total_seconds_to_fly.leg2 [mdot_fuel.Leg2, delta_mass_fuel.leg2] = model_naught(filename,e, Geometry_model.CD, Geometry_model.Ac, Rotorcraft_velocity.leg2, delta_y.leg2, Total_seconds_to_fly.leg2, M.naught); if mdot_fuel.Leg2 <= 0 mdot_fuel.Leg2 = 0; Fuel_mass = Fuel_mass + mdot_fuel.Leg2*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg2*delta_t; %Update mass to subtract fuel off second leg else Fuel_mass = Fuel_mass + mdot_fuel.Leg2*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg2*delta_t; %Update mass to subtract fuel off second leg end if isnan(delta_mass_fuel.leg2) == 1 M.naught = M.naught; end end end if isempty(Mission_Requirements.Length_leg_3) == 1 && ... isempty(Mission_Requirements.Time_leg_3) == 1 mdot_fuel.Leg3 = 0;

P a g e | 137

delta_mass_fuel.leg3 = 0; else

for i = 1:Total_seconds_to_fly.leg3 [mdot_fuel.Leg3, delta_mass_fuel.leg3] = model_naught(filename,e, Geometry_model.CD, Geometry_model.Ac, Rotorcraft_velocity.leg3, delta_y.leg3, Total_seconds_to_fly.leg3, M.naught); if mdot_fuel.Leg3 <= 0 mdot_fuel.Leg3 = 0; Fuel_mass = Fuel_mass + mdot_fuel.Leg3*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg3*delta_t; %Update mass to subtract fuel off third leg else Fuel_mass = Fuel_mass + mdot_fuel.Leg3*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg3*delta_t; %Update mass to subtract fuel off third leg end if isnan(delta_mass_fuel.leg3) == 1 M.naught = M.naught; end end end if isempty(Mission_Requirements.Length_leg_4) == 1 && ... isempty(Mission_Requirements.Time_leg_4) == 1 mdot_fuel.Leg4 = 0; delta_mass_fuel.leg4 = 0; else for i = 1:Total_seconds_to_fly.leg4 [mdot_fuel.Leg4, delta_mass_fuel.leg4] = model_naught(filename,e, Geometry_model.CD, Geometry_model.Ac, Rotorcraft_velocity.leg4, delta_y.leg4, Total_seconds_to_fly.leg4, M.naught); if mdot_fuel.Leg4 <= 0 mdot_fuel.Leg4 = 0; Fuel_mass = Fuel_mass + mdot_fuel.Leg4*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg4*delta_t; %Update mass to subtract fuel off fourth leg else Fuel_mass = Fuel_mass + mdot_fuel.Leg4*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg4*delta_t; %Update mass to subtract fuel off fourth leg end if isnan(delta_mass_fuel.leg4) == 1 M.naught = M.naught; end end end if isempty(Mission_Requirements.Length_leg_5) == 1 && ... isempty(Mission_Requirements.Time_leg_5) == 1 mdot_fuel.Leg5 = 0; delta_mass_fuel.leg5 = 0; else for i = 1:Total_seconds_to_fly.leg5

P a g e | 138

[mdot_fuel.Leg5, delta_mass_fuel.leg5] = model_naught(filename,e, Geometry_model.CD, Geometry_model.Ac, Rotorcraft_velocity.leg5, delta_y.leg5, Total_seconds_to_fly.leg5, M.naught); if mdot_fuel.Leg5 <= 0 mdot_fuel.Leg5 = 0; Fuel_mass = Fuel_mass + mdot_fuel.Leg5*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg5*delta_t; %Update mass to subtract fuel off fourth leg else Fuel_mass = Fuel_mass + mdot_fuel.Leg5*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg5*delta_t; %Update mass to subtract fuel off fourth leg end if isnan(delta_mass_fuel.leg5) == 1 M.naught = M.naught; end end end if isempty(Mission_Requirements.Length_leg_6) == 1 && ... isempty(Mission_Requirements.Time_leg_6) == 1 mdot_fuel.Leg6 = 0; delta_mass_fuel.leg6 = 0; else for i = 1:Total_seconds_to_fly.leg6 [mdot_fuel.Leg6, delta_mass_fuel.leg6] = model_naught(filename,e, Geometry_model.CD, Geometry_model.Ac, Rotorcraft_velocity.leg6, delta_y.leg6, Total_seconds_to_fly.leg6, M.naught); if mdot_fuel.Leg6 <= 0 mdot_fuel.Leg6 = 0; Fuel_mass = Fuel_mass + mdot_fuel.Leg6*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg6*delta_t; %Update mass to subtract fuel off fourth leg else Fuel_mass = Fuel_mass + mdot_fuel.Leg6*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg6*delta_t; %Update mass to subtract fuel off fourth leg end if isnan(delta_mass_fuel.leg6) == 1 M.naught = M.naught; end end end if isempty(Mission_Requirements.Length_leg_7) == 1 && ... isempty(Mission_Requirements.Time_leg_7) == 1 mdot_fuel.Leg7 = 0; delta_mass_fuel.leg7 = 0; else for i = 1:Total_seconds_to_fly.leg7 [mdot_fuel.Leg7, delta_mass_fuel.leg7] = model_naught(filename,e, Geometry_model.CD, Geometry_model.Ac, Rotorcraft_velocity.leg7, delta_y.leg7, Total_seconds_to_fly.leg7, M.naught);

P a g e | 139

if mdot_fuel.Leg7 <= 0 mdot_fuel.Leg7 = 0;

Fuel_mass = Fuel_mass + mdot_fuel.Leg7*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg7*delta_t; %Update mass to subtract fuel off fourth leg else Fuel_mass = Fuel_mass + mdot_fuel.Leg7*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg7*delta_t; %Update mass to subtract fuel off fourth leg end if isnan(delta_mass_fuel.leg7) == 1 M.naught = M.naught; end end end Total_fuel_mass = Fuel_mass; %Total mass to ADD total fuel used

% %Total Fuel mass to fly mission profile % Total_fuel_mass = delta_mass_fuel.leg1 +delta_mass_fuel.leg2 + ... % delta_mass_fuel.leg3 +delta_mass_fuel.leg4 + ... % delta_mass_fuel.leg5 +delta_mass_fuel.leg6 +delta_mass_fuel.leg7; end

FUNCTION: MODEL ONE: SIMPLIFIED ENERGY ANALYSIS function [mdot_fuel, delta_mass_fuel] = model_naught(properties,e, CD, Ac, Vabs, delta_y , delta_t, M_naught) %#ok % Function calculates the mass flow rate of the fuel flow for the % rotorcraft. It does so through an energy analysis, with some primary % assumptions. % % Equations: Energy Input: % Ein = mdot_fuel * delta_t * e; % where e is fuel energy % Ein = kg/s * s * MJ/Kg = MJ % % Parameters: properties; properties config file with all variables % eg. properties = 'inputs.txt' % e; (MJ/Kg) where e is fuel energy density % CD; Coefficient of Drag for loaded geometry % Ac; (m^2) Characteristic area of loaded air % vehicle in flight % Vabs; (m/s) Absolute velocity of flying craft % delta_y; (m) change in height step % delta_t; (s) change in time % % Returns: mdot_fuel; (Kg/sec) mass flow rate of fuel % delta_mass_fuel; change in mass of fuel

P a g e | 140

Set motor efficiency value

eta_engine = 0.75;

Loading all the parameters

% Load gravity value: % g = return_value('EM.Gravity ', properties); % gravity g = 9.806771; % gravity

% Load density: % rho = return_value('EM.rho ', properties); % blade radius rho = 1.216389; % blade radius

Evaluation of everything

% Part (b) of trajectory: Powerb = M_naught * g * (delta_y / delta_t); % Power = weight force * (delta_y/delta_t)

Energy_delta_y = Powerb * delta_t; % Energy_delta_y = M_naught * g * delta_h;

% Part (a) of trajectory: % Power = Force * velocity; % Power = (1/2) * rho * velocity^2 * CD * Ac * velocity; Powera = (1/2) * rho * CD * Ac * Vabs^3; % CD fixed, based on geometry of fuselage

Energy_velocity = Powera * delta_t;

% Ein = (1/eta_engine) * Eactual Ein = (1/eta_engine) * (Energy_delta_y + Energy_velocity);

mdot_fuel = Ein / ( delta_t * e ) ; % where e is fuel energy density % mdot_fuel = Kg / s

%delta_mass_fuel = mdot_fuel * delta_t; delta_mass_fuel = Ein / e; end

P a g e | 141

FUNCTION: RETURN VALUE FROM MASTER CONFIG FILE

Return Value txt = ''; a = return_value(txt, filename); to call upon values: x = input_values_table.Var1(y) function [corresponding_value] = return_value(txt, filename) % Function returns the value corresponding to the input text from the % master config file % % Parameters: txt; example, 'EM.rho ' % filename; properties config file with all variables % eg. filename = 'inputs.txt' % % Returns: corresponding_value; example, density(rho) % fid = fopen(filename, 'r+'); ERROR HANDLING

if fid < 0 fprintf('ERROR: Cannot open file \n') return; end

Return entire file as a character vector for searching

filetext = fileread(filename);

% Return number corresponding to input text % Example..... '(?<=Dynamic_Viscos[^0-9]*)[0-9]*\.?[0-9]+' % exp = ('Dynamic_Viscos');

expr1 = '(?<='; % Below determines any number that follows the desired string input text expr2 = '[^0-9]*)[0-9]*\.?[0-9]+'; expression = strcat(expr1,txt,expr2); % Concatenate strings horizontally

corresponding_value = str2double(regexp(filetext, expression, 'match')); fclose(fid); end

P a g e | 142

FUNCTION: RETURN VALUE AND WRITE NEW VALUE TO/FROM MASTER CONFIG FILE function x = write_new_output_file(newvaluename, newvalue, oldfile, newfile) % Function writes a new value to the INPUT config file % % Parameters: newvaluename; example, 'EM.rho ' % newvalue; new value to overwrite in oldfile % oldfile; properties config file with all variables % eg. filename = 'inputs.txt' % newfile; properties config file with all variables % eg. filename = 'inputs.txt' % % Returns: x; nothing. % contents = fileread(oldfile); expr1 = newvaluename; expr2 = ' = \d+(\.\d*)?'; expression = strcat(expr1,expr2); % Concatenate strings horizontally newcontents = regexprep(contents, expression, sprintf('Gravity = %d', newvalue)); fid = fopen(newfile, 'w'); fwrite(fid, newcontents); fclose(fid); x = 1; end

FUNCTION: Create mission profiles function [Mission_Requirements] = mission_requirements(mission_value) % Mission Profile / Requirements Script File % This function outlines the key mission parameters for testing the % codes generated data. % The code checks for 'convergence' on a design that matches this % mission profile / requirements file % % Parameters: mission_value; selection of mission for analysis % % Returns: - Endurance % - Range % - Payload % - Cruise speed % - Vertical Rate of Climb Speed (VROC) % - Hover time % - Length of flight legs example. % o Length leg 1 (hover / descend / ascend) % o Length leg 2 (transit to site) % o Length leg 3 (hover / descend / ascend)/(return to base) % - etc. etc. % - Waypoint Data (x,y,z) - NEU orientation frame % ######################################################## filename = 'inputs.txt'; Alt_0 = return_value('EM.Alt_0 ', filename); % altitude of flight

P a g e | 143

% Assumption

VROC_feet_min = 500; % measured in (feet/min)

Assign class

Mission_Requirements = Mission_requirements_class;

Mission_Requirements.Endurance = 60; % time of endurance in minutes (min) Mission_Requirements.Range = 100; % range in (Km) Mission_Requirements.Payload = 0.025; % payload in (Kg) Mission_Requirements.Cruise_speed = 10; % measured in (m/s) Mission_Requirements.VROC = VROC_feet_min*(5.08*10^-3); % measured in (m/s)

if mission_value == 0 % Forward axial flight % % 5000m % x------x Alt. 76.2m % % % Mission_Requirements.MissionNumber = 0; % Assigning mission value Mission_Requirements.Length_leg_1 = 5000; % length in metres of first leg (metres) Mission_Requirements.Time_leg_1 = 30; % time in minutes of first leg (min) Mission_Requirements.Waypoint_Data = {[0,0,Alt_0],[5000,0,Alt_0]};

elseif mission_value == 1 % Simple hop mission, from a -> d % Leg 1: 1 minutes, Leg 2: 30 minutes, Leg 3: 1 mins % Flight reaches altitude condition, Leg 2: 5000metres, Leg 3: % ground % % b------c Alt: 76.2m % | | % | | % a d Mission_Requirements.MissionNumber = 1; % Assigning mission value Mission_Requirements.Hover_time = 0.5; % time in minutes (min) Mission_Requirements.Length_leg_1 = Mission_Requirements.Flight_level_min_altitude_metres; % length in metres of first leg (metres) Mission_Requirements.Length_leg_2 = 5000; % length in metres of second leg (metres) Mission_Requirements.Length_leg_3 = Mission_Requirements.Flight_level_min_altitude_metres; % length in metres of third leg (metres) Mission_Requirements.Time_leg_1 = 1; % time in minutes of first leg (min) Mission_Requirements.Time_leg_2 = 30; % time in minutes of second leg (min)

P a g e | 144

Mission_Requirements.Time_leg_3 = 1; % time in minutes of third leg (min)

Mission_Requirements.Waypoint_Data = {[0,0,0],[0,0,Alt_0],[5000,0,Alt_0],[5000,0,0]};

elseif mission_value == 2 % Simple hop with hover midway, then return to base % % b------c------b Alt: 76.2m % | | % | | % a a % Mission_Requirements.MissionNumber = 2; % Assigning mission value Mission_Requirements.Hover_time = 0.5; % time in minutes (min) Mission_Requirements.Length_leg_1 = Mission_Requirements.Flight_level_min_altitude_metres; % length in metres of first leg (metres) Mission_Requirements.Length_leg_2 = 5000; % length in metres of second leg (metres) Mission_Requirements.Length_leg_3 = 0; % length in metres of third leg (metres) Mission_Requirements.Length_leg_4 = 5000; % length in metres of fourth leg (metres) Mission_Requirements.Length_leg_5 = Mission_Requirements.Flight_level_min_altitude_metres; % length in metres of fifth leg (metres) Mission_Requirements.Time_leg_1 = 1; % time in minutes of first leg (min) Mission_Requirements.Time_leg_2 = 30; % time in minutes of second leg (min) Mission_Requirements.Time_leg_3 = 5; % time in minutes of third leg (min) Mission_Requirements.Time_leg_4 = 30; % time in minutes of fourth leg (min) Mission_Requirements.Time_leg_5 = 1; % time in minutes of fifth leg (min) Mission_Requirements.Waypoint_Data = {[0,0,0],[0,0,Alt_0],[5000,0,Alt_0],[5000,0,Alt_0],[5000+5000,0,Alt_0],[5000+5000,0 ,0]};

elseif mission_value == 3 % Forward axial climb, then cruise flight then forward axial descend % Flight assumes climb/descend angles of 45 degrees % % 5000m % x------x Alt. 76.2m % - - % - - 107.763m % - - % x x % % Evaluate hypotenuse based off minimum flight level hyp = Mission_Requirements.Flight_level_min_altitude_metres/sind(45);

P a g e | 145

Mission_Requirements.MissionNumber = 3; % Assigning mission value Mission_Requirements.Hover_time = 0.5; % time in minutes (min)

Mission_Requirements.Length_leg_1 = hyp; % length in metres of first leg (metres) Mission_Requirements.Length_leg_2 = 5000; % length in metres of second leg (metres) Mission_Requirements.Length_leg_3 = hyp; % length in metres of third leg (metres) Mission_Requirements.Time_leg_1 = 5; % time in minutes of first leg (min) Mission_Requirements.Time_leg_2 = 30; % time in minutes of second leg (min) Mission_Requirements.Time_leg_3 = 5; % time in minutes of third leg (min) Mission_Requirements.Waypoint_Data = {[0,0,0],[Alt_0,0,Alt_0],[Alt_0+5000,0,Alt_0],[Alt_0+5000+Alt_0,0,0]};

elseif mission_value == 4 % Hop and Dive under with extra Hop % % 1000m 1000m % x------x x------x Alt: 76.2m % | \30.48m / | % | x------x | % x 250m x % Mission_Requirements.MissionNumber = 4; % Assigning mission value Mission_Requirements.Hover_time = 0.5; % time in minutes (min) Mission_Requirements.Length_leg_1 = Mission_Requirements.Flight_level_min_altitude_metres; % length in metres of first leg (metres) Mission_Requirements.Length_leg_2 = 1000; % length in metres of second leg (metres) Mission_Requirements.Length_leg_3 = 30.48; % length in metres of third leg (metres) Mission_Requirements.Length_leg_4 = 250; % length in metres of fourth leg (metres) Mission_Requirements.Length_leg_5 = 30.48; % length in metres of fifth leg (metres) Mission_Requirements.Length_leg_6 = 1000; % length in metres of sixth leg (metres) Mission_Requirements.Length_leg_7 = Mission_Requirements.Flight_level_min_altitude_metres; % length in metres of seventh leg (metres) Mission_Requirements.Time_leg_1 = 5; % time in minutes of first leg (min) Mission_Requirements.Time_leg_2 = 20; % time in minutes of second leg (min) Mission_Requirements.Time_leg_3 = 5; % time in minutes of third leg (min) Mission_Requirements.Time_leg_4 = 20; % time in minutes of fourth leg (min) Mission_Requirements.Time_leg_5 = 5; % time in minutes of fifth leg (min)

P a g e | 146

Mission_Requirements.Time_leg_6 = 20; % time in minutes of sixth leg (min) Mission_Requirements.Time_leg_7 = 5; % time in minutes of seventh leg (min) Mission_Requirements.Waypoint_Data = {[0,0,0],[0,0,Alt_0],[1000,0,Alt_0],[1030.48,0,45.72],[1280.48,0,45.72],[1310.96,0, Alt_0],[2250,0,Alt_0],[2250,0,0]};

elseif mission_value == 6 % Climbing vertical flight % % x Alt. 10000m % | % | % | % | % x Alt. 70m % Mission_Requirements.MissionNumber = 6; % Assigning mission value Mission_Requirements.Length_leg_1 = 10000; % length in metres of first leg (metres) Mission_Requirements.Time_leg_1 = 30; % time in minutes of first leg (min) Mission_Requirements.Waypoint_Data = {[0,0,0],[0,0,10000]};

else % Full simulation model % Hope and Dive under with extra Hop % % 25000m 25000m % x------x x------x Alt: 76.2m = 250 ft } % / \30.48m / \ } dif = 100 foot % / x------x \ Alt: 45.72m = 150 ft } % x 5000m x Alt: 0m % hyp = Mission_Requirements.Flight_level_min_altitude_metres/sind(45); Mission_Requirements.MissionNumber = 5; % Assigning mission value Mission_Requirements.Hover_time = 10; % time in minutes (min) Mission_Requirements.Length_leg_1 = hyp; % length in metres of first leg (metres) Mission_Requirements.Length_leg_2 = 25000; % length in metres of second leg (metres) Mission_Requirements.Length_leg_3 = 30.48; % length in metres of third leg (metres) Mission_Requirements.Length_leg_4 = 5000; % length in metres of fourth leg (metres) Mission_Requirements.Length_leg_5 = 30.48; % length in metres of fifth leg (metres) Mission_Requirements.Length_leg_6 = 25000; % length in metres of sixth leg (metres) Mission_Requirements.Length_leg_7 = hyp; % length in metres of seventh leg (metres) Mission_Requirements.Time_leg_1 = 1; % time in minutes of first leg (min) Mission_Requirements.Time_leg_2 = 20; % time in minutes of second leg (min)

P a g e | 147

Mission_Requirements.Time_leg_3 = 0.5; % time in minutes of third leg (min) Mission_Requirements.Time_leg_4 = 10; % time in minutes of fourth leg (min) Mission_Requirements.Time_leg_5 = 0.5; % time in minutes of fifth leg (min) Mission_Requirements.Time_leg_6 = 20; % time in minutes of sixth leg (min) Mission_Requirements.Time_leg_7 = 1; % time in minutes of seventh leg (min) xval= 1/sqrt(2)*30.48; Mission_Requirements.Waypoint_Data = {[0,0,0],[Alt_0,0,Alt_0],[Alt_0+25000,0,Alt_0],[Alt_0+25000+xval,0,45.72],[Alt_0+25 000+xval+5000,0,45.72],[Alt_0+25000+xval+5000+xval,0,Alt_0],[Alt_0+25000+xval+5000+ xval+25000,0,Alt_0],[Alt_0+25000+xval+5000+xval+25000+Alt_0,0,0]}; end end

FUNCTION: Evaluate Main Rotor Rotation Speed function [omega, blade_RPM, blade_RPS, velocity_blades] = rotor_rotational_speed(properties,Engine_cond,kv_rating, battery_size) % Function returns the speed of the main rotors depending on the % condition of the engine and the motors being used % % Parameters: properties proporties config file with all variables % eg. properties = 'inputs.txt' % Engine_cond; 0 = off % 1 = vertical ascension (take-off) % 2 = forward flight % 3 = descending flight (landing) % 4/else = hover % kv_rating; kilovolt rating of engine/propulsion % mechanism % battery_size; size of battery, assume 12.6 Volts % % Returns: omega; (rad/sec) angular/rotational speed of the rotor blades % blade_RPM; Blade Revolutions per minute % blade_RPS; Blade Revolutions per second % velocity_blades; (m/s) velocity of rotating blades % % Most rotorcopter engines (PMSM, brushless) are between 800 Kv and % 4600 Kv % Example: RPM of rotor => % 800kv PMSM equates too 800rpm / volt = 10080 rpm@input of 12.6 Volts % For hover, guestimate use 50-75% of above RPM % i.e. RPM_hover = RPM*(.5+.75)/2 = 6300 RPM for above example. % radius_blades = return_value('GM.Blade_Radius ', properties); % current altitude

RPM = kv_rating*battery_size; if Engine_cond == 0

P a g e | 148

% engine off RPM = 0; elseif Engine_cond == 1 % vertical ascension (take-off) RPM = RPM; elseif Engine_cond == 2 % forward flight RPM = 0.8*RPM; elseif Engine_cond == 3 % descending flight (landing) RPM = RPM; else % Rotorcopter hovering RPM_hover = RPM*(.5+.75)/2; % Guestimate for hovering power RPM = RPM_hover; end

blade_RPM = RPM; blade_RPS = blade_RPM/60; omega = 2*pi*blade_RPS; % rad/sec velocity_blades = omega * radius_blades; % m/s of blades end

P a g e | 149

Momentum Theory - HOVER FUNCTION: Disk loading / Ideal Induced Power / Power loading / Coefficients of TandP function [DL,P, PL, C_T, C_P] = power_to_hover(R,v_i,t,rho,omega) % Function use momentum theory to determine power and thrust generation % of the helicopter rotors % % Parameters: R; blade radius % v_i; vertical speed of air through rotors % t; time % rho; density of air % Omega; rotational speed of the rotor % % Returns: DL; [N/m^2 = kg/(ms^2)] Disk loading ( Thrust / Area ) % P; [W = joule/sec = kg m^2/s^3] ideal power to hover craft % PL; [N/kW] Power loading ( Thrust / Power ) % C_T; Rotor thrust coefficient % C_P; Rotor power coefficient % A = pi*R.^2; % Disk area h = v_i*t; % vertical height of air passing through rotor; speed air * time Vol = A*h; % Vol air passing through rotor Mass_air = rho *Vol; % mass of air moving through rotors % Momentum conservation theory: % Force on mass = delta momentum % Final momentum = Mass air * speed final (U_final) U_final = 2*v_i; % final speed w = U_final; % velocity in vena contracta (Leishman) % F = (Mass_air*U_final)/t; % Force on air volume % F = (2*v*rho*A*v*t)/t; % Force on air volume -> This is rotor % thrust T T = (2*v_i*rho*A*v_i); % [N = kg m/s^2] Rotor Thrust F = (2*v_i.^2*rho*A); % Force on air volume = Thrust v_i = sqrt(F/(2*rho*A)); % Speed Induced at the rotors speed_at_rotor = v_i; % Power = work / time => work = Force * distance % power = F*speed_at_rotor;

% Ideal power: N.B. Does not take into account viscous effects P = F*sqrt(F/(2*rho*A)); % Watts %P = sqrt((F.^3)/(2*rho*A));

% Disk_loading = T/A T_ova_A = T/A; % [N/m^2 = kg/(ms^2)] Disk Loading DL = T_ova_A; K = sqrt(1/(2*pi*rho)); power2 = K*(F.^(3/2)/R);

% Power_loading = T/P P_ova_L = T/(P/1000); % [N/kW] Power Loading PL = P_ova_L;

% Induced inflow ratio % velocity tip = Omega * r => Omega is rotational speed of the rotor

P a g e | 150

% and r is the rotor radius v_tip = omega*R; % velocity of the rotor tip

% Thrust coefficient C_T = T/(rho*A*v_tip.^2); % rotor thrust coefficient

% Power coefficient C_P = P/(rho*A*omega.^3*R.^3); % rotor power coefficient C_P_hov = C_T.^(3/2)/(sqrt(2)); % hovering rotor power coefficient end

Blade Element Method FUNCTION: Rotor Solidity function [sigma] = rotor_solidity(Number_blades, Blade_chord, Blade_radius) % Function returns rotor solidity % This is the ratio of the blade area to the rotor disk area for the % rotor copter. % % Parameters: Number_blades; number of rotor blades % Blade_chord; blade chord length % Blade_radius; blade radius % % Returns: sigma; lowercase sigma = rotor solidity % sigma = (Number_blades * Blade_chord)/(pi*Blade_radius); end

FUNCTION: Figure of Merit (FOM) function [FM_simple,FM_modify_ideal,FM_modify_nonideal] = figure_of_merit(C_T,C_P_meas, C_d0,sigma) % Function returns figure of merit % This is a non-dimensional standard of hovering thrust efficiency. % % It uses both; the simple momentum theory without the induced power % correction factors. & % the modified momentum theory with the induced power correction % factors. % % Equation simple momemtum theory: % FM_simple = P_ideal / P_measured % FM_simple = (C_T_measured^(3/2)/sqrt(2)) / C_P_measured % FM_simple = (C_T_measured^(3/2)) / (sqrt(2)*C_P_measured) % % Equation modified momemtum theory: % FM_modified = ideal power / (induced Power + profile power) % FM_modified = P_ideal / (k * (P_ideal + P0)) % FM_modified = (C_T_measured^(3/2)/sqrt(2)) / ... % (k*(C_T_measured^(3/2)/sqrt(2)) + (sigma*(C_d0/8))) %

P a g e | 151

% Parameters: C_T; rotor thrust coefficient % C_P_meas; ideal power coefficient (measured)

% C_d0; section profile drag coefficent % (constant) % % Returns: FM_simple; figure of merit unmodified % FM_modify_ideal; figure of merit % FM_modify_nonideal; % FM_simple = (C_T.^(3/2)) /((sqrt(2))*C_P_meas); k_ideal = 1; k_nonideal = 1.15; % syms k % FM_modified = (C_T.^(3/2)/sqrt(2)) / ... % (k*(C_T.^(3/2)/sqrt(2)) + (sigma*(C_d0/8)));

FM_modify_ideal = (C_T.^(3/2)/sqrt(2)) / ... (k_ideal*(C_T.^(3/2)/sqrt(2)) + (sigma*(C_d0/8)));

FM_modify_nonideal = (C_T.^(3/2)/sqrt(2)) / ... (k_nonideal*(C_T.^(3/2)/sqrt(2)) + (sigma*(C_d0/8))); end

FUNCTION: Maximum Blade Radius and Blade Velocity function [blade_radius_max_all_conditions,velocity_blades_out] = Maximum_Blade_Radius_and_Blade_Velocity(filename, velocity_blades) % Check velocity of blades and compare to speed of sound % Code below evaluates and finds the maximum main blade radius for the % rotorcraft a = return_value('GM.a ', filename); % speed sound blade_radius = return_value('Blade_Radius ', filename); % blade radius

if velocity_blades >= a

Desired_max_mach_number = 0.78; % Leishman's textbook. Principles of Helicopter Aerodynamics mach = Desired_max_mach_number*a; blade_radius_max_all_conditions = mach/omega; else velocity_blades = velocity_blades; blade_radius_max_all_conditions = blade_radius; end

% Code below updates the blade radius as per hovering condition if velocity_blades >= a Desired_max_mach_number = 0.6; % Leishman's textbook. Principles of Helicopter Aerodynamics mach = Desired_max_mach_number*a; blade_radius_max = mach/omega; blade_radius_max_safety_factor = blade_radius_max * .9; % Add safety factor in for maximum blade radius

% Update Geometric values with calculated maximum blade radius

P a g e | 152

GM.Blade_Radius = blade_radius_max_safety_factor; GM.Wingspan = GM.Blade_Radius*2; velocity_blades = omega*blade_radius_max_safety_factor; else velocity_blades = velocity_blades; end velocity_blades_out = velocity_blades; end

Blade Element Theory FUNCTION: Profile power function [P_0,C_P0] = profile_power(rho, Number_blades, omega, Blade_chord, C_d0,R) % Function returns profile power (P_0) % This uses blade element theory by looking at separate elements along % the blade, and then evaluating drag forces. % % Parameters: rho; air/atmosphere density % Number_blades; number of rotor blades % omega; (RPM) angular/rotational speed of the rotor blades % Blade_chord; blade chord length % C_d0; section profile drag coefficent % (constant) % R; Blade Radius % % Returns: P_0; profile power % C_P0; Power coefficent % P_0 = (1/8)*(rho*Number_blades*omega.^3*Blade_chord*C_d0*R.^4); C_P0 = ((1/8)*((Number_blades*Blade_chord*R) / (pi*R.^2)))*C_d0; end

P a g e | 153

FUNCTION: Coefficient of Drag function CD = get_CD(L,D) % Function returns 3-Dimensional drag coefficient for flying rectangular % plate.... in our case, a flying brick % % Sketch: Rectangular Plate 3-D Drag Coefficient % % __ % |\ \ % | \ \ L % | \ \ % | \ \ % ----> \ | | % \ | | % \ | | D % \|_| % % Equations: % CD = 1.10 + 0.02(L/D + D/L) % % *for: 1/30 < L/D < 30 % *Rectangular plate area = LD % % Parameters: L; length, in-line with the velocity flow % D; width, perpendicular to the velocity flow % % Returns: % CD; 3D Coefficient of Drag % CD = 1.10 + 0.02*((L/D) + (D/L)); end

P a g e | 154

FUNCTION: Profile power function P_0 = evaluate_profile_power(filename,Geometry_model) %#ok % Function evaluates profile power using Blade Element Theory % % Parameters: filename; proporties config file with all variables % eg. properties = 'inputs.txt' % % Geometry_model; This is the geometry model that is % loaded for evaluation % % Returns: P_0; profile power of main rotors % % R = return_value('GM.Blade_Radius ', filename); % blade radius % rho = return_value('EM.rho ', filename); % density of air % Number_blades = return_value('N_MainBlades ', filename); % number rotor blades % Blade_chord = return_value('Blade_Chord ', filename); % blade chord % a = return_value('GM.a ', filename); % speed sound

R = 0.3; % blade radius rho = 1.216389400000000; % density of air Number_blades = 4; % number rotor blades Blade_chord = 0.080000000000000; % blade chord a = 3.393772854508680e+02; % speed sound

if Geometry_model.GeometryID == 1 C_d0 = 0.001; % value assumed due to lowest value on NACA009 Aerofoil being 0.005, as this is literally a point mass. elseif Geometry_model.GeometryID == 2 L = Geometry_model.length; D = Geometry_model.height; C_d0 = get_CD(L,D); elseif Geometry_model.GeometryID == 3 L = Geometry_model.length; D = Geometry_model.height; C_d0 = get_CD(L,D); end % 0.9 = 10% safety factor added in, 0.6 equals 60 percent of speed of sound % as literature, "Leishmann" says 60% for hover is a good approx. velocity_blades = .6*.9*a; omega = velocity_blades / R; % m/s of blades %[omega, ~, ~, ~] = rotor_rotational_speed(filename,4,960,12.6); % 4=hover, 960Kv, 12.6V [P_0,~] = profile_power(rho, Number_blades, omega, Blade_chord, C_d0,R); end

P a g e | 155

FUNCTION: Evaluate power to hover function P = evaluate_power_to_hover(filename) %#ok % This function evaluates the power required to hover, i.e. the ideal % induced power. This uses is momentum theory. % % Parameters: properties proporties config file with all variables % eg. properties = 'inputs.txt' % % Returns: P; induced ideal power % % R = return_value('GM.Blade_Radius ', filename); % blade radius % rho = return_value('EM.rho ', filename); % density of air % %omega = velocity_blades / R; % m/s of blades % a = return_value('GM.a ', filename); % speed sound

R = 0.3; % blade radius rho = 1.216389400000000; % density of air %omega = velocity_blades / R; % m/s of blades a = 3.393772854508680e+02; % speed sound

% 0.9 = 10% safety factor added in, 0.6 equals 60 percent of speed of sound % as literature, "Leishmann" says 60% for hover is a good approx. velocity_blades = .6*.9*a; omega = velocity_blades / R; % m/s of blades

%[omega, ~, ~, ~] = rotor_rotational_speed(filename,4,960,12.6); % 4=hover, 960Kv, 12.6V %v_i = velocity_induced(T, R, omega, rho); v_i = velocity_induced(R, omega, rho); %v_i = 8; [~,P, ~, ~, ~] = power_to_hover(R,v_i,1,rho,omega); end

P a g e | 156

FUNCTION: MODEL TWO FUEL EVALUATION function [M,W,mdot_fuel,delta_mass_fuel,Total_fuel_mass] = evaluate_fuel_mission_model_two(filename,Mission_Requirements,Geometry_model) % Function Evaluates the energy analysis of any loaded geomeric model % and applies it to the 5 mission scenarios. % % Parameters: filename; properties config file with all variables % eg. filename = 'inputs.txt' % Mission_Requirements; This is the mission profile for % evaluation % Geometry_model; This is the geometry model that % is loaded for evaluation % % Returns: M; contains the following: % - M.f; kilograms onboard fuel storage % - M.i; mass of vehicle with no fuel % - M.naught; mass with full fuel and payload % - M.FullFuel_Payload = M.i+M.f; Gross vehicle % mass = mass with full fuel and payload % % W; contains the following: % - W.f_litres; Litres onboard fuel storage % - W.f; weight of fuel load % - W.naught = M.naught*g; Gross vehicle weight % = weight with full fuel and payload % % mdot_fuel; Mass flow rate of fuel for each leg % evaluated for the mission loaded % % delta_mass_fuel; Change in mass of fuel for each leg % evaluated for the mission loaded % % Total_fuel_mass; Total fuel mass required for each % leg evaluated for the mission loaded %

% Load gravity value for weight and mass calcs % g = return_value('EM.Gravity ', filename); % Gravity g = 9.806771; % gravity

% fuel_consumption = weight * time; % excess_cost = mass* delta_height + (Drag * Velocity) * delta_t

Let; W = weight of vehicle at any instant W.naught = Gross vehicle weight. = weight with full fuel and payload W_f = weight of fuel load W_i = weight vehicle with no fuel Thus: W_i = W.naught - W_f

% Weight of air vehicle without fuel = M_naught W.f_litres = 5; % Litres onboard fuel storage % Converting litres to kilograms % https://www.simetric.co.uk/si_liquids.htm and % https://www.metric-conversions.org/volume/liters-to-cubic-meters.htm M.f = (737.22/1000)*W.f_litres; % kilograms onboard fuel storage % M.f = 0; % kilograms onboard fuel storage W.f = M.f*g; % weight onboard fuel storage in Newtons (N)

P a g e | 157

Select Weight of vehicle depending on geometry loaded

Load mass value: Weight of air vehicle without fuel; Mass Initial = M.i

if Geometry_model.GeometryID == 1 M.i = Geometry_model.weight; W.f_litres = 0.001; % Litres onboard fuel storage M.f = (737.22/1000)*W.f_litres; % kilograms onboard fuel storage W.f = M.f*g; % weight onboard fuel storage in Newtons (N) elseif Geometry_model.GeometryID == 2 M.i = Geometry_model.weight; % Assigning brick weight elseif Geometry_model.GeometryID == 3 M.i = Geometry_model.weight; % Assigning single rotor weight end

M.naught = M.i+M.f; % Gross vehicle mass = mass with full fuel and payload M.FullFuel_Payload = M.i+M.f; % Gross vehicle mass = mass with full fuel and payload W.naught = M.naught*g; % Gross vehicle weight = weight with full fuel and payload

Determine flight velocity:

Rotorcraft_velocity.leg1 = Mission_Requirements.Length_leg_1 / ... Mission_Requirements.Time_leg_1 / 60; % m/s

% Checks if value is empty, then fills with zero. if isempty(Rotorcraft_velocity.leg1) == 1 Rotorcraft_velocity.leg1 = 0; else end

Rotorcraft_velocity.leg2 = Mission_Requirements.Length_leg_2 / ... Mission_Requirements.Time_leg_2 / 60; % m/s

% Checks if value is empty, then fills with zero. if isempty(Rotorcraft_velocity.leg2) == 1 Rotorcraft_velocity.leg2 = 0; else end

Rotorcraft_velocity.leg3 = Mission_Requirements.Length_leg_3 / ... Mission_Requirements.Time_leg_3 / 60; % m/s

% Checks if value is empty, then fills with zero. if isempty(Rotorcraft_velocity.leg3) == 1 Rotorcraft_velocity.leg3 = 0; else end

Rotorcraft_velocity.leg4 = Mission_Requirements.Length_leg_4 / ... Mission_Requirements.Time_leg_4 / 60; % m/s

% Checks if value is empty, then fills with zero.

P a g e | 158

if isempty(Rotorcraft_velocity.leg4) == 1 Rotorcraft_velocity.leg4 = 0;

else end

Rotorcraft_velocity.leg5 = Mission_Requirements.Length_leg_5 / ... Mission_Requirements.Time_leg_5 / 60; % m/s

% Checks if value is empty, then fills with zero. if isempty(Rotorcraft_velocity.leg5) == 1 Rotorcraft_velocity.leg5 = 0; else end

Rotorcraft_velocity.leg6 = Mission_Requirements.Length_leg_6 / ... Mission_Requirements.Time_leg_6 / 60; % m/s

% Checks if value is empty, then fills with zero. if isempty(Rotorcraft_velocity.leg6) == 1 Rotorcraft_velocity.leg6 = 0; else end

Rotorcraft_velocity.leg7 = Mission_Requirements.Length_leg_7 / ... Mission_Requirements.Time_leg_7 / 60; % m/s

% Checks if value is empty, then fills with zero. if isempty(Rotorcraft_velocity.leg7) == 1 Rotorcraft_velocity.leg7 = 0; else end

Determine change in time (seconds) Mission_Requirements.Time_leg_1 = 5;

Tsecs = 60; % 60 seconds in a minute Total_seconds_to_fly.leg1 = Mission_Requirements.Time_leg_1 * Tsecs; % Checks if value is empty, then fills with zero. if isempty(Total_seconds_to_fly.leg1) == 1 Total_seconds_to_fly.leg1 = 0; else end

Total_seconds_to_fly.leg2 = Mission_Requirements.Time_leg_2 * Tsecs; % Checks if value is empty, then fills with zero. if isempty(Total_seconds_to_fly.leg2) == 1 Total_seconds_to_fly.leg2 = 0; else end Total_seconds_to_fly.leg3 = Mission_Requirements.Time_leg_3 * Tsecs; % Checks if value is empty, then fills with zero. if isempty(Total_seconds_to_fly.leg3) == 1 Total_seconds_to_fly.leg3 = 0; else end Total_seconds_to_fly.leg4 = Mission_Requirements.Time_leg_4 * Tsecs;

P a g e | 159

% Checks if value is empty, then fills with zero. if isempty(Total_seconds_to_fly.leg4) == 1 Total_seconds_to_fly.leg4 = 0; else end

Total_seconds_to_fly.leg5 = Mission_Requirements.Time_leg_5 * Tsecs; % Checks if value is empty, then fills with zero. if isempty(Total_seconds_to_fly.leg5) == 1 Total_seconds_to_fly.leg5 = 0; else end

Total_seconds_to_fly.leg6 = Mission_Requirements.Time_leg_6 * Tsecs; % Checks if value is empty, then fills with zero. if isempty(Total_seconds_to_fly.leg6) == 1 Total_seconds_to_fly.leg6 = 0; else end

Total_seconds_to_fly.leg7 = Mission_Requirements.Time_leg_7 * Tsecs; % Checks if value is empty, then fills with zero. if isempty(Total_seconds_to_fly.leg7) == 1 Total_seconds_to_fly.leg7 = 0; else end

Determine change in y (metres); AND time step dt **** DEPENDS ON MISSION SELECTED ****

if Mission_Requirements.MissionNumber == 0 delta_y.leg1 = (Mission_Requirements.Waypoint_Data{2}(3) - ... Mission_Requirements.Waypoint_Data{1}(3)) /... (Mission_Requirements.Time_leg_1*60); % 60 seconds in a min

elseif Mission_Requirements.MissionNumber == 1 delta_y.leg1 = (Mission_Requirements.Waypoint_Data{2}(3) - ... Mission_Requirements.Waypoint_Data{1}(3)) /... (Mission_Requirements.Time_leg_1*60); % 60 seconds in a min delta_y.leg2 = (Mission_Requirements.Waypoint_Data{3}(3) - ... Mission_Requirements.Waypoint_Data{2}(3)) /... (Mission_Requirements.Time_leg_2*60); % 60 seconds in a min delta_y.leg3 = (Mission_Requirements.Waypoint_Data{4}(3) - ... Mission_Requirements.Waypoint_Data{3}(3)) /... (Mission_Requirements.Time_leg_3*60); % 60 seconds in a min

elseif Mission_Requirements.MissionNumber == 2 delta_y.leg1 = (Mission_Requirements.Waypoint_Data{2}(3) - ... Mission_Requirements.Waypoint_Data{1}(3)) /... (Mission_Requirements.Time_leg_1*60); % 60 seconds in a min delta_y.leg2 = (Mission_Requirements.Waypoint_Data{3}(3) - ... Mission_Requirements.Waypoint_Data{2}(3)) /... (Mission_Requirements.Time_leg_2*60); % 60 seconds in a min delta_y.leg3 = (Mission_Requirements.Waypoint_Data{4}(3) - ... Mission_Requirements.Waypoint_Data{3}(3)) /... (Mission_Requirements.Time_leg_3*60); % 60 seconds in a min delta_y.leg4 = (Mission_Requirements.Waypoint_Data{5}(3) - ...

P a g e | 160

Mission_Requirements.Waypoint_Data{4}(3)) /... (Mission_Requirements.Time_leg_4*60); % 60 seconds in a min delta_y.leg5 = (Mission_Requirements.Waypoint_Data{6}(3) - ... Mission_Requirements.Waypoint_Data{5}(3)) /... (Mission_Requirements.Time_leg_5*60); % 60 seconds in a min elseif Mission_Requirements.MissionNumber == 3 delta_y.leg1 = (Mission_Requirements.Waypoint_Data{2}(3) - ... Mission_Requirements.Waypoint_Data{1}(3)) /... (Mission_Requirements.Time_leg_1*60); % 60 seconds in a min delta_y.leg2 = (Mission_Requirements.Waypoint_Data{3}(3) - ... Mission_Requirements.Waypoint_Data{2}(3)) /... (Mission_Requirements.Time_leg_2*60); % 60 seconds in a min delta_y.leg3 = (Mission_Requirements.Waypoint_Data{4}(3) - ... Mission_Requirements.Waypoint_Data{3}(3)) /... (Mission_Requirements.Time_leg_3*60); % 60 seconds in a min elseif Mission_Requirements.MissionNumber == 4 delta_y.leg1 = (Mission_Requirements.Waypoint_Data{2}(3) - ... Mission_Requirements.Waypoint_Data{1}(3)) /... (Mission_Requirements.Time_leg_1*60); % 60 seconds in a min delta_y.leg2 = (Mission_Requirements.Waypoint_Data{3}(3) - ... Mission_Requirements.Waypoint_Data{2}(3)) /... (Mission_Requirements.Time_leg_2*60); % 60 seconds in a min delta_y.leg3 = (Mission_Requirements.Waypoint_Data{4}(3) - ... Mission_Requirements.Waypoint_Data{3}(3)) /... (Mission_Requirements.Time_leg_3*60); % 60 seconds in a min delta_y.leg4 = (Mission_Requirements.Waypoint_Data{5}(3) - ... Mission_Requirements.Waypoint_Data{4}(3)) /... (Mission_Requirements.Time_leg_4*60); % 60 seconds in a min delta_y.leg5 = (Mission_Requirements.Waypoint_Data{6}(3) - ... Mission_Requirements.Waypoint_Data{5}(3)) /... (Mission_Requirements.Time_leg_5*60); % 60 seconds in a min delta_y.leg6 = (Mission_Requirements.Waypoint_Data{7}(3) - ... Mission_Requirements.Waypoint_Data{6}(3)) /... (Mission_Requirements.Time_leg_6*60); % 60 seconds in a min delta_y.leg7 = (Mission_Requirements.Waypoint_Data{8}(3) - ... Mission_Requirements.Waypoint_Data{7}(3)) /... (Mission_Requirements.Time_leg_7*60); % 60 seconds in a min elseif Mission_Requirements.MissionNumber == 6 delta_y.leg1 = (Mission_Requirements.Waypoint_Data{2}(3) - ... Mission_Requirements.Waypoint_Data{1}(3)) /... (Mission_Requirements.Time_leg_1*60); % 60 seconds in a min else delta_y.leg1 = (Mission_Requirements.Waypoint_Data{2}(3) - ... Mission_Requirements.Waypoint_Data{1}(3)) /... (Mission_Requirements.Time_leg_1*60); % 60 seconds in a min delta_y.leg2 = (Mission_Requirements.Waypoint_Data{3}(3) - ... Mission_Requirements.Waypoint_Data{2}(3)) /... (Mission_Requirements.Time_leg_2*60); % 60 seconds in a min delta_y.leg3 = (Mission_Requirements.Waypoint_Data{4}(3) - ... Mission_Requirements.Waypoint_Data{3}(3)) /... (Mission_Requirements.Time_leg_3*60); % 60 seconds in a min delta_y.leg4 = (Mission_Requirements.Waypoint_Data{5}(3) - ...

P a g e | 161

Mission_Requirements.Waypoint_Data{4}(3)) /... (Mission_Requirements.Time_leg_4*60); % 60 seconds in a min

delta_y.leg5 = (Mission_Requirements.Waypoint_Data{6}(3) - ... Mission_Requirements.Waypoint_Data{5}(3)) /... (Mission_Requirements.Time_leg_5*60); % 60 seconds in a min delta_y.leg6 = (Mission_Requirements.Waypoint_Data{7}(3) - ... Mission_Requirements.Waypoint_Data{6}(3)) /... (Mission_Requirements.Time_leg_6*60); % 60 seconds in a min delta_y.leg7 = (Mission_Requirements.Waypoint_Data{8}(3) - ... Mission_Requirements.Waypoint_Data{7}(3)) /... (Mission_Requirements.Time_leg_7*60); % 60 seconds in a min end

% time step: velocity = dx/dt % dt = dx/velocity % dt held constant at 1 second delta_t = 1;

Evaluate fuel flow Set energy fuel density

e = 46e6; % J/Kg - Jet fuel (Kerosene) %M_naught = total mass of craft with fuel %Every iteration of mdot needs to subtract mass of fuel off M_naught. % AND need to add fuel to fuel total EVALUATE AND RUN SCRIPT

Fuel_mass = 0;

for i = 1:Total_seconds_to_fly.leg1 [mdot_fuel.Leg1, delta_mass_fuel.leg1] = model_two(filename,e, Geometry_model.CD, Geometry_model.Ac, Rotorcraft_velocity.leg1, delta_y.leg1, Total_seconds_to_fly.leg1, M.naught, Geometry_model); if mdot_fuel.Leg1 <= 0 mdot_fuel.Leg1 = 0; Fuel_mass = Fuel_mass + mdot_fuel.Leg1*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg1*delta_t; %Update mass to subtract fuel off first leg else Fuel_mass = Fuel_mass + mdot_fuel.Leg1*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg1*delta_t; %Update mass to subtract fuel off first leg end if isnan(delta_mass_fuel.leg1) == 1 M.naught = M.naught; end end if isempty(Mission_Requirements.Length_leg_2) == 1 && ... isempty(Mission_Requirements.Time_leg_2) == 1 mdot_fuel.Leg2 = 0;

P a g e | 162

delta_mass_fuel.leg2 = 0; else for i = 1:Total_seconds_to_fly.leg2 [mdot_fuel.Leg2, delta_mass_fuel.leg2] = model_two(filename,e, Geometry_model.CD, Geometry_model.Ac, Rotorcraft_velocity.leg2, delta_y.leg2, Total_seconds_to_fly.leg2, M.naught, Geometry_model); if mdot_fuel.Leg2 <= 0 mdot_fuel.Leg2 = 0; Fuel_mass = Fuel_mass + mdot_fuel.Leg2*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg2*delta_t; %Update mass to subtract fuel off second leg else Fuel_mass = Fuel_mass + mdot_fuel.Leg2*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg2*delta_t; %Update mass to subtract fuel off second leg end if isnan(delta_mass_fuel.leg2) == 1 M.naught = M.naught; end end end if isempty(Mission_Requirements.Length_leg_3) == 1 && ... isempty(Mission_Requirements.Time_leg_3) == 1 mdot_fuel.Leg3 = 0; delta_mass_fuel.leg3 = 0; else for i = 1:Total_seconds_to_fly.leg3 [mdot_fuel.Leg3, delta_mass_fuel.leg3] = model_two(filename,e, Geometry_model.CD, Geometry_model.Ac, Rotorcraft_velocity.leg3, delta_y.leg3, Total_seconds_to_fly.leg3, M.naught, Geometry_model); if mdot_fuel.Leg3 <= 0 mdot_fuel.Leg3 = 0; Fuel_mass = Fuel_mass + mdot_fuel.Leg3*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg3*delta_t; %Update mass to subtract fuel off third leg else Fuel_mass = Fuel_mass + mdot_fuel.Leg3*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg3*delta_t; %Update mass to subtract fuel off third leg end if isnan(delta_mass_fuel.leg3) == 1 M.naught = M.naught; end end end if isempty(Mission_Requirements.Length_leg_4) == 1 && ... isempty(Mission_Requirements.Time_leg_4) == 1 mdot_fuel.Leg4 = 0; delta_mass_fuel.leg4 = 0; else for i = 1:Total_seconds_to_fly.leg4

P a g e | 163

[mdot_fuel.Leg4, delta_mass_fuel.leg4] = model_two(filename,e, Geometry_model.CD, Geometry_model.Ac, Rotorcraft_velocity.leg4, delta_y.leg4, Total_seconds_to_fly.leg4, M.naught, Geometry_model); if mdot_fuel.Leg4 <= 0 mdot_fuel.Leg4 = 0; Fuel_mass = Fuel_mass + mdot_fuel.Leg4*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg4*delta_t; %Update mass to subtract fuel off fourth leg else Fuel_mass = Fuel_mass + mdot_fuel.Leg4*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg4*delta_t; %Update mass to subtract fuel off fourth leg end if isnan(delta_mass_fuel.leg4) == 1 M.naught = M.naught; end end end if isempty(Mission_Requirements.Length_leg_5) == 1 && ... isempty(Mission_Requirements.Time_leg_5) == 1 mdot_fuel.Leg5 = 0; delta_mass_fuel.leg5 = 0; else for i = 1:Total_seconds_to_fly.leg5 [mdot_fuel.Leg5, delta_mass_fuel.leg5] = model_two(filename,e, Geometry_model.CD, Geometry_model.Ac, Rotorcraft_velocity.leg5, delta_y.leg5, Total_seconds_to_fly.leg5, M.naught, Geometry_model); if mdot_fuel.Leg5 <= 0 mdot_fuel.Leg5 = 0; Fuel_mass = Fuel_mass + mdot_fuel.Leg5*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg5*delta_t; %Update mass to subtract fuel off fourth leg else Fuel_mass = Fuel_mass + mdot_fuel.Leg5*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg5*delta_t; %Update mass to subtract fuel off fourth leg end if isnan(delta_mass_fuel.leg5) == 1 M.naught = M.naught; end end end if isempty(Mission_Requirements.Length_leg_6) == 1 && ... isempty(Mission_Requirements.Time_leg_6) == 1 mdot_fuel.Leg6 = 0; delta_mass_fuel.leg6 = 0; else for i = 1:Total_seconds_to_fly.leg6 [mdot_fuel.Leg6, delta_mass_fuel.leg6] = model_two(filename,e, Geometry_model.CD, Geometry_model.Ac, Rotorcraft_velocity.leg6, delta_y.leg6, Total_seconds_to_fly.leg6, M.naught, Geometry_model); if mdot_fuel.Leg6 <= 0

P a g e | 164

mdot_fuel.Leg6 = 0; Fuel_mass = Fuel_mass + mdot_fuel.Leg6*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg6*delta_t; %Update mass to subtract fuel off fourth leg else Fuel_mass = Fuel_mass + mdot_fuel.Leg6*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg6*delta_t; %Update mass to subtract fuel off fourth leg end if isnan(delta_mass_fuel.leg6) == 1 M.naught = M.naught; end end end if isempty(Mission_Requirements.Length_leg_7) == 1 && ... isempty(Mission_Requirements.Time_leg_7) == 1 mdot_fuel.Leg7 = 0; delta_mass_fuel.leg7 = 0; else for i = 1:Total_seconds_to_fly.leg7 [mdot_fuel.Leg7, delta_mass_fuel.leg7] = model_two(filename,e, Geometry_model.CD, Geometry_model.Ac, Rotorcraft_velocity.leg7, delta_y.leg7, Total_seconds_to_fly.leg7, M.naught, Geometry_model); if mdot_fuel.Leg7 <= 0 mdot_fuel.Leg7 = 0; Fuel_mass = Fuel_mass + mdot_fuel.Leg7*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg7*delta_t; %Update mass to subtract fuel off fourth leg else Fuel_mass = Fuel_mass + mdot_fuel.Leg7*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg7*delta_t; %Update mass to subtract fuel off fourth leg end if isnan(delta_mass_fuel.leg7) == 1 M.naught = M.naught; end end end

Total_fuel_mass = Fuel_mass; %Total mass to ADD total fuel used

% %Total Fuel mass to fly mission profile % Total_fuel_mass = delta_mass_fuel.leg1 +delta_mass_fuel.leg2 + ... % delta_mass_fuel.leg3 +delta_mass_fuel.leg4 + ... % delta_mass_fuel.leg5 +delta_mass_fuel.leg6 +delta_mass_fuel.leg7; end

P a g e | 165

FUNCTION: MODEL TWO: Adding Hovering Power function [mdot_fuel, delta_mass_fuel] = model_two(filename,e, CD, Ac, Vabs, delta_y , delta_t, M_naught, Geometry_model) % Function calculates the mass flow rate of the fuel flow for the % rotorcraft. It does so through an energy analysis, with some primary % assumptions. % % Equations: Energy Input: % Ein = mdot_fuel * delta_t * e; % where e is fuel energy % Ein = kg/s * s * MJ/Kg = MJ % % Parameters: filename; properties config file with all variables % eg. properties = 'inputs.txt' % e; (MJ/Kg) where e is fuel energy density % CD; Coefficient of Drag for loaded geometry % Ac; (m^2) Characteristic area of loaded air % vehicle in flight % Vabs; (m/s) Absolute velocity of flying craft % delta_y; (m) change in height step % delta_t; (s) change in time % M_naught; (kg) current mass of vehicle % Geometry_model; This is the geometry model that % is loaded for evaluation % % Returns: mdot_fuel; (Kg/sec) mass flow rate of fuel % delta_mass_fuel; change in mass of fuel %

Set motor efficiency value

eta_engine = 0.75;

Loading all the parameters

% Load gravity value: % g = return_value('EM.Gravity ', properties); % gravity g = 9.806771; % gravity

% Load density: % rho = return_value('EM.rho ', properties); % blade radius rho = 1.216389; % blade radius Evaluation of everything

% Part (b) of trajectory: Powerb = M_naught * g * (delta_y / delta_t); % Power = weight force * (delta_y/delta_t)

Energy_delta_y = Powerb * delta_t; % Energy_delta_y = M_naught * g * delta_h;

% Part (a) of trajectory: % Power = Force * velocity;

P a g e | 166

% Power = (1/2) * rho * velocity^2 * CD * Ac * velocity; Powera = (1/2) * rho * CD * Ac * Vabs^3; % CD fixed, based on geometry of fuselage Energy_velocity = Powera * delta_t;

Pi = evaluate_power_to_hover(filename); P_0 = evaluate_profile_power(filename, Geometry_model); P_hover = Pi + P_0; Energy_hover = P_hover *delta_t;

% Ein = (1/eta_engine) * Eactual Ein = (1/eta_engine) * (Energy_delta_y + Energy_velocity + Energy_hover);

mdot_fuel = Ein / ( delta_t * e ) ; % where e is fuel energy density % mdot_fuel = Kg / s

%delta_mass_fuel = mdot_fuel * delta_t; delta_mass_fuel = Ein / e; end

FUNCTION: Velocity Induced function [v_i] = velocity_induced(R, V_tip, rho) % Function returns the induced velocity through the mian rotor blades % for the single rotor helicopter % % Parameters: % T; rotor thrust % R; main rotor blade radius % V_tip; main rotor blade tip velocity % rho; density of atmosphere medium loaded % % % Returns: % v_i; velocity induced. ( velocity through the main % rotor blades ) % A = pi() * R^2; % Blade disk area omega = V_tip / R; % m/s of blades T = 383.172714*A; % N; 383.172714 value from Leishmann Fig 2.6 pg 65 C_T = T / (rho * A * omega^2); % C_T; rotor thrust coefficient lambda_h = sqrt(C_T/2); v_i = lambda_h * omega * R; end

P a g e | 167

FUNCTION: Vertical Drag Force Evaluation function [D_fcp] = vertical_drag_force(v_i, M_naught, Vabs, rho, Geometry_model, missionprofile , AoA, FPangle) % Function returns the induced velocity through the mian rotor blades % for the single rotor helicopter % % Parameters: v_i; velocity induced. ( velocity through the main % rotor blades ) % M_naught; (kg) current mass of vehicle [full fuel and % payload] % Vabs; (m/s) Absolute velocity of flying craft % rho; density of atmosphere medium loaded % Geometry_model; This is the geometry model that % is loaded for evaluation % Mission_Requirements; This is the mission profile for % evaluation % AoA; angle of attack of rotor blades % FPangle; flight path angle of vehicle with flat % earth % % Returns: D_fcp; Vertical drag force of climbing rotor %

%assuming area in wake = top plan view of brick; Am = .23*.11; % Total plan view projected area within the main wake

%assuming area not in wake = 0; deltaAz = 0; CDz = 0;

Dv_ova_GW_hov = (0.3 * 2*rho*v_i^2)/ (M_naught); % Calculating hovering vert drag D_fcp_num1 = (4*Dv_ova_GW_hov* (rho/2)) * (v_i+Vabs)^2 * Am; D_fcp_num2 = (deltaAz*CDz *(rho/2)) * Vabs^2; D_fcp_num = D_fcp_num1 +D_fcp_num2;

D_fcp = D_fcp_num / cosd(AoA - FPangle); % Calculating forward climbing vert drag end

P a g e | 168

FUNCTION: MODEL THREE: Adding forward climbing power function [mdot_fuel, delta_mass_fuel] = model_three(filename,e, CD, Ac, Vabs, delta_y , delta_t, M_naught, Geometry_model, FPangle) % Function calculates the mass flow rate of the fuel flow for the % rotorcraft. It does so through an energy analysis, with some primary % assumptions. % % Equations: Energy Input: % Ein = mdot_fuel * delta_t * e; % where e is fuel energy % Ein = kg/s * s * MJ/Kg = MJ % % Parameters: filename; properties config file with all variables % eg. properties = 'inputs.txt' % e; (MJ/Kg) where e is fuel energy density % CD; Coefficient of Drag for loaded geometry % Ac; (m^2) Characteristic area of loaded air % vehicle in flight % Vabs; (m/s) Absolute velocity of flying craft % delta_y; (m) change in height step % delta_t; (s) change in time % M_naught; (kg) current mass of vehicle % Geometry_model; This is the geometry model that % is loaded for evaluation % % Returns: mdot_fuel; (Kg/sec) mass flow rate of fuel % delta_mass_fuel; change in mass of fuel %

Set motor efficiency value

eta_engine = 0.75;

Loading all the parameters

% Load gravity value: % g = return_value('EM.Gravity ', properties); % gravity g = 9.806771; % gravity

% Load density: % rho = return_value('EM.rho ', properties); % blade radius rho = 1.216389400000000; % density of air Evaluation of everything

% Part (b) of trajectory: Powerb = M_naught * g * (delta_y / delta_t); % Power = weight force * (delta_y/delta_t)

Energy_delta_y = Powerb * delta_t; % Energy_delta_y = M_naught * g * delta_h;

%Model two - Hovering Power Pi = evaluate_power_to_hover(filename);

P a g e | 169

P_0 = evaluate_profile_power(filename, Geometry_model); P_hover = Pi + P_0; Energy_hover = P_hover *delta_t;

% Model three - Climbing Power R = 0.3; % blade radius a = 3.393772854508680e+02; % speed sound % 0.9 = 10% safety factor added in, 0.6 equals 60 percent of speed of sound % as literature, "Leishmann" says 60% for hover is a good approx. velocity_blades = .6*.9*a; omega = velocity_blades / R; % m/s of blades %v_i = velocity_induced(T, R, omega, rho); v_i = velocity_induced(R, omega, rho);

AoA = -10; %degrees to the horizon

D_fcp = vertical_drag_force(v_i, M_naught, Vabs, rho, Geometry_model, Geometry_model , AoA, FPangle); P_climb = sqrt((D_fcp*sind(AoA-FPangle))^2 +(M_naught*g + ... (D_fcp*cosd(AoA-FPangle)))^2) * Vabs;

Energy_climb = P_climb *delta_t;

% Ein = (1/eta_engine) * Eactual Ein = (1/eta_engine) * (Energy_delta_y + Energy_hover + Energy_climb);

mdot_fuel = Ein / ( delta_t * e ) ; % where e is fuel energy density % mdot_fuel = Kg / s

%delta_mass_fuel = mdot_fuel * delta_t; delta_mass_fuel = Ein / e; end

P a g e | 170

FUNCTION: MODEL THREE FUEL EVALUATION function [M,W,mdot_fuel,delta_mass_fuel,Total_fuel_mass] = evaluate_fuel_mission_model_three(filename,Mission_Requirements,Geometry_model) % Function Evaluates the energy analysis of any loaded geomeric model % and applies it to the 5 mission scenarios. % % Parameters: filename; properties config file with all variables % eg. filename = 'inputs.txt' % Mission_Requirements; This is the mission profile for % evaluation % Geometry_model; This is the geometry model that % is loaded for evaluation % % Returns: M; contains the following: % - M.f; kilograms onboard fuel storage % - M.i; mass of vehicle with no fuel % - M.naught; mass with full fuel and payload % - M.FullFuel_Payload = M.i+M.f; Gross vehicle % mass = mass with full fuel and payload % % W; contains the following: % - W.f_litres; Litres onboard fuel storage % - W.f; weight of fuel load % - W.naught = M.naught*g; Gross vehicle weight % = weight with full fuel and payload % % mdot_fuel; Mass flow rate of fuel for each leg % evaluated for the mission loaded % % delta_mass_fuel; Change in mass of fuel for each leg % evaluated for the mission loaded % % Total_fuel_mass; Total fuel mass required for each % leg evaluated for the mission loaded %

% Load gravity value for weight and mass calcs % g = return_value('EM.Gravity ', filename); % Gravity g = 9.806771; % gravity

% fuel_consumption = weight * time; % excess_cost = mass* delta_height + (Drag * Velocity) * delta_t

Let; W = weight of vehicle at any instant W.naught = Gross vehicle weight. = weight with full fuel and payload W_f = weight of fuel load W_i = weight vehicle with no fuel Thus: W_i = W.naught - W_f

% Weight of air vehicle without fuel = M_naught W.f_litres = 5; % Litres onboard fuel storage % Converting litres to kilograms % https://www.simetric.co.uk/si_liquids.htm and % https://www.metric-conversions.org/volume/liters-to-cubic-meters.htm M.f = (737.22/1000)*W.f_litres; % kilograms onboard fuel storage % M.f = 0; % kilograms onboard fuel storage W.f = M.f*g; % weight onboard fuel storage in Newtons (N)

P a g e | 171

Select Weight of vehicle depending on geometry loaded

Load mass value: Weight of air vehicle without fuel; Mass Initial = M.i

if Geometry_model.GeometryID == 1 M.i = Geometry_model.weight; W.f_litres = 0.1; % Litres onboard fuel storage M.f = (737.22/1000)*W.f_litres; % kilograms onboard fuel storage W.f = M.f*g; % weight onboard fuel storage in Newtons (N) elseif Geometry_model.GeometryID == 2 M.i = Geometry_model.weight; % Assigning brick weight elseif Geometry_model.GeometryID == 3 M.i = Geometry_model.weight; % Assigning single rotor weight end

M.naught = M.i+M.f; % Gross vehicle mass = mass with full fuel and payload M.FullFuel_Payload = M.i+M.f; % Gross vehicle mass = mass with full fuel and payload W.naught = M.naught*g; % Gross vehicle weight = weight with full fuel and payload

Determine flight velocity:

Rotorcraft_velocity.leg1 = Mission_Requirements.Length_leg_1 / ... Mission_Requirements.Time_leg_1 / 60; % m/s

% Checks if value is empty, then fills with zero. if isempty(Rotorcraft_velocity.leg1) == 1 Rotorcraft_velocity.leg1 = 0; else end

Rotorcraft_velocity.leg2 = Mission_Requirements.Length_leg_2 / ... Mission_Requirements.Time_leg_2 / 60; % m/s

% Checks if value is empty, then fills with zero. if isempty(Rotorcraft_velocity.leg2) == 1 Rotorcraft_velocity.leg2 = 0; else end

Rotorcraft_velocity.leg3 = Mission_Requirements.Length_leg_3 / ... Mission_Requirements.Time_leg_3 / 60; % m/s

% Checks if value is empty, then fills with zero. if isempty(Rotorcraft_velocity.leg3) == 1 Rotorcraft_velocity.leg3 = 0; else end

Rotorcraft_velocity.leg4 = Mission_Requirements.Length_leg_4 / ... Mission_Requirements.Time_leg_4 / 60; % m/s

% Checks if value is empty, then fills with zero.

P a g e | 172

if isempty(Rotorcraft_velocity.leg4) == 1 Rotorcraft_velocity.leg4 = 0;

else end

Rotorcraft_velocity.leg5 = Mission_Requirements.Length_leg_5 / ... Mission_Requirements.Time_leg_5 / 60; % m/s

% Checks if value is empty, then fills with zero. if isempty(Rotorcraft_velocity.leg5) == 1 Rotorcraft_velocity.leg5 = 0; else end

Rotorcraft_velocity.leg6 = Mission_Requirements.Length_leg_6 / ... Mission_Requirements.Time_leg_6 / 60; % m/s

% Checks if value is empty, then fills with zero. if isempty(Rotorcraft_velocity.leg6) == 1 Rotorcraft_velocity.leg6 = 0; else end

Rotorcraft_velocity.leg7 = Mission_Requirements.Length_leg_7 / ... Mission_Requirements.Time_leg_7 / 60; % m/s

% Checks if value is empty, then fills with zero. if isempty(Rotorcraft_velocity.leg7) == 1 Rotorcraft_velocity.leg7 = 0; else end

Determine change in time (seconds) Mission_Requirements.Time_leg_1 = 5;

Tsecs = 60; % 60 seconds in a minute Total_seconds_to_fly.leg1 = Mission_Requirements.Time_leg_1 * Tsecs; % Checks if value is empty, then fills with zero. if isempty(Total_seconds_to_fly.leg1) == 1 Total_seconds_to_fly.leg1 = 0; else end

Total_seconds_to_fly.leg2 = Mission_Requirements.Time_leg_2 * Tsecs; % Checks if value is empty, then fills with zero. if isempty(Total_seconds_to_fly.leg2) == 1 Total_seconds_to_fly.leg2 = 0; else end Total_seconds_to_fly.leg3 = Mission_Requirements.Time_leg_3 * Tsecs; % Checks if value is empty, then fills with zero. if isempty(Total_seconds_to_fly.leg3) == 1 Total_seconds_to_fly.leg3 = 0; else end Total_seconds_to_fly.leg4 = Mission_Requirements.Time_leg_4 * Tsecs;

P a g e | 173

% Checks if value is empty, then fills with zero. if isempty(Total_seconds_to_fly.leg4) == 1 Total_seconds_to_fly.leg4 = 0; else end

Total_seconds_to_fly.leg5 = Mission_Requirements.Time_leg_5 * Tsecs; % Checks if value is empty, then fills with zero. if isempty(Total_seconds_to_fly.leg5) == 1 Total_seconds_to_fly.leg5 = 0; else end

Total_seconds_to_fly.leg6 = Mission_Requirements.Time_leg_6 * Tsecs; % Checks if value is empty, then fills with zero. if isempty(Total_seconds_to_fly.leg6) == 1 Total_seconds_to_fly.leg6 = 0; else end

Total_seconds_to_fly.leg7 = Mission_Requirements.Time_leg_7 * Tsecs; % Checks if value is empty, then fills with zero. if isempty(Total_seconds_to_fly.leg7) == 1 Total_seconds_to_fly.leg7 = 0; else end

Determine change in y (metres); AND time step dt **** DEPENDS ON MISSION SELECTED ****

if Mission_Requirements.MissionNumber == 0 delta_y.leg1 = (Mission_Requirements.Waypoint_Data{2}(3) - ... Mission_Requirements.Waypoint_Data{1}(3)) /... (Mission_Requirements.Time_leg_1*60); % 60 seconds in a min

elseif Mission_Requirements.MissionNumber == 1 delta_y.leg1 = (Mission_Requirements.Waypoint_Data{2}(3) - ... Mission_Requirements.Waypoint_Data{1}(3)) /... (Mission_Requirements.Time_leg_1*60); % 60 seconds in a min delta_y.leg2 = (Mission_Requirements.Waypoint_Data{3}(3) - ... Mission_Requirements.Waypoint_Data{2}(3)) /... (Mission_Requirements.Time_leg_2*60); % 60 seconds in a min delta_y.leg3 = (Mission_Requirements.Waypoint_Data{4}(3) - ... Mission_Requirements.Waypoint_Data{3}(3)) /... (Mission_Requirements.Time_leg_3*60); % 60 seconds in a min

elseif Mission_Requirements.MissionNumber == 2 delta_y.leg1 = (Mission_Requirements.Waypoint_Data{2}(3) - ... Mission_Requirements.Waypoint_Data{1}(3)) /... (Mission_Requirements.Time_leg_1*60); % 60 seconds in a min delta_y.leg2 = (Mission_Requirements.Waypoint_Data{3}(3) - ... Mission_Requirements.Waypoint_Data{2}(3)) /... (Mission_Requirements.Time_leg_2*60); % 60 seconds in a min delta_y.leg3 = (Mission_Requirements.Waypoint_Data{4}(3) - ... Mission_Requirements.Waypoint_Data{3}(3)) /... (Mission_Requirements.Time_leg_3*60); % 60 seconds in a min delta_y.leg4 = (Mission_Requirements.Waypoint_Data{5}(3) - ...

P a g e | 174

Mission_Requirements.Waypoint_Data{4}(3)) /... (Mission_Requirements.Time_leg_4*60); % 60 seconds in a min delta_y.leg5 = (Mission_Requirements.Waypoint_Data{6}(3) - ... Mission_Requirements.Waypoint_Data{5}(3)) /... (Mission_Requirements.Time_leg_5*60); % 60 seconds in a min elseif Mission_Requirements.MissionNumber == 3 delta_y.leg1 = (Mission_Requirements.Waypoint_Data{2}(3) - ... Mission_Requirements.Waypoint_Data{1}(3)) /... (Mission_Requirements.Time_leg_1*60); % 60 seconds in a min delta_y.leg2 = (Mission_Requirements.Waypoint_Data{3}(3) - ... Mission_Requirements.Waypoint_Data{2}(3)) /... (Mission_Requirements.Time_leg_2*60); % 60 seconds in a min delta_y.leg3 = (Mission_Requirements.Waypoint_Data{4}(3) - ... Mission_Requirements.Waypoint_Data{3}(3)) /... (Mission_Requirements.Time_leg_3*60); % 60 seconds in a min elseif Mission_Requirements.MissionNumber == 4 delta_y.leg1 = (Mission_Requirements.Waypoint_Data{2}(3) - ... Mission_Requirements.Waypoint_Data{1}(3)) /... (Mission_Requirements.Time_leg_1*60); % 60 seconds in a min delta_y.leg2 = (Mission_Requirements.Waypoint_Data{3}(3) - ... Mission_Requirements.Waypoint_Data{2}(3)) /... (Mission_Requirements.Time_leg_2*60); % 60 seconds in a min delta_y.leg3 = (Mission_Requirements.Waypoint_Data{4}(3) - ... Mission_Requirements.Waypoint_Data{3}(3)) /... (Mission_Requirements.Time_leg_3*60); % 60 seconds in a min delta_y.leg4 = (Mission_Requirements.Waypoint_Data{5}(3) - ... Mission_Requirements.Waypoint_Data{4}(3)) /... (Mission_Requirements.Time_leg_4*60); % 60 seconds in a min delta_y.leg5 = (Mission_Requirements.Waypoint_Data{6}(3) - ... Mission_Requirements.Waypoint_Data{5}(3)) /... (Mission_Requirements.Time_leg_5*60); % 60 seconds in a min delta_y.leg6 = (Mission_Requirements.Waypoint_Data{7}(3) - ... Mission_Requirements.Waypoint_Data{6}(3)) /... (Mission_Requirements.Time_leg_6*60); % 60 seconds in a min delta_y.leg7 = (Mission_Requirements.Waypoint_Data{8}(3) - ... Mission_Requirements.Waypoint_Data{7}(3)) /... (Mission_Requirements.Time_leg_7*60); % 60 seconds in a min elseif Mission_Requirements.MissionNumber == 6 delta_y.leg1 = (Mission_Requirements.Waypoint_Data{2}(3) - ... Mission_Requirements.Waypoint_Data{1}(3)) /... (Mission_Requirements.Time_leg_1*60); % 60 seconds in a min else delta_y.leg1 = (Mission_Requirements.Waypoint_Data{2}(3) - ... Mission_Requirements.Waypoint_Data{1}(3)) /... (Mission_Requirements.Time_leg_1*60); % 60 seconds in a min delta_y.leg2 = (Mission_Requirements.Waypoint_Data{3}(3) - ... Mission_Requirements.Waypoint_Data{2}(3)) /... (Mission_Requirements.Time_leg_2*60); % 60 seconds in a min delta_y.leg3 = (Mission_Requirements.Waypoint_Data{4}(3) - ... Mission_Requirements.Waypoint_Data{3}(3)) /... (Mission_Requirements.Time_leg_3*60); % 60 seconds in a min delta_y.leg4 = (Mission_Requirements.Waypoint_Data{5}(3) - ...

P a g e | 175

Mission_Requirements.Waypoint_Data{4}(3)) /... (Mission_Requirements.Time_leg_4*60); % 60 seconds in a min

delta_y.leg5 = (Mission_Requirements.Waypoint_Data{6}(3) - ... Mission_Requirements.Waypoint_Data{5}(3)) /... (Mission_Requirements.Time_leg_5*60); % 60 seconds in a min delta_y.leg6 = (Mission_Requirements.Waypoint_Data{7}(3) - ... Mission_Requirements.Waypoint_Data{6}(3)) /... (Mission_Requirements.Time_leg_6*60); % 60 seconds in a min delta_y.leg7 = (Mission_Requirements.Waypoint_Data{8}(3) - ... Mission_Requirements.Waypoint_Data{7}(3)) /... (Mission_Requirements.Time_leg_7*60); % 60 seconds in a min end

% time step: velocity = dx/dt % dt = dx/velocity % dt held constant at 1 second delta_t = 1;

Evaluate fuel flow Set energy fuel density

e = 46e6; % J/Kg - Jet fuel (Kerosene) %M_naught = total mass of craft with fuel %Every iteration of mdot needs to subtract mass of fuel off M_naught. % AND need to add fuel to fuel total

% Flight path angle calculation if Mission_Requirements.MissionNumber == 0 FPangle.leg1 = atand((Mission_Requirements.Waypoint_Data{2}(3) - ... Mission_Requirements.Waypoint_Data{1}(3)) /... (Mission_Requirements.Waypoint_Data{2}(1) - ... Mission_Requirements.Waypoint_Data{1}(1))); % angle, rise over run if isnan(FPangle.leg1) == 1 FPangle.leg1 = 0; else end

elseif Mission_Requirements.MissionNumber == 1 FPangle.leg1 = atand((Mission_Requirements.Waypoint_Data{2}(3) - ... Mission_Requirements.Waypoint_Data{1}(3)) /... (Mission_Requirements.Waypoint_Data{2}(1) - ... Mission_Requirements.Waypoint_Data{1}(1))); % angle, rise over run FPangle.leg2 = atand((Mission_Requirements.Waypoint_Data{3}(3) - ... Mission_Requirements.Waypoint_Data{2}(3)) /... (Mission_Requirements.Waypoint_Data{3}(1) - ... Mission_Requirements.Waypoint_Data{2}(1))); % angle, rise over run FPangle.leg3 = atand((Mission_Requirements.Waypoint_Data{4}(3) - ... Mission_Requirements.Waypoint_Data{3}(3)) /... (Mission_Requirements.Waypoint_Data{4}(1) - ... Mission_Requirements.Waypoint_Data{3}(1))); % angle, rise over run if isnan(FPangle.leg1) == 1 FPangle.leg1 = 0; else end if isnan(FPangle.leg2) == 1 FPangle.leg2 = 0;

P a g e | 176

else end if isnan(FPangle.leg3) == 1 FPangle.leg3 = 0; else end elseif Mission_Requirements.MissionNumber == 2 FPangle.leg1 = atand((Mission_Requirements.Waypoint_Data{2}(3) - ... Mission_Requirements.Waypoint_Data{1}(3)) /... (Mission_Requirements.Waypoint_Data{2}(1) - ... Mission_Requirements.Waypoint_Data{1}(1))); % angle, rise over run FPangle.leg2 = atand((Mission_Requirements.Waypoint_Data{3}(3) - ... Mission_Requirements.Waypoint_Data{2}(3)) /... (Mission_Requirements.Waypoint_Data{3}(1) - ... Mission_Requirements.Waypoint_Data{2}(1))); % angle, rise over run FPangle.leg3 = atand((Mission_Requirements.Waypoint_Data{4}(3) - ... Mission_Requirements.Waypoint_Data{3}(3)) /... (Mission_Requirements.Waypoint_Data{4}(1) - ... Mission_Requirements.Waypoint_Data{3}(1))); % angle, rise over run FPangle.leg4 = atand((Mission_Requirements.Waypoint_Data{5}(3) - ... Mission_Requirements.Waypoint_Data{4}(3)) /... (Mission_Requirements.Waypoint_Data{5}(1) - ... Mission_Requirements.Waypoint_Data{4}(1))); % angle, rise over run FPangle.leg5 = atand((Mission_Requirements.Waypoint_Data{6}(3) - ... Mission_Requirements.Waypoint_Data{5}(3)) /... (Mission_Requirements.Waypoint_Data{6}(1) - ... Mission_Requirements.Waypoint_Data{5}(1))); % angle, rise over run if isnan(FPangle.leg1) == 1 FPangle.leg1 = 0; else end if isnan(FPangle.leg2) == 1 FPangle.leg2 = 0; else end if isnan(FPangle.leg3) == 1 FPangle.leg3 = 0; else end if isnan(FPangle.leg4) == 1 FPangle.leg4 = 0; else end if isnan(FPangle.leg5) == 1 FPangle.leg5 = 0; else end elseif Mission_Requirements.MissionNumber == 3 FPangle.leg1 = atand((Mission_Requirements.Waypoint_Data{2}(3) - ... Mission_Requirements.Waypoint_Data{1}(3)) /... (Mission_Requirements.Waypoint_Data{2}(1) - ... Mission_Requirements.Waypoint_Data{1}(1))); % angle, rise over run FPangle.leg2 = atand((Mission_Requirements.Waypoint_Data{3}(3) - ... Mission_Requirements.Waypoint_Data{2}(3)) /...

P a g e | 177

(Mission_Requirements.Waypoint_Data{3}(1) - ... Mission_Requirements.Waypoint_Data{2}(1))); % angle, rise over run FPangle.leg3 = atand((Mission_Requirements.Waypoint_Data{4}(3) - ... Mission_Requirements.Waypoint_Data{3}(3)) /... (Mission_Requirements.Waypoint_Data{4}(1) - ... Mission_Requirements.Waypoint_Data{3}(1))); % angle, rise over run if isnan(FPangle.leg1) == 1 FPangle.leg1 = 0; else end if isnan(FPangle.leg2) == 1 FPangle.leg2 = 0; else end if isnan(FPangle.leg3) == 1 FPangle.leg3 = 0; else end elseif Mission_Requirements.MissionNumber == 4 FPangle.leg1 = atand((Mission_Requirements.Waypoint_Data{2}(3) - ... Mission_Requirements.Waypoint_Data{1}(3)) /... (Mission_Requirements.Waypoint_Data{2}(1) - ... Mission_Requirements.Waypoint_Data{1}(1))); % angle, rise over run FPangle.leg2 = atand((Mission_Requirements.Waypoint_Data{3}(3) - ... Mission_Requirements.Waypoint_Data{2}(3)) /... (Mission_Requirements.Waypoint_Data{3}(1) - ... Mission_Requirements.Waypoint_Data{2}(1))); % angle, rise over run FPangle.leg3 = atand((Mission_Requirements.Waypoint_Data{4}(3) - ... Mission_Requirements.Waypoint_Data{3}(3)) /... (Mission_Requirements.Waypoint_Data{4}(1) - ... Mission_Requirements.Waypoint_Data{3}(1))); % angle, rise over run FPangle.leg4 = atand((Mission_Requirements.Waypoint_Data{5}(3) - ... Mission_Requirements.Waypoint_Data{4}(3)) /... (Mission_Requirements.Waypoint_Data{5}(1) - ... Mission_Requirements.Waypoint_Data{4}(1))); % angle, rise over run FPangle.leg5 = atand((Mission_Requirements.Waypoint_Data{6}(3) - ... Mission_Requirements.Waypoint_Data{5}(3)) /... (Mission_Requirements.Waypoint_Data{6}(1) - ... Mission_Requirements.Waypoint_Data{5}(1))); % angle, rise over run FPangle.leg6 = atand((Mission_Requirements.Waypoint_Data{7}(3) - ... Mission_Requirements.Waypoint_Data{6}(3)) /... (Mission_Requirements.Waypoint_Data{7}(1) - ... Mission_Requirements.Waypoint_Data{6}(1))); % angle, rise over run FPangle.leg7 = atand((Mission_Requirements.Waypoint_Data{8}(3) - ... Mission_Requirements.Waypoint_Data{7}(3)) /... (Mission_Requirements.Waypoint_Data{8}(1) - ... Mission_Requirements.Waypoint_Data{7}(1))); % angle, rise over run if isnan(FPangle.leg1) == 1 FPangle.leg1 = 0; else end if isnan(FPangle.leg2) == 1 FPangle.leg2 = 0; else end

P a g e | 178

if isnan(FPangle.leg3) == 1 FPangle.leg3 = 0; else end if isnan(FPangle.leg4) == 1 FPangle.leg4 = 0; else end if isnan(FPangle.leg5) == 1 FPangle.leg5 = 0; else end if isnan(FPangle.leg6) == 1 FPangle.leg6 = 0; else end if isnan(FPangle.leg7) == 1 FPangle.leg7 = 0; else end elseif Mission_Requirements.MissionNumber == 6 FPangle.leg1 = atand((Mission_Requirements.Waypoint_Data{2}(3) - ... Mission_Requirements.Waypoint_Data{1}(3)) /... (Mission_Requirements.Waypoint_Data{2}(1) - ... Mission_Requirements.Waypoint_Data{1}(1))); % angle, rise over run if isnan(FPangle.leg1) == 1 FPangle.leg1 = 0; else end else FPangle.leg1 = atand((Mission_Requirements.Waypoint_Data{2}(3) - ... Mission_Requirements.Waypoint_Data{1}(3)) /... (Mission_Requirements.Waypoint_Data{2}(1) - ... Mission_Requirements.Waypoint_Data{1}(1))); % angle, rise over run FPangle.leg2 = atand((Mission_Requirements.Waypoint_Data{3}(3) - ... Mission_Requirements.Waypoint_Data{2}(3)) /... (Mission_Requirements.Waypoint_Data{3}(1) - ... Mission_Requirements.Waypoint_Data{2}(1))); % angle, rise over run FPangle.leg3 = atand((Mission_Requirements.Waypoint_Data{4}(3) - ... Mission_Requirements.Waypoint_Data{3}(3)) /... (Mission_Requirements.Waypoint_Data{4}(1) - ... Mission_Requirements.Waypoint_Data{3}(1))); % angle, rise over run FPangle.leg4 = atand((Mission_Requirements.Waypoint_Data{5}(3) - ... Mission_Requirements.Waypoint_Data{4}(3)) /... (Mission_Requirements.Waypoint_Data{5}(1) - ... Mission_Requirements.Waypoint_Data{4}(1))); % angle, rise over run FPangle.leg5 = atand((Mission_Requirements.Waypoint_Data{6}(3) - ... Mission_Requirements.Waypoint_Data{5}(3)) /... (Mission_Requirements.Waypoint_Data{6}(1) - ... Mission_Requirements.Waypoint_Data{5}(1))); % angle, rise over run FPangle.leg6 = atand((Mission_Requirements.Waypoint_Data{7}(3) - ... Mission_Requirements.Waypoint_Data{6}(3)) /... (Mission_Requirements.Waypoint_Data{7}(1) - ... Mission_Requirements.Waypoint_Data{6}(1))); % angle, rise over run

P a g e | 179

FPangle.leg7 = atand((Mission_Requirements.Waypoint_Data{8}(3) - ... Mission_Requirements.Waypoint_Data{7}(3)) /... (Mission_Requirements.Waypoint_Data{8}(1) - ... Mission_Requirements.Waypoint_Data{7}(1))); % angle, rise over run if isnan(FPangle.leg1) == 1 FPangle.leg1 = 0; else end if isnan(FPangle.leg2) == 1 FPangle.leg2 = 0; else end if isnan(FPangle.leg3) == 1 FPangle.leg3 = 0; else end if isnan(FPangle.leg4) == 1 FPangle.leg4 = 0; else end if isnan(FPangle.leg5) == 1 FPangle.leg5 = 0; else end if isnan(FPangle.leg6) == 1 FPangle.leg6 = 0; else end if isnan(FPangle.leg7) == 1 FPangle.leg7 = 0; else end end EVALUATE AND RUN SCRIPT

Fuel_mass = 0;

for i = 1:Total_seconds_to_fly.leg1 [mdot_fuel.Leg1, delta_mass_fuel.leg1] = model_three(filename,e, Geometry_model.CD, Geometry_model.Ac, Rotorcraft_velocity.leg1, delta_y.leg1, Total_seconds_to_fly.leg1, M.naught, Geometry_model, FPangle.leg1); if mdot_fuel.Leg1 <= 0 mdot_fuel.Leg1 = 0; Fuel_mass = Fuel_mass + mdot_fuel.Leg1*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg1*delta_t; %Update mass to subtract fuel off first leg else Fuel_mass = Fuel_mass + mdot_fuel.Leg1*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg1*delta_t; %Update mass to subtract fuel off first leg end

P a g e | 180

if isnan(delta_mass_fuel.leg1) == 1 M.naught = M.naught; end end if isempty(Mission_Requirements.Length_leg_2) == 1 && ... isempty(Mission_Requirements.Time_leg_2) == 1 mdot_fuel.Leg2 = 0; delta_mass_fuel.leg2 = 0; else for i = 1:Total_seconds_to_fly.leg2 [mdot_fuel.Leg2, delta_mass_fuel.leg2] = model_three(filename,e, Geometry_model.CD, Geometry_model.Ac, Rotorcraft_velocity.leg2, delta_y.leg2, Total_seconds_to_fly.leg2, M.naught, Geometry_model, FPangle.leg2); if mdot_fuel.Leg2 <= 0 mdot_fuel.Leg2 = 0; Fuel_mass = Fuel_mass + mdot_fuel.Leg2*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg2*delta_t; %Update mass to subtract fuel off second leg else Fuel_mass = Fuel_mass + mdot_fuel.Leg2*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg2*delta_t; %Update mass to subtract fuel off second leg end if isnan(delta_mass_fuel.leg2) == 1 M.naught = M.naught; end end end if isempty(Mission_Requirements.Length_leg_3) == 1 && ... isempty(Mission_Requirements.Time_leg_3) == 1 mdot_fuel.Leg3 = 0; delta_mass_fuel.leg3 = 0; else for i = 1:Total_seconds_to_fly.leg3 [mdot_fuel.Leg3, delta_mass_fuel.leg3] = model_three(filename,e, Geometry_model.CD, Geometry_model.Ac, Rotorcraft_velocity.leg3, delta_y.leg3, Total_seconds_to_fly.leg3, M.naught, Geometry_model, FPangle.leg3); if mdot_fuel.Leg3 <= 0 mdot_fuel.Leg3 = 0; Fuel_mass = Fuel_mass + mdot_fuel.Leg3*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg3*delta_t; %Update mass to subtract fuel off third leg else Fuel_mass = Fuel_mass + mdot_fuel.Leg3*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg3*delta_t; %Update mass to subtract fuel off third leg end if isnan(delta_mass_fuel.leg3) == 1 M.naught = M.naught; end end end

P a g e | 181

if isempty(Mission_Requirements.Length_leg_4) == 1 && ... isempty(Mission_Requirements.Time_leg_4) == 1 mdot_fuel.Leg4 = 0; delta_mass_fuel.leg4 = 0; else for i = 1:Total_seconds_to_fly.leg4 [mdot_fuel.Leg4, delta_mass_fuel.leg4] = model_three(filename,e, Geometry_model.CD, Geometry_model.Ac, Rotorcraft_velocity.leg4, delta_y.leg4, Total_seconds_to_fly.leg4, M.naught, Geometry_model, FPangle.leg4); if mdot_fuel.Leg4 <= 0 mdot_fuel.Leg4 = 0; Fuel_mass = Fuel_mass + mdot_fuel.Leg4*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg4*delta_t; %Update mass to subtract fuel off fourth leg else Fuel_mass = Fuel_mass + mdot_fuel.Leg4*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg4*delta_t; %Update mass to subtract fuel off fourth leg end if isnan(delta_mass_fuel.leg4) == 1 M.naught = M.naught; end end end if isempty(Mission_Requirements.Length_leg_5) == 1 && ... isempty(Mission_Requirements.Time_leg_5) == 1 mdot_fuel.Leg5 = 0; delta_mass_fuel.leg5 = 0; else for i = 1:Total_seconds_to_fly.leg5 [mdot_fuel.Leg5, delta_mass_fuel.leg5] = model_three(filename,e, Geometry_model.CD, Geometry_model.Ac, Rotorcraft_velocity.leg5, delta_y.leg5, Total_seconds_to_fly.leg5, M.naught, Geometry_model, FPangle.leg5); if mdot_fuel.Leg5 <= 0 mdot_fuel.Leg5 = 0; Fuel_mass = Fuel_mass + mdot_fuel.Leg5*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg5*delta_t; %Update mass to subtract fuel off fourth leg else Fuel_mass = Fuel_mass + mdot_fuel.Leg5*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg5*delta_t; %Update mass to subtract fuel off fourth leg end if isnan(delta_mass_fuel.leg5) == 1 M.naught = M.naught; end end end if isempty(Mission_Requirements.Length_leg_6) == 1 && ... isempty(Mission_Requirements.Time_leg_6) == 1 mdot_fuel.Leg6 = 0; delta_mass_fuel.leg6 = 0;

P a g e | 182

else for i = 1:Total_seconds_to_fly.leg6

[mdot_fuel.Leg6, delta_mass_fuel.leg6] = model_three(filename,e, Geometry_model.CD, Geometry_model.Ac, Rotorcraft_velocity.leg6, delta_y.leg6, Total_seconds_to_fly.leg6, M.naught, Geometry_model, FPangle.leg6); if mdot_fuel.Leg6 <= 0 mdot_fuel.Leg6 = 0; Fuel_mass = Fuel_mass + mdot_fuel.Leg6*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg6*delta_t; %Update mass to subtract fuel off fourth leg else Fuel_mass = Fuel_mass + mdot_fuel.Leg6*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg6*delta_t; %Update mass to subtract fuel off fourth leg end if isnan(delta_mass_fuel.leg6) == 1 M.naught = M.naught; end end end if isempty(Mission_Requirements.Length_leg_7) == 1 && ... isempty(Mission_Requirements.Time_leg_7) == 1 mdot_fuel.Leg7 = 0; delta_mass_fuel.leg7 = 0; else for i = 1:Total_seconds_to_fly.leg7 [mdot_fuel.Leg7, delta_mass_fuel.leg7] = model_three(filename,e, Geometry_model.CD, Geometry_model.Ac, Rotorcraft_velocity.leg7, delta_y.leg7, Total_seconds_to_fly.leg7, M.naught, Geometry_model, FPangle.leg7); if mdot_fuel.Leg7 <= 0 mdot_fuel.Leg7 = 0; Fuel_mass = Fuel_mass + mdot_fuel.Leg7*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg7*delta_t; %Update mass to subtract fuel off fourth leg else Fuel_mass = Fuel_mass + mdot_fuel.Leg7*delta_t; %Update mass to ADD total fuel used M.naught = M.naught - mdot_fuel.Leg7*delta_t; %Update mass to subtract fuel off fourth leg end if isnan(delta_mass_fuel.leg7) == 1 M.naught = M.naught; end end end

Total_fuel_mass = Fuel_mass; %Total mass to ADD total fuel used end

P a g e | 183

APPENDIX G CLASSES – GEOMETRIES AND ENVIRONMENTAL MODEL

This appendix contains the classes and script files for running the geometries, and the environmental models.

Environmental Class

classdef Environmental_model_class %Environmental_model Class provides the environmental data for analysis % Class loads an excel datasheet of environmental data

properties Std_Atmos_Air_Data Alt_0 Alt_Current Temp_C Temp_K Temp_init_C Temp_init_K Gravity Pressure_Abs rho Dynamic_Viscos end end

P a g e | 184

Run Environmental Model

% ######################################################## % # ## % # MECH4500: THESIS ## % # Candidate Airframe for UQ-UAS ## % # ## % # Development of a UAV Rotorcraft Design Software ## % # Framework Using an Aeromechanics Design Analysis ## % # ## % # Rowan Conaghan 43903863 ## % # ## % ######################################################## clc;

% ######################################################## % INPUT ENVIRONMENTAL MODEL File % Environmental Data: This script loads environmental % data into MATLABs base workspace % % Returns: - Flight Altitude % - Temperature in C and K % - Gravity % - Pressure Absolute % - Density % - Dynamic Visocity % % ######################################################## EM = Environmental_model_class;

EM.Std_Atmos_Air_Data = readtable('Standard_Atmosphere_Air_Properties_- _SI_Units.xlsx','Sheet','Sheet1','Range','C6:H27'); EM.Std_Atmos_Air_Data.Properties.VariableNames = {'Alt_ASL' 'Temp' 'Gravity' 'Pressure_Abs' 'Density' 'Dynamic_Viscosity'}; EM.Temp_init_C = 24; % initial temperature (C) at ground level EM.Temp_init_K = 24+273.15; % initial temperature (K) at ground level

% Atmosphere Data for indicated Altitude EM.Alt_0 = 76.2; % Altitude of flight (m) (based off 250 feet AGL) EM.Alt_Current = 0; % initial flight level of aircraft

% Setting up code to determine the data for interpolation around altitude [~,position] = min(abs(EM.Std_Atmos_Air_Data.Alt_ASL-EM.Alt_0));

% Temperature of Air at Altitude in Celcius (C) EM.Temp_C = ((EM.Alt_0-EM.Std_Atmos_Air_Data.Alt_ASL(position+1))/... (EM.Std_Atmos_Air_Data.Alt_ASL(position)- EM.Std_Atmos_Air_Data.Alt_ASL(position+1)))... *(EM.Std_Atmos_Air_Data.Temp(position)- EM.Std_Atmos_Air_Data.Temp(position+1))... +EM.Std_Atmos_Air_Data.Temp(position+1); EM.Temp_K = EM.Temp_C+273.15; % Temperature in Kelvin (K)

% Average Gravitational Constant on Earth in (m/s^2) EM.Gravity = ((EM.Alt_0-EM.Std_Atmos_Air_Data.Alt_ASL(position+1))/...

P a g e | 185

(EM.Std_Atmos_Air_Data.Alt_ASL(position)- EM.Std_Atmos_Air_Data.Alt_ASL(position+1)))... *(EM.Std_Atmos_Air_Data.Gravity(position)- EM.Std_Atmos_Air_Data.Gravity(position+1))... +EM.Std_Atmos_Air_Data.Gravity(position+1);

% Average Pressure Absolute (N/m^2) EM.Pressure_Abs = ((EM.Alt_0-EM.Std_Atmos_Air_Data.Alt_ASL(position+1))/... (EM.Std_Atmos_Air_Data.Alt_ASL(position)- EM.Std_Atmos_Air_Data.Alt_ASL(position+1)))... *(EM.Std_Atmos_Air_Data.Pressure_Abs(position)- EM.Std_Atmos_Air_Data.Pressure_Abs(position+1))... +EM.Std_Atmos_Air_Data.Pressure_Abs(position+1);

% Average Density (kg/m^3) EM.rho = (((EM.Alt_0-EM.Std_Atmos_Air_Data.Alt_ASL(position+1))/... (EM.Std_Atmos_Air_Data.Alt_ASL(position)- EM.Std_Atmos_Air_Data.Alt_ASL(position+1)))... *(EM.Std_Atmos_Air_Data.Density(position)- EM.Std_Atmos_Air_Data.Density(position+1))... +EM.Std_Atmos_Air_Data.Density(position+1))*(10.^-1);

% Average Dynamic Viscosity (N s/m^2) EM.Dynamic_Viscos = (((EM.Alt_0-EM.Std_Atmos_Air_Data.Alt_ASL(position+1))/... (EM.Std_Atmos_Air_Data.Alt_ASL(position)- EM.Std_Atmos_Air_Data.Alt_ASL(position+1)))... *(EM.Std_Atmos_Air_Data.Dynamic_Viscosity(position)- EM.Std_Atmos_Air_Data.Dynamic_Viscosity(position+1))... +EM.Std_Atmos_Air_Data.Dynamic_Viscosity(position+1))*(10.^-5); clear position

% ########################################################

P a g e | 186

Geometry Inputs Class classdef Geometry_inputs_class %Geometry_inputs Code generates the geometric inputs for evaluation % % ######################################################## % INPUT Parameter File % Geometry Parametrisation and Dimensionality of Candiate % Airframes Geometry Data: This script loads airframe % technical data into MATLABs base workspace % % Returns: - Number of rotor blades % o main rotor, and tail rotor % - Mass properties % o Main blades, tail blades, rotor assembly, pylon, % fuselage, tailboom, empennage, and langing gear % - Geometric dimensions % o Blade chord, blade aspect ratio, blade loading, % main blade total area, tail blade total area % - Main blade tip speed % - Motor max speeds % - Number of engines % o internal combustion, or PMSM (i.e. brushless PMSM) % - Airframe orientation for evaluation % ######################################################## properties % Number of Elements for Weight/Mass Calculations N_MainBlades % Number of main rotor blades N_TailRotorBlades % Number of tail rotor blades N_Rotor_Assembly % Number of rotor assemblies supporting rotor blades N_Engine_Motor % Number of engines / motors on craft

MASS PROPERTIES: i.e. weight distrubution Main Blades

W_MainBlade % Weight of individual Blade

% Rotor Assembly: Includes Teetering Hinge, Jesus Nut, Blade Grips, Control % rod, etc etc. W_Rotor_Assembly % Weight of rotor assembly

% Pylon Support: Rotor Mast W_Pylon % Weight of supporting pylon of rotor assembly

% Fuselage: Main Airframe Body W_Fuselage % Main fuselage weight % Tail Boom W_Tailboom % Weight of tailboom % Tail Blades W_TailBlade % Weight of tailblade

% Main Rotor Empennage: Fin and Horizontal Stabiliser W_Empennage % Weight of empennage systems

W_Payload % Weight of payload

P a g e | 187

W_Brick % Total weight of brick

Geometric Dimensions

Blade_Chord % Mean Aerodynamic Chord length in (m) Wingspan % Length of wingspan in meters (m) Blade_loading % Blade Loading Blade_Radius % Blade Radius (m) % Fluids a % speed of sound % Airframe Orientation Roll_0 %} Pitch_0 %}Orientation of Airframe Yaw_0 %} end

properties (Dependent) % Total Weight of elements (summation) W_MainBlades % Total Weight of Main Blades W_Rotor_Assembly_Total % Total Weight of rotor assemblies W_Pylon_Total % Total Weight of supporting pylons W_TailBlades % Total Weight of Tail Blades

% Total Weight Weight_Total_grams_i % Weight of UAV in (g) with no fuel load Weight_Total_kgs_i % Weight of UAV in (kg) with no fuel load

% Geometric Calcs S % Wing Area in (m^2) Blade_AR % Aspect Ratio circumference_rotor % Circumference of main rotor

% Blade element: V_local = Omega * r : where r is radius from the centre % of rotation of the helicopter blades, to the location of blade element % Blade_tip_speed = V_tip = Omega * R : where R is the maximum radius Blade_tip_speed % speed of blade tips (ft/sec) end

properties (Constant, Hidden) kilogram_conversion = 1000 e = 0.95; % Span efficiency factor = 0.95 Alt = 200; % Altitude in (m) % Speed Max_motor_speed = 4000; % Max speed motor in (rpm) gamma = 1.4; % R = 286; % Universial Gas constant end properties(Constant) GeometryID = 3 % Geometry Model Identification Number, value assignment of geometry end

methods

P a g e | 188

P a g e | 189

Weight Main Blades getter function

function W_MainBlades = get.W_MainBlades(theGeometry_inputs) %Total Weight of main rotors: Function returns the total %weight of the main rotor blades % Parameters: Number of main rotor blades % Weight of single rotor blade W_MainBlades = theGeometry_inputs.N_MainBlades * ... theGeometry_inputs.W_MainBlade; end

function W_Rotor_Assembly_Total = get.W_Rotor_Assembly_Total(theGeometry_inputs) %Total Weight of Rotor Assembly: Function returns the total %weight of the rotor assembly % Parameters: Number of rotor assemblies % Weight of single rotor assembly W_Rotor_Assembly_Total = theGeometry_inputs.N_Rotor_Assembly *... theGeometry_inputs.W_Rotor_Assembly; end

function W_Pylon_Total = get.W_Pylon_Total(theGeometry_inputs) %Total Weight of Pylons: Function returns the total weight of %the supporting pylon/s for helicopter design % Parameters: Number of rotor assembly/s % Weight of single pylon W_Pylon_Total = theGeometry_inputs.N_Rotor_Assembly * ... theGeometry_inputs.W_Pylon; end

function W_TailBlades = get.W_TailBlades(theGeometry_inputs) %Total Weight of Tail Blades: Function returns the total weight %of the tail blades % Parameters: Number of tail rotor blades % Weight of single tail blade W_TailBlades = theGeometry_inputs.N_TailRotorBlades *... theGeometry_inputs.W_TailBlade; end

function Weight_Total_grams_i = get.Weight_Total_grams_i(theGeometry_inputs) %Total Weight of Design in grams: Function returns the total weight %of the design in grams % Method: Summation of all the weights Weight_Total_grams_i = theGeometry_inputs.W_MainBlades +... theGeometry_inputs.W_Rotor_Assembly_Total + ... theGeometry_inputs.W_Pylon_Total + ... theGeometry_inputs.W_Fuselage + ... theGeometry_inputs.W_Tailboom + ... theGeometry_inputs.W_TailBlades + ... theGeometry_inputs.W_Empennage + ... theGeometry_inputs.W_Payload; end

function Weight_Total_kgs_i = get.Weight_Total_kgs_i(theGeometry_inputs) %Total Weight of Design in kilograms: Function returns the total

P a g e | 190

%weight of the design in kilograms % Method: Summation of all the weights Weight_Total_kgs_i = theGeometry_inputs.Weight_Total_grams_i /... theGeometry_inputs.kilogram_conversion; end function S = get.S(theGeometry_inputs) %Wing Area: Function returns the wing area % Parameters: Blade chord % Wingspan S = theGeometry_inputs.Blade_Chord * theGeometry_inputs.Wingspan; end function Blade_AR = get.Blade_AR(theGeometry_inputs) %Aspect Ratio: Function returns the aspect ratio % Parameters: Wingspan % Wing area Blade_AR = theGeometry_inputs.Wingspan^2 /... theGeometry_inputs.S; end function circumference_rotor = get.circumference_rotor(theGeometry_inputs) %Circumference Rotor: Function returns the circumference of %main rotor blades % Parameters: Gamma % R - universal gas constant % Temperature at current flight altitude circumference_rotor = 2*pi*theGeometry_inputs.Blade_Radius; end function Blade_tip_speed = get.Blade_tip_speed(theGeometry_inputs) %Blade tip speed: Function returns the blade tip speed % Parameters: Wingspan % Wing area Blade_tip_speed = theGeometry_inputs.Wingspan^2 /... theGeometry_inputs.S; end

P a g e | 191

Point-Mass Class

classdef Point_Mass %POINT_MASS Summary of this class goes here % Detailed explanation goes here

properties(Constant) GeometryID = 1 % Geometry Model Identification Number, value assignment of geometry CD = 0.5 % Coefficient of Drag end

properties % Flying point mass length % m long width % m wide height % m high weight % kg weight end

properties(Dependent) Ac % Characteristic Area whilst in flight end

methods Characteristic Area getter function

function Ac = get.Ac(BrickGeometry_inputs) %Total Weight of main rotors: Function returns the total %weight of the main rotor blades % Parameters: Number of main rotor blades % Weight of single rotor blade Ac = BrickGeometry_inputs.length * ... BrickGeometry_inputs.height; end

P a g e | 192

Flying Rectangular-Prism Class

classdef Brick %BRICK Class initialises a flying rectangular prism. i.e. a flying %brick % Class contains geometric properties, and properties that are % dependent on the geometry, aka % Ac; Characteristic area % CD; Coefficient of drag

properties(Constant) GeometryID = 2 % Geometry Model Identification Number, value assignment of geometry end

properties % Flying brick length % m long width % m wide height % m high weight % kg weight end

properties(Dependent) Ac % Characteristic Area whilst in flight CD % Coefficient of Drag end

methods

P a g e | 193

Characteristic Area getter function

function Ac = get.Ac(BrickGeometry_inputs) %Total Weight of main rotors: Function returns the total %weight of the main rotor blades % Parameters: Number of main rotor blades % Weight of single rotor blade Ac = BrickGeometry_inputs.length * ... BrickGeometry_inputs.height; end

% Characteristic Coefficient of Drag getter function function CD = get.CD(Geometry) % Function returns 3-Dimensional drag coefficent for flying rectangular % plate.... in our case, a flying brick % % Sketch: Rectangular Plate 3-D Drag Coefficient % % __ % |\ \ % | \ \ L % | \ \ % | \ \ % ----> \ | | % \ | | % \ | | D % \|_| % % Equations: % CD = 1.10 + 0.02(L/D + D/L) % % *for: 1/30 < L/D < 30 % *Rectangular plate area = LD % % Parameters: L; length, in-line with the velocity flow % D; width, perpendicular to the velocity flow % % Returns: % CD; 3D Coefficient of Drag % L = Geometry.length; D = Geometry.height; CD = 1.10 + 0.02*((L/D) + (D/L)); end

P a g e | 194

Single Main Rotor – Helicopter Class Contents

. Weight Main Blades getter function . Characteristic Area getter function

classdef Single_Rotor %Single_Rotor Code generates the geometric inputs for the single rotor %evaluation % % Returns: - Number of rotor blades % o main rotor, and tail rotor % - Mass properties % o Main blades, tail blades, rotor assembly, pylon, % fuselage, tailboom, empennage, and langing gear % - Geometric dimensions % o Blade chord, blade aspect ratio, blade loading, % main blade total area, tail blade total area % - Main blade tip speed % - Motor max speeds % - Number of engines % o internal combustion, or PMSM (i.e. brushless PMSM) % - Airframe orientation for evaluation %

properties(Constant) GeometryID = 3 % Geometry Model Identification Number, value assignment of geometry end

properties % Number of Elements for Weight/Mass Calculations N_MainBlades % Number of main rotor blades N_TailRotorBlades % Number of tail rotor blades N_Rotor_Assembly % Number of rotor assemblies supporting rotor blades N_Engine_Motor % Number of engines / motors on craft

MASS PROPERTIES: i.e. weight distrubution Main Blades

W_MainBlade % Weight of individual Blade

% Rotor Assembly: Includes Teetering Hinge, Jesus Nut, Blade Grips, Control % rod, etc etc. W_Rotor_Assembly % Weight of rotor assembly

% Pylon Support: Rotor Mast W_Pylon % Weight of supporting pylon of rotor assembly

% Fuselage: Main Airframe Body W_Fuselage % Main fuselage weight % Tail Boom W_Tailboom % Weight of tailboom % Tail Blades W_TailBlade % Weight of tailblade

P a g e | 195

% Main Rotor Empennage: Fin and Horizontal Stabiliser W_Empennage % Weight of empennage systems

W_Payload % Weight of payload

W_Brick % Total weight of brick

Geometric Dimensions

Blade_Chord % Mean Aerodynamic Chord length in (m) Wingspan % Length of wingspan in meters (m) Blade_loading % Blade Loading Blade_Radius % Blade Radius (m)

% Fluids a % speed of sound

% Airframe Orientation Roll_0 %} Pitch_0 %}Orientation of Airframe Yaw_0 %} end

properties % Flying brick length % m long width % m wide height % m high weight % kg weight end

properties (Dependent) % Total Weight of elements (summation) W_MainBlades % Total Weight of Main Blades W_Rotor_Assembly_Total % Total Weight of rotor assemblies W_Pylon_Total % Total Weight of supporting pylons W_TailBlades % Total Weight of Tail Blades

% Total Weight Weight_Total_grams_i % Weight of UAV in (g) with no fuel load Weight_Total_kgs_i % Weight of UAV in (kg) with no fuel load

% Geometric Calcs S % Wing Area in (m^2) Blade_AR % Aspect Ratio circumference_rotor % Circumference of main rotor

% Blade element: V_local = Omega * r : where r is radius from the centre % of rotation of the helicopter blades, to the location of blade element % Blade_tip_speed = V_tip = Omega * R : where R is the maximum radius Blade_tip_speed % speed of blade tips (ft/sec) end

properties (Constant, Hidden) kilogram_conversion = 1000

P a g e | 196

e = 0.95; % Span efficiency factor = 0.95 Alt = 200; % Altitude in (m) % Speed Max_motor_speed = 4000; % Max speed motor in (rpm) gamma = 1.4; % R = 286; % Universial Gas constant end

properties(Dependent) Ac % Characteristic Area whilst in flight CD % Coefficient of Drag end

methods

Weight Main Blades getter function

function W_MainBlades = get.W_MainBlades(theGeometry_inputs) %Total Weight of main rotors: Function returns the total %weight of the main rotor blades % Parameters: Number of main rotor blades % Weight of single rotor blade W_MainBlades = theGeometry_inputs.N_MainBlades * ... theGeometry_inputs.W_MainBlade; end

function W_Rotor_Assembly_Total = get.W_Rotor_Assembly_Total(theGeometry_inputs) %Total Weight of Rotor Assembly: Function returns the total %weight of the rotor assembly % Parameters: Number of rotor assemblies % Weight of single rotor assembly W_Rotor_Assembly_Total = theGeometry_inputs.N_Rotor_Assembly *... theGeometry_inputs.W_Rotor_Assembly; end

function W_Pylon_Total = get.W_Pylon_Total(theGeometry_inputs) %Total Weight of Pylons: Function returns the total weight of %the supporting pylon/s for helicopter design % Parameters: Number of rotor assembly/s % Weight of single pylon W_Pylon_Total = theGeometry_inputs.N_Rotor_Assembly * ... theGeometry_inputs.W_Pylon; end

function W_TailBlades = get.W_TailBlades(theGeometry_inputs) %Total Weight of Tail Blades: Function returns the total weight %of the tail blades % Parameters: Number of tail rotor blades % Weight of single tail blade W_TailBlades = theGeometry_inputs.N_TailRotorBlades *... theGeometry_inputs.W_TailBlade; end

P a g e | 197

function Weight_Total_grams_i = get.Weight_Total_grams_i(theGeometry_inputs) %Total Weight of Design in grams: Function returns the total weight %of the design in grams % Method: Summation of all the weights Weight_Total_grams_i = theGeometry_inputs.W_MainBlades +... theGeometry_inputs.W_Rotor_Assembly_Total + ... theGeometry_inputs.W_Pylon_Total + ... theGeometry_inputs.W_Fuselage + ... theGeometry_inputs.W_Tailboom + ... theGeometry_inputs.W_TailBlades + ... theGeometry_inputs.W_Empennage + ... theGeometry_inputs.W_Payload; end

function Weight_Total_kgs_i = get.Weight_Total_kgs_i(theGeometry_inputs) %Total Weight of Design in kilograms: Function returns the total %weight of the design in kilograms % Method: Summation of all the weights Weight_Total_kgs_i = theGeometry_inputs.Weight_Total_grams_i /... theGeometry_inputs.kilogram_conversion; end

function S = get.S(theGeometry_inputs) %Wing Area: Function returns the wing area % Parameters: Blade chord % Wingspan S = theGeometry_inputs.Blade_Chord * theGeometry_inputs.Wingspan; end

function Blade_AR = get.Blade_AR(theGeometry_inputs) %Aspect Ratio: Function returns the aspect ratio % Parameters: Wingspan % Wing area Blade_AR = theGeometry_inputs.Wingspan^2 /... theGeometry_inputs.S; end function circumference_rotor = get.circumference_rotor(theGeometry_inputs) %Circumference Rotor: Function returns the circumference of %main rotor blades % Parameters: Gamma % R - universal gas constant % Temperature at current flight altitude circumference_rotor = 2*pi*theGeometry_inputs.Blade_Radius; end function Blade_tip_speed = get.Blade_tip_speed(theGeometry_inputs) %Blade tip speed: Function returns the blade tip speed % Parameters: Wingspan % Wing area Blade_tip_speed = theGeometry_inputs.Wingspan^2 /... theGeometry_inputs.S; end

P a g e | 198

Characteristic Area getter function

function Ac = get.Ac(BrickGeometry_inputs) %Total Weight of main rotors: Function returns the total %weight of the main rotor blades % Parameters: Number of main rotor blades % Weight of single rotor blade Ac = BrickGeometry_inputs.length * ... BrickGeometry_inputs.height; end

% Characteristic Coefficient of Drag getter function function CD = get.CD(Geometry) % Function returns 3-Dimensional drag coefficent for flying rectangular % plate.... in our case, a flying brick % % Sketch: Rectangular Plate 3-D Drag Coefficient % % __ % |\ \ % | \ \ L % | \ \ % | \ \ % ----> \ | | % \ | | % \ | | D % \|_| % % Equations: % CD = 1.10 + 0.02(L/D + D/L) % % *for: 1/30 < L/D < 30 % *Rectangular plate area = LD % % Parameters: L; length, in-line with the velocity flow % D; width, perpendicular to the velocity flow % % Returns: % CD; 3D Coefficient of Drag % L = Geometry.length; D = Geometry.height; CD = 1.10 + 0.02*((L/D) + (D/L)); end

P a g e | 199

Mission Requirements Class

Contents

. Minimum flight level altitude in metres getter function

classdef Mission_requirements_class %Mission_requirements_class Class Outlines the initial mission %requirements for evaluation. % The code checks for 'convergence' on a design that matches % this mission profile / requirements class

properties MissionNumber % Mission Number, value assignment of mission Endurance % time of endurance in minutes (min) Range % range in (Km) Payload % payload in (Kg) Cruise_speed % measured in (m/s) VROC % measured in (m/s) Hover_time % time in minutes (min) Length_leg_1 % length in metres of first leg (min) Length_leg_2 % length in metres of second leg (min) Length_leg_3 % length in metres of third leg (min) Length_leg_4 % length in metres of fourth leg (min) Length_leg_5 % length in metres of fifth leg (min) Length_leg_6 % length in metres of sixth leg (min) Length_leg_7 % length in metres of seventh leg (min) Time_leg_1 % time in minutes of first leg (min) Time_leg_2 % time in minutes of second leg (min) Time_leg_3 % time in minutes of third leg (min) Time_leg_4 % time in minutes of fourth leg (min) Time_leg_5 % time in minutes of fifth leg (min) Time_leg_6 % time in minutes of sixth leg (min) Time_leg_7 % time in minutes of sevent leg (min) Waypoint_Data % Waypoints, (x,y,z) of legs end

properties (Access = protected) Flight_level_min_altitude_feet = 250 % in feet AGL end

properties (Dependent) Flight_level_min_altitude_metres % in metres AGL end

properties (Constant, Hidden) feet_to_metres = 0.3048 end

methods

P a g e | 200

Minimum flight level altitude in metres getter function

function Flight_level_min_altitude_metres = get.Flight_level_min_altitude_metres(theMission_requirements_class) %METHOD1 Summary of this method goes here % Detailed explanation goes here Flight_level_min_altitude_metres = theMission_requirements_class.Flight_level_min_altitude_feet *... theMission_requirements_class.feet_to_metres; end

P a g e | 201

APPENDIX H MULTI-DIMENSIONAL MODEL GENERATION CODE

The code used to iterate through the raw code outlined in Appendix F-G is outlined in this section. The code requires a large amount of processing time, and whilst using a single core; takes about 12 hours to run in its entirety.

%Set amount of Data points to iterate through datapts = 200; radiusvalues = linspace(0.1,5,datapts); % 0.1-5m radius weightvalues = linspace(0.1,100,datapts); % 0.1-100 kg

%Starting assumptions Kv = 960; volt = 12.6; PM_weight = 3.5; B_weight = 4.8; SR_weight = 4.8; r = 0.3; c = 0.1350;

%Run Main script once to initiate Main_script22;

P a g e | 202

for i = radiusvalues GM.Blade_Radius = i; GM.Blade_Chord = c; GM.Wingspan = i*2; r = GM.Blade_Radius; c = GM.Blade_Chord; parallel_axis_plot; for l = weightvalues PM_weight = l; B_weight = l; SR_weight = l; parallel_axis_plot; % Kv = [100 150 200]; Kv = [600 960 1100 1200 1400 1600 2000]; % Kv = [400 450 500 550 600 660 690 700 750 800 880 900 960 990 ... % 1050 1100 1200 1250 1280 1300 1350 1400 1440 1460 1500 1550 ... % 1600 1650 1700 1750 1800 1880 1900 1990 2000 2050 2100 2150 2200 ... % 2250 2290 2300 2350 2400 2450 2500 2550 2590 2600 2650 2700 2750 ... % 2800 2880 2900 2950 3000 3100 3200 3300 3350 3450 3500 3550 3600 ... % 3650 3700 3800 3850 3890 3900 3950 4000 4050 4100 4150 4200 4250 ... % 4300 4350 4400 4440 4490 4500 4550 4600 4700 4750 4800 4850 4900 5000]; for k = Kv Kv = k; parallel_axis_plot; volt = [18.5 14.8 12.6 11.1 7.4]; for j = volt volt = j; parallel_axis_plot; end end end end

This function calls upon the parallel axis plot function which is outlined in Error! Reference source not found. Error! Reference source not found..

P a g e | 203

APPENDIX I MULTI-DIMENSIONAL MODEL – PARALLEL AXIS PLOT SOURCING

This function iterates through the entirety of the three generated models previously outlined and returns all the values and data needed for plotting the parallel axis plot

Setting up PARALLEL AXIS PLOT

%Main_script23; filename = 'Master Config Input File.txt'; results_file = 'results_4_parallelv5.txt'; Number_blades = 4; % number of blades

% r = return_value('GM.Blade_Radius ', filename); % blade radius % c = return_value('Blade_Chord ', filename); % blade chord sigma = (Number_blades * c)/(pi*r); span = r*2; % blade wingspan (diameter) AR = span^2/(c*span); % blade aspect ratio circum = 2*pi*r; % blade circumference % Kv = 960; % battery = 12.6; [omega,blade_RPM, blade_RPS, velocity_blades] = rotor_rotational_speed(filename,4,Kv,volt,r,c); % 4=hover, 960Kv, 12.6V Main_script22; results_4_parallel_all_data = [r c span AR circum velocity_blades Kv volt ... sigma SR_weight ... Single_rotor_Model_Three.Total_fuel_mass.mission0 ... Single_rotor_Model_Three.Total_fuel_mass.mission1 ... Single_rotor_Model_Three.Total_fuel_mass.mission2 ... Single_rotor_Model_Three.Total_fuel_mass.mission3 ... Single_rotor_Model_Three.Total_fuel_mass.mission5 ... Single_rotor_Model_Three.Total_fuel_mass.mission4]; dlmwrite(results_file,results_4_parallel_all_data,'-append','delimiter',' ','roffset',0,'precision',16) results_4_parallel_all_data=dlmread(results_file); labels = {'Rotor Blade Radius','Rotor Blade Chord','Rotor Blade Wingspan',... 'Rotor Blade Aspect Ratio','Rotor Blade Circumference',... 'Main Rotor Blade Tip Speed','Kilovolt Rating of Engine',... 'Size of Battery','Rotor Solidity','Vehicle Mass',... 'Delta Fuel Mass Mission 1','Delta Fuel Mass Mission 2',... 'Delta Fuel Mass Mission 3','Delta Fuel Mass Mission 4',... 'Delta Fuel Mass Mission 5','Delta Fuel Mass Full Sim.'};

%clear variables; clear global; clc; a=dlmread(results_file); % % GRAPH %parallelcoords(a,'Labels',labels,'Standardize','on');

P a g e | 204

parallelcoords(a,'Labels',labels); xtickangle(45); function [omega, blade_RPM, blade_RPS, velocity_blades] = rotor_rotational_speed(properties,Engine_cond,kv_rating, battery_size,r,c) % Function returns the speed of the main rotors depending on the % condition of the engine and the motors being used % % Parameters: properties proporties config file with all variables % eg. properties = 'inputs.txt' % Engine_cond; 0 = off % 1 = vertical ascension (take-off) % 2 = forward flight % 3 = descending flight (landing) % 4/else = hover % kv_rating; kilovolt rating of engine/propulsion % mechanism % battery_size; size of battery, assume 12.6 Volts % % Returns: omega; (rad/sec) angular/rotational speed of the rotor blades % blade_RPM; Blade Revolutions per minute % blade_RPS; Blade Revolutions per second % velocity_blades; (m/s) velocity of rotating blades % % Most rotorcopter engines (PMSM, brushless) are between 800 Kv and % 4600 Kv % Example: RPM of rotor => % 800kv PMSM equates too 800rpm / volt = 10080 rpm@input of 12.6 Volts % For hover, guestimate use 50-75% of above RPM % i.e. RPM_hover = RPM*(.5+.75)/2 = 6300 RPM for above example. % radius_blades = r; % current altitude RPM = kv_rating*battery_size; if Engine_cond == 0 % engine off RPM = 0; elseif Engine_cond == 1 % vertical ascension (take-off) RPM = RPM; elseif Engine_cond == 2 % forward flight RPM = 0.8*RPM; elseif Engine_cond == 3 % descending flight (landing) RPM = RPM; else % Rotorcopter hovering RPM_hover = RPM*(.5+.75)/2; % Guestimate for hovering power RPM = RPM_hover; end blade_RPM = RPM; blade_RPS = blade_RPM/60; omega = 2*pi*blade_RPS; % rad/sec velocity_blades = omega * radius_blades; % m/s of blades end

P a g e | 205

APPENDIX J MULTI-DIMENSIONAL MODEL – PARALLEL AXIS PLOT GRAPH

This function returns the parallel axis plot. Contents

GRAPH RESULTS OF PARALLEL COORDINATE AXIS PLOT Code for normalizing each column Graphing Data Code for plotting individual axis on normalized plot GRAPH RESULTS OF PARALLEL COORDINATE AXIS PLOT results_file = 'results_4_parallelvALLCOMBINEDGOOD.txt'; %clear variables; clear global; clc; a=dlmread(results_file); % % GRAPH %parallelcoords(a,'Labels',labels,'Standardize','on'); Code for normalizing each column x = [min(a,[],1);max(a,[],1)]; normalized_data_set = bsxfun(@minus,a,x(1,:)); normalized_data_set = bsxfun(@rdivide,normalized_data_set,diff(x,1,1));

Graphing Data fig = figure(1); parallelcoords(normalized_data_set,'Labels',labels); xtickangle(45); set(gcf,'Color','w'); Code for plotting individual axis on normalized plot for i=1:size(a,2) % Create axis (vertical line) for every column line([i i],[0 1],'LineStyle','--','Color','k'); % Create text labels of the min and max values in each column text(i+0.1,-.01,num2str(x(1,i)),'FontSize',12); text(i,1.01,num2str(x(2,i)),'FontSize',12); end title({'Normalized Parallel Coordinate Axis Plot of Optimizing Simulation';''},'FontSize',18); ylabel('Normalized Values','FontSize',18);

P a g e | 206

APPENDIX K MULTI-DIMENSIONAL MODEL – PARALLEL AXIS PLOT GRAPH ISOLATING FOR THE TOP 200 RESULTS

The code below isolates for the top 200 results, and then returns a parallel axis plot overlaying these results on the entire 15,500 evaluation points.

Contents

. GRAPH RESULTS OF PARALLEL COORDINATE AXIS PLOT . Code for normalizing each column . Normalise top entries . Need to isolate for top 200 entries . Graphing Data . Code for plotting individual axis on normalized plot

GRAPH RESULTS OF PARALLEL COORDINATE AXIS PLOT

Graph code results_file = 'results_4_parallelvALLCOMBINEDGOOD.txt'; %clear variables; clear global; clc; a=dlmread(results_file); % % GRAPH %parallelcoords(a,'Labels',labels,'Standardize','on');

labels = {'Rotor Blade Radius','Rotor Blade Chord','Rotor Blade Wingspan',... 'Rotor Blade Aspect Ratio','Rotor Blade Circumference',... 'Main Rotor Blade Tip Speed','Kilovolt Rating of Engine',... 'Size of Battery','Rotor Solidity','Vehicle Mass',... 'Delta Fuel Mass Mission 1','Delta Fuel Mass Mission 2',... 'Delta Fuel Mass Mission 3','Delta Fuel Mass Mission 4',... 'Delta Fuel Mass Mission 5','Delta Fuel Mass Full Sim.'};

Code for normalizing each column x = [min(a,[],1);max(a,[],1)]; normalized_data_set = bsxfun(@minus,a,x(1,:)); normalized_data_set = bsxfun(@rdivide,normalized_data_set,diff(x,1,1));

P a g e | 207

Normalise top entries

Code for normalizing each column xtop_entries = [min(a,[],1);max(a,[],1)]; normalized_data_set_top_entries = bsxfun(@minus,a,xtop_entries(1,:)); normalized_data_set_top_entries = bsxfun(@rdivide,normalized_data_set_top_entries,diff(xtop_entries,1,1)); top200 = normalized_data_set;

Need to isolate for top 200 entries test = normalized_data_set_top_entries(:,16);

[val,ind] = sort(test,'ascend');

% for list grabs indexes of top 200 entries cc = []; for i = 1:200 cc = [cc ind(i)]; end

% Extracted top 200 entries from original data top_entries = []; for i = cc top_entries = [top_entries; a(i,:)]; end

% Code for normalizing each column xtop_entries = [min(a,[],1);max(a,[],1)]; normalized_data_set_top_entries = bsxfun(@minus,top_entries,xtop_entries(1,:)); normalized_data_set_top_entries = bsxfun(@rdivide,normalized_data_set_top_entries,diff(xtop_entries,1,1));

Graphing Data fig = figure(2); hold on parallelcoords(normalized_data_set,'Labels',labels); parallelcoords(normalized_data_set_top_entries,'Labels',labels,'LineStyle','- ','Color','k'); hold off xtickangle(45); set(gcf,'Color','w');

P a g e | 208

Code for plotting individual axis on normalized plot for i=1:size(a,2) % Create axis (vertical line) for every column line([i i],[0 1],'LineStyle','--','Color','k'); % Create text labels of the min and max values in each column text(i+0.1,-.01,num2str(x(1,i)),'FontSize',12); text(i,1.01,num2str(x(2,i)),'FontSize',12); end title({'Normalized Parallel Coordinate Axis Plot of Optimizing Simulation Isolating Top 200 Results';''},'FontSize',18); ylabel('Normalized Values','FontSize',18);