Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • trappejo/semesterprojekt-modulbasiertes-testen
1 result
Show changes
Showing
with 363 additions and 141 deletions
<?xml version="1.0" encoding="utf-8"?>
<sdf version="1.6">
<world name="default">
<!-- Ground Plane -->
<include>
<uri>model://ground_plane</uri>
</include>
<include>
<uri>model://sun</uri>
</include>
<model name="box_s_R_1">
<pose>1 3 0 0</pose>
<link name="link">
<collision name="collision">
<geometry>
<box>
<size>1 1 1</size>
</box>
</geometry>
</collision>
<visual name="visual">
<geometry>
<box>
<size>1 1 1</size>
</box>
</geometry>
</visual>
</link>
</model>
</world>
</sdf>
\ No newline at end of file
...@@ -18,8 +18,11 @@ Launch der Notbremse ...@@ -18,8 +18,11 @@ Launch der Notbremse
location_monitor Laufen lassen location_monitor Laufen lassen
~/catkin_ws$ source devel/setup.bash ~/catkin_ws$ source devel/setup.bash
~/catkin_ws/src/location_monitor/logs$ rosrun location_monitor location_monitor_node.py 0.05(Bot Radius) 0.05(Safty Dist) 2.0(X Ziellienie) 15.0(timeout in Sek) ~/catkin_ws/src/location_monitor/logs$ rosrun location_monitor location_monitorode.py 0.00(Bot Radius) 0.00(Distanz Zur Ecke) 00(Ausrichtungs Radius.) 0.00(Sicherheitsabstand) 0.0(X Ziellinie) 000.0(Timeout)
Distanz Zur Ecke. Waffle:0.07 Burger:0
Ausrichtungs Radius. Waffle:68 Burger:0
bot_listener node Laufen lassen bot_listener node Laufen lassen
~/catkin_ws$ source devel/setup.bash ~/catkin_ws$ source devel/setup.bash
~/catkin_ws/src/location_monitor/logs$ rosrun location_monitor bot_listener.py ~/catkin_ws/src/location_monitor/logs$ rosrun location_monitor bot_listener.py
#!/usr/bin/env python #!/usr/bin/env python
import rospy import rospy
import logging
import os
from std_msgs.msg import String from std_msgs.msg import String
from datetime import datetime from datetime import datetime
from gazebo_msgs.srv import GetModelState from gazebo_msgs.srv import GetModelState
from gazebo_msgs.srv import GetWorldProperties from gazebo_msgs.srv import GetWorldProperties
WriteFlag = 0 logger = logging.getLogger("EventLog")
logtime = "bot_listener_log.txt" logger.setLevel(logging.INFO)
f = open(logtime, "w+")
def callback(data): # create a file handler
handler = logging.FileHandler('bot_listener.log', mode='w')
handler.setLevel(logging.INFO)
# create a logging format
formatter = logging.Formatter('%(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
# add the file handler to the logger
logger.addHandler(handler)
def callback(data):
global logger
rospy.loginfo(data.data) rospy.loginfo(data.data)
get_world_properties = rospy.ServiceProxy('/gazebo/get_world_properties', GetWorldProperties) get_world_properties = rospy.ServiceProxy('/gazebo/get_world_properties', GetWorldProperties)
resp1 = get_world_properties() resp1 = get_world_properties()
f.write("[T:" + str(resp1.sim_time) + "] " + data.data + "\n") logger.info("[T:" + str(resp1.sim_time) + "] " + data.data)
def listener(): def listener():
rospy.init_node('listener', anonymous=True) rospy.init_node('listener', anonymous=True)
......
...@@ -5,8 +5,13 @@ import sys ...@@ -5,8 +5,13 @@ import sys
import gc import gc
import rospy import rospy
import re import re
import array import array as arr
import numpy as np import numpy as np
import sys, traceback
import multiprocessing
import time
import logging
import os
from datetime import datetime from datetime import datetime
from geometry_msgs.msg import Quaternion from geometry_msgs.msg import Quaternion
from tf.transformations import euler_from_quaternion, quaternion_from_euler from tf.transformations import euler_from_quaternion, quaternion_from_euler
...@@ -14,23 +19,37 @@ from nav_msgs.msg import Odometry ...@@ -14,23 +19,37 @@ from nav_msgs.msg import Odometry
from gazebo_msgs.srv import GetModelState from gazebo_msgs.srv import GetModelState
from gazebo_msgs.srv import GetWorldProperties from gazebo_msgs.srv import GetWorldProperties
BotDist = float(sys.argv[1])#Erstes Argumnet BotDist = float(sys.argv[1])#Abstand vom BotKoordinatenursprung zum Kollisions Rand
SafeDist = float(sys.argv[2])#Zweites argument BotSides = float(sys.argv[2])#Distanz Zur Ecke. Waffle:0.07 Burger:0
DestinationX = float(sys.argv[3])#Ziellinie BotSideRad = float(sys.argv[3])#Ausrichtungs Radius. Waffle:68 Burger:0
Timeout = float(sys.argv[4])#timeout SafeDist = float(sys.argv[4])#Sicherheitsabstand
DestinationX = float(sys.argv[5])#Ziellinie
Timeout = float(sys.argv[6])#timeout
yawBot = 0.0 yawBot = 0.0
WriteFlag = 0 WriteFlag = 0
logtime = "location_monitor_log.txt"
f = open(logtime, "w+") logger = logging.getLogger("EventLog")
logger.setLevel(logging.INFO)
# create a file handler
handler = logging.FileHandler('location_monitor.log', mode='w')
handler.setLevel(logging.INFO)
# create a logging format
formatter = logging.Formatter('%(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
# add the file handler to the logger
logger.addHandler(handler)
# y # y
# ^ # ^
# | # |
# | ------- Box muss im rechtem Winkel zur x-Achse sein! # | ------- <-Box Box muss im rechtem Winkel zur x-Achse sein!
# | | | # | | | 2 1 2 Kollisionspunkte des Bots falls BotSides != 0
# | | | # | | | \ | /
# | ------- # | ------- U <-Bot
# | # |
# ---------------->x # ---------------->x
...@@ -44,29 +63,29 @@ class Block: ...@@ -44,29 +63,29 @@ class Block:
class Detection: class Detection:
_blockListDict = {} _blockListDict = {}
def show_gazebo_models(self, botx, boty): def show_gazebo_models(self, cordlist):
global Timeout global Timeout
global DestinationX global DestinationX
global f
global WriteFlag global WriteFlag
global logger
get_world_properties = rospy.ServiceProxy('/gazebo/get_world_properties', GetWorldProperties) get_world_properties = rospy.ServiceProxy('/gazebo/get_world_properties', GetWorldProperties)
resp1 = get_world_properties() resp1 = get_world_properties()
if resp1.sim_time >= Timeout: if resp1.sim_time >= Timeout:
print("Simulation Timeout!") rospy.loginfo("Simulation Timeout!")
if WriteFlag == 0: if WriteFlag == 0:
WriteFlag = 1 WriteFlag = 1
f.write("[T:" + str(resp1.sim_time) + "] " + "Simulation Timeout!" + "\n") logger.info("[T:" + str(resp1.sim_time) + "] " + "Simulation Timeout!")
f.close os._exit(1)
if WriteFlag == 0: if WriteFlag == 0:
f.write("[T:" + str(resp1.sim_time) + "] " + "Bot X: " + str(botx) + "\n") logger.info("[T:" + str(resp1.sim_time) + "] " + "Bot X: " + str(cordlist[0]))
f.write("[T:" + str(resp1.sim_time) + "] " + "Bot Y: " + str(boty) + "\n") logger.info("[T:" + str(resp1.sim_time) + "] " + "Bot Y: " + str(cordlist[1]))
if botx >= DestinationX: if cordlist[0] >= DestinationX and DestinationX != 0.0:
print("Bot reached Destination!") rospy.loginfo("Bot reached Destination!")
if WriteFlag == 0: if WriteFlag == 0:
WriteFlag = 1 WriteFlag = 1
f.write("[T:" + str(resp1.sim_time) + "] " + "Bot reached Destination!" + "\n") logger.info("[T:" + str(resp1.sim_time) + "] " + "Bot reached Destination!")
f.close os._exit(1)
if botx > 0 and boty > 0: if cordlist[0] > 0 and cordlist[1] > 0:
i = 0 i = 0
for model in resp1.model_names: for model in resp1.model_names:
if ("ball" in str(model)) or ("cylinder" in str(model)) or ("box" in str(model) or ("sphere" in str(model))): if ("ball" in str(model)) or ("cylinder" in str(model)) or ("box" in str(model) or ("sphere" in str(model))):
...@@ -98,145 +117,106 @@ class Detection: ...@@ -98,145 +117,106 @@ class Detection:
resp_coordinates = model_coordinates(blockName, block._relative_entity_name) resp_coordinates = model_coordinates(blockName, block._relative_entity_name)
l_x = resp_coordinates.pose.position.x l_x = resp_coordinates.pose.position.x
l_y = resp_coordinates.pose.position.y l_y = resp_coordinates.pose.position.y
print(blockName) rospy.loginfo(blockName)
print("X: " + str(l_x)) rospy.loginfo("X: " + str(l_x))
print("Y: " + str(l_y)) rospy.loginfo("Y: " + str(l_y))
if WriteFlag == 0: if WriteFlag == 0:
f.write(str(blockName) + "\n") logger.info(str(blockName))
f.write("[T:" + str(resp1.sim_time) + "] " + str(blockName) + " X: " + str(l_x) + "\n") logger.info("[T:" + str(resp1.sim_time) + "] " + str(blockName) + " X: " + str(l_x))
f.write("[T:" + str(resp1.sim_time) + "] " + str(blockName) + " Y: " + str(l_y) + "\n") logger.info("[T:" + str(resp1.sim_time) + "] " + str(blockName) + " Y: " + str(l_y))
if block._radius != 0: if block._radius != 0:
if "box" in str(blockName): if "box" in str(blockName):
box_orient_list = [resp_coordinates.pose.orientation.x,resp_coordinates.pose.orientation.y,resp_coordinates.pose.orientation.z,resp_coordinates.pose.orientation.w] box_orient_list = [resp_coordinates.pose.orientation.x,resp_coordinates.pose.orientation.y,resp_coordinates.pose.orientation.z,resp_coordinates.pose.orientation.w]
(roll, pitch, yaw) = euler_from_quaternion(box_orient_list) (roll, pitch, yaw) = euler_from_quaternion(box_orient_list)
yaw_degrees = yaw * 180.0 / math.pi yaw_degrees = yaw * 180.0 / math.pi
if yaw_degrees < 0: if yaw_degrees < 0:
yaw_degrees += 360.0 yaw_degrees += 360.0
boxkdetection(float(block._radius), botx, boty, l_x, l_y, yaw_degrees, resp1.sim_time) boxkdetection(float(block._radius), cordlist, l_x, l_y, yaw_degrees, resp1.sim_time)
else: #if "sphere" , "cylinder" , "ball" etc. else: #if "sphere" , "cylinder" , "ball" etc.
objectWithRadiusDetection(float(block._radius), botx, boty, l_x, l_y, str(resp1.sim_time)) objectWithRadiusDetection(float(block._radius), cordlist, l_x, l_y, str(resp1.sim_time))
else: else:
print("Dist: " + str(dist))
if WriteFlag == 0: if WriteFlag == 0:
f.write("[T:" + str(resp1.sim_time) + "] " + "Dist: " + str(dist) + "\n") logger.info("[T:" + str(resp1.sim_time) + "] " + "Can't detect " + blockName)
except rospy.ServiceException as e: except rospy.ServiceException as e:
rospy.loginfo("Get Model State service call failed: {0}".format(e)) rospy.loginfo("Get Model State service call failed: {0}".format(e))
else: else:
rospy.loginfo("Bot out of tracking Range!((x,y)<0)") rospy.loginfo("Bot out of tracking Range!((x,y)<0)")
if WriteFlag == 0: if WriteFlag == 0:
f.write("[T:" + str(resp1.sim_time) + "] " + "Bot out of tracking Range!((x,y)<0)" + "\n") logger.info("[T:" + str(resp1.sim_time) + "] " + "Bot out of tracking Range!((x,y)<0)")
f.close
def distance(x1, y1, x2, y2): def distance(x1, y1, x2, y2):
dist = math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2) dist = math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)
return dist return dist
def objectWithRadiusDetection(radius, botx, boty, l_x, l_y, simtime): def objectWithRadiusDetection(radius, cordlist, l_x, l_y, simtime):
global WriteFlag global WriteFlag
global f global logger
global SafeDist global SafeDist
dist = distance(botx, boty, l_x, l_y)
safedist = radius + SafeDist # Radius/Size + Bot front Rad + safe dist safedist = radius + SafeDist # Radius/Size + Bot front Rad + safe dist
print("Safedist: " + str(safedist)) rospy.loginfo("Safedist: " + str(safedist))
if WriteFlag == 0: lenght = len(cordlist)-1
f.write("Safedist.: " + str(safedist) + "\n") rospy.loginfo("Distance: " + str(distance(cordlist[0], cordlist[1], l_x, l_y)))
print("Distance: " + str(dist)) for i in range(lenght):
if WriteFlag == 0: dist = distance(cordlist[i], cordlist[i+1], l_x, l_y)
f.write("[T:" + simtime + "] " + "Dist. To Collision Point: " + str(dist) + "\n") if WriteFlag == 0:
if dist < safedist: logger.info("Safedist.: " + str(safedist))
rospy.loginfo("Collision!") logger.info("[T:" + simtime + "] " + "Dist. To Collision Point: " + str(dist))
if WriteFlag == 0: if dist < safedist:
f.write("[T:" + simtime + "] " + "Collision!") rospy.loginfo("Collision!")
f.close if WriteFlag == 0:
WriteFlag = 1 logger.info("[T:" + simtime + "] " + "Collision!")
os._exit(1)
def boxkdetection(size, botx, boty, l_x, l_y, yaw_degrees, simtime): def boxkdetection(size, cordlist, l_x, l_y, yaw_degrees, simtime):
global f
global WriteFlag global WriteFlag
global SafeDist
if (size * 2.0) > 5.0: if (size * 2.0) > 5.0:
print("Box to big, > 5m") rospy.loginfo("Box to big, > 5m")
if WriteFlag == 0: if WriteFlag == 0:
f.write("[T:" + str(simtime) + "] " + "Box Invalid (size > 5m)" + "\n") logger.info("[T:" + str(simtime) + "] " + "Box Invalid (size > 5m)")
f.close
else: else:
# print("SIZEBOX" + str(size)) safedist = SafeDist
safedist = SafeDist
#print(str(safedist))
if WriteFlag == 0: if WriteFlag == 0:
f.write("Safedist.: " + str(safedist) + "\n") logger.info("Safedist.: " + str(safedist))
xR = l_x + size * math.cos(math.radians(yaw_degrees)) xR = l_x + size * math.cos(math.radians(yaw_degrees))
yL = l_y + size * math.sin(math.radians(yaw_degrees)) yL = l_y + size * math.sin(math.radians(yaw_degrees))
#XUr = xR * math.cos(math.radians(45)) - yL * math.sin(math.radians(45)) lenght = len(cordlist) - 1
#yUr = xR * math.sin(math.radians(45)) + yL * math.cos(math.radians(45))
#dist1 = distance(botx, boty, XUr, yUr) for i in range(lenght):
lineA = ((cordlist[i], cordlist[i+1]), (l_x, l_y))
#XUl = xR * math.cos(math.radians(135)) - yL * math.sin(math.radians(135)) lineB = ((l_x, l_y), (xR, yL))
#yUl = xR * math.sin(math.radians(135)) + yL * math.cos(math.radians(135))
#dist2 = distance(botx, boty, XUl, yUl) angle = angle_between(lineA, lineB)
disangle = angle
#XDl = xR * math.cos(math.radians(225)) - yL * math.sin(math.radians(225)) angle1 = angle
#yDl = xR * math.sin(math.radians(225)) + yL * math.cos(math.radians(225)) if angle > 45:
#dist3 = distance(botx, boty, XDl, yDl) disangle = 90 - angle;
dis = (size) / math.cos(math.radians(disangle))
#XDr = xR * math.cos(math.radians(315)) - yL * math.sin(math.radians(315)) if cordlist[i] < l_x and cordlist[i+1] > l_y:
#yDr = xR * math.sin(math.radians(315)) + yL * math.cos(math.radians(315)) angle1 = 180 - angle
#dist4 = distance(botx, boty, XDr, yDr) if cordlist[i] < l_x and cordlist[i+1] < l_y:
angle1 = 180 + angle
#print(str(xR) + " " + str(yL))#korrekt if cordlist[i] > l_x and cordlist[i+1] < l_y:
angle1 = 360 - angle
lineA = ((botx, boty), (l_x, l_y))
lineB = ((l_x, l_y), (xR, yL)) dynX = l_x + dis * math.cos(math.radians(angle1))
dynY = l_y + dis * math.sin(math.radians(angle1))
angle = angle_between(lineA, lineB)
disangle = angle distult = distance(cordlist[i], cordlist[i+1], dynX, dynY)
angle1 = angle if WriteFlag == 0:
if angle > 45: logger.info("[T:" + str(simtime) + "] " + "Dist to collision point: " + str(distult))
disangle = 90 - angle; rospy.loginfo("Dist to collision point: " + str(distult))
#print("Angle: " + str(angle))#korrekt if distult < safedist:
dis = (size) / math.cos(math.radians(disangle)) rospy.loginfo("Collision!")
# print("Dist from center do edge: " + str(dis)) if WriteFlag == 0:
logger.info("[T:" + str(simtime) + "] " + "Collision!")
#f dist1 < dist2 and dist1 < dist3 and dist1 < dist4: os._exit(1)
# angle2 = angle
#if dist2 < dist1 and dist2 < dist3 and dist2 < dist4:
# angle2 = 180 - angle
#if dist3 < dist1 and dist3 < dist2 and dist3 < dist4:
# angle2 = 180 + angle
#if dist4 < dist1 and dist4 < dist2 and dist4 < dist3:
# angle2 = 360 - angle
if botx < l_x and boty > l_y:
angle1 = 180 - angle
if botx < l_x and boty < l_y:
angle1 = 180 + angle
if botx > l_x and boty < l_y:
angle1 = 360 - angle
#print("Angle1: " + str(angle2))
dynX = l_x + dis * math.cos(math.radians(angle1))
dynY = l_y + dis * math.sin(math.radians(angle1))
#dynX = l_x + dis * math.cos(math.radians(angle2))
#dynY = l_y + dis * math.sin(math.radians(angle2))
#print("DynX : " + str(dynX))
#print("DynY : " + str(dynY))
distult = distance(botx, boty, dynX, dynY)
if WriteFlag == 0:
f.write("[T:" + str(simtime) + "] " + "Dist to collision point: " + str(distult) + "\n")
print("Dist to collision point: " + str(distult))
if distult < safedist:
rospy.loginfo("Collision!")
if WriteFlag == 0:
f.write("[T:" + str(simtime) + "] " + "Collision!")
f.close
WriteFlag = 1
def slope(x1, y1, x2, y2): # Line slope given two points: def slope(x1, y1, x2, y2): # Line slope given two points:
...@@ -265,25 +245,37 @@ def get_rotation (msg): ...@@ -265,25 +245,37 @@ def get_rotation (msg):
yaw_degrees = yaw * 180.0 /math.pi yaw_degrees = yaw * 180.0 /math.pi
if yaw_degrees <0: if yaw_degrees <0:
yaw_degrees += 360.0 yaw_degrees += 360.0
#print("Yaw:" + str(yaw_degrees)) #rospy.loginfo("Yaw:" + str(yaw_degrees))
yawBot = yaw_degrees yawBot = yaw_degrees
def callback(msg): def callback(msg):
global BotDist global BotDist
global yawBot global yawBot
global BotSides
global BotSideRad
get_rotation(msg) get_rotation(msg)
botx = msg.pose.pose.position.x botx = msg.pose.pose.position.x
boty = msg.pose.pose.position.y boty = msg.pose.pose.position.y
botx = botx + BotDist * math.cos(math.radians(yawBot)) botx = botx + BotDist * math.cos(math.radians(yawBot))
boty = boty + BotDist * math.sin(math.radians(yawBot)) boty = boty + BotDist * math.sin(math.radians(yawBot))
print("BotX: " + str(botx)) rospy.loginfo("BotX: " + str(botx))
print("BotY: " + str(boty)) rospy.loginfo("BotY: " + str(boty))
detect = Detection() detect = Detection()
detect.show_gazebo_models(botx, boty)
cordlist = [botx,boty]
if BotSides !=0:
cordlist.append(botx + BotSides * math.cos(math.radians(yawBot+BotSideRad)))
cordlist.append(boty + BotSides * math.sin(math.radians(yawBot+BotSideRad)))
cordlist.append(botx + BotSides * math.cos(math.radians(yawBot-BotSideRad)))
cordlist.append(boty + BotSides * math.sin(math.radians(yawBot-BotSideRad)))
detect.show_gazebo_models(cordlist)
gc.collect() gc.collect()
def main(): def main():
rospy.init_node('location_monitor') #Node in gang bringen rospy.init_node('location_monitor') #Node in gang bringen
try: try:
......
...@@ -116,7 +116,7 @@ ...@@ -116,7 +116,7 @@
</scan> </scan>
<range> <range>
<min>0.120</min> <min>0.120</min>
<max>3.5</max> <max>16</max>
<resolution>0.015</resolution> <resolution>0.015</resolution>
</range> </range>
<noise> <noise>
......
<?xml version="1.0" ?> <?xml version="1.0" ?>
<robot name="turtlebot3_burger" xmlns:xacro="http://ros.org/wiki/xacro"> <robot name="turtlebot3_burger" xmlns:xacro="http://ros.org/wiki/xacro">
<xacro:include filename="$(find turtlebot3_description)/urdf/common_properties.xacro"/> <xacro:include filename="$(find turtlebot3_description)/urdf/common_properties.xacro"/>
<xacro:include filename="$(find turtlebot3_description)/urdf/turtlebot3_burger.gazebo.xacro"/> <xacro:include filename="$(find sim)/bot.gazebo.xacro"/>
<link name="base_footprint"/> <link name="base_footprint"/>
......
<?xml version="1.0" ?> <?xml version="1.0" ?>
<robot name="turtlebot3_waffle" xmlns:xacro="http://ros.org/wiki/xacro"> <robot name="turtlebot3_waffle" xmlns:xacro="http://ros.org/wiki/xacro">
<xacro:include filename="$(find turtlebot3_description)/urdf/common_properties.xacro"/> <xacro:include filename="$(find turtlebot3_description)/urdf/common_properties.xacro"/>
<xacro:include filename="$(find turtlebot3_description)/urdf/turtlebot3_waffle.gazebo.xacro"/> <xacro:include filename="$(find sim)/bot.gazebo.xacro"/>
<xacro:property name="r200_cam_rgb_px" value="0.005"/> <xacro:property name="r200_cam_rgb_px" value="0.005"/>
<xacro:property name="r200_cam_rgb_py" value="0.018"/> <xacro:property name="r200_cam_rgb_py" value="0.018"/>
......
<?xml version="1.0" ?> <?xml version="1.0" ?>
<robot name="turtlebot3_waffle_pi" xmlns:xacro="http://ros.org/wiki/xacro"> <robot name="turtlebot3_waffle_pi" xmlns:xacro="http://ros.org/wiki/xacro">
<xacro:include filename="$(find turtlebot3_description)/urdf/common_properties.xacro"/> <xacro:include filename="$(find turtlebot3_description)/urdf/common_properties.xacro"/>
<xacro:include filename="$(find turtlebot3_description)/urdf/turtlebot3_waffle_pi.gazebo.xacro"/> <xacro:include filename="$(find sim)/bot.gazebo.xacro"/>
<link name="base_footprint"/> <link name="base_footprint"/>
......
...@@ -39,7 +39,7 @@ namespace compiler ...@@ -39,7 +39,7 @@ namespace compiler
try try
{ {
var rootNode = rootNodes[i]; var rootNode = rootNodes[i];
var path = Path.Combine(targetDirectory, @$"{baseName}-{i}"); var path = Path.Combine(targetDirectory, @$"{baseName}/{i}");
Directory.CreateDirectory(path); Directory.CreateDirectory(path);
TestWriter.WriteAll(path, rootNode); TestWriter.WriteAll(path, rootNode);
} }
......
<?xml version="1.0" encoding="UTF-8"?>
<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_wSJZEBEkEeqcA7mMSE3b-A" name="Test1">
<packageImport xmi:type="uml:PackageImport" xmi:id="_wUOcsBEkEeqcA7mMSE3b-A">
<importedPackage xmi:type="uml:Model" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#_0"/>
</packageImport>
<packagedElement xmi:type="uml:Activity" xmi:id="_sz7wUBElEeqcA7mMSE3b-A" name="Activity" node="_7EGDQBElEeqcA7mMSE3b-A _8WVuQBElEeqcA7mMSE3b-A _8peKADhTEeqhK-Tr1AkfpA _PSC0ADz8EeqwwvtZSXxI_A _8Pbz0Dz9EeqwwvtZSXxI_A">
<ownedComment xmi:type="uml:Comment" xmi:id="_N2YasDbPEeqLi4nplbzrvQ" annotatedElement="_8WVuQBElEeqcA7mMSE3b-A">
<body>t=0</body>
</ownedComment>
<ownedComment xmi:type="uml:Comment" xmi:id="_5xeOgDz7EeqwwvtZSXxI_A" annotatedElement="_sz7wUBElEeqcA7mMSE3b-A">
<body>t=0</body>
</ownedComment>
<ownedComment xmi:type="uml:Comment" xmi:id="_XECJoDz8EeqwwvtZSXxI_A" annotatedElement="_PSC0ADz8EeqwwvtZSXxI_A">
<body>t >=30&#xD;
</body>
</ownedComment>
<edge xmi:type="uml:ControlFlow" xmi:id="_USsZsBEmEeqcA7mMSE3b-A" target="_8WVuQBElEeqcA7mMSE3b-A" source="_7EGDQBElEeqcA7mMSE3b-A"/>
<edge xmi:type="uml:ControlFlow" xmi:id="_2srn0Dz7EeqwwvtZSXxI_A" target="_8peKADhTEeqhK-Tr1AkfpA" source="_8WVuQBElEeqcA7mMSE3b-A"/>
<edge xmi:type="uml:ControlFlow" xmi:id="_Sb6vADz8EeqwwvtZSXxI_A" target="_PSC0ADz8EeqwwvtZSXxI_A" source="_8peKADhTEeqhK-Tr1AkfpA"/>
<edge xmi:type="uml:ControlFlow" xmi:id="_g_viwEUpEeq-Z_ECULnOOQ" target="_8Pbz0Dz9EeqwwvtZSXxI_A" source="_PSC0ADz8EeqwwvtZSXxI_A"/>
<node xmi:type="uml:InitialNode" xmi:id="_7EGDQBElEeqcA7mMSE3b-A" name="Start" outgoing="_USsZsBEmEeqcA7mMSE3b-A"/>
<node xmi:type="uml:OpaqueAction" xmi:id="_8WVuQBElEeqcA7mMSE3b-A" name="spawn: vehicle f(x=0, y=5)" incoming="_USsZsBEmEeqcA7mMSE3b-A" outgoing="_2srn0Dz7EeqwwvtZSXxI_A"/>
<node xmi:type="uml:OpaqueAction" xmi:id="_8peKADhTEeqhK-Tr1AkfpA" name="spawn: obstacle s= cylinder (x=5, y=5, r=0.1, h=1)" incoming="_2srn0Dz7EeqwwvtZSXxI_A" outgoing="_Sb6vADz8EeqwwvtZSXxI_A"/>
<node xmi:type="uml:OpaqueAction" xmi:id="_PSC0ADz8EeqwwvtZSXxI_A" name="constraint: distance(f, s) in [0.5, 2]" visibility="protected" incoming="_Sb6vADz8EeqwwvtZSXxI_A" outgoing="_g_viwEUpEeq-Z_ECULnOOQ"/>
<node xmi:type="uml:FlowFinalNode" xmi:id="_8Pbz0Dz9EeqwwvtZSXxI_A" name="Final_Node" incoming="_g_viwEUpEeq-Z_ECULnOOQ"/>
</packagedElement>
</uml:Model>
<?xml version="1.0" encoding="UTF-8"?>
<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_wSJZEBEkEeqcA7mMSE3b-A" name="Test13">
<packageImport xmi:type="uml:PackageImport" xmi:id="_wUOcsBEkEeqcA7mMSE3b-A">
<importedPackage xmi:type="uml:Model" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#_0"/>
</packageImport>
<packagedElement xmi:type="uml:Activity" xmi:id="_sz7wUBElEeqcA7mMSE3b-A" name="Activity" node="_7EGDQBElEeqcA7mMSE3b-A _8WVuQBElEeqcA7mMSE3b-A _8peKADhTEeqhK-Tr1AkfpA _PSC0ADz8EeqwwvtZSXxI_A _8Pbz0Dz9EeqwwvtZSXxI_A">
<ownedComment xmi:type="uml:Comment" xmi:id="_N2YasDbPEeqLi4nplbzrvQ" annotatedElement="_8WVuQBElEeqcA7mMSE3b-A">
<body>t=0</body>
</ownedComment>
<ownedComment xmi:type="uml:Comment" xmi:id="_5xeOgDz7EeqwwvtZSXxI_A" annotatedElement="_sz7wUBElEeqcA7mMSE3b-A">
<body>t=0</body>
</ownedComment>
<ownedComment xmi:type="uml:Comment" xmi:id="_XECJoDz8EeqwwvtZSXxI_A" annotatedElement="_PSC0ADz8EeqwwvtZSXxI_A">
<body>t >=30</body>
</ownedComment>
<edge xmi:type="uml:ControlFlow" xmi:id="_USsZsBEmEeqcA7mMSE3b-A" target="_8WVuQBElEeqcA7mMSE3b-A" source="_7EGDQBElEeqcA7mMSE3b-A"/>
<edge xmi:type="uml:ControlFlow" xmi:id="_2srn0Dz7EeqwwvtZSXxI_A" target="_8peKADhTEeqhK-Tr1AkfpA" source="_8WVuQBElEeqcA7mMSE3b-A"/>
<edge xmi:type="uml:ControlFlow" xmi:id="_Sb6vADz8EeqwwvtZSXxI_A" target="_PSC0ADz8EeqwwvtZSXxI_A" source="_8peKADhTEeqhK-Tr1AkfpA"/>
<edge xmi:type="uml:ControlFlow" xmi:id="_g_viwEUpEeq-Z_ECULnOOQ" target="_8Pbz0Dz9EeqwwvtZSXxI_A" source="_PSC0ADz8EeqwwvtZSXxI_A"/>
<node xmi:type="uml:InitialNode" xmi:id="_7EGDQBElEeqcA7mMSE3b-A" name="Start" outgoing="_USsZsBEmEeqcA7mMSE3b-A"/>
<node xmi:type="uml:OpaqueAction" xmi:id="_8WVuQBElEeqcA7mMSE3b-A" name="spawn: vehicle f(x=1, y=1)" incoming="_USsZsBEmEeqcA7mMSE3b-A" outgoing="_2srn0Dz7EeqwwvtZSXxI_A"/>
<node xmi:type="uml:OpaqueAction" xmi:id="_8peKADhTEeqhK-Tr1AkfpA" name="spawn: obstacle s= cylinder(x=1,y=5,r=1, h=0.1)" incoming="_2srn0Dz7EeqwwvtZSXxI_A" outgoing="_Sb6vADz8EeqwwvtZSXxI_A"/>
<node xmi:type="uml:OpaqueAction" xmi:id="_PSC0ADz8EeqwwvtZSXxI_A" name="constraint: distance(f, s) in [1, 2]" visibility="protected" incoming="_Sb6vADz8EeqwwvtZSXxI_A" outgoing="_g_viwEUpEeq-Z_ECULnOOQ"/>
<node xmi:type="uml:FlowFinalNode" xmi:id="_8Pbz0Dz9EeqwwvtZSXxI_A" name="Final_Node" incoming="_g_viwEUpEeq-Z_ECULnOOQ"/>
</packagedElement>
</uml:Model>
<?xml version="1.0" encoding="UTF-8"?>
<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_wSJZEBEkEeqcA7mMSE3b-A" name="Test14">
<packageImport xmi:type="uml:PackageImport" xmi:id="_wUOcsBEkEeqcA7mMSE3b-A">
<importedPackage xmi:type="uml:Model" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#_0"/>
</packageImport>
<packagedElement xmi:type="uml:Activity" xmi:id="_sz7wUBElEeqcA7mMSE3b-A" name="Activity" node="_7EGDQBElEeqcA7mMSE3b-A _8WVuQBElEeqcA7mMSE3b-A _8peKADhTEeqhK-Tr1AkfpA _PSC0ADz8EeqwwvtZSXxI_A _8Pbz0Dz9EeqwwvtZSXxI_A">
<ownedComment xmi:type="uml:Comment" xmi:id="_N2YasDbPEeqLi4nplbzrvQ" annotatedElement="_8WVuQBElEeqcA7mMSE3b-A">
<body>t=0</body>
</ownedComment>
<ownedComment xmi:type="uml:Comment" xmi:id="_5xeOgDz7EeqwwvtZSXxI_A" annotatedElement="_sz7wUBElEeqcA7mMSE3b-A">
<body>t=0</body>
</ownedComment>
<ownedComment xmi:type="uml:Comment" xmi:id="_XECJoDz8EeqwwvtZSXxI_A" annotatedElement="_PSC0ADz8EeqwwvtZSXxI_A">
<body>t >=30</body>
</ownedComment>
<edge xmi:type="uml:ControlFlow" xmi:id="_USsZsBEmEeqcA7mMSE3b-A" target="_8WVuQBElEeqcA7mMSE3b-A" source="_7EGDQBElEeqcA7mMSE3b-A"/>
<edge xmi:type="uml:ControlFlow" xmi:id="_2srn0Dz7EeqwwvtZSXxI_A" target="_8peKADhTEeqhK-Tr1AkfpA" source="_8WVuQBElEeqcA7mMSE3b-A"/>
<edge xmi:type="uml:ControlFlow" xmi:id="_Sb6vADz8EeqwwvtZSXxI_A" target="_PSC0ADz8EeqwwvtZSXxI_A" source="_8peKADhTEeqhK-Tr1AkfpA"/>
<edge xmi:type="uml:ControlFlow" xmi:id="_g_viwEUpEeq-Z_ECULnOOQ" target="_8Pbz0Dz9EeqwwvtZSXxI_A" source="_PSC0ADz8EeqwwvtZSXxI_A"/>
<node xmi:type="uml:InitialNode" xmi:id="_7EGDQBElEeqcA7mMSE3b-A" name="Start" outgoing="_USsZsBEmEeqcA7mMSE3b-A"/>
<node xmi:type="uml:OpaqueAction" xmi:id="_8WVuQBElEeqcA7mMSE3b-A" name="spawn: vehicle f(x=1, y=1)" incoming="_USsZsBEmEeqcA7mMSE3b-A" outgoing="_2srn0Dz7EeqwwvtZSXxI_A"/>
<node xmi:type="uml:OpaqueAction" xmi:id="_8peKADhTEeqhK-Tr1AkfpA" name="spawn: obstacle s= cylinder(x=1,y=5,r=0.1, h=0.1)" incoming="_2srn0Dz7EeqwwvtZSXxI_A" outgoing="_Sb6vADz8EeqwwvtZSXxI_A"/>
<node xmi:type="uml:OpaqueAction" xmi:id="_PSC0ADz8EeqwwvtZSXxI_A" name="constraint: distance(f, s) in [1, 2]" visibility="protected" incoming="_Sb6vADz8EeqwwvtZSXxI_A" outgoing="_g_viwEUpEeq-Z_ECULnOOQ"/>
<node xmi:type="uml:FlowFinalNode" xmi:id="_8Pbz0Dz9EeqwwvtZSXxI_A" name="Final_Node" incoming="_g_viwEUpEeq-Z_ECULnOOQ"/>
</packagedElement>
</uml:Model>
<?xml version="1.0" encoding="UTF-8"?>
<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_wSJZEBEkEeqcA7mMSE3b-A" name="Test15">
<packageImport xmi:type="uml:PackageImport" xmi:id="_wUOcsBEkEeqcA7mMSE3b-A">
<importedPackage xmi:type="uml:Model" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#_0"/>
</packageImport>
<packagedElement xmi:type="uml:Activity" xmi:id="_sz7wUBElEeqcA7mMSE3b-A" name="Activity" node="_7EGDQBElEeqcA7mMSE3b-A _8WVuQBElEeqcA7mMSE3b-A _8peKADhTEeqhK-Tr1AkfpA _PSC0ADz8EeqwwvtZSXxI_A _8Pbz0Dz9EeqwwvtZSXxI_A">
<ownedComment xmi:type="uml:Comment" xmi:id="_N2YasDbPEeqLi4nplbzrvQ" annotatedElement="_8WVuQBElEeqcA7mMSE3b-A">
<body>t=0</body>
</ownedComment>
<ownedComment xmi:type="uml:Comment" xmi:id="_5xeOgDz7EeqwwvtZSXxI_A" annotatedElement="_sz7wUBElEeqcA7mMSE3b-A">
<body>t=0</body>
</ownedComment>
<ownedComment xmi:type="uml:Comment" xmi:id="_XECJoDz8EeqwwvtZSXxI_A" annotatedElement="_PSC0ADz8EeqwwvtZSXxI_A">
<body>t >=30</body>
</ownedComment>
<edge xmi:type="uml:ControlFlow" xmi:id="_USsZsBEmEeqcA7mMSE3b-A" target="_8WVuQBElEeqcA7mMSE3b-A" source="_7EGDQBElEeqcA7mMSE3b-A"/>
<edge xmi:type="uml:ControlFlow" xmi:id="_2srn0Dz7EeqwwvtZSXxI_A" target="_8peKADhTEeqhK-Tr1AkfpA" source="_8WVuQBElEeqcA7mMSE3b-A"/>
<edge xmi:type="uml:ControlFlow" xmi:id="_Sb6vADz8EeqwwvtZSXxI_A" target="_PSC0ADz8EeqwwvtZSXxI_A" source="_8peKADhTEeqhK-Tr1AkfpA"/>
<edge xmi:type="uml:ControlFlow" xmi:id="_g_viwEUpEeq-Z_ECULnOOQ" target="_8Pbz0Dz9EeqwwvtZSXxI_A" source="_PSC0ADz8EeqwwvtZSXxI_A"/>
<node xmi:type="uml:InitialNode" xmi:id="_7EGDQBElEeqcA7mMSE3b-A" name="Start" outgoing="_USsZsBEmEeqcA7mMSE3b-A"/>
<node xmi:type="uml:OpaqueAction" xmi:id="_8WVuQBElEeqcA7mMSE3b-A" name="spawn: vehicle f(x=1, y=1)" incoming="_USsZsBEmEeqcA7mMSE3b-A" outgoing="_2srn0Dz7EeqwwvtZSXxI_A"/>
<node xmi:type="uml:OpaqueAction" xmi:id="_8peKADhTEeqhK-Tr1AkfpA" name="spawn: obstacle s= cylinder(x=1,y=5,r=1, h=1)" incoming="_2srn0Dz7EeqwwvtZSXxI_A" outgoing="_Sb6vADz8EeqwwvtZSXxI_A"/>
<node xmi:type="uml:OpaqueAction" xmi:id="_PSC0ADz8EeqwwvtZSXxI_A" name="constraint: distance(f, s) in [1, 2]" visibility="protected" incoming="_Sb6vADz8EeqwwvtZSXxI_A" outgoing="_g_viwEUpEeq-Z_ECULnOOQ"/>
<node xmi:type="uml:FlowFinalNode" xmi:id="_8Pbz0Dz9EeqwwvtZSXxI_A" name="Final_Node" incoming="_g_viwEUpEeq-Z_ECULnOOQ"/>
</packagedElement>
</uml:Model>
<?xml version="1.0" encoding="UTF-8"?>
<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_wSJZEBEkEeqcA7mMSE3b-A" name="Test16">
<packageImport xmi:type="uml:PackageImport" xmi:id="_wUOcsBEkEeqcA7mMSE3b-A">
<importedPackage xmi:type="uml:Model" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#_0"/>
</packageImport>
<packagedElement xmi:type="uml:Activity" xmi:id="_sz7wUBElEeqcA7mMSE3b-A" name="Activity" node="_7EGDQBElEeqcA7mMSE3b-A _8WVuQBElEeqcA7mMSE3b-A _8peKADhTEeqhK-Tr1AkfpA _PSC0ADz8EeqwwvtZSXxI_A _8Pbz0Dz9EeqwwvtZSXxI_A">
<ownedComment xmi:type="uml:Comment" xmi:id="_N2YasDbPEeqLi4nplbzrvQ" annotatedElement="_8WVuQBElEeqcA7mMSE3b-A">
<body>t=0</body>
</ownedComment>
<ownedComment xmi:type="uml:Comment" xmi:id="_5xeOgDz7EeqwwvtZSXxI_A" annotatedElement="_sz7wUBElEeqcA7mMSE3b-A">
<body>t=0</body>
</ownedComment>
<ownedComment xmi:type="uml:Comment" xmi:id="_XECJoDz8EeqwwvtZSXxI_A" annotatedElement="_PSC0ADz8EeqwwvtZSXxI_A">
<body>t >=30</body>
</ownedComment>
<edge xmi:type="uml:ControlFlow" xmi:id="_USsZsBEmEeqcA7mMSE3b-A" target="_8WVuQBElEeqcA7mMSE3b-A" source="_7EGDQBElEeqcA7mMSE3b-A"/>
<edge xmi:type="uml:ControlFlow" xmi:id="_2srn0Dz7EeqwwvtZSXxI_A" target="_8peKADhTEeqhK-Tr1AkfpA" source="_8WVuQBElEeqcA7mMSE3b-A"/>
<edge xmi:type="uml:ControlFlow" xmi:id="_Sb6vADz8EeqwwvtZSXxI_A" target="_PSC0ADz8EeqwwvtZSXxI_A" source="_8peKADhTEeqhK-Tr1AkfpA"/>
<edge xmi:type="uml:ControlFlow" xmi:id="_g_viwEUpEeq-Z_ECULnOOQ" target="_8Pbz0Dz9EeqwwvtZSXxI_A" source="_PSC0ADz8EeqwwvtZSXxI_A"/>
<node xmi:type="uml:InitialNode" xmi:id="_7EGDQBElEeqcA7mMSE3b-A" name="Start" outgoing="_USsZsBEmEeqcA7mMSE3b-A"/>
<node xmi:type="uml:OpaqueAction" xmi:id="_8WVuQBElEeqcA7mMSE3b-A" name="spawn: vehicle f(x=1, y=1)" incoming="_USsZsBEmEeqcA7mMSE3b-A" outgoing="_2srn0Dz7EeqwwvtZSXxI_A"/>
<node xmi:type="uml:OpaqueAction" xmi:id="_8peKADhTEeqhK-Tr1AkfpA" name="spawn: obstacle s= cylinder(x=3,y=5,r=0.1, h=0.1)" incoming="_2srn0Dz7EeqwwvtZSXxI_A" outgoing="_Sb6vADz8EeqwwvtZSXxI_A"/>
<node xmi:type="uml:OpaqueAction" xmi:id="_PSC0ADz8EeqwwvtZSXxI_A" name="constraint: distance(f, s) in [0.5, 2]" visibility="protected" incoming="_Sb6vADz8EeqwwvtZSXxI_A" outgoing="_g_viwEUpEeq-Z_ECULnOOQ"/>
<node xmi:type="uml:FlowFinalNode" xmi:id="_8Pbz0Dz9EeqwwvtZSXxI_A" name="Final_Node" incoming="_g_viwEUpEeq-Z_ECULnOOQ"/>
</packagedElement>
</uml:Model>
<?xml version="1.0" encoding="UTF-8"?>
<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_wSJZEBEkEeqcA7mMSE3b-A" name="Test17">
<packageImport xmi:type="uml:PackageImport" xmi:id="_wUOcsBEkEeqcA7mMSE3b-A">
<importedPackage xmi:type="uml:Model" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#_0"/>
</packageImport>
<packagedElement xmi:type="uml:Activity" xmi:id="_sz7wUBElEeqcA7mMSE3b-A" name="Activity" node="_7EGDQBElEeqcA7mMSE3b-A _8WVuQBElEeqcA7mMSE3b-A _8peKADhTEeqhK-Tr1AkfpA _PSC0ADz8EeqwwvtZSXxI_A _8Pbz0Dz9EeqwwvtZSXxI_A">
<ownedComment xmi:type="uml:Comment" xmi:id="_N2YasDbPEeqLi4nplbzrvQ" annotatedElement="_8WVuQBElEeqcA7mMSE3b-A">
<body>t=0</body>
</ownedComment>
<ownedComment xmi:type="uml:Comment" xmi:id="_5xeOgDz7EeqwwvtZSXxI_A" annotatedElement="_sz7wUBElEeqcA7mMSE3b-A">
<body>t=0</body>
</ownedComment>
<ownedComment xmi:type="uml:Comment" xmi:id="_XECJoDz8EeqwwvtZSXxI_A" annotatedElement="_PSC0ADz8EeqwwvtZSXxI_A">
<body>t >=30</body>
</ownedComment>
<edge xmi:type="uml:ControlFlow" xmi:id="_USsZsBEmEeqcA7mMSE3b-A" target="_8WVuQBElEeqcA7mMSE3b-A" source="_7EGDQBElEeqcA7mMSE3b-A"/>
<edge xmi:type="uml:ControlFlow" xmi:id="_2srn0Dz7EeqwwvtZSXxI_A" target="_8peKADhTEeqhK-Tr1AkfpA" source="_8WVuQBElEeqcA7mMSE3b-A"/>
<edge xmi:type="uml:ControlFlow" xmi:id="_Sb6vADz8EeqwwvtZSXxI_A" target="_PSC0ADz8EeqwwvtZSXxI_A" source="_8peKADhTEeqhK-Tr1AkfpA"/>
<edge xmi:type="uml:ControlFlow" xmi:id="_g_viwEUpEeq-Z_ECULnOOQ" target="_8Pbz0Dz9EeqwwvtZSXxI_A" source="_PSC0ADz8EeqwwvtZSXxI_A"/>
<node xmi:type="uml:InitialNode" xmi:id="_7EGDQBElEeqcA7mMSE3b-A" name="Start" outgoing="_USsZsBEmEeqcA7mMSE3b-A"/>
<node xmi:type="uml:OpaqueAction" xmi:id="_8WVuQBElEeqcA7mMSE3b-A" name="spawn: vehicle f(x=1, y=1)" incoming="_USsZsBEmEeqcA7mMSE3b-A" outgoing="_2srn0Dz7EeqwwvtZSXxI_A"/>
<node xmi:type="uml:OpaqueAction" xmi:id="_8peKADhTEeqhK-Tr1AkfpA" name="spawn: obstacle s= cylinder(x=3,y=5,r=1, h=1)" incoming="_2srn0Dz7EeqwwvtZSXxI_A" outgoing="_Sb6vADz8EeqwwvtZSXxI_A"/>
<node xmi:type="uml:OpaqueAction" xmi:id="_PSC0ADz8EeqwwvtZSXxI_A" name="constraint: distance(f, s) in [0.5, 2]" visibility="protected" incoming="_Sb6vADz8EeqwwvtZSXxI_A" outgoing="_g_viwEUpEeq-Z_ECULnOOQ"/>
<node xmi:type="uml:FlowFinalNode" xmi:id="_8Pbz0Dz9EeqwwvtZSXxI_A" name="Final_Node" incoming="_g_viwEUpEeq-Z_ECULnOOQ"/>
</packagedElement>
</uml:Model>
<?xml version="1.0" encoding="UTF-8"?>
<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_wSJZEBEkEeqcA7mMSE3b-A" name="Test18">
<packageImport xmi:type="uml:PackageImport" xmi:id="_wUOcsBEkEeqcA7mMSE3b-A">
<importedPackage xmi:type="uml:Model" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#_0"/>
</packageImport>
<packagedElement xmi:type="uml:Activity" xmi:id="_sz7wUBElEeqcA7mMSE3b-A" name="Activity" node="_7EGDQBElEeqcA7mMSE3b-A _8WVuQBElEeqcA7mMSE3b-A _8peKADhTEeqhK-Tr1AkfpA _PSC0ADz8EeqwwvtZSXxI_A _8Pbz0Dz9EeqwwvtZSXxI_A">
<ownedComment xmi:type="uml:Comment" xmi:id="_N2YasDbPEeqLi4nplbzrvQ" annotatedElement="_8WVuQBElEeqcA7mMSE3b-A">
<body>t=0</body>
</ownedComment>
<ownedComment xmi:type="uml:Comment" xmi:id="_5xeOgDz7EeqwwvtZSXxI_A" annotatedElement="_sz7wUBElEeqcA7mMSE3b-A">
<body>t=0</body>
</ownedComment>
<ownedComment xmi:type="uml:Comment" xmi:id="_XECJoDz8EeqwwvtZSXxI_A" annotatedElement="_PSC0ADz8EeqwwvtZSXxI_A">
<body>t >=30&#xD;
</body>
</ownedComment>
<edge xmi:type="uml:ControlFlow" xmi:id="_USsZsBEmEeqcA7mMSE3b-A" target="_8WVuQBElEeqcA7mMSE3b-A" source="_7EGDQBElEeqcA7mMSE3b-A"/>
<edge xmi:type="uml:ControlFlow" xmi:id="_2srn0Dz7EeqwwvtZSXxI_A" target="_8peKADhTEeqhK-Tr1AkfpA" source="_8WVuQBElEeqcA7mMSE3b-A"/>
<edge xmi:type="uml:ControlFlow" xmi:id="_Sb6vADz8EeqwwvtZSXxI_A" target="_PSC0ADz8EeqwwvtZSXxI_A" source="_8peKADhTEeqhK-Tr1AkfpA"/>
<edge xmi:type="uml:ControlFlow" xmi:id="_g_viwEUpEeq-Z_ECULnOOQ" target="_8Pbz0Dz9EeqwwvtZSXxI_A" source="_PSC0ADz8EeqwwvtZSXxI_A"/>
<node xmi:type="uml:InitialNode" xmi:id="_7EGDQBElEeqcA7mMSE3b-A" name="Start" outgoing="_USsZsBEmEeqcA7mMSE3b-A"/>
<node xmi:type="uml:OpaqueAction" xmi:id="_8WVuQBElEeqcA7mMSE3b-A" name="spawn: vehicle f(x=1, y=1)" incoming="_USsZsBEmEeqcA7mMSE3b-A" outgoing="_2srn0Dz7EeqwwvtZSXxI_A"/>
<node xmi:type="uml:OpaqueAction" xmi:id="_8peKADhTEeqhK-Tr1AkfpA" name="spawn: obstacle s= sphere (x=1, y=5, r=0.1)" incoming="_2srn0Dz7EeqwwvtZSXxI_A" outgoing="_Sb6vADz8EeqwwvtZSXxI_A"/>
<node xmi:type="uml:OpaqueAction" xmi:id="_PSC0ADz8EeqwwvtZSXxI_A" name="constraint: distance(f, s) in [0.5, 2]" visibility="protected" incoming="_Sb6vADz8EeqwwvtZSXxI_A" outgoing="_g_viwEUpEeq-Z_ECULnOOQ"/>
<node xmi:type="uml:FlowFinalNode" xmi:id="_8Pbz0Dz9EeqwwvtZSXxI_A" name="Final_Node" incoming="_g_viwEUpEeq-Z_ECULnOOQ"/>
</packagedElement>
</uml:Model>