Advanced Topics

In this section we will discuss advanced topics of navigation.

Path planning

This section describes using navigation with jungigation library. Library is using internally JUNG library for representing navigation graphs. Main target of library is making navigation as simple as possible and powerfull. Note that this library may not compile with the latest Pogamut version and may need some refactoring. Here are advantages:

  • prohibited edges exclusion,

  • advanced planning with items,

  • knowing exact time of path in second.

Main advantage of using jungigation for path planning is that this path planning uses only paths which has been tryied that bot can run along them. This "can run" property is tested by BotTester utility with iexplorer6 bot. It will use some path executor with some config of steering executors so this navigation graph generated from map testing will be valid only for this configuration. Also have on mind that not all vertices of navigation graph could be reachable by this path planning. For understanding what it means have a look at next part. If you plan using AdvancedPathPlanner seriously, you can consider using AbstractBotWithJungigation class as superclass for your bot.

Basic idea

Basic idea is to "convert" UT navigation graph to jungigation navigation graph (graphML file). In jungigation graphs are saved informations like traveling time between vertices and items in path. These informations are obtained by running special bot named iexplorer6 in map. He is responsible for measuring travel times between vertices. This data than can be used for path planning. Bot iexplorer6 uses current set of path executors so once generated navigation data can became old due to changes in steering executors. On other side, you can easily generate new one. Generating navigation graphs for any map can be done by utility called BotTester. Once you have relevant navigation file for map, you can use advanced path planning verry easily.

Simple example of advanced navigation

Here we start with sample navigation bot from NavigationBot tutorial. We will do these steps:

  • includeJungigation and other necessarily libraries to project

  • change UT2004AStarPathPlanner path planner to AdvancedPathPlanner

  • Use advantages of AdvancedPathPlanner

Including Jungigation library is simple. Just right click on project, secelct properties, than choose libraries. There click on add Jar/Folder button and navigate to downloaded Jungigation library file. Than click ok. It's done. Library file could be downloaded from jungigation download page. Other needed libraries are avaible on JUNG homepage.

To change UT2004AStarPathPlanner planner, you need to change type of pathPlanner attribute. You should change it from PathPlanner<;ILocated, ILocated>; to AdvancedPathPlanner. This change is around line 50. This will cause problem on line 77, where you should write consecutive code instead of pathPlanner = new UT2004AStarPathPlanner(bot);.

Collection<;NavPoint>; navpoints;
String mapName = this.gameInfo.getLevel();
navpoints = this.bot.getWorldView().getAll(NavPoint.class).values();
Graph<;MyVertice, MyEdge>; navigationGraph;
navigationGraph = NavigationGraphProviderForMap.getInstance().getNavigationDataForMapWithChceckAndInitialization(mapName, navpoints);
pathPlanner = new AdvancedPathPlanner(navigationGraph, bot, navpoints);
pathPlanner.setActiveProfile(AdvancedPathPlanner.ARMORINTEREST);

NavigationGraphProviderForMap is responsible for managing graphML navigation graphs for user. It assumes that all graphML files for maps are in root directory of project. It will try to acces them in "./" path. To change this assumption, use NavigationGraphProviderForMap constructor for creating navigation graph provider which is reading data from other source and than request navigation graphs from this instance. Some precomputed graphML files (navigation graphs) are avaible on Jungigation download page.

To use advanced path planning just plan path normally. AdvancedPathPlanner has set its planning alghoritm to some value and it is used. To use different planning profile (policy) just call pathPlanner.setActiveProfile("new profile");. From that point the bot will use new path planning alghoritm constants to plan path. There are also simple version of jungigation path planning classes like PathPlannerTimeOptimized or PathPlannerForDataAcquisition. See javadoc for particular class for more info.

Visualizing navigation graph

Simple but sometimes usefull visualization can be done through simple jung visualization program. For generic visualization you can use any program capable of reading graphML graph. For example you can try yEd. In this section will be described simple utility for visualizating jung navigation graphs. Described utility is prototype version of visualizing utility.

First start Jungigation library as java application. It will open simple window. Choose File->;Open, or use shortcut ctrl+o. Select desired graphML file and it will open new window in which will be loaded navigation graph. Graph is rendered in 2D, so multifloor levels will look strange. For example map CTF-LostFaith will look something like on next picture.

You can navigate in graph by mouse. Zooming is done by mouse wheel and panning is done by leftclick. You can also try to compute path between two vertices. Just select "from" vertice and than select "to" vertice while holding down shift key. It will highlight shortest path based on travel time. To look closer on sensus of visualized graph, have a look on next screenshoot.

On zoomed graph you can see that edges are colored in some pattern. Red edge is "prohibited" edge. That is edge with travel time grater than 100. All tryies to travel some edge that finished in stucked state are given travel time 1000 seconds. Final travel time is always counted as median of all travel times. Green edges are edges with normal (lees than 100) median travel time. Purple edges are also edges with normal travel time, but number of traveling thru that edge is lees than 15 times. On next screenshoot we will discuss meaning of edge labels.

Here is some detail of navigation map. Look at rounded edge label. It is "E:0.95#5". This means that median travel time is 0.95 seconds and this is computed from five observations. That means that Iexplorer6 bot travelled through that edge five times. To view particular travel times you need to have a look at original file, or to use some other visualization method.

To show sample path planning with time based planer, just select two vertices. First is start vertice and second will be goal vertice. Path will be highlighted as on next screenshoot.