Mapbase
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:
Contents |
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.
<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>