Mapbase: Difference between revisions
Line 101: | Line 101: | ||
The first rule "driveNode" (used as a function) fetches the node pose from mapbase, the second mission rule (cherryFull) provides the node sequence. | The first rule "driveNode" (used as a function) fetches the node pose from mapbase, the second mission rule (cherryFull) provides the node sequence. | ||
The rule interpreter is the plugin (aurule.so.0), where "driveNode" is parh of the "drivebase.rule" set of rules (in AURS/build/config/conf_hako2/drivebase.rule). | |||
<rule name="driveNode"> | <rule name="driveNode"> |
Revision as of 10:23, 5 September 2011
The mapbase plugin were created for the masters thesis Mission Management for Mobile Robots by Anders Beck. http://www.elektro.dtu.dk/English/research/publications_elektro.aspx?lg=showcommon&id=246287
Part of the thesis is reproduced here:
Mapbase on-line functions
The on-line commands for mapbase is (with some maps from the Tåstrup environemnt loaded):
>> mapbase help >> <help subject="Mapbase"> --- available Mapbase options help This message mapload=[file] Loads data in file into database graphload=[file] Loads graph data into database export Exports the entire map in XML format mapLines Export map lines list Display current contents of database status: has 77 nodes, 486 edges, 25 lines, 0 points current node = 'taastrup' at (708000.00x, 6174000.00y, 0.0000h) </help>
In addition some inter-plugin variables and function calls are available.
>> var mapbase >> <help subject="var list" name="mapbase"> Description: Database for maprelated information. connMapPose=0 0 0 Return value of Connetor mappose edge(ds) Get feature value from [s] extracted from the edge id [d] edge(ss) Get feature value from [s] extracted from the edge name [s]. Syntax: (edgename,featurename) node(ds) Get feature value from [s] extracted from the node id [d] node(ss) Get feature value from [s] extracted from the node name [s]. Syntax: (nodename,featurename) connector(ds) Get feature value from [s] extracted from the connector id [d] connector(ss) Get feature value from [s] extracted from the connector name [s]. Syntax: (connname,featurename) (This is not working properly, if unknown connectorname is entered) getConnMapPose(s) Get the mappose of a connector (returns in var connMapPose) addMapLine(sdddddd) Add a mapline to current reference node. Parameters are addMapLine("name", startX, startY, endX, endY, radius, isObstacle). If isObstacle==0, then line is for localizer only. Coordinates are in map coordinates (see graph for position of node). (H: has time series, L: is logged, R: replay) </help>
Load a map
The mapbase was loaded and configured with this part of the aurobotserver .ini file:
... module load="mapbase.so.0" mapbase mapload="./apple_cherry_map.xml" mapbase graphload="./apple_cherry_graph.xml" ...
Use of mapbase
The map
An example of using the mapbase plugin, is getting a pointer to the plugin-class, and using its functions directly. This method in another plugin (aumapobst.so.0) fetches some maplines and forwards them to the locater (aulocater.so.0):
int UResMapObst::sendMapLinesToLocalizer(int client, bool justObstacles) { UResMapbase * mapbase; bool isOK; mapline ml; int i, n = 0; const int MRL = 500; char reply[MRL]; // Acquire mapbase resource: mapbase = (UResMapbase *) getStaticResource("mapbase", false, false); if (mapbase != NULL) { // resources are available for(i = 0; i < (int) mapbase->maplines.size(); i++) { ml = mapbase->maplines[i]; isOK = ml.isObstacle or not justObstacles; if (isOK and true) { // this line is to be included snprintf(reply, MRL, "addline startx=\"%.6f\" starty=\"%.6f\" endx=\"%.6f\" endy=\"%.6f\" name=\"%s\"\n", ml.x_s, ml.y_s, ml.x_e, ml.y_e, ml.number); getCorePointer()->postCommand(client, reply); n++; // debug printf("----- %s", reply); // debug end } } varMapLineCnt->setInt(n); } return n; }
The graph
An example of using the graph nodes (in the apple_cherry_graph.xml loaded above) is the mission rule used on the cherry orchard mission.
The first rule "driveNode" (used as a function) fetches the node pose from mapbase, the second mission rule (cherryFull) provides the node sequence.
The rule interpreter is the plugin (aurule.so.0), where "driveNode" is parh of the "drivebase.rule" set of rules (in AURS/build/config/conf_hako2/drivebase.rule).
<rule name="driveNode"> <parameters node="' '" hdg="0"/> <init> nextNode[2] = 0.0; </init> nextNode[0] = mapbase.node(node, 'x') nextNode[1] = mapbase.node(node, 'y') nextNode[2] = mapbase.node(node, 'th') + hdg driveMap(nextNode[0], nextNode[1], nextNode[2]) </rule>
<rule name="cherryFull" run="false"> <init> global.drive.compasHeading=false # means math heading (east is 0) global.drive.radians=false # means degrees global.drive.continueDist = 1.6 # meter, relaxed driving # global.drive.continueDist = 0 # meter, tight driving </init> missionStart("cherryFull") smr.do('setvar "hakoliftinggearstateref" 130') wait(3) : false global.drive.engineRPM = 1900; smr.do('setvar "hakoenginespeed" 1900') # RPM smr.speed = 0.5 # desired drive speed m/s (0.7m/s~2.5km/h) smrctl.directOrWait = false # global.drive.holdLine=true driveNode("taastrup.cherrytrans_9-10S", 0) driveNode("taastrup.cherrypath_10-11S", 180) smrctl.directOrWait = true driveNode("taastrup.cherrypath_10-11N", 180) smrctl.directOrWait = false driveNode("taastrup.cherrytrans_9-10N", -180) driveNode("taastrup.cherrypath_8-9N", 0) smrctl.directOrWait = true driveNode("taastrup.cherrypath_8-9S", 0) smrctl.directOrWait = false driveNode("taastrup.cherrytrans_7-8S", -180) driveNode("taastrup.cherrypath_6-7S", 180) smrctl.directOrWait = true driveNode("taastrup.cherrypath_6-7N", 180) smrctl.directOrWait = false driveNode("taastrup.cherrytrans_8-9N", 0) driveNode("taastrup.cherrypath_9-10N", 0) smrctl.directOrWait = true driveNode("taastrup.cherrypath_9-10S", 0) smrctl.directOrWait = false driveNode("taastrup.cherrytrans_6-7S", -180) driveNode("taastrup.cherrypath_5-6S", 180) smrctl.directOrWait = true driveNode("taastrup.cherrypath_5-6N", 180) smrctl.directOrWait = false driveNode("taastrup.cherrytrans_4-5N", -180) driveNode("taastrup.cherrypath_3-4N", 0) smrctl.directOrWait = true driveNode("taastrup.cherrypath_3-4S", 0) smrctl.directOrWait = false driveNode("taastrup.cherrytrans_2-3S", -180) driveNode("taastrup.cherrypath_1-2S", 180) smrctl.directOrWait = true driveNode("taastrup.cherrypath_1-2N", 180) smrctl.directOrWait = false driveNode("taastrup.cherrytrans_3-4N", 0) driveNode("taastrup.cherrypath_4-5N", 0) smrctl.directOrWait = true driveNode("taastrup.cherrypath_4-5S", 0) smrctl.directOrWait = false driveNode("taastrup.cherrytrans_3-4S", -180) driveNode("taastrup.cherrypath_2-3S", 180) smrctl.directOrWait = true driveNode("taastrup.cherrypath_2-3N", 180) smrctl.directOrWait = false driveNode("taastrup.cherrytrans_1-2N", 180) driveNode("taastrup.cherrypath_0-1N", 0) smrctl.directOrWait = true driveNode("taastrup.cherrypath_0-1S", 0) smrctl.directOrWait = false driveNode("taastrup.cherrytrans_3-4S", 0) # missionEnd() # wait a bit before saving the MRC log wait(2) : false <post> smr.saveMrcLog() print('finished cherryFull') </post> </rule>
Map definition
An example map is listed below (the cherry orchard in KU-Life Tåstrup (apple_cherry_map.xml)):
<?xml version="1.0" ?> <map nodename="taastrup"> <line number="1" perimeter="1.500"> <start x="-171.049" y="522.576"/> <end x="-146.381" y="316.801"/> </line> <line number="2" perimeter="1.500"> <start x="-166.177" y="523.663"/> <end x="-141.456" y="317.924"/> </line> <line number="3" perimeter="1.500"> <start x="-161.306" y="524.751"/> <end x="-136.531" y="319.047"/> </line> <line number="4" perimeter="1.500"> <start x="-156.434" y="525.838"/> <end x="-131.605" y="320.170"/> </line> <line number="5" perimeter="1.500"> <start x="-151.562" y="526.926"/> <end x="-126.680" y="321.293"/> </line> <line number="6" perimeter="1.500"> <start x="-146.691" y="528.013"/> <end x="-121.755" y="322.416"/> </line> <line number="7" perimeter="1.500"> <start x="-141.819" y="529.101"/> <end x="-116.830" y="323.539"/> </line> <line number="8" perimeter="1.500"> <start x="-136.947" y="530.188"/> <end x="-111.904" y="324.662"/> </line> <line number="9" perimeter="1.500"> <start x="-132.076" y="531.276"/> <end x="-106.979" y="325.785"/> </line> <line number="10" perimeter="1.500"> <start x="-127.204" y="532.363"/> <end x="-102.054" y="326.908"/> </line> <line number="111" perimeter="1.5"> <start x="144.820" y="391.249"/> <end x="156.735" y="259.275"/> </line> <line number="112" perimeter="1.5"> <start x="148.456" y="391.686"/> <end x="160.292" y="259.670"/> </line> <line number="113" perimeter="1.5"> <start x="151.880" y="391.902"/> <end x="163.654" y="261.489"/> </line> <line number="114" perimeter="1.5"> <start x="155.336" y="392.159"/> <end x="167.240" y="260.155"/> </line> <line number="115" perimeter="1.5"> <start x="158.810" y="392.547"/> <end x="170.822" y="260.477"/> </line> <line number="116" perimeter="1.5"> <start x="162.378" y="392.761"/> <end x="174.220" y="260.830"/> </line> <line number="117" perimeter="1.5"> <start x="166.020" y="390.116"/> <end x="177.717" y="261.148"/> </line> <line number="118" perimeter="1.5"> <start x="169.469" y="391.844"/> <end x="181.187" y="261.472"/> </line> <line number="119" perimeter="1.5"> <start x="172.801" y="393.632"/> <end x="184.686" y="261.742"/> </line> <line number="120" perimeter="1.5"> <start x="176.323" y="394.024"/> <end x="188.196" y="262.135"/> </line> <line number="121" perimeter="1.5"> <start x="185.746" y="343.686"/> <end x="193.214" y="262.447"/> </line> <line number="122" perimeter="1.5"> <start x="154.107" y="252.755"/> <end x="197.343" y="256.614"/> </line> </map>
Mission graph definition
The mapbase can also hold a mission graph nodes and edges. An example is the apple_cherry_graph.xml:
<?xml version="1.0" ?> <graph name="ku_life"> <nodetype name="waypoint"> <dimension shape="circle" radius="0.05" /> <connector name="a" x="0.500" y="-0.500" th="0.00" autoconnect="1" /> <connector name="b" x="0.500" y="-0.500" th="180.00" autoconnect="1" /> </nodetype> <node name="taastrup" x="708000.0" y="6174000.0" th="0.0"> <node name="applepath_1-2N" type="waypoint" x="146.544" y="392.010" th="-84.929"/> <node name="applepath_1-2S" type="waypoint" x="158.417" y="257.037" th="-84.929"/> <node name="applepath_2-3N" type="waypoint" x="150.075" y="392.321" th="-84.929"/> <node name="applepath_2-3S" type="waypoint" x="161.947" y="257.358" th="-84.929"/> <node name="applepath_3-4N" type="waypoint" x="153.509" y="392.623" th="-84.929"/> <node name="applepath_3-4S" type="waypoint" x="165.415" y="257.673" th="-84.929"/> <node name="applepath_4-5N" type="waypoint" x="156.975" y="392.929" th="-84.929"/> <node name="applepath_4-5S" type="waypoint" x="168.924" y="257.992" th="-84.929"/> <node name="applepath_5-6N" type="waypoint" x="160.495" y="393.239" th="-84.929"/> <node name="applepath_5-6S" type="waypoint" x="172.416" y="258.309" th="-84.929"/> <node name="applepath_6-7N" type="waypoint" x="163.962" y="393.544" th="-84.929"/> <node name="applepath_6-7S" type="waypoint" x="175.865" y="258.623" th="-84.929"/> <node name="applepath_7-8N" type="waypoint" x="167.439" y="393.850" th="-84.929"/> <node name="applepath_7-8S" type="waypoint" x="179.349" y="258.940" th="-84.929"/> <node name="applepath_8-9N" type="waypoint" x="170.961" y="394.160" th="-84.929"/> <node name="applepath_8-9S" type="waypoint" x="182.832" y="259.256" th="-84.929"/> <node name="applepath_9-10N" type="waypoint" x="174.588" y="394.468" th="-84.929"/> <node name="applepath_9-10S" type="waypoint" x="186.168" y="259.575" th="-84.929"/>
<node name="appletrans_1-2N" type="waypoint" x="146.874" y="395.502" th="5.271"/> <node name="appletrans_1-2S" type="waypoint" x="159.375" y="254.552" th="5.271"/> <node name="appletrans_2-3N" type="waypoint" x="150.405" y="395.821" th="5.271"/> <node name="appletrans_2-3S" type="waypoint" x="162.906" y="254.871" th="5.271"/> <node name="appletrans_3-4N" type="waypoint" x="153.837" y="396.130" th="5.271"/> <node name="appletrans_3-4S" type="waypoint" x="166.375" y="255.184" th="5.271"/> <node name="appletrans_4-5N" type="waypoint" x="157.302" y="396.443" th="5.271"/> <node name="appletrans_4-5S" type="waypoint" x="169.886" y="255.501" th="5.271"/> <node name="appletrans_5-6N" type="waypoint" x="160.822" y="396.761" th="5.271"/> <node name="appletrans_5-6S" type="waypoint" x="173.376" y="255.816" th="5.271"/> <node name="appletrans_6-7N" type="waypoint" x="164.289" y="397.074" th="5.271"/> <node name="appletrans_6-7S" type="waypoint" x="176.826" y="256.127" th="5.271"/> <node name="appletrans_7-8N" type="waypoint" x="167.765" y="397.388" th="5.271"/> <node name="appletrans_7-8S" type="waypoint" x="180.310" y="256.442" th="5.271"/> <node name="appletrans_8-9N" type="waypoint" x="171.287" y="397.706" th="5.271"/> <node name="appletrans_8-9S" type="waypoint" x="183.792" y="256.756" th="5.271"/> <node name="appletrans_9-10N" type="waypoint" x="174.783" y="398.022" th="5.271"/> <node name="appletrans_9-10S" type="waypoint" x="187.298" y="256.073" th="5.271"/> <edge start="applepath_1-2N.a" end="applepath_1-2S.b" length="132.506"/> <edge start="applepath_1-2N.b" end="appletrans_2-3N.b" length="4.647"/> <edge start="applepath_1-2S.b" end="applepath_1-2N.a" length="132.506"/> <edge start="applepath_1-2S.a" end="appletrans_2-3S.b" length="5.345"/> <edge start="applepath_2-3N.a" end="applepath_2-3S.b" length="132.496"/> <edge start="applepath_2-3N.b" end="appletrans_1-2N.a" length="4.651"/> <edge start="applepath_2-3N.b" end="appletrans_3-4N.b" length="4.577"/> <edge start="applepath_2-3S.b" end="applepath_2-3N.a" length="132.496"/> <edge start="applepath_2-3S.a" end="appletrans_1-2S.a" length="5.348"/> <edge start="applepath_2-3S.a" end="appletrans_3-4S.b" length="5.305"/> <edge start="applepath_3-4N.a" end="applepath_3-4S.b" length="132.486"/> <edge start="applepath_3-4N.b" end="appletrans_2-3N.a" length="4.582"/> <edge start="applepath_3-4N.b" end="appletrans_4-5N.b" length="4.606"/> <edge start="applepath_3-4S.b" end="applepath_3-4N.a" length="132.486"/> <edge start="applepath_3-4S.a" end="appletrans_2-3S.a" length="5.308"/> <edge start="applepath_3-4S.a" end="appletrans_4-5S.b" length="5.336"/> <edge start="applepath_4-5N.a" end="applepath_4-5S.b" length="132.477"/> <edge start="applepath_4-5N.b" end="appletrans_3-4N.a" length="4.612"/> <edge start="applepath_4-5N.b" end="appletrans_5-6N.b" length="4.653"/> <edge start="applepath_4-5S.b" end="applepath_4-5N.a" length="132.477"/> <edge start="applepath_4-5S.a" end="appletrans_3-4S.a" length="5.337"/> <edge start="applepath_4-5S.a" end="appletrans_5-6S.b" length="5.325"/> <edge start="applepath_5-6N.a" end="applepath_5-6S.b" length="132.467"/> <edge start="applepath_5-6N.b" end="appletrans_4-5N.a" length="4.659"/> <edge start="applepath_5-6N.b" end="appletrans_6-7N.b" length="4.618"/> <edge start="applepath_5-6S.b" end="applepath_5-6N.a" length="132.467"/> <edge start="applepath_5-6S.a" end="appletrans_4-5S.a" length="5.325"/> <edge start="applepath_5-6S.a" end="appletrans_6-7S.b" length="5.298"/> <edge start="applepath_6-7N.a" end="applepath_6-7S.b" length="132.457"/> <edge start="applepath_6-7N.b" end="appletrans_5-6N.a" length="4.623"/> <edge start="applepath_6-7N.b" end="appletrans_7-8N.b" length="4.630"/> <edge start="applepath_6-7S.b" end="applepath_6-7N.a" length="132.457"/> <edge start="applepath_6-7S.a" end="appletrans_5-6S.a" length="5.300"/> <edge start="applepath_6-7S.a" end="appletrans_7-8S.b" length="5.323"/> <edge start="applepath_7-8N.a" end="applepath_7-8S.b" length="132.447"/> <edge start="applepath_7-8N.b" end="appletrans_6-7N.a" length="4.635"/> <edge start="applepath_7-8N.b" end="appletrans_8-9N.b" length="4.670"/> <edge start="applepath_7-8S.b" end="applepath_7-8N.a" length="132.447"/> <edge start="applepath_7-8S.a" end="appletrans_6-7S.a" length="5.325"/> <edge start="applepath_7-8S.a" end="appletrans_8-9S.b" length="5.323"/> <edge start="applepath_8-9N.a" end="applepath_8-9S.b" length="132.437"/> <edge start="applepath_8-9N.b" end="appletrans_7-8N.a" length="4.675"/> <edge start="applepath_8-9N.b" end="appletrans_9-10N.b" length="4.656"/> <edge start="applepath_8-9S.b" end="applepath_8-9N.a" length="132.437"/> <edge start="applepath_8-9S.a" end="appletrans_7-8S.a" length="5.325"/> <edge start="applepath_8-9S.a" end="appletrans_9-10S.b" length="5.340"/> <edge start="applepath_9-10N.a" end="applepath_9-10S.b" length="132.427"/> <edge start="applepath_9-10N.b" end="appletrans_8-9N.a" length="4.660"/> <edge start="applepath_9-10S.b" end="applepath_9-10N.a" length="132.427"/> <edge start="applepath_9-10S.a" end="appletrans_8-9S.a" length="5.343"/> <edge start="appletrans_1-2N.a" end="appletrans_2-3N.b" length="3.545"/> <edge start="appletrans_1-2S.a" end="appletrans_2-3S.b" length="3.545"/> <edge start="appletrans_2-3N.b" end="appletrans_1-2N.a" length="3.545"/> <edge start="appletrans_2-3N.a" end="appletrans_3-4N.b" length="3.446"/> <edge start="appletrans_2-3S.b" end="appletrans_1-2S.a" length="3.545"/> <edge start="appletrans_2-3S.a" end="appletrans_3-4S.b" length="3.483"/> <edge start="appletrans_3-4N.b" end="appletrans_2-3N.a" length="3.446"/> <edge start="appletrans_3-4N.a" end="appletrans_4-5N.b" length="3.479"/> <edge start="appletrans_3-4S.b" end="appletrans_2-3S.a" length="3.483"/> <edge start="appletrans_3-4S.a" end="appletrans_4-5S.b" length="3.525"/> <edge start="appletrans_4-5N.b" end="appletrans_3-4N.a" length="3.479"/> <edge start="appletrans_4-5N.a" end="appletrans_5-6N.b" length="3.535"/> <edge start="appletrans_4-5S.b" end="appletrans_3-4S.a" length="3.525"/> <edge start="appletrans_4-5S.a" end="appletrans_5-6S.b" length="3.505"/> <edge start="appletrans_5-6N.b" end="appletrans_4-5N.a" length="3.535"/> <edge start="appletrans_5-6N.a" end="appletrans_6-7N.b" length="3.481"/> <edge start="appletrans_5-6S.b" end="appletrans_4-5S.a" length="3.505"/> <edge start="appletrans_5-6S.a" end="appletrans_6-7S.b" length="3.463"/> <edge start="appletrans_6-7N.b" end="appletrans_5-6N.a" length="3.481"/> <edge start="appletrans_6-7N.a" end="appletrans_7-8N.b" length="3.490"/> <edge start="appletrans_6-7S.b" end="appletrans_5-6S.a" length="3.463"/> <edge start="appletrans_6-7S.a" end="appletrans_7-8S.b" length="3.499"/> <edge start="appletrans_7-8N.b" end="appletrans_6-7N.a" length="3.490"/> <edge start="appletrans_7-8N.a" end="appletrans_8-9N.b" length="3.537"/> <edge start="appletrans_7-8S.b" end="appletrans_6-7S.a" length="3.499"/> <edge start="appletrans_7-8S.a" end="appletrans_8-9S.b" length="3.496"/> <edge start="appletrans_8-9N.b" end="appletrans_7-8N.a" length="3.537"/> <edge start="appletrans_8-9N.a" end="appletrans_9-10N.b" length="3.510"/> <edge start="appletrans_8-9S.b" end="appletrans_7-8S.a" length="3.496"/> <edge start="appletrans_8-9S.a" end="appletrans_9-10S.b" length="3.520"/> <edge start="appletrans_9-10N.b" end="appletrans_8-9N.a" length="3.510"/> <edge start="appletrans_9-10S.b" end="appletrans_8-9S.a" length="3.520"/> <node name="cherrypath_0-1N" type="waypoint" x="-173.000" y="521.530" th="-83.140"/> <node name="cherrypath_0-1S" type="waypoint" x="-148.350" y="315.742" th="-83.140"/> <node name="cherrypath_1-2N" type="waypoint" x="-168.113" y="522.620" th="-83.140"/> <node name="cherrypath_1-2S" type="waypoint" x="-143.418" y="316.862" th="-83.140"/> <node name="cherrypath_2-3N" type="waypoint" x="-163.242" y="523.707" th="-83.140"/> <node name="cherrypath_2-3S" type="waypoint" x="-138.493" y="317.985" th="-83.140"/> <node name="cherrypath_3-4N" type="waypoint" x="-158.370" y="524.795" th="-83.140"/> <node name="cherrypath_3-4S" type="waypoint" x="-133.568" y="319.108" th="-83.140"/> <node name="cherrypath_4-5N" type="waypoint" x="-153.498" y="525.882" th="-83.140"/> <node name="cherrypath_4-5S" type="waypoint" x="-128.643" y="320.231" th="-83.140"/> <node name="cherrypath_5-6N" type="waypoint" x="-148.627" y="526.970" th="-83.140"/> <node name="cherrypath_5-6S" type="waypoint" x="-123.718" y="321.354" th="-83.140"/> <node name="cherrypath_6-7N" type="waypoint" x="-143.755" y="528.057" th="-83.140"/> <node name="cherrypath_6-7S" type="waypoint" x="-118.792" y="322.477" th="-83.140"/> <node name="cherrypath_7-8N" type="waypoint" x="-138.883" y="529.144" th="-83.140"/> <node name="cherrypath_7-8S" type="waypoint" x="-113.867" y="323.600" th="-83.140"/> <node name="cherrypath_8-9N" type="waypoint" x="-134.011" y="530.232" th="-83.140"/> <node name="cherrypath_8-9S" type="waypoint" x="-108.942" y="324.723" th="-83.140"/> <node name="cherrypath_9-10N" type="waypoint" x="-129.140" y="531.319" th="-83.140"/> <node name="cherrypath_9-10S" type="waypoint" x="-104.017" y="325.846" th="-83.140"/> <node name="cherrypath_10-11N" type="waypoint" x="-123.770" y="532.400" th="-83.140"/> <node name="cherrypath_10-11S" type="waypoint" x="-98.600" y="326.960" th="-83.140"/> <node name="cherrytrans_1-2N" type="waypoint" x="-168.592" y="527.1" th="12.58"/> <node name="cherrytrans_1-2S" type="waypoint" x="-142.939" y="311.869" th="12.58"/> <node name="cherrytrans_2-3N" type="waypoint" x="-163.722" y="528.2" th="12.58"/> <node name="cherrytrans_2-3S" type="waypoint" x="-138.013" y="312.992" th="12.58"/> <node name="cherrytrans_3-4N" type="waypoint" x="-158.851" y="529.3" th="12.58"/> <node name="cherrytrans_3-4S" type="waypoint" x="-133.086" y="314.116" th="12.58"/> <node name="cherrytrans_4-5N" type="waypoint" x="-153.981" y="530.4" th="12.58"/> <node name="cherrytrans_4-5S" type="waypoint" x="-128.160" y="315.239" th="12.58"/> <node name="cherrytrans_5-6N" type="waypoint" x="-149.110" y="531.5" th="12.58"/> <node name="cherrytrans_5-6S" type="waypoint" x="-123.234" y="316.362" th="12.58"/> <node name="cherrytrans_6-7N" type="waypoint" x="-144.239" y="532.5" th="12.58"/> <node name="cherrytrans_6-7S" type="waypoint" x="-118.308" y="317.485" th="12.58"/> <node name="cherrytrans_7-8N" type="waypoint" x="-139.369" y="533.6" th="12.58"/> <node name="cherrytrans_7-8S" type="waypoint" x="-113.381" y="318.609" th="12.58"/> <node name="cherrytrans_8-9N" type="waypoint" x="-134.498" y="535.2" th="12.58"/> <node name="cherrytrans_8-9S" type="waypoint" x="-108.455" y="319.732" th="12.58"/> <node name="cherrytrans_9-10N" type="waypoint" x="-129.628" y="535.5" th="8.0"/> <node name="cherrytrans_9-10S" type="waypoint" x="-103.529" y="320.855" th="12.58"/> <edge start="cherrypath_1-2N.a" end="cherrypath_1-2S.b" length="207.234"/> <edge start="cherrypath_1-2N.b" end="cherrytrans_2-3N.b" length="6.714"/> <edge start="cherrypath_1-2S.b" end="cherrypath_1-2N.a" length="207.234"/> <edge start="cherrypath_1-2S.a" end="cherrytrans_2-3S.b" length="6.120"/> <edge start="cherrypath_2-3N.a" end="cherrypath_2-3S.b" length="207.205"/> <edge start="cherrypath_2-3N.b" end="cherrytrans_1-2N.a" length="6.088"/> <edge start="cherrypath_2-3N.b" end="cherrytrans_3-4N.b" length="6.713"/> <edge start="cherrypath_2-3S.b" end="cherrypath_2-3N.a" length="207.205"/> <edge start="cherrypath_2-3S.a" end="cherrytrans_1-2S.a" length="6.778"/> <edge start="cherrypath_2-3S.a" end="cherrytrans_3-4S.b" length="6.121"/> <edge start="cherrypath_3-4N.a" end="cherrypath_3-4S.b" length="207.176"/> <edge start="cherrypath_3-4N.b" end="cherrytrans_2-3N.a" length="6.089"/> <edge start="cherrypath_3-4N.b" end="cherrytrans_4-5N.b" length="6.712"/> <edge start="cherrypath_3-4S.b" end="cherrypath_3-4N.a" length="207.176"/> <edge start="cherrypath_3-4S.a" end="cherrytrans_2-3S.a" length="6.777"/> <edge start="cherrypath_3-4S.a" end="cherrytrans_4-5S.b" length="6.122"/> <edge start="cherrypath_4-5N.a" end="cherrypath_4-5S.b" length="207.147"/> <edge start="cherrypath_4-5N.b" end="cherrytrans_3-4N.a" length="6.090"/> <edge start="cherrypath_4-5N.b" end="cherrytrans_5-6N.b" length="6.711"/> <edge start="cherrypath_4-5S.b" end="cherrypath_4-5N.a" length="207.147"/> <edge start="cherrypath_4-5S.a" end="cherrytrans_3-4S.a" length="6.776"/> <edge start="cherrypath_4-5S.a" end="cherrytrans_5-6S.b" length="6.123"/> <edge start="cherrypath_5-6N.a" end="cherrypath_5-6S.b" length="207.118"/> <edge start="cherrypath_5-6N.b" end="cherrytrans_4-5N.a" length="6.091"/> <edge start="cherrypath_5-6N.b" end="cherrytrans_6-7N.b" length="6.710"/> <edge start="cherrypath_5-6S.b" end="cherrypath_5-6N.a" length="207.118"/> <edge start="cherrypath_5-6S.a" end="cherrytrans_4-5S.a" length="6.775"/> <edge start="cherrypath_5-6S.a" end="cherrytrans_6-7S.b" length="6.124"/> <edge start="cherrypath_6-7N.a" end="cherrypath_6-7S.b" length="207.089"/> <edge start="cherrypath_6-7N.b" end="cherrytrans_5-6N.a" length="6.091"/> <edge start="cherrypath_6-7N.b" end="cherrytrans_7-8N.b" length="6.710"/> <edge start="cherrypath_6-7S.b" end="cherrypath_6-7N.a" length="207.089"/> <edge start="cherrypath_6-7S.a" end="cherrytrans_5-6S.a" length="6.775"/> <edge start="cherrypath_6-7S.a" end="cherrytrans_7-8S.b" length="6.125"/> <edge start="cherrypath_7-8N.a" end="cherrypath_7-8S.b" length="207.061"/> <edge start="cherrypath_7-8N.b" end="cherrytrans_6-7N.a" length="6.092"/> <edge start="cherrypath_7-8N.b" end="cherrytrans_8-9N.b" length="6.709"/> <edge start="cherrypath_7-8S.b" end="cherrypath_7-8N.a" length="207.061"/> <edge start="cherrypath_7-8S.a" end="cherrytrans_6-7S.a" length="6.774"/> <edge start="cherrypath_7-8S.a" end="cherrytrans_8-9S.b" length="6.125"/> <edge start="cherrypath_8-9N.a" end="cherrypath_8-9S.b" length="207.032"/> <edge start="cherrypath_8-9N.b" end="cherrytrans_7-8N.a" length="6.093"/> <edge start="cherrypath_8-9N.b" end="cherrytrans_9-10N.b" length="6.708"/> <edge start="cherrypath_8-9S.b" end="cherrypath_8-9N.a" length="207.032"/> <edge start="cherrypath_8-9S.a" end="cherrytrans_7-8S.a" length="6.773"/> <edge start="cherrypath_8-9S.a" end="cherrytrans_9-10S.b" length="6.126"/> <edge start="cherrypath_9-10N.a" end="cherrypath_9-10S.b" length="207.003"/> <edge start="cherrypath_9-10N.b" end="cherrytrans_8-9N.a" length="6.094"/> <edge start="cherrypath_9-10S.b" end="cherrypath_9-10N.a" length="207.003"/> <edge start="cherrypath_9-10S.a" end="cherrytrans_8-9S.a" length="6.772"/> <edge start="cherrytrans_1-2N.a" end="cherrytrans_2-3N.b" length="4.990"/> <edge start="cherrytrans_1-2S.a" end="cherrytrans_2-3S.b" length="5.053"/> <edge start="cherrytrans_2-3N.b" end="cherrytrans_1-2N.a" length="4.990"/> <edge start="cherrytrans_2-3N.a" end="cherrytrans_3-4N.b" length="4.990"/> <edge start="cherrytrans_2-3S.b" end="cherrytrans_1-2S.a" length="5.053"/> <edge start="cherrytrans_2-3S.a" end="cherrytrans_3-4S.b" length="5.053"/> <edge start="cherrytrans_3-4N.b" end="cherrytrans_2-3N.a" length="4.990"/> <edge start="cherrytrans_3-4N.a" end="cherrytrans_4-5N.b" length="4.990"/> <edge start="cherrytrans_3-4S.b" end="cherrytrans_2-3S.a" length="5.053"/> <edge start="cherrytrans_3-4S.a" end="cherrytrans_4-5S.b" length="5.053"/> <edge start="cherrytrans_4-5N.b" end="cherrytrans_3-4N.a" length="4.990"/> <edge start="cherrytrans_4-5N.a" end="cherrytrans_5-6N.b" length="4.990"/> <edge start="cherrytrans_4-5S.b" end="cherrytrans_3-4S.a" length="5.053"/> <edge start="cherrytrans_4-5S.a" end="cherrytrans_5-6S.b" length="5.053"/> <edge start="cherrytrans_5-6N.b" end="cherrytrans_4-5N.a" length="4.990"/> <edge start="cherrytrans_5-6N.a" end="cherrytrans_6-7N.b" length="4.990"/> <edge start="cherrytrans_5-6S.b" end="cherrytrans_4-5S.a" length="5.053"/> <edge start="cherrytrans_5-6S.a" end="cherrytrans_6-7S.b" length="5.053"/> <edge start="cherrytrans_6-7N.b" end="cherrytrans_5-6N.a" length="4.990"/> <edge start="cherrytrans_6-7N.a" end="cherrytrans_7-8N.b" length="4.990"/> <edge start="cherrytrans_6-7S.b" end="cherrytrans_5-6S.a" length="5.053"/> <edge start="cherrytrans_6-7S.a" end="cherrytrans_7-8S.b" length="5.053"/> <edge start="cherrytrans_7-8N.b" end="cherrytrans_6-7N.a" length="4.990"/> <edge start="cherrytrans_7-8N.a" end="cherrytrans_8-9N.b" length="4.990"/> <edge start="cherrytrans_7-8S.b" end="cherrytrans_6-7S.a" length="5.053"/> <edge start="cherrytrans_7-8S.a" end="cherrytrans_8-9S.b" length="5.053"/> <edge start="cherrytrans_8-9N.b" end="cherrytrans_7-8N.a" length="4.990"/> <edge start="cherrytrans_8-9N.a" end="cherrytrans_9-10N.b" length="4.990"/> <edge start="cherrytrans_8-9S.b" end="cherrytrans_7-8S.a" length="5.053"/> <edge start="cherrytrans_8-9S.a" end="cherrytrans_9-10S.b" length="5.053"/> <edge start="cherrytrans_9-10N.b" end="cherrytrans_8-9N.a" length="4.990"/> <edge start="cherrytrans_9-10S.b" end="cherrytrans_8-9S.a" length="5.053"/>
<edge start="cherrypath_10-11S.b" end="cherrypath_10-11N.a" length="207.003"/> <edge start="cherrypath_10-11S.a" end="cherrytrans_9-10S.a" length="6.126"/> <edge start="cherrypath_10-11N.b" end="cherrytrans_9-10N.a" length="6.126"/>
</node> </graph>