Status of AI in FlightGear
Caution Developer information:
Some, and possibly most, of the details below are likely to be affected, or even deprecated, by the ongoing work on FGTraffic. |
The FlightGear forum has a subforum related to: AI Scripting |
FlightGear AI |
---|
|
Development & Issues |
|
AI Scenarios vs. Scripting
The AI system itself is not all that flexible, but the various scripted approaches (tanker.nas, bombable etc) do use it as the backend for placing traffic, even though all the control logic is then handled in scripting space.
— Hooray (Thu Aug 29). Re: Suitability of this software to run a swarm simulation.
(powered by Instant-Cquotes) |
the code to do this is already readily available in FlightGear. $FG_ROOT/Nasal/tanker.nas is a good demonstration for code that iterates over the AI properties. |
the most flexible approach would be using scripting - FligthGear has a built-in scripting language (called "Nasal"), that can be used to control aircraft, and even to instantiate multiple AI aircraft, one of the most straightforward examples is the "tanker.nas" script, which creates a fully scripted AI tanker - that could be easily extended to create dozens of tankers, and obviously you could also change the 3D model if you wanted to. In fact, we have a separate addon, named "bombable" that adds "AI bots" to the simulator, for dogfighting purposes - none of that required C++ changes, it's all done in scripting space. Another users implemented a fully scripted missile (fox2.nas) that tracks aircraft - and we also have a feature for "wingman" support, too.
— Hooray (Wed Aug 28). Re: Suitability of this software to run a swarm simulation.
(powered by Instant-Cquotes) |
For starters, I'd suggest to read through these: What_is_Nasal — Hooray (Fri Sep 20). Re: How would I go about controlling an airplane with nasal?.
(powered by Instant-Cquotes) |
Scripted AI in FlightGear
Another example is the "tanker.nas" script in $FG_ROOT which implements a simple scripted AI tanker for AAR purposes: [1] http://www.mail-archive.com/search?q=ta ... eforge.net <iframe width="420" height="315" src="http://www.youtube.com/embed/LL7bdHrR8uI" frameborder="0" allowfullscreen=""></iframe>
— Hooray (Mon Feb 04). Re: Possibility to run a fully automatized mission ?.
(powered by Instant-Cquotes) |
The simplest solution is probably using scripted AI traffic nodes. Note however that AI traffic cannot currently make use of any FDMs (JSBSim/YaSim), instead you need to come up with your own "pseudo FDM" in scripting space.
|
It really doesn't take any longer than say 2-3 minutes to open the tanker.nas script, change the model file name to point to the 3D model of a bird, what you end up with is a "funny bird" flying at 330+ kts ground speed at 17000 ft AMSL (I took the first freely available bird model that I could find...):
|
Scripted AI Missiles
Note Also see Scripted AI Missiles |
xiii is the developer of the F14b's fox2 implementation, the original thread was: Missiles with seeking capabilities post on the forum .
<iframe width="420" height="315" src="http://www.youtube.com/embed/UL7jQkl1qe4" frameborder="0" allowfullscreen=""></iframe>
|
WRT generalizing things, you would first of all want to extract the part that interacts with the AI system and encapsulate that, so that the logic can be separately re-used and maintained.
|
AI ATC vs. AI Pilot Interactions
Learning AI
It is certainly possible (like xiii said already), however it will require a solid background in AI and coding. It could definitely be implemented without touching any C++ though (i.e. using scripted Nasal code). I am disagreeing a little with xiii regarding the feasibility of using the bombability package for this, it's actually pretty well-written and well-commented source code. However, it is obviously a huge and complex piece of software. Just understanding how everything works, will take weeks or even months. — Hooray (Sun Jul 08). Re: Possibility of incorporating "learning" AI?.
(powered by Instant-Cquotes) |
we should probably consider this a long-term goal, and then it would make sense to extract the AI control code from bombable into some separate "ai.nas" module, i.e. splitting up bombable into separate files.
— Hooray (Thu Aug 02). Re: Possibility of incorporating "learning" AI?.
(powered by Instant-Cquotes) |
Custom "pilot" implementations could then be provided for different purposes, i.e. by reimplementing an abstract "pilot" base class and overriding functionality as required.
— Hooray (Thu Aug 02). Re: Possibility of incorporating "learning" AI?.
(powered by Instant-Cquotes) |
Neural Networks
the AI in its current form is fortunately still hard coded and not based on neural networks, otherwise they may even predict your actions/evasive maneuvers
— Hooray (Thu Jul 08). Re: AI & MP Dogfighting now working! Bombable ships, aircraft....
(powered by Instant-Cquotes) |
If you know Nasal, you could certainly teach bombable to become a bit smarter, i.e. by adding support for standard combat maneuvers (like you mentioned). In its simplest form you could code a state machine that responds to standard situations with a randomly chosen standard response (and maybe some dynamic variation). It would be a matter of coming up with a state machine implementation in Nasal so that the AI can match up situations against suitable responses. It is definitely possible. I was in fact talking to flug a while ago about adding neural network-based AI to bombable. If there are enough people interested in this aspect of making bombable even smarter, then we could certainly come up with some more challenging AI bots.
— Hooray (Tue Oct 11). Re: AI & MP Dogfighting now working! Bombable ships, aircraf.
(powered by Instant-Cquotes) |
I just looked into bombable's Nasal code, and it seems really not only well commented but also pretty well structured and generalized already, and I think another possibility to balance the whole experience would be to provide an option for setting up AI bots (or wingmen) to help you fight the bad boys.
— Hooray (Fri Jul 09). Re: AI & MP Dogfighting now working! Bombable ships, aircraft....
(powered by Instant-Cquotes) |
Basically, the technique is now called "adaptive control systems", which resulted in "self-reconfiguring bots" that could really learn things like controlling a simulated aircraft.
— Hooray (Fri Jul 09). Re: AI & MP Dogfighting now working! Bombable ships, aircraft....
(powered by Instant-Cquotes) |
We talked about this a number of times, and the bombable developer (flug) repeatedly indicated an interest in adding this
— Hooray (Sat Jul 07). Re: Possibility of incorporating "learning" AI?.
(powered by Instant-Cquotes) |
I like this idea a lot.
— flug (Fri Oct 14). Re: AI & MP Dogfighting now working! Bombable ships, aircraf.
(powered by Instant-Cquotes) |
Right now, the Bombable aircraft only do three things:
1. Steer directly towards you if you are within their detection range (and steering towards you means, both in heading and altitude)
— flug (Fri Oct 14). Re: AI & MP Dogfighting now working! Bombable ships, aircraf.
(powered by Instant-Cquotes) |
However it is only (and is only intended to be) a proof of concept--that we can control the AI aircraft within FG, using fairly simple nasal scripting and pretty simple behavior patterns, and make some pretty interesting behavior out of it.
— flug (Fri Oct 14). Re: AI & MP Dogfighting now working! Bombable ships, aircraf.
(powered by Instant-Cquotes) |
Controlling the main Airplane
I'd suggest to get started by looking at the tanker.nas script instead - fox2.nas, the f14b demo and the bombable script are much more sophisticated, while tanker.nas is really pretty simple and straightforward: https://gitorious.org/fg/fgdata?p=fg:fgdata.git;a=blob;f=Nasal/tanker.nas;hb=01781f83715d90b6bf2df5c6210f766d0090083d
— Hooray (Thu Sep 19). Re: How would I go about controlling an airplane with nasal?.
(powered by Instant-Cquotes) |
That would be great - but you'll probably want to look at tanker.nas for now, and look up the various APIs used there (see the wiki). The other examples are a little more involved. — Hooray (Thu Sep 19). Re: How would I go about controlling an airplane with nasal?.
(powered by Instant-Cquotes) |
If this is all about "bots" controlling aircraft, then you can do this already. Take for example a look at another discussion a couple of days ago: [5] (should probably also be moved to the new AI sub forum), where I roughly sketched out how to use Nasal to control an aircraft. So this could then be used to create such "bots" (scripted pilots) for aircraft by using Nasal. |
you can simply look at the autopilot dialog of your aircraft (e.g. c172p, b1900d or 777) - sometimes, looking at the cockpit panel may also make sense (MCP) - otherwise, you can then simply use the autopilot system to control the aircraft, which also includes support for flying complete routes via the built-in route manager, for details, see:
— Hooray (Fri Sep 20). Re: How would I go about controlling an airplane with nasal?.
(powered by Instant-Cquotes) |
you will mainly use the autopilot to control the aircraft (since it has a real FDM it's kinda hard to control), and we would definitely recommend one with a developed autopilot (the 777s are really excellent with everything and has a good autopilot with all features you want). I don't fly in aircraft a lot, and like only three times with an autopilot, so I can't recommend any other aircraft with good autopilots. But one option with the 777 is that you could potentially use Nasal to dynamically edit routes that the aircraft just flies – not much work there. Another approach would be manually adjusting the autopilot parameters (like heading hold, bank angle, and stuff like that) through Nasal feedback algorithms for aircraft that don't have a.route manager. You could also couple this with the XML autopilot (now called "property rule") system to have real PIDs, easy lowpass, etc. — Philosopher (Fri Sep 20). Re: How would I go about controlling an airplane with nasal?.
(powered by Instant-Cquotes) |
there are two aspects to Nasal: that of interaction with itself and with the property tree. For your purposes, the property tree is going to be your communication with the wider FlightGear code. Nasal also can use its own mechanisms to interact with different things (file system, route manager, fgcommands, ...). In interest of the web browser analogy, XML in FlightGear is like HTML. Specifically it is responsible for setting up much of the property tree that FlightGear's subsystems act off of. David Megginson (creator of FG's property tree) once said that "XML should provide the nouns, Nasal should be the verbs" (or something, that isn't a direct quote) – so PropertyList XML is really good at providing data that Nasal can work off of. For like the fox2.nas script, this means that ideally all of the specific data about the missile would be taken from Nasal and stored in an XML file (which would be loaded by the Nasal file and the data would be copied over).
— Philosopher (Fri Sep 20). Re: How would I go about controlling an airplane with nasal?.
(powered by Instant-Cquotes) |
Curt posted on his blog this article about circle holding which will be of interest: http://gallinazo.flightgear.org/uas/spi ... r-control/. If he isn't too busy, you could ask him about some more of the details or ask where to learn about the algorithms he used. I don't have time to reread it, but I think he used like the rascal or other small aircraft and a Nasal algorithm consisting of (I'm just guessing here) bank hold (to set up an approximate radius and to turn in a circle) and bank angle correction (to get the right radius, to stay on track and correct errors, etc.). He also mentions a lot of control mixing in the article required to maintain the fine balance of throttle/speed, bank angle/turn radius, and pitching/altitude, so it was probably more sophisticated than that.
— Philosopher (Fri Sep 20). Re: How would I go about controlling an airplane with nasal?.
(powered by Instant-Cquotes) |
he algorithmic side of things should be fairly straightforward in this case, because it's all hidden in the depths of the AP/RM systems, so from a high-level standpoint, it's really nothing else than using setprop() to switch between AP/RM modes and then setting the corresponding parameters (altitude, speeds, heading, course etc).
— Hooray (Fri Sep 20). Re: How would I go about controlling an airplane with nasal?.
(powered by Instant-Cquotes) |
Fully Automatized Missions
Yes, it is possible "to make" such a mission - but you will literally have to MAKE it by writing a script to outline all required steps for your aircraft. Curt did that a while back for the f14b, which did a fully automated carrier approach using just Nasal scripting: <iframe width="420" height="315" src="http://www.youtube.com/embed/cvbtSG9cy20" frameborder="0" allowfullscreen=""></iframe>
— Hooray (Mon Feb 04). Re: Possibility to run a fully automatized mission ?.
(powered by Instant-Cquotes) |
C++ Issues
Regarding "flight plans", I was just reading this on the atlas mailing list. It seems there is some confusion regarding the different types and roles of "flight plans" supported by FG. |
I guess, it might be a good idea to eventually start collecting a list of things that would need to be changed, i.e. like what Thorsten did for prioritizing core-changes to improve his local weather system using the wiki.
— Hooray (Sat Oct 15). Re: AI & MP Dogfighting now working! Bombable ships, aircraf.
(powered by Instant-Cquotes) |
I was looking into the code, and I think this is a "problem" that can be easily solved by disabling some of durk's AI traffic code, basically it is simply "too smart" and making too many assumptions about the type of aircraft/flights it is controlling, at the moment.
— Hooray (Sat Oct 15). Re: AI & MP Dogfighting now working! Bombable ships, aircraf.
(powered by Instant-Cquotes) |
this is helpful. I've never managed to get the target-hdg or target pitch methods to work.
— flug (Sat Oct 22). Re: AI & MP Dogfighting now working! Bombable ships, aircraf.
(powered by Instant-Cquotes) |
The AI System btw. has it's drawbacks regarding non-aircraft Entities. Also it is hard to pass specific Properties to an AI Model. It will always try to bank and pitch, which needs to be corrected per Model. This all can be solved by using animations and Nasal, but creates a lot overhead.
— DFaber (Wed Apr 23). Re: Tutorials/Missions/Adventures: requests for features.
(powered by Instant-Cquotes) |
lug mentioned a while ago that he ran into the same issue with regard to his bombable/combat addon
|
- ↑ durk (Nov 12th, 2016). FGTraffic 2020: Road map for a new AI traffic system design .