OpenAero / main

Aerobatic sequence creation software
https://openaero.net
GNU General Public License v3.0
15 stars 7 forks source link

Enhancement proposal for creation of non-catalogue, freestyle figures, compliant with the Aresti-system #283

Open Dirk07 opened 10 months ago

Dirk07 commented 10 months ago

Hi all,

to bring everybody onto the same page, I've spent an afternoon or two to explain some things in quite some detail here, before my actual proposal is rolled out, so please do me the honor and read it carefully. Please let me know about any misconception or mistake, if I have made one and if any question remains.

User Demand and Historical Background

In recent years, I have received recurring questions on non-catalogue or freestyle-figures, like:

Some of these figures even included continous line-segments in a knife-edge attitude. Without further explanation I want to make clear that such knife-edge attitudes are explicitly not part or subject of this proposal, although worth another discussion.

The motivation for non-catalogue figures is surely as various and legit, as the aerobatic disciplines, contests and displays are various. However, those, who have understood José Aresti´s SYSTEM down to the detail, will likely have concluded that at his time the Aresti-Catalogue was simply a means of choice and the best means for distribution - a handy outcome or dilevery of applying his system hundreds of times - each time for every base-figure - with the intension to simplify competitors' lifes, when proposing or selecting certain figures, compliant with the system, as this system ensured a systematic, reproducable and therefore fair calculation of K-factors, based on the figure's extent.

José Aresti has emphasized that his catalogue is not final, in fact will likely never be finalized and is hence subjected to continued enhancement or changes, as the system allows its application for many more combinations of loops and/or lines than what has been captured so far in the catalogue.

Current Situation

Indeed, every definition in OpenAero's figureXX.js-files works analog in a wide degree to the Aresti-System, although the base-figure-K is not automatically calculated (as foreseen by the Aresti-System) out of the figure-description, but calculated manually and assigned to it "hard-coded", which has been actively decided in order to let OpenAero be consistent with the catalogue and the sporting codes, which in return are not consistent with the Aresti-System for a few couple of base-figures. These few inconsistencies likely originate from copying or revision mistakes, typo's or similar that occured long back in the past.

A rather easy example for such a base-figure definition in these files is following code-line:

+_c^+ 8.5.6.1(10) ~~~''_c'''_'~~d~

It shows the assignment or bijective association of a certain base-figure's placeholder +_c^+ against its catalogue-number 8.5.6.1, K-factor (10) and another regular expression ~~~''_c'''_'~~d~, used by OpenAero as a 'drawing instruction'. Thus, the base-figure's placeholder, callable by the user via the sequence-string, poses a short-cut or abbreviation for the much longer drawing instruction, which it-self is not directly callable through the user's interface - SO FAR.

Syntax of the base-figure placeholder

+_c^+ is one particular out of further possible placeholders for a particular base-figure ("half-cuban eight") of a figure-family, here particularly:

Generally, there may be further symbols used, to specify the permissible roles or spins:

Syntax of the drawing instruction

It is further crucial to understand that the drawing instruction does not have the same syntax as the base-figure's placeholder! In particular the letters do have a different meaning. Here, the letters describe consequetively the changes in line direction throughout the figure always w.r.t. the current direction and attitude:

Lower case letters are "pitch-up"- or positive arc changes - or pull-arcs. Upper case letters mean then the opposite direction - "pitch down" or push-arcs. This is evident from comparison with another code-line: -_c^- 8.5.6.2(14) ~~~''_C'''_'~~D~ is the same figure, but flown the "negative way" - with inverted entry and exit attitudes, it has now to use upper case letters in the drawing instruction, as the arcs have become push-arcs.

The symbols ~ and ' are used to extend lines (likewise in the sequence string, see OpenAero language). The symbol _ is here a placeholder for ANY roll-element, irrespective of even or odd permissible numbers of half-roll-elements. If that symbol is written immediately before or after a letter for a direction change, there will be no straight line segment in between that arc and the roll-symbol. The last crucial information on this code line is to understand that the number and order of roll-element symbols in the base-figure placeholder (_,^) must match the number of roll-element placeholders in the drawing instructions (_) as they are 'mapped' onto each other. If the numbers don't match or if they are not in the correct order, the base-figure is ill-defined.

For the previous example ~~~''_c'''_'~~d~ it means that from starting position (on horizontal line - by convention):

