Hello Durk,

I'd like to start working on ATC and AI with you. Not today and probably not 
this month, but soon. I currently don't have a lot of time so let me make this 
short and quote from IRC (hope you could manage to get on there).

My actual point being the following - I know this sounds a kind of 
supervisorish given that I've yet to contribute something but I think I'm the 
kind of guy who is good at keeping the overview and I consider myself a very 
clean and structured coder and abstract thinker, so give my opinion a chance, 
will you:

What you have achieved so far is very good I think, but it's right what its 
needed and where we need to stop at. I'll explain this statement later. Given 
two building blocks

* Airports

Good job there. My info comes mostly from the wiki. I agree that one airport 
should be one distinct chunk that contains it all. "All" includes

** Ground Networks (already fully implemented)
** Airspace specs, Navaids of the AP (I learned there is no such thing yet)
** Buildings/Geometry

Right here, the important thing is to define the specs and leave implementation 
open so far. Again, my understaning is limited and solely based upon the wiki 
but I find that ground networks is just the way it should be: A precise and 
self-contained description of the ground network which defines details which 
are of use to future extensions.

Airspace specs / navaids holding patterns / approach plates - well I know 
rather nothing about how this is handled so far. I assume the data exists but 
I'm pretty sure it's damn difficult to get this specified. I know microsoft 
managed in their FSX so we will sure as hell manage, too.

A remark: I think MS FS(X) has, despite its shortcomings quite a few properties 
we might closely align ourselves too. This topic being one of them. Check the 
garmin/GPS of FSX and you'll know what I mean. I think screetshots will already 
be impressive.

Back to topic: As with groundnetworks, I find that arirports should contain all 
their airspace data. After all a airport could be considered an overlay over 
global air corridors and such. Right here, its all specification again. How is 
the data stored and provided.

--Example : approach plates are pretty well formalized already so they could be 
copied as-is into xml files, referencing ndbs vors etc where needed and 
defining holding patterns as vector data--
--Example : Airspace specs can go in a distinct file. One airport-"package" can 
define an abritrary amount of airspaces and have difference 
frequencies/controlers handle them--

But let's not go into the details too much.

This was building block one: Airport specification, including ground, airspace 
and the actual look (geometry)

Second building block: AI

* AI

AI now refers to the actual IMPLEMENTATION of AI, however on a rather crude and 
low level. AI driven planes should provide an interface to receive a set of 
instructions. Given ahead: These functions should again be called from an 
encompassing AI engine which interfaces with ATC - see later

**Highlevel - on ground:

GOTO __adjacent__ (and adjacent only) ground network node -> plane travels 
thereFREEZE right there -> plane brakes and wont move

**Highlevel - airborne:

GOTO vor/ndb/etc -> plane changes heading and heads straight for the navpoint
GOTO position -> plane heads straight for that position
HEIGHT height + sinkrate -> plane changes FL or height with given sinkrate

**Lowlevel:

CONTROL control -> plane performs a maneuver (like pitch by 2 deg or increase 
thrust)
ACTION -> plane performs an action (like lower gears)

These are fundamental AI functions, of course just a rough set of examples to 
make my point clear. 


Here we have two building blocks which already fairly well implemented. The 
point is to realize that those two are the foundations of a much bigger 
framework. And since this foundation has to support a big third building block, 
which is actually more like the hosue itsself, its crucial that the two former 
building blocks are matured and thought-out.

I'm proposing to clearly say that these two buildings blocks are then finshed, 
polished and self-contained. they may lay arround useless for a while, all on 
their own, but its important to maintain this very self-containment and not 
reach out further from there.

Instead, in order to achieve a much bigger and visionary goal we will step 
back, walk arround the problem and now tackle it from another side, another 
perspective and we will eventually converge to our final goal from two sides.

With the two rather fundamental (yet powerful - i admider the groundnetwork) 
building blocks on one side of the issue, the third massive building block lies 
on the other side:

* ATC

ATC - the singleton - mama and papa to the two other building blocks is where 
the real work starts. So far, we have specs, no implementation (apart from an 
orphaned rather low-level AI implementation). the ATC is, again, rather a house 
and for the sake of clarity to be split it several chunks.

The point: Change of perspective. From the individual plane-centric vantage 
point to the point of controlling all AI (plus human pilots). From here, the 
actual framework emerges. It's straight forward tho - not easy but still, 
straightforward.

Chunk 1: Ground control: We need alhorithms, given the position, states and 
demands of all positions on the ground, which route the planes. Ground control 
will communicate with a planes AI - which is not the low level AI of building 
block 2 but an ATC-aware encompassing AI, which I already mentioned above but 
would like to count to the ATC-building block.
Ground control ROUTES planes. It accounts for their DEMANDS - not for any 
SCHEDULES. Ground control is not aware of schedules and flightplans (another 
chunk is - which kind of reflects reality). Ground control ROUTES, or rather 
TRIES to route by giving out instractions to the AI (again, no part of ATC 
communicates with low level ai building block 2 directly - only the 
encompassing ATC-aware AI does, which is yet to be defined)

