Status of AI in FlightGear: Difference between revisions
m (→Learning AI) |
|||
Line 250: | Line 250: | ||
|author=<nowiki>Hooray</nowiki> | |author=<nowiki>Hooray</nowiki> | ||
|date=<nowiki>Thu Aug 02</nowiki> | |date=<nowiki>Thu Aug 02</nowiki> | ||
}} | |||
}} | |||
== Neural Networks == | |||
{{FGCquote | |||
|the AI in its current form is fortunately still hard coded and not based on [http://en.wikipedia.org/wiki/Artificial_neural_network neural networks], otherwise they may even predict your actions/evasive maneuvers | |||
|{{cite web |url=http://forum.flightgear.org/viewtopic.php?p=86630&sid=f642c30958be668ab3082d7fec56be32#p86630 | |||
|title=<nowiki>Re: AI & MP Dogfighting now working! Bombable ships, aircraft...</nowiki> | |||
|author=<nowiki>Hooray</nowiki> | |||
|date=<nowiki>Thu Jul 08</nowiki> | |||
}} | |||
}} | |||
{{FGCquote | |||
|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. | |||
|{{cite web |url=http://forum.flightgear.org/viewtopic.php?p=140015&sid=45d53ccb09ba0869e875fe5ce253c3b8#p140015 | |||
|title=<nowiki>Re: AI & MP Dogfighting now working! Bombable ships, aircraf</nowiki> | |||
|author=<nowiki>Hooray</nowiki> | |||
|date=<nowiki>Tue Oct 11</nowiki> | |||
}} | |||
}} | |||
{{FGCquote | |||
|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. <br/> | |||
<br/> | |||
Pretty much like AI bots that help you defend/protect an objective - while helping fight other AI bots.<br/> | |||
<br/> | |||
One possible method would be to set up an option to spawn friendly forces on demand. To come and help you. Either using a hotkey or a GUI dialog.<br/> | |||
They could either be spawned at a configurable fixed position (i.e. KSFO) or within a configurable range of your current position (say 20 miles).<br/> | |||
<br/> | |||
There is also some good information available on creating autonomous dogfight agents: [http://www.kbs.twi.tudelft.nl/docs/MSc/2005/Solinger_David/thesis.pdf CREATING A DOGFIGHT AGENT: The design and implementation of a fully autonomous agent that can fly an airplane during a one-to-one dogfight]. | |||
|{{cite web |url=http://forum.flightgear.org/viewtopic.php?p=86696&sid=313660611da3e2e0cc270be9151e6594#p86696 | |||
|title=<nowiki>Re: AI & MP Dogfighting now working! Bombable ships, aircraft...</nowiki> | |||
|author=<nowiki>Hooray</nowiki> | |||
|date=<nowiki>Fri Jul 09</nowiki> | |||
}} | |||
}} | |||
{{FGCquote | |||
|Basically, the technique is now called "[http://en.wikipedia.org/wiki/Adaptive_control adaptive control systems]", which resulted in "self-reconfiguring bots" that could really learn things like controlling a simulated aircraft.<br/> | |||
<br/> | |||
This "learning" was based on a "punish/reward" system, and these agents were actually able to cooperate to a certain degree, to achieve their goals.<br/> | |||
<br/> | |||
In fact, these "Norns" were even so good at doing their job in the simulated world, that they were immediately used to fly real aircraft, namely UAVs | |||
|{{cite web |url=http://forum.flightgear.org/viewtopic.php?p=86696&sid=313660611da3e2e0cc270be9151e6594#p86696 | |||
|title=<nowiki>Re: AI & MP Dogfighting now working! Bombable ships, aircraft...</nowiki> | |||
|author=<nowiki>Hooray</nowiki> | |||
|date=<nowiki>Fri Jul 09</nowiki> | |||
}} | |||
}} | |||
{{FGCquote | |||
|We talked about this a number of times, and the bombable developer (flug) repeatedly indicated an interest in adding this | |||
|{{cite web |url=http://forum.flightgear.org/viewtopic.php?p=161287&sid=cdbcaaa2eec329e95718082e84d7a04d#p161287 | |||
|title=<nowiki>Re: Possibility of incorporating "learning" AI?</nowiki> | |||
|author=<nowiki>Hooray</nowiki> | |||
|date=<nowiki>Sat Jul 07</nowiki> | |||
}} | |||
}} | |||
{{FGCquote | |||
|I like this idea a lot.<br/> | |||
<br/> | |||
One basic problem is that Bombable is basically sitting on top of the FG AI flight system, which is indeed designed to make aircraft fly "like airliners". <br/> | |||
<br/> | |||
But, especially if there is interest to make like a neural net type intelligent/learning system for AI fighter aircraft I think both the Bombable and Flightgear problems could rather easily be solved. The changes that would be required in FlightGear's C code are not that difficult, I believe. | |||
|{{cite web |url=http://forum.flightgear.org/viewtopic.php?p=140349&sid=45d53ccb09ba0869e875fe5ce253c3b8#p140349 | |||
|title=<nowiki>Re: AI & MP Dogfighting now working! Bombable ships, aircraf</nowiki> | |||
|author=<nowiki>flug</nowiki> | |||
|date=<nowiki>Fri Oct 14</nowiki> | |||
}} | |||
}} | |||
{{FGCquote | |||
|Right now, the Bombable aircraft only do three things:<br/> | |||
<br/> | |||
1. Steer directly towards you if you are within their detection range (and steering towards you means, both in heading and altitude)<br/> | |||
2. Wait until they have passed you by a certain distance to steer back towards you<br/> | |||
3. Dodge if you shoot close to them or hit them<br/> | |||
<br/> | |||
They also try to avoid crashing into the ground a few other basic things like that.<br/> | |||
<br/> | |||
Considering the very, very basic nature of their behavior programming, they actually engage in some pretty complex behavior. | |||
|{{cite web |url=http://forum.flightgear.org/viewtopic.php?p=140351&sid=4aa5400d0368eaa508a44abd83e43073#p140351 | |||
|title=<nowiki>Re: AI & MP Dogfighting now working! Bombable ships, aircraf</nowiki> | |||
|author=<nowiki>flug</nowiki> | |||
|date=<nowiki>Fri Oct 14</nowiki> | |||
}} | |||
}} | |||
{{FGCquote | |||
|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.<br/> | |||
<br/> | |||
I think if we were to implement an idea like Hooray's we could have some very interesting AI aircraft flying indeed, and it probably wouldn't need to be that hard or complicated.<br/> | |||
<br/> | |||
As I've mentioned in a few other messages, Bombable is always limited by FG's native AI flight system, which is very sedate both as far as turning and (even more so) climbing & diving. It's really designed to model airliners flying sedately from there to there & it will take just a few changes to the underlying C code to make more complex & aggressive maneuvers possible.<br/> | |||
|{{cite web |url=http://forum.flightgear.org/viewtopic.php?p=140351&sid=4aa5400d0368eaa508a44abd83e43073#p140351 | |||
|title=<nowiki>Re: AI & MP Dogfighting now working! Bombable ships, aircraf</nowiki> | |||
|author=<nowiki>flug</nowiki> | |||
|date=<nowiki>Fri Oct 14</nowiki> | |||
}} | }} | ||
}} | }} |
Revision as of 09:50, 26 June 2014
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/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: search.php?st=0&sk=t&sd=d&sr=posts&keywords=tanker.nas 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
xiii is the developer of the F14b's fox2 implementation, the original thread was: Subject: Missiles with seeking capabilities.
<iframe width="420" height="315" src="http://www.youtube.com/embed/UL7jQkl1qe4" frameborder="0" allowfullscreen=""></iframe>
|
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/source/ ... tanker.nas
— Hooray (Thu Sep 19). Re: How would I go about controlling an airplane with nasal?.
(powered by Instant-Cquotes) |
hat 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) |
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) |