The figure ends then on horizontal line by convention.

Proposal

Since

it appears to me as a much better idea and way forward, if OpenAero withdraws from updating figureXX.js-files for the purpose of having the latest fancy freestyle figures implemented and, if instead OpenAero would enable the users to define their non-catalogue / freestyle-figures them-selves, by means of:

  1. an appropriate user-interface enhancement - likely a new front end module with buttons and menu etc. to let the user input a drawing instruction in user-friendly way. Ideally, this front end receives a catchy name, as has been done with the "Free (Un)known Designer", i.e. "Base-Figure Magician", "Arestichemist" or "Fancy-Figure-Composer" - here I'm very open for further proposals ;)
  2. an upgrade of the sequence-string interpretation routine that enables to process any drawing instruction embedded to the sequence-string (see below)
  3. perhaps an accordingly updated sequence-checking routine
  4. another dedicated amendment to the OpenAero manual

It is imperative that all required information to reproduce such a user-defined freestyle figure is embedded in or to be derived out of the sequence-string. The idea is to have a sequence string like the following to be understood as "half-roll split-s, humpty-bump, user-defined fancy figure with one half roll on first roll position and 4/4-roll on second roll position, hammerhead:

2a b 2user44{_user defined drawing instruction_} h

where 2user44 is the figure with 'user' as base-figure identifier that calls unlike other base-figure letters directly the drawing instruction in the parenthesis, provided after it. If 'user' causes problems, use another feasible descriptor instead. This definition does not contain the catalogue number, since it is irrelevant, and the K-Factor, since it could be automatically calculated.

Once, such a definition is successfully accomplished, any user and any contest director can save such figures to the queue or anywhere else, and operate them likewise to every other catalogue figure.

Thank you for your attention and best regards, Dirk

OpenAero commented 10 months ago

Hi Dirk,

This is an excellent proposal. Like you, I have frequently received requests for non-Aresti figures.

First, I have made steps to implement such a system before this proposal. It's still in a very basic development phase which I will describe later.

I agree that for such a system to be widely useable, a user-friendly figure designer is essential. This is a big project that will take significant time and in which decisions will have to be made, such as:

Also, the current system does not calculate K factors, but I agree that automatic calculation according the Aresti rules would be best.

Now, for a description of the implementation as is currently available at https://openaero.net/devel.

$catalogueNr(powerK:gliderK)drawing

catalogueNr (non-compulsory) At least 3 numbers, separated by dots. Can not be an existing Aresti nr. (powerK:gliderK) (non-compulsory) When included, relevant K is shown and used in calculations. Can be formatted as (powerK), (:gliderK) or (powerK:gliderK). drawing (compulsory) Drawing code. Must start with + or - for upright or inverted entry. Further coding as in figures23.js, except for rolls. Rolls are included as (rolls), e.g. (1,2f) for a single roll position with full roll and half snap.

I'm not at all sure if this is the best way, or if I will change it radically in the future. Your feedback is very welcome! There is no support for graphical editing (blue circles etc) or editing through the Figure Editor. Only sequence text editing. While editing, the sequence and figure will most likely go all over the place. This is the current "normal" behaviour.

Figures and sequences built this way in the devel version will not load correctly in the stable version of OpenAero. It may be some time before I consider this stable enough for full release.

So in general, the good news is that you can now make any figure in the devel version. Try the following sequence text:

"{6,3}Triangular" $0.1.1.1(:12)+~~~~z~()~v~()~z~~~~ (-25,19) "{5,3}Square" $(14)+~~~v~(1)~v~()~v~(1)~v~~~ (-20,17) "{7,3}Kobra" $+~d~(2)~v~(2)~d~