Chunk 2: Air control: Handed over planes, given their positions, states and 
demands AND flight plans. It does what air control does - do not confuse 
logical structure with real-world structure. Air control can be approach 
communications and airspace communicatiosn alike. its just classified by the 
fact that it knows the planes schedules. It accounts for navaids, approaches, 
etc. Again, it TRIES to ROUTE planes, this time in airspace, giving out 
instructions to the ATC-aware AI.

Chunk 3: ATC-aware AI: It emulates, more or less, a real artificial 
Intelligence, rather than the low level ai which is mere mechanics. Chunk 3 of 
building block 3 is were a lot of flexibility is given. Indeed, the 
implementation of the Ground- and Air-control is by my suggestion also pretty 
much open to anything. However, as opposed to Ground and Air control which HAVE 
to meet at least certain requirements to be considered functional, we can vary 
the ATC aware AI from incredibly dumb (no CPU usage ^^) to stunningly smart. 
Air and Ground Control is mere algorithmic: Find the best taxiway from G12 to 
R7, Check for possible collisiosn and communicate planes to stop, Select 
approach based upon and accounting for preference of the pilot, available 
runways and waiting planes and so forth. The Control chunks make no decisions - 
they just make calculations. The ATC ware AI has a flightplan which it tries to 
fulfil. the flightplan - i dont think i have to mention that - is what is 
already implemented by you: Traffic files.

An example to convey the responsibilities of the chunks and building blocks: 
shorthands

AI = ATC aware AI
A = low level AI (block 2)
GC = ground control
AC = air control
TF = traffic file

TF => AI: Fly from X to Y
AI => AC: Give me a flightplan
AC calculates flightplan in global corridors
AC => AI: Suggests flightplan
AI (flexibility applies) says either yes or no, or unconditionally yes to the 
flightplan
AI => TF: Is it time to go?
Once it is: AI decides which runway to take
AI => GC: Requesting to taxi
GC => AI: gogogo! *calculates taxiways* Here is how you taxi
AI => A: push back, goto 1st point on taxiway
AI => A: ok keep going, next node
AI => A: you know the drill...
GC calculates there is a colision ahead
GC => AI: Halt!
AI => A: FREEZE
GC => AU: gogogo!
AI => A: UNFREEZE
AI reaches end of taxi
AI => GC: Wanna go on runway (blindly follow my take of routinge -> flexibility)
GC => AI: aight.
AI => A: take off
GC => AI: you get a new assignment

...


well, ill skip the rest as its not only pretty obvious by now - if you look 
thorugh it it should become apparent that while we have difficult parts ahead, 
if you break it down it becomes pretty straightforward and many parts are 
mereley methodic.

the clue: while an elaborate ATC seems difficult at first, with what you have 
already implemented you just set the exact right corner stones for us to build 
upon - not blindly improving the cornerstones to become conerpillars and 
eventually cornerhouses but rather by leaving the cornerstones modular as they 
are and step onto the next level.

all of you guys appear pretty solid software devs (so i consider myself) so i 
think we all know that many projects with great potential fail because one 
looses the perspective half of the way. looks like you have not only brought 
new persepective into the AI section of FG you havent lost a bit of its so far. 
everything perfectly settled and ready to be aligned with eachother - lets not 
spoil it ^^

Ok now, nothing ingenious in my "AI: hello atc, may i...? ATC: yes, ofc you 
may..." which is cool because if you look at it like that and realize just any 
valid structure behind it its like made for straight forward object oriented 
programming and with these kinda small parts easily extensible. of course there 
are issues. but if you sleep over it for a night i feel the issues will break 
down and you can see that we are facing isolated problems, not so much 
intertangled as the assignment "build an AI which is integrated with a 
player-oriented ATC" may sound.

bringing approach plates and the-like into a database might be one of the 
biggest tasks and one of those we will have to think about a lot how to do it 
properly.
my personal feeling is that once we got the Air-control of ATC figured out to 
direct planes at least HALF-way correctly we are 30% done - at least to me it 
seems like the biggest part. ground control has a pretty solid codebase 
already, i take it so no matter that we would probably toss the current 
plane-centric ground-control AI away, the algorithms and the experience are 
there.

anyway, i dont want to go into details right now, there are better people to 
elaborate on the finesse and techincal dificulties such a project might face.

i just have a last, rather unrelated comment on how to handle all this 
efficiently:

i find that we need NOT to implement a detailed management that keeps track of 
all the planes arround the world. right now planes that leave a reasonable 
range from any human pilot are just calculated based upon how long they fly and 
their turnarrounds are. if I see a boeing leaving JFK for EDDF (is there such a 
route, i dont know) and take of for EDDF an hour later, i wouldnt care if that 
very boeing had arrived 5 hours before me or even arrives an hour later than 
me. i wouldnt care as a pilot and even if im that obsessed with realism i could 
not argue that it might have had an unexpected stop or something (assuming that 
i even knew its flight plan). that said i would reduce calculating anything 
reasoable for the planes in the immediate proximity.


thanks for your time

------------------------------------------------------------------------------
Beautiful is writing same markup. Internet Explorer 9 supports
standards for HTML5, CSS3, SVG 1.1,  ECMAScript5, and DOM L2 & L3.
Spend less time writing and  rewriting code and more time creating great
experiences on the web. Be a part of the beta today
http://p.sf.net/sfu/msIE9-sfdev2dev
_______________________________________________
Flightgear-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/flightgear-devel

Reply via email to