Here on aircraftgeometry.codes we advocate the use of computer code as a parameterized ‘recipe’ for constructing air vehicle preliminary designs. By defining the ‘bottom-up’ construction of the geometry in this way, a high level of flexibility and reproducibility can be achieved, both of which are desirable traits in the context of design optimisation. To this end we have developed the AirCONICS plugin for Rhinoceros, containing generic and highly customizable recipes for creating aircraft components as Python/Rhino objects.
This post is about a new development around AirCONICS: its aircraft geometry routines are now also available as a Python standalone package through through a code called occ_airconics. Instead of using the OpenNURBS framework through Rhinoceros, the package is powered by Open CASCADE, an open source NURBS CAD kernel, and PythonOCC.
“So what makes this interesting?”
occ_airconics has no proprietary dependencies, thereby providing an immediately available and free platform for aircraft concept design with a similar API to AirCONICS. As it runs on a standard Python installation, occ_airconics is portable and available on all of the common platforms.
Current AirCONICS users working with Multidisciplinary Design Optimisation (MDO) may also benefit from occ_airconics due to the ease of integration with external scientific libraries such as numpy and scipy for mathematical operations, scikit-learn for machine-learning or mpi4py for parallel programming. These libraries are less readily integrated with Rhino due to its .NET Python kernel. It should be noted however that due to an absence of core functions previously used in Rhino, occ_airconics may produce different and potentially lower quality geometries than the Rhino version.
Key features of occ_airconics:
- Provides much of the same functionality as AirCONICS
- Totally open source and cross platform
- Native access to CPython packages, e.g. numpy, scipy, scikit-learn
- Easy to install via the conda package
- Readily Integrated with IPython, providing object introspection and PythonOCC’s Notebook rendering
Future development directions for occ_airconics are towards a topologically flexible aircraft concept parameterisation, and subsequent optimisation using machine learning algorithms. This will include integration with aerodynamic analysis.
occ_airconics is available now, to get started simply visit the installation instructions.
What a great code! This is exactly what I’m looking for, but I cannt find a way to define a control segment like flap on the lifting surface, is there a way to do this? Many thanks its a great feature for me.
Hi Will,
Thank you for the feedback! Fitting control segments is not a current feature of occ_airconics. However, András Sóbester has a current project looking at how this can be achieved in the Rhino AirCONICS. My aim is that the outcomes of that project will be integrated with occ_airconics, but if you need this feature in the near future, it may be worth contacting András to request access to the development code for Rhino.
If you have any other bugs or feature requests for the occ version of airconics, it would be a great help if you could submit them on the project’s issue tracker.
Thanks,
Paul
Hi there, I’ve got another qustion which is about generating wing leading edge points, both in the book or in the python code it is going to make use of sweep function and dihedral fuction. But what if there’s a 90 deg dihedral in the dihedral function and then I get Infinity tagent at that point? How to calculate LEPs at that case? Just like the given Box-Wing example, I can’t see any ways to avoid this (I say ‘avoid’ cause that the midpoints in Tilt_array in the code are just not at the ‘wing tip’ that you may not encountered a numerical error like this(maybe I missed something please tell me if it is).
Thanks in advance.
Hi Will, I think you’re right that this a numerically unstable situation. I’ve relayed the information to Andras and he will be looking into a solution. May I ask what shape lifting surface you are hoping to model here, I.e, is it a box wing, or a wing with a steep winglet, etc.? This may help us address the issue.
Hi Paul, actually I get this question when reading the ‘Example: A Blended Box Wing’ part (page 183),
Since the book does not present a detailed numerical approch to calculate leading edge points using the functions, I thought it may going to use numerical Integration at first.
But in this case, the whole wings’ dihedral angle is not a function if we place it in to a cartesian coordination(a X will mapping multipul Ys), if I’m goint use gradient I will certainly get an Infinit tangent error on the tip when the step of integration is small enough, so I went to take a look at the code to see if there are some good ways to get the leps, then I found that it may also need some fix.