Dirk07 commented 10 months ago

Hi Ringo,

thank you very much for your thorough response. I'm really happy to see us sharing similar thoughts, once more :) and I'm quite surprised for two reasons:

But before attempting to implement any substantial code changes that likely affect OpenAero's backbone, I think it's worth to do, what engineers should always do first: Let's agree on mandatory conventions, the scope of and the requirements to this change. Part of that will already address some of the questions. Here's my proposal. Add, correct or reject per your descretion:

Convention No 1

We generally destinguish beyond OpenAero:

  1. Aresti-Catalogue-Figures (as already implemented by Families 1 through 9)
  2. Aresti-System-Compliant, Non-Catalogue Figures i.e. the "Kobra" in your previous example or any other figure that:
    • can be drawn, using the existent/merged drawing instructions syntax without further changes to them, as these instructions can be considered compliant with the Aresti-System (this excludes any knife-edges to my understanding; perhaps debatable), and
    • allows automatic K-factor calculation i.a.w. the Aresti-System, and
    • starts and ends in level flight by convention (up-right or inverted) - If particularly this criteria is not met, how would you "connect" one figure with the next (keep in mind that OpenAero already counts positive and negative entries and exits at different airspeeds for a reason, so is there more complication really required?)
  3. Aresti-Non-Compliant Figures, not meeting any of the criteria under 2.

In order to refer more easily to them in subsequent discussions, we might want to use "primary", "secondary" and "tertiary" base-figures as better pronouncable equivalent terms. However, for rolling out this entire idea and its implementation, I think it is best way forward to concern solely the secondary base figures.

It is easy to imagine that the tertiary figures will cause a lot of extra-headache, should their implementation be attempted. Although I would really like to see some knife-edge-elements in OpenAero one day, I believe it is not time for them, yet. Consider just this example:

So, $+~d~(2)~z~~~v~ draws a tooth, using pull-arcs. The drawing of a knife-edge tooth like $+~d~(4)~z~~~v~ must fail, as OpenAero only knows how to draw pull- or push-arcs, using lower and upper case letters, but not rudder-arcs, needed at z. So either, we invent them somehow with another syntax-upgrade, which is quite complex, I guess, or we indicate the rudder-arc by a hammerhead-symbol on the tip, which is perhaps more complicated, but not necessarily more elegant. I feel, we should come back to this particular feature later. Smaller steps are faster and more rewarding than exhaustive giant leaps. And admittingly, implementing the knife-edge feature might not be as difficult as letting figures start and end in other than level attitudes.

Convention No 2

As mentioned in my initial post, here, Non-Catalogue Figures (secondary and tertiary base figures) are by convention not to be assigned to any kind of catalogue number, simply because it does not fulfill any purpose. Outcome of this change should be that any secondary base figure should be created through that new interface and operated, using the queue and the free (un)known designer, but not by the figure selection as all the other catalogue figures.

Any figure can be named and labelled already without a catalogue number, using particular letters or other arbitrary names. The only reason, why OpenAero has implemented the catalogue numbers for the primary base figures, is to allow rule-assignment/application, rule-checking and hard-coded-K-factor-checking - hence three objectives that do not apply to freestyle figures with automatically calculated K-factors. Beyond that I currently do not see any user-demand or contest scenario that asks or prescribes hard-coded K-factors on freestyle figures.

Convention No 3

I do not see any reason why still to hard-code the K-factors for freestyle-figures, which is prone to errors. Calculating it from the drawing instruction should definitely be the ultimate goal. I also cannot see any user demand for custom K-factors at the moment, do you?


Let me know, if you agree or where you disagree with these conventions.

I would be intrigued to see, how I can assist you in the implementation. What is your idea of the user interface so far? Do you imagine something totally new, like you did with the free (un)known-designer or do you perhaps rather think of amending or "recycling" the figure editor?

So far I just imagined that it needs:

At a later step some further controls may ease the creation, i.e. an automatic inverse/reverse-the-figure-checkboxes.

Best regards, Dirk