Module scenariogeneration.xosc.entities
scenariogeneration https://github.com/pyoscx/scenariogeneration
This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
Copyright (c) 2022 The scenariogeneration Authors.
Expand source code
"""
scenariogeneration
https://github.com/pyoscx/scenariogeneration
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at https://mozilla.org/MPL/2.0/.
Copyright (c) 2022 The scenariogeneration Authors.
"""
import xml.etree.ElementTree as ET
from .utils import (
Controller,
Dimensions,
Center,
BoundingBox,
Properties,
Parameter,
convert_float,
_BaseCatalog,
)
from .utils import (
EntityRef,
DynamicsConstraints,
CatalogFile,
CatalogReference,
ParameterDeclarations,
convert_enum,
)
from .exceptions import OpenSCENARIOVersionError
from .enumerations import (
VehicleCategory,
PedestrianCategory,
MiscObjectCategory,
ObjectType,
VersionBase,
Role,
)
# TODO: Add functionality for lists in add_entity_byref & add_entity_bytype
class Entities(VersionBase):
"""The Entities class creates the entities part of OpenScenario
Attributes
----------
scenario_objects (list of ScenarioObject): ScenarioObject type entities in the scenario
entities (list of Entity): Entity type of entities in the scenario
Methods
-------
parse(element)
parses a ElementTree created by the class and returns an instance of the class
add_scenario_object(entityobject,controller)
adds a ScenarioObject to the scenario
add_entity_bytype(name,entity_type)
adds an Entity by the type of entity
add_entity_byref(name,reference)
adds an Entity by a reference name
get_element()
Returns the full ElementTree of the class
"""
def __init__(self):
"""initalizes the Entities class"""
self.scenario_objects = []
self.entities = []
def __eq__(self, other):
if isinstance(other, Entities):
if (
self.scenario_objects == other.scenario_objects
and self.entities == other.entities
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of Entities
Parameters
----------
element (xml.etree.ElementTree.Element): A entities element (same as generated by the class itself)
Returns
-------
entities (Entities): a Entities object
"""
ent_ret = Entities()
scenario_objects = []
entity_selections = []
if element.find("ScenarioObject") != None:
for object in element.findall("ScenarioObject"):
scenario_objects.append(ScenarioObject.parse(object))
if element.find("EntitySelection") != None:
for entity in element.findall("EntitySelection"):
entity_selections.append(Entity.parse(entity))
ent_ret.entities = entity_selections
ent_ret.scenario_objects = scenario_objects
return ent_ret
def add_scenario_object(self, name, entityobject, controller=None):
"""adds a ScenarioObject to the scenario
Parameters
----------
name (str): name of the scenario object
entityobject (CatalogReference, Vehicle, Pedestrian, MiscObject, or ExternalObjectReference (V1.1)): object description
controller (CatalogReference, Controller, or list of CatalogReference/Controller): controller for the object
Default (None)
"""
self.scenario_objects.append(ScenarioObject(name, entityobject, controller))
return self
def add_entity_bytype(self, name, object_type):
"""adds an Entity to the scenario
Parameters
----------
name (str): name of the entity
object_type (ObjectType or list of ObjectType): type of entity
"""
self.entities.append(Entity(name, object_type=object_type))
return self
def add_entity_byref(self, name, entity):
"""adds an Entity to the scenario
Parameters
----------
name (str): name of the entity
entity (str): type of entity
"""
self.entities.append(Entity(name, entityref=entity))
return self
def get_element(self):
"""returns the elementTree of the Entities"""
element = ET.Element("Entities")
for i in self.scenario_objects:
element.append(i.get_element())
for i in self.entities:
element.append(i.get_element())
return element
class ScenarioObject(VersionBase):
"""The ScenarioObject creates a scenario object of OpenScenario
Parameters
----------
name (str): name of the object
entityobject (CatalogReference, Vehicle, Pedestrian, MiscObject, or ExternalObjectReference): object description
controller (CatalogReference, Controller, or list of CatalogReference/Controller): controller for the object
Attributes
----------
name (str): name of the object
entityobject (CatalogReference, Vehicle, Pedestrian, MiscObject, or ExternalObjectReference): object description
controller (list of CatalogReference/Controller): controller for the object
Methods
-------
parse(element)
parses a ElementTree created by the class and returns an instance of the class
get_element()
Returns the full ElementTree of the class
get_attributes()
returns the attributes of the class
"""
def __init__(self, name, entityobject, controller=None):
"""initalizes the ScenarioObject
Parameters
----------
name (str): name of the object
entityobject (CatalogReference, Vehicle, Pedestrian, MiscObject, or ExternalObjectReference): object description
controller (CatalogReference, Controller, or list of CatalogReference/Controller): controller for the object (multiple controllers are valid since OSC V1.2)
Default: None
"""
self.name = name
if not (
isinstance(entityobject, CatalogReference)
or isinstance(entityobject, Vehicle)
or isinstance(entityobject, Pedestrian)
or isinstance(entityobject, MiscObject)
or (
not self.isVersion(minor=0)
and isinstance(entityobject, ExternalObjectReference)
)
):
raise TypeError(
"entityobject is not of type CatalogReference, Vehicle, Pedestrian, MiscObject, nor ExternalObjectReference (or to old version of openscenario)"
)
if controller is not None:
if not isinstance(controller, list):
self.controller = [controller]
else:
self.controller = controller
for cnt in self.controller:
if cnt is not None and not (
isinstance(cnt, CatalogReference) or isinstance(cnt, Controller)
):
raise TypeError(
"controller input is not of type CatalogReference or Controller"
)
else:
self.controller = controller
self.entityobject = entityobject
def __eq__(self, other):
if isinstance(other, ScenarioObject):
if (
self.get_attributes() == other.get_attributes()
and self.controller == other.controller
and self.entityobject == other.entityobject
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of ScenarioObject
Parameters
----------
element (xml.etree.ElementTree.Element): A scenarioobject element (same as generated by the class itself)
Returns
-------
scenarioobject (ScenarioObject): a ScenarioObject object
"""
name = element.attrib["name"]
if element.find("CatalogReference") != None:
entityobject = CatalogReference.parse(element.find("CatalogReference"))
elif element.find("Vehicle") != None:
entityobject = Vehicle.parse(element.find("Vehicle"))
elif element.find("Pedestrian") != None:
entityobject = Pedestrian.parse(element.find("Pedestrian"))
elif element.find("MiscObject") != None:
entityobject = MiscObject.parse(element.find("MiscObject"))
elif element.find("ExternalObjectReference") != None:
entityobject = ExternalObjectReference.parse(
element.find("ExternalObjectReference")
)
controller = None
if element.find("ObjectController") != None:
controller = []
for object_controller_element in element.findall("ObjectController"):
if object_controller_element.find("Controller") != None:
controller.append(
Controller.parse(object_controller_element.find("Controller"))
)
elif object_controller_element.find("CatalogReference") != None:
controller.append(
CatalogReference.parse(
object_controller_element.find("CatalogReference")
)
)
return ScenarioObject(name, entityobject, controller)
def get_attributes(self):
"""returns the attributes of the Entity as a dict"""
return {"name": self.name}
def get_element(self):
"""returns the elementTree of the Entity"""
element = ET.Element("ScenarioObject", attrib=self.get_attributes())
element.append(self.entityobject.get_element())
if self.controller:
if self.version_minor < 2 and len(self.controller) > 1:
raise OpenSCENARIOVersionError(
"multiple controllers were added in OSC V1.2"
)
for cnt in self.controller:
objcont = ET.SubElement(element, "ObjectController")
objcont.append(cnt.get_element())
return element
class Entity(VersionBase):
"""The Entity class creates an Entity of OpenScenario
Can either use a object_type or entityref (not both)
Parameters
----------
name (str): name of the Entity
optionals:
object_type (ObjectType or list of ObjectType): the object_type to be used
entityref (str): reference to an entity
Attributes
----------
name (str): name of the Entity
object_type (ObjectType): the object_type to be used
entityref (str): reference to an entity
Methods
-------
parse(element)
parses a ElementTree created by the class and returns an instance of the class
get_element()
Returns the full ElementTree of the class
get_attributes()
Returns a dictionary of all attributes of the class
"""
def __init__(self, name, object_type=None, entityref=None):
"""Initalizes the Entity
Parameters
----------
name (str): name of the Entity
optionals (only use one):
object_type (ObjectType): the object_type to be used
entityref (str): reference to an entity
"""
self.name = name
self.object_type = []
self.entity = []
if (object_type != None) and (entityref != None):
raise KeyError("only one of objecttype or entityref are alowed")
if (object_type == None) and (entityref == None):
raise KeyError("either objecttype or entityref is requiered")
if entityref:
if isinstance(entityref, list):
self.entity = [EntityRef(x) for x in entityref]
else:
self.entity.append(EntityRef(entityref))
self.object_type = None
else:
if isinstance(object_type, list):
self.object_type = [convert_enum(x, ObjectType) for x in object_type]
else:
self.object_type.append(convert_enum(object_type, ObjectType))
self.entity = None
def __eq__(self, other):
if isinstance(other, Entity):
if (
self.get_attributes() == other.get_attributes()
and self.object_type == other.object_type
and self.entity == other.entity
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of Entity
Parameters
----------
element (xml.etree.ElementTree.Element): A entity element (same as generated by the class itself)
Returns
-------
entity (Entity): a Entity object
"""
name = element.attrib["name"]
bytypes = []
entity_refs = []
members_element = element.find("Members")
if members_element.find("ByType") != None:
types = members_element.findall("ByType")
for type in types:
bytypes.append(convert_enum(type.attrib["objectType"], ObjectType))
entity_refs = None
elif members_element.find("EntityRef") != None:
entities = members_element.findall("EntityRef")
for entity in entities:
entity_refs.append(entity.attrib["entityRef"])
bytypes = None
return Entity(name, object_type=bytypes, entityref=entity_refs)
def get_attributes(self):
"""returns the attributes of the Entity as a dict"""
return {"name": self.name}
def get_element(self):
"""returns the elementTree of the Entity"""
element = ET.Element("EntitySelection", attrib=self.get_attributes())
members = ET.SubElement(element, "Members")
if self.entity:
for entity in self.entity:
members.append(entity.get_element())
if self.object_type:
for object_type in self.object_type:
ET.SubElement(
members, "ByType", attrib={"objectType": object_type.get_name()}
)
return element
class Pedestrian(_BaseCatalog):
"""the Pedestrian class creates a pedestrian type entity of openscenario
Parameters
----------
name (str): name of the type (req for catalog)
mass (float): mass of the pedestrian
boundingbox (BoundingBox): the bounding box of the pedestrian
category (PedestrianCategory): type of of pedestrian
model (str): definition model of the pedestrian
Default: None
role (Role): the role of the Pedestrian (valid from OpenSCENARIO V1.2)
Default: None
Attributes
----------
name (str): name of the pedestrian
model (str): definition model of the pedestrian
mass (float): mass of the pedestrian
category (PedestrianCategory): type of pedestrian
boundingbox (BoundingBox): the bounding box of the pedestrian
parameters (ParameterDeclaration): Parameter declarations of the pedestrian
properties (Properties): additional properties of the pedestrian
role (Role): the role of the Pedestrian
Methods
-------
parse(element)
parses a ElementTree created by the class and returns an instance of the class itself
add_parameter(parameter)
adds a parameter declaration to the pedestrian
add_property(name, value)
adds a single property to the pedestrian
add_property_file(filename)
adds a property file to the pedestrian
append_to_catalog(filename)
adds the vehicle to an existing pedestrian
dump_to_catalog(filename,name,description,author)
crates a new catalog with the pedestrian
get_element()
Returns the full ElementTree of the class
get_attributes()
Returns a dictionary of all attributes of the class
"""
def __init__(self, name, mass, category, boundingbox, model=None, role=None):
"""initalzie the Pedestrian Class
Parameters
----------
name (str): name of the type (req for catalog)
mass (float): mass of the pedestrian
category (PedestrianCategory): type of of pedestrian
boundingbox (BoundingBox): the bounding box of the pedestrian
model (str): definition model of the pedestrian
Default: None
role (Role): the role of the Vehicle
Default: None
"""
super().__init__()
self.name = name
self.model = model
self.mass = convert_float(mass)
self.category = convert_enum(category, PedestrianCategory)
if not isinstance(boundingbox, BoundingBox):
raise TypeError("boundingbox input is not of type BoundingBox")
self.boundingbox = boundingbox
self.properties = Properties()
self.role = convert_enum(role, Role, True)
def __eq__(self, other):
if isinstance(other, Pedestrian):
if (
self.get_attributes() == other.get_attributes()
and self.boundingbox == other.boundingbox
and self.properties == other.properties
and self.parameters == other.parameters
and self.role == other.role
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of Pedestrian
Parameters
----------
element (xml.etree.ElementTree.Element): A pedestrian element (same as generated by the class itself)
Returns
-------
pedestrian (Pedestrian): a Pedestrian object
"""
name = element.attrib["name"]
mass = convert_float(element.attrib["mass"])
model = None
if "model3d" in element.attrib:
model = element.attrib["model3d"]
elif "model" in element.attrib:
model = element.attrib["model"]
category = convert_enum(
element.attrib["pedestrianCategory"], PedestrianCategory
)
if element.find("ParameterDeclarations") != None:
parameters = ParameterDeclarations.parse(
element.find("ParameterDeclarations")
)
else:
parameters = ParameterDeclarations()
boundingbox = BoundingBox.parse(element.find("BoundingBox"))
properties = Properties.parse(element.find("Properties"))
role = None
if "role" in element.attrib:
role = convert_enum(element.attrib["role"], Role)
pedestrian = Pedestrian(name, mass, category, boundingbox, model, role)
pedestrian.parameters = parameters
pedestrian.properties = properties
return pedestrian
def add_property(self, name, value):
"""adds a single property to the pedestrian
Parameters
----------
name (str): name of the property
value (str): value of the property
"""
self.properties.add_property(name, value)
return self
def add_property_file(self, filename):
"""adds a property file to the pedestrian
Parameters
----------
filename (str): filename of a property file
"""
self.properties.add_file(filename)
return self
def get_attributes(self):
"""returns the attributes as a dict of the pedestrian"""
retdict = {}
retdict["name"] = str(self.name)
retdict["pedestrianCategory"] = self.category.get_name()
if self.isVersion(minor=0) and self.model is None:
raise OpenSCENARIOVersionError("model is required for OSC 1.0")
if self.model is not None:
if self.isVersion(minor=0):
retdict["model"] = self.model
else:
retdict["model3d"] = self.model
retdict["mass"] = str(self.mass)
if self.role:
if self.isVersionEqLess(minor=1):
raise OpenSCENARIOVersionError(
"role for Pedestrian was added in OSC V1.2"
)
retdict["role"] = self.role.get_name()
return retdict
def get_element(self):
"""returns the elementTree of the pedestrian"""
element = ET.Element("Pedestrian", attrib=self.get_attributes())
self.add_parameters_to_element(element)
element.append(self.boundingbox.get_element())
element.append(self.properties.get_element())
return element
class MiscObject(_BaseCatalog):
"""the MiscObject Class creates a MiscObject for openscenario
Parameters
----------
name (str): name of the MiscObject
mass (float): mass of the object
category (MiscObjectCategory): the category of the misc object
boundingbox (BoundingBox): the bounding box of the MiscObject
model3d (str): path to model file (valid from V1.1)
Default: None
Attributes
----------
name (str): name of the object
mass (float): mass of the object
misc_type (MiscObjectCategory): type of misc object
boundingbox (BoundingBox): the bounding box of the MiscObject
parameters (ParameterDeclaration): Parameter declarations of the MiscObject
properties (Properties): additional properties of the MiscObject
model3d (str): path to model file (valid from V1.1)
Default: None
Methods
-------
add_parameter(parameter)
adds a parameter declaration to the MiscObject
add_property(name, value)
adds a single property to the MiscObject
add_property_file(filename)
adds a property file to the MiscObject
append_to_catalog(filename)
adds the MiscObject to an existing catalog
dump_to_catalog(filename,name,description,author)
crates a new catalog with the MiscObject
get_element()
Returns the full ElementTree of the class
get_attributes()
Returns a dictionary of all attributes of the class
parse(element)
parses a ElementTree created by the class and returns an instance of the class
"""
def __init__(self, name, mass, category, boundingbox, model3d=None):
"""initalzie the MiscObject Class
Parameters
----------
name (str): name of the MiscObject
mass (float): mass of the object
category (MiscObjectCategory): the category of the misc object
boundingbox (BoundingBox): the bounding box of the MiscObject
model3d (str): path to model file (valid from V1.1)
Default: None
"""
super().__init__()
self.name = name
self.mass = convert_float(mass)
self.category = convert_enum(category, MiscObjectCategory)
if not isinstance(boundingbox, BoundingBox):
raise TypeError("boundingbox input is not of type BoundingBox")
self.boundingbox = boundingbox
self.properties = Properties()
self.model3d = model3d
def __eq__(self, other):
if isinstance(other, MiscObject):
if (
self.get_attributes() == other.get_attributes()
and self.boundingbox == other.boundingbox
and self.properties == other.properties
and self.parameters == other.parameters
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element to MiscObject
Parameters
----------
element (xml.etree.ElementTree.Element): A MiscObject element (same as generated by the class itself)
Returns
------
object (MiscObject): a MiscObject object
"""
model3d = None
if "model3d" in element.attrib:
model3d = element.attrib["model3d"]
mass = convert_float(element.attrib["mass"])
name = element.attrib["name"]
properties = Properties.parse(element.find("Properties"))
boundingbox = BoundingBox.parse(element.find("BoundingBox"))
category = convert_enum(
element.attrib["miscObjectCategory"], MiscObjectCategory
)
if element.find("ParameterDeclarations") != None:
parameters = ParameterDeclarations.parse(
element.find("ParameterDeclarations")
)
else:
parameters = ParameterDeclarations()
object = MiscObject(name, mass, category, boundingbox, model3d)
object.parameters = parameters
object.properties = properties
return object
def add_property(self, name, value):
"""adds a single property to the MiscObject
Parameters
----------
name (str): name of the property
value (str): value of the property
"""
self.properties.add_property(name, value)
return self
def add_property_file(self, filename):
"""adds a property file to the MiscObject
Parameters
----------
filename (str): filename of a property file
"""
self.properties.add_file(filename)
return self
def get_attributes(self):
"""returns the attributes as a dict of the MiscObject"""
retdict = {}
retdict["name"] = str(self.name)
retdict["miscObjectCategory"] = self.category.get_name()
retdict["mass"] = str(self.mass)
if not self.isVersion(minor=0) and self.model3d:
retdict["model3d"] = self.model3d
return retdict
def get_element(self):
"""returns the elementTree of the MiscObject"""
element = ET.Element("MiscObject", attrib=self.get_attributes())
self.add_parameters_to_element(element)
element.append(self.boundingbox.get_element())
element.append(self.properties.get_element())
return element
class Vehicle(_BaseCatalog):
"""the Vehicle Class creates a Vehicle for openscenario
Parameters
----------
name (str): name of the vehicle
vehicle_type (VehicleCategory): type of vehicle
boundingbox (BoundingBox): the bounding box of the vehicle
frontaxle (Axle): the front axle properties of the vehicle
rearaxle (Axle): the back axle properties of the vehicle
max_speed (float): the maximum speed of the vehicle
max_acceleration (float): the maximum acceleration of the vehicle
max_deceleration (float): the maximum deceleration of the vehicle
mass (float): the mass of the vehicle (valid from OpenSCENARIO V1.1)
Default: None
model3d (str): path to model file (valid from V1.1)
Default: None
max_acceleration_rate (float): the maximum acceleration rate (jerk) of the vehicle (valid from OpenSCENARIO V1.2)
Default: None
max_deceleration_rate (float): the maximum acceleration rate (jerk) of the vehicle (valid from OpenSCENARIO V1.2)
Default: None
role (Role): the role of the Vehicle (valid from OpenSCENARIO V1.2)
Default: None
Attributes
----------
name (str): name of the vehicle
vehicle_type (VehicleCategory): type of vehicle
boundingbox (BoundingBox): the bounding box of the vehicle
axles (Axles): an Axles object
dynamics (DynamicsConstraints): the allowed dynamics of the vehicle
parameters (ParameterDeclaration): Parameter declarations of the vehicle
properties (Properties): additional properties of the vehicle
mass (float): the mass of the vehicle
model3d (str): path to model file (valid from V1.1)
role (Role): the role of the Vehicle
Methods
-------
parse(element)
parses a ElementTree created by the class and returns an instance of the class itself
add_axle(axle)
adds an additional axle to the vehicle
add_parameter(parameter)
adds a parameter declaration to the vehicle
add_property(name, value)
adds a single property to the vehicle
add_property_file(filename)
adds a property file to the vehicle
append_to_catalog(filename)
adds the vehicle to an existing catalog
dump_to_catalog(filename,name,description,author)
crates a new catalog with the vehicle
get_element()
Returns the full ElementTree of the class
get_attributes()
Returns a dictionary of all attributes of the class
"""
def __init__(
self,
name,
vehicle_type,
boundingbox,
frontaxle,
rearaxle,
max_speed,
max_acceleration,
max_deceleration,
mass=None,
model3d=None,
max_acceleration_rate=None,
max_deceleration_rate=None,
role=None,
):
"""initalzie the Vehicle Class
Parameters
----------
name (str): name of the vehicle
vehicle_type (VehicleCategory): type of vehicle
boundingbox (BoundingBox): the bounding box of the vehicle
frontaxle (Axle): the front axle properties of the vehicle
rearaxle (Axle): the back axle properties of the vehicle
max_speed (float): the maximum speed of the vehicle
max_acceleration (float): the maximum acceleration of the vehicle
max_deceleration (float): the maximum deceleration of the vehicle
mass (float): the mass of the vehicle (valid from OpenSCENARIO V1.1)
Default: None
model3d (str): path to model file (valid from V1.1)
Default: None
max_acceleration_rate (float): the maximum acceleration rate (jerk) of the vehicle (valid from OpenSCENARIO V1.2)
Default: None
max_deceleration_rate (float): the maximum acceleration rate (jerk) of the vehicle (valid from OpenSCENARIO V1.2)
Default: None
role (Role): the role of the Vehicle
Default: None
"""
super().__init__()
self.name = name
if not isinstance(boundingbox, BoundingBox):
raise TypeError("boundingbox input is not of type BoundingBox")
self.vehicle_type = convert_enum(vehicle_type, VehicleCategory)
self.boundingbox = boundingbox
self.axles = Axles(frontaxle, rearaxle)
self.dynamics = DynamicsConstraints(
max_acceleration,
max_deceleration,
max_speed,
max_acceleration_rate,
max_deceleration_rate,
)
self.properties = Properties()
self.mass = convert_float(mass)
self.model3d = model3d
self.role = convert_enum(role, Role, True)
def __eq__(self, other):
if isinstance(other, Vehicle):
if (
self.get_attributes() == other.get_attributes()
and self.boundingbox == other.boundingbox
and self.properties == other.properties
and self.axles == other.axles
and self.dynamics == other.dynamics
and self.parameters == other.parameters
and self.mass == other.mass
and self.role == other.role
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of Vehicle
Parameters
----------
element (xml.etree.ElementTree.Element): A vehicle element (same as generated by the class itself)
Returns
-------
vehicle (Vehicle): a Vehicle object
"""
name = element.attrib["name"]
mass = None
if "mass" in element.attrib:
mass = convert_float(element.attrib["mass"])
vehicle_type = convert_enum(element.attrib["vehicleCategory"], VehicleCategory)
model3d = None
if "model3d" in element.attrib:
model3d = element.attrib["model3d"]
# if element.find('ParameterDeclarations'):
if element.find("ParameterDeclarations") != None:
parameters = ParameterDeclarations.parse(
element.find("ParameterDeclarations")
)
else:
parameters = ParameterDeclarations()
boundingbox = BoundingBox.parse(element.find("BoundingBox"))
properties = Properties.parse(element.find("Properties"))
performance = DynamicsConstraints.parse(element.find("Performance"))
max_speed = performance.max_speed
max_acc = performance.max_acceleration
max_dec = performance.max_deceleration
max_acc_rate = performance.max_acceleration_rate
max_dec_rate = performance.max_deceleration_rate
axles_element = element.find("Axles")
frontaxle = Axle.parse(axles_element.find("FrontAxle"))
rearaxle = Axle.parse(axles_element.find("RearAxle"))
role = None
if "role" in element.attrib:
role = convert_enum(element.attrib["role"], Role)
vehicle = Vehicle(
name,
vehicle_type,
boundingbox,
frontaxle,
rearaxle,
max_speed,
max_acc,
max_dec,
mass,
model3d,
max_acc_rate,
max_dec_rate,
role,
)
vehicle.properties = properties
vehicle.parameters = parameters
additional_axles = axles_element.findall("AdditionalAxle")
if additional_axles != None:
for axle in additional_axles:
vehicle.axles.add_axle(Axle.parse(axle))
return vehicle
def add_axle(self, axle):
"""adds an additional axle to the vehicle
Parameters
----------
axle (Axle): an additional Axle
"""
self.axles.add_axle(axle)
return self
def add_property(self, name, value):
"""adds a single property to the vehicle
Parameters
----------
name (str): name of the property
value (str): value of the property
"""
self.properties.add_property(name, value)
return self
def add_property_file(self, filename):
"""adds a property file to the vehicle
Parameters
----------
filename (str): filename of a property file
"""
self.properties.add_file(filename)
return self
def get_attributes(self):
"""returns the attributes as a dict of the Vehicle"""
retdict = {}
retdict["name"] = str(self.name)
retdict["vehicleCategory"] = self.vehicle_type.get_name()
if self.mass:
if self.isVersion(minor=0):
raise OpenSCENARIOVersionError(
"Mass of a vehcile was introduced in OSC 1.1"
)
retdict["mass"] = str(self.mass)
if self.model3d:
if self.isVersion(minor=0):
raise OpenSCENARIOVersionError(
"model3d of a vehcile was introduced in OSC 1.1"
)
retdict["model3d"] = self.model3d
if self.role:
if self.isVersionEqLess(minor=1):
raise OpenSCENARIOVersionError(
"the role of a vehcile was introduced in OSC 1.1"
)
retdict["role"] = self.role.get_name()
return retdict
def get_element(self):
"""returns the elementTree of the Vehicle"""
element = ET.Element("Vehicle", attrib=self.get_attributes())
self.add_parameters_to_element(element)
element.append(self.boundingbox.get_element())
element.append(self.dynamics.get_element("Performance"))
element.append(self.axles.get_element())
element.append(self.properties.get_element())
return element
class Axle(VersionBase):
"""the Axle describes the axle properties of a vehicle
Parameters
----------
maxsteer (float): max steering angle
wheeldia (float): diameter of wheel
track_width (float): distance between wheelcenter
xpos (float): x position of axle relative to car reference
zpos (float): z position of axle relative to car reference
Attributes
----------
maxsteer (float): max steering angle
wheeldia (float): diameter of wheel
track_width (float): distance between wheelcenter
xpos (float): x position of axle relative to car reference
zpos (float): z position of axle relative to car reference
Methods
-------
get_element()
Returns the full ElementTree of the class
get_attributes()
Returns the attributes of the class
parse(element)
parses a ElementTree created by the class and returns an instance of the class
"""
def __init__(self, maxsteer, wheeldia, track_width, xpos, zpos):
"""initalzie the Axle
Parameters
----------
maxsteer (float): max steering angle
wheeldia (float): diameter of wheel
track_width (float): distance between wheelcenter
xpos (float): x position of axle relative to car reference
zpos (float): z position of axle relative to car reference
"""
self.maxsteer = convert_float(maxsteer)
self.wheeldia = convert_float(wheeldia)
self.track_width = convert_float(track_width)
self.xpos = convert_float(xpos)
self.zpos = convert_float(zpos)
@staticmethod
def parse(element):
"""Parses the xml element of Axle
Parameters
----------
element (xml.etree.ElementTree.Element): A axle element (same as generated by the class itself
Returns
-------
axle (Axle): a Axle object
"""
maxsteer = convert_float(element.attrib["maxSteering"])
wheeldia = convert_float(element.attrib["wheelDiameter"])
track_width = convert_float(element.attrib["trackWidth"])
xpos = convert_float(element.attrib["positionX"])
zpos = convert_float(element.attrib["positionZ"])
return Axle(maxsteer, wheeldia, track_width, xpos, zpos)
def __eq__(self, other):
if isinstance(other, Axle):
if self.get_attributes() == other.get_attributes():
return True
return False
def get_attributes(self):
"""returns the attributes of the Axle as a dict"""
return {
"maxSteering": str(self.maxsteer),
"wheelDiameter": str(self.wheeldia),
"trackWidth": str(self.track_width),
"positionX": str(self.xpos),
"positionZ": str(self.zpos),
}
def get_element(self, elementname="AdditionalAxle"):
"""returns the elementTree of the Axle"""
return ET.Element(elementname, attrib=self.get_attributes())
class Axles(VersionBase):
"""the Axles combines the different Axles to one Element
Parameters
----------
frontaxle (Axle): Axle properties of the front axle
rearaxle (Axle): Axle properties of the rear axle
Attributes
----------
frontaxle (Axle): Axle properties of the front axle
rearaxle (Axle): Axle properties of the rear axle
additionals (Axle): additional axles if requiered
Methods
-------
add_axle(Axle)
adds an additional axle to the Axles
get_element()
Returns the full ElementTree of the class
parse(element)
parses a ElementTree created by the class and returns an instance of the class
"""
def __init__(self, frontaxle, rearaxle):
"""initalzie the Axle
Parameters
----------
frontaxle (Axle): Axle properties of the front axle
rearaxle (Axle): Axle properties of the rear axle
"""
if not isinstance(frontaxle, Axle):
raise TypeError("frontaxle input is not of type Axle")
if not isinstance(rearaxle, Axle):
raise TypeError("rearaxle input is not of type Axle")
self.frontaxle = frontaxle
self.rearaxle = rearaxle
self.additionals = []
def __eq__(self, other):
if isinstance(other, Axles):
if (
self.frontaxle == other.frontaxle
and self.rearaxle == other.rearaxle
and self.additionals == other.additionals
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of Axles
Parameters
----------
element (xml.etree.ElementTree.Element): A axles element (same as generated by the class itself
Returns
-------
axles (Axles): axles object
"""
frontaxle = Axle.parse(element.find("FrontAxle"))
rearaxle = Axle.parse(element.find("RearAxle"))
axles = Axles(frontaxle, rearaxle)
additionals = element.findall("AdditionalAxle")
for additional in additionals:
axle = Axle.parse(additional)
axles.add_axle(axle)
return axles
def add_axle(self, axle):
"""adds an additional axle to the Axles
Parameters
----------
frontaxle (Axle): Axle properties of the front axle
"""
if not isinstance(axle, Axle):
raise TypeError("axle input is not of type Axle")
self.additionals.append(axle)
return self
def get_element(self):
"""returns the elementTree of the Axle"""
element = ET.Element("Axles")
element.append(self.frontaxle.get_element(elementname="FrontAxle"))
element.append(self.rearaxle.get_element(elementname="RearAxle"))
for ax in self.additionals:
element.append(ax.get_element())
return element
class ExternalObjectReference(VersionBase):
"""the ExternalObjectReference describes the EntityObject ExternalObjectReference (valid from V1.1)
Parameters
----------
name (str): identifier of the external object
Attributes
----------
name (str): identifier of the external object
Methods
-------
parse(element)
parses a ElementTree created by the class and returns an instance of the class
get_element()
Returns the full ElementTree of the class
get_attributes()
Returns the attributes of the class
"""
def __init__(self, name):
"""initalzie the ExternalObjectReference
Parameters
----------
name (str): identifier of the external object
"""
self.name = name
def __eq__(self, other):
if isinstance(other, ExternalObjectReference):
if self.get_attributes() == other.get_attributes():
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of ExternalObjectReference
Parameters
----------
element (xml.etree.ElementTree.Element): A ExternalObjectReference element (same as generated by the class itself)
Returns
-------
reference (ExternalObjectReference): a ExternalObjectReference object
"""
name = element.attrib["name"]
return ExternalObjectReference(name)
def get_attributes(self):
"""returns the attributes of the Axle as a dict"""
return {"name": self.name}
def get_element(self):
"""returns the elementTree of the Axle"""
if self.isVersion(minor=0):
raise OpenSCENARIOVersionError(
"ExternalObjectReference was introduced in OSC 1.1"
)
return ET.Element("ExternalObjectReference", attrib=self.get_attributes())
Classes
class Axle (maxsteer, wheeldia, track_width, xpos, zpos)
-
the Axle describes the axle properties of a vehicle
Parameters
maxsteer (float): max steering angle wheeldia (float): diameter of wheel track_width (float): distance between wheelcenter xpos (float): x position of axle relative to car reference zpos (float): z position of axle relative to car reference
Attributes
maxsteer (float): max steering angle wheeldia (float): diameter of wheel track_width (float): distance between wheelcenter xpos (float): x position of axle relative to car reference zpos (float): z position of axle relative to car reference
Methods
get_element() Returns the full ElementTree of the class get_attributes() Returns the attributes of the class parse(element) parses a ElementTree created by the class and returns an instance of the class
initalzie the Axle
Parameters
maxsteer (float): max steering angle wheeldia (float): diameter of wheel track_width (float): distance between wheelcenter xpos (float): x position of axle relative to car reference zpos (float): z position of axle relative to car reference
Expand source code
class Axle(VersionBase): """the Axle describes the axle properties of a vehicle Parameters ---------- maxsteer (float): max steering angle wheeldia (float): diameter of wheel track_width (float): distance between wheelcenter xpos (float): x position of axle relative to car reference zpos (float): z position of axle relative to car reference Attributes ---------- maxsteer (float): max steering angle wheeldia (float): diameter of wheel track_width (float): distance between wheelcenter xpos (float): x position of axle relative to car reference zpos (float): z position of axle relative to car reference Methods ------- get_element() Returns the full ElementTree of the class get_attributes() Returns the attributes of the class parse(element) parses a ElementTree created by the class and returns an instance of the class """ def __init__(self, maxsteer, wheeldia, track_width, xpos, zpos): """initalzie the Axle Parameters ---------- maxsteer (float): max steering angle wheeldia (float): diameter of wheel track_width (float): distance between wheelcenter xpos (float): x position of axle relative to car reference zpos (float): z position of axle relative to car reference """ self.maxsteer = convert_float(maxsteer) self.wheeldia = convert_float(wheeldia) self.track_width = convert_float(track_width) self.xpos = convert_float(xpos) self.zpos = convert_float(zpos) @staticmethod def parse(element): """Parses the xml element of Axle Parameters ---------- element (xml.etree.ElementTree.Element): A axle element (same as generated by the class itself Returns ------- axle (Axle): a Axle object """ maxsteer = convert_float(element.attrib["maxSteering"]) wheeldia = convert_float(element.attrib["wheelDiameter"]) track_width = convert_float(element.attrib["trackWidth"]) xpos = convert_float(element.attrib["positionX"]) zpos = convert_float(element.attrib["positionZ"]) return Axle(maxsteer, wheeldia, track_width, xpos, zpos) def __eq__(self, other): if isinstance(other, Axle): if self.get_attributes() == other.get_attributes(): return True return False def get_attributes(self): """returns the attributes of the Axle as a dict""" return { "maxSteering": str(self.maxsteer), "wheelDiameter": str(self.wheeldia), "trackWidth": str(self.track_width), "positionX": str(self.xpos), "positionZ": str(self.zpos), } def get_element(self, elementname="AdditionalAxle"): """returns the elementTree of the Axle""" return ET.Element(elementname, attrib=self.get_attributes())
Ancestors
Static methods
def parse(element)
-
Parses the xml element of Axle
Parameters
element (xml.etree.ElementTree.Element): A axle element (same as generated by the class itself
Returns
axle (Axle): a Axle object
Expand source code
@staticmethod def parse(element): """Parses the xml element of Axle Parameters ---------- element (xml.etree.ElementTree.Element): A axle element (same as generated by the class itself Returns ------- axle (Axle): a Axle object """ maxsteer = convert_float(element.attrib["maxSteering"]) wheeldia = convert_float(element.attrib["wheelDiameter"]) track_width = convert_float(element.attrib["trackWidth"]) xpos = convert_float(element.attrib["positionX"]) zpos = convert_float(element.attrib["positionZ"]) return Axle(maxsteer, wheeldia, track_width, xpos, zpos)
Methods
def get_attributes(self)
-
returns the attributes of the Axle as a dict
Expand source code
def get_attributes(self): """returns the attributes of the Axle as a dict""" return { "maxSteering": str(self.maxsteer), "wheelDiameter": str(self.wheeldia), "trackWidth": str(self.track_width), "positionX": str(self.xpos), "positionZ": str(self.zpos), }
def get_element(self, elementname='AdditionalAxle')
-
returns the elementTree of the Axle
Expand source code
def get_element(self, elementname="AdditionalAxle"): """returns the elementTree of the Axle""" return ET.Element(elementname, attrib=self.get_attributes())
class Axles (frontaxle, rearaxle)
-
the Axles combines the different Axles to one Element
Parameters
frontaxle (Axle): Axle properties of the front axle rearaxle (Axle): Axle properties of the rear axle
Attributes
frontaxle (Axle): Axle properties of the front axle rearaxle (Axle): Axle properties of the rear axle additionals (Axle): additional axles if requiered
Methods
add_axle(Axle) adds an additional axle to the Axles get_element() Returns the full ElementTree of the class parse(element) parses a ElementTree created by the class and returns an instance of the class
initalzie the Axle
Parameters
frontaxle (Axle): Axle properties of the front axle rearaxle (Axle): Axle properties of the rear axle
Expand source code
class Axles(VersionBase): """the Axles combines the different Axles to one Element Parameters ---------- frontaxle (Axle): Axle properties of the front axle rearaxle (Axle): Axle properties of the rear axle Attributes ---------- frontaxle (Axle): Axle properties of the front axle rearaxle (Axle): Axle properties of the rear axle additionals (Axle): additional axles if requiered Methods ------- add_axle(Axle) adds an additional axle to the Axles get_element() Returns the full ElementTree of the class parse(element) parses a ElementTree created by the class and returns an instance of the class """ def __init__(self, frontaxle, rearaxle): """initalzie the Axle Parameters ---------- frontaxle (Axle): Axle properties of the front axle rearaxle (Axle): Axle properties of the rear axle """ if not isinstance(frontaxle, Axle): raise TypeError("frontaxle input is not of type Axle") if not isinstance(rearaxle, Axle): raise TypeError("rearaxle input is not of type Axle") self.frontaxle = frontaxle self.rearaxle = rearaxle self.additionals = [] def __eq__(self, other): if isinstance(other, Axles): if ( self.frontaxle == other.frontaxle and self.rearaxle == other.rearaxle and self.additionals == other.additionals ): return True return False @staticmethod def parse(element): """Parses the xml element of Axles Parameters ---------- element (xml.etree.ElementTree.Element): A axles element (same as generated by the class itself Returns ------- axles (Axles): axles object """ frontaxle = Axle.parse(element.find("FrontAxle")) rearaxle = Axle.parse(element.find("RearAxle")) axles = Axles(frontaxle, rearaxle) additionals = element.findall("AdditionalAxle") for additional in additionals: axle = Axle.parse(additional) axles.add_axle(axle) return axles def add_axle(self, axle): """adds an additional axle to the Axles Parameters ---------- frontaxle (Axle): Axle properties of the front axle """ if not isinstance(axle, Axle): raise TypeError("axle input is not of type Axle") self.additionals.append(axle) return self def get_element(self): """returns the elementTree of the Axle""" element = ET.Element("Axles") element.append(self.frontaxle.get_element(elementname="FrontAxle")) element.append(self.rearaxle.get_element(elementname="RearAxle")) for ax in self.additionals: element.append(ax.get_element()) return element
Ancestors
Static methods
def parse(element)
-
Parses the xml element of Axles
Parameters
element (xml.etree.ElementTree.Element): A axles element (same as generated by the class itself
Returns
axles (Axles): axles object
Expand source code
@staticmethod def parse(element): """Parses the xml element of Axles Parameters ---------- element (xml.etree.ElementTree.Element): A axles element (same as generated by the class itself Returns ------- axles (Axles): axles object """ frontaxle = Axle.parse(element.find("FrontAxle")) rearaxle = Axle.parse(element.find("RearAxle")) axles = Axles(frontaxle, rearaxle) additionals = element.findall("AdditionalAxle") for additional in additionals: axle = Axle.parse(additional) axles.add_axle(axle) return axles
Methods
def add_axle(self, axle)
-
adds an additional axle to the Axles
Parameters
frontaxle (Axle): Axle properties of the front axle
Expand source code
def add_axle(self, axle): """adds an additional axle to the Axles Parameters ---------- frontaxle (Axle): Axle properties of the front axle """ if not isinstance(axle, Axle): raise TypeError("axle input is not of type Axle") self.additionals.append(axle) return self
def get_element(self)
-
returns the elementTree of the Axle
Expand source code
def get_element(self): """returns the elementTree of the Axle""" element = ET.Element("Axles") element.append(self.frontaxle.get_element(elementname="FrontAxle")) element.append(self.rearaxle.get_element(elementname="RearAxle")) for ax in self.additionals: element.append(ax.get_element()) return element
class Entities
-
The Entities class creates the entities part of OpenScenario
Attributes
scenario_objects (list of ScenarioObject): ScenarioObject type entities in the scenario entities (list of Entity): Entity type of entities in the scenario
Methods
parse(element) parses a ElementTree created by the class and returns an instance of the class add_scenario_object(entityobject,controller) adds a ScenarioObject to the scenario add_entity_bytype(name,entity_type) adds an Entity by the type of entity add_entity_byref(name,reference) adds an Entity by a reference name get_element() Returns the full ElementTree of the class
initalizes the Entities class
Expand source code
class Entities(VersionBase): """The Entities class creates the entities part of OpenScenario Attributes ---------- scenario_objects (list of ScenarioObject): ScenarioObject type entities in the scenario entities (list of Entity): Entity type of entities in the scenario Methods ------- parse(element) parses a ElementTree created by the class and returns an instance of the class add_scenario_object(entityobject,controller) adds a ScenarioObject to the scenario add_entity_bytype(name,entity_type) adds an Entity by the type of entity add_entity_byref(name,reference) adds an Entity by a reference name get_element() Returns the full ElementTree of the class """ def __init__(self): """initalizes the Entities class""" self.scenario_objects = [] self.entities = [] def __eq__(self, other): if isinstance(other, Entities): if ( self.scenario_objects == other.scenario_objects and self.entities == other.entities ): return True return False @staticmethod def parse(element): """Parses the xml element of Entities Parameters ---------- element (xml.etree.ElementTree.Element): A entities element (same as generated by the class itself) Returns ------- entities (Entities): a Entities object """ ent_ret = Entities() scenario_objects = [] entity_selections = [] if element.find("ScenarioObject") != None: for object in element.findall("ScenarioObject"): scenario_objects.append(ScenarioObject.parse(object)) if element.find("EntitySelection") != None: for entity in element.findall("EntitySelection"): entity_selections.append(Entity.parse(entity)) ent_ret.entities = entity_selections ent_ret.scenario_objects = scenario_objects return ent_ret def add_scenario_object(self, name, entityobject, controller=None): """adds a ScenarioObject to the scenario Parameters ---------- name (str): name of the scenario object entityobject (CatalogReference, Vehicle, Pedestrian, MiscObject, or ExternalObjectReference (V1.1)): object description controller (CatalogReference, Controller, or list of CatalogReference/Controller): controller for the object Default (None) """ self.scenario_objects.append(ScenarioObject(name, entityobject, controller)) return self def add_entity_bytype(self, name, object_type): """adds an Entity to the scenario Parameters ---------- name (str): name of the entity object_type (ObjectType or list of ObjectType): type of entity """ self.entities.append(Entity(name, object_type=object_type)) return self def add_entity_byref(self, name, entity): """adds an Entity to the scenario Parameters ---------- name (str): name of the entity entity (str): type of entity """ self.entities.append(Entity(name, entityref=entity)) return self def get_element(self): """returns the elementTree of the Entities""" element = ET.Element("Entities") for i in self.scenario_objects: element.append(i.get_element()) for i in self.entities: element.append(i.get_element()) return element
Ancestors
Static methods
def parse(element)
-
Parses the xml element of Entities
Parameters
element (xml.etree.ElementTree.Element): A entities element (same as generated by the class itself)
Returns
entities (Entities): a Entities object
Expand source code
@staticmethod def parse(element): """Parses the xml element of Entities Parameters ---------- element (xml.etree.ElementTree.Element): A entities element (same as generated by the class itself) Returns ------- entities (Entities): a Entities object """ ent_ret = Entities() scenario_objects = [] entity_selections = [] if element.find("ScenarioObject") != None: for object in element.findall("ScenarioObject"): scenario_objects.append(ScenarioObject.parse(object)) if element.find("EntitySelection") != None: for entity in element.findall("EntitySelection"): entity_selections.append(Entity.parse(entity)) ent_ret.entities = entity_selections ent_ret.scenario_objects = scenario_objects return ent_ret
Methods
def add_entity_byref(self, name, entity)
-
adds an Entity to the scenario
Parameters
name (str): name of the entity entity (str): type of entity
Expand source code
def add_entity_byref(self, name, entity): """adds an Entity to the scenario Parameters ---------- name (str): name of the entity entity (str): type of entity """ self.entities.append(Entity(name, entityref=entity)) return self
def add_entity_bytype(self, name, object_type)
-
adds an Entity to the scenario
Parameters
name (str): name of the entity object_type (ObjectType or list of ObjectType): type of entity
Expand source code
def add_entity_bytype(self, name, object_type): """adds an Entity to the scenario Parameters ---------- name (str): name of the entity object_type (ObjectType or list of ObjectType): type of entity """ self.entities.append(Entity(name, object_type=object_type)) return self
def add_scenario_object(self, name, entityobject, controller=None)
-
adds a ScenarioObject to the scenario
Parameters
name (str): name of the scenario object entityobject (CatalogReference, Vehicle, Pedestrian, MiscObject, or ExternalObjectReference (V1.1)): object description controller (CatalogReference, Controller, or list of CatalogReference/Controller): controller for the object Default (None)
Expand source code
def add_scenario_object(self, name, entityobject, controller=None): """adds a ScenarioObject to the scenario Parameters ---------- name (str): name of the scenario object entityobject (CatalogReference, Vehicle, Pedestrian, MiscObject, or ExternalObjectReference (V1.1)): object description controller (CatalogReference, Controller, or list of CatalogReference/Controller): controller for the object Default (None) """ self.scenario_objects.append(ScenarioObject(name, entityobject, controller)) return self
def get_element(self)
-
returns the elementTree of the Entities
Expand source code
def get_element(self): """returns the elementTree of the Entities""" element = ET.Element("Entities") for i in self.scenario_objects: element.append(i.get_element()) for i in self.entities: element.append(i.get_element()) return element
class Entity (name, object_type=None, entityref=None)
-
The Entity class creates an Entity of OpenScenario Can either use a object_type or entityref (not both)
Parameters
name (str): name of the Entity optionals: object_type (ObjectType or list of ObjectType): the object_type to be used entityref (str): reference to an entity
Attributes
name (str): name of the Entity object_type (ObjectType): the object_type to be used entityref (str): reference to an entity
Methods
parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class
Initalizes the Entity
Parameters
name (str): name of the Entity optionals (only use one): object_type (ObjectType): the object_type to be used entityref (str): reference to an entity
Expand source code
class Entity(VersionBase): """The Entity class creates an Entity of OpenScenario Can either use a object_type or entityref (not both) Parameters ---------- name (str): name of the Entity optionals: object_type (ObjectType or list of ObjectType): the object_type to be used entityref (str): reference to an entity Attributes ---------- name (str): name of the Entity object_type (ObjectType): the object_type to be used entityref (str): reference to an entity Methods ------- parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class """ def __init__(self, name, object_type=None, entityref=None): """Initalizes the Entity Parameters ---------- name (str): name of the Entity optionals (only use one): object_type (ObjectType): the object_type to be used entityref (str): reference to an entity """ self.name = name self.object_type = [] self.entity = [] if (object_type != None) and (entityref != None): raise KeyError("only one of objecttype or entityref are alowed") if (object_type == None) and (entityref == None): raise KeyError("either objecttype or entityref is requiered") if entityref: if isinstance(entityref, list): self.entity = [EntityRef(x) for x in entityref] else: self.entity.append(EntityRef(entityref)) self.object_type = None else: if isinstance(object_type, list): self.object_type = [convert_enum(x, ObjectType) for x in object_type] else: self.object_type.append(convert_enum(object_type, ObjectType)) self.entity = None def __eq__(self, other): if isinstance(other, Entity): if ( self.get_attributes() == other.get_attributes() and self.object_type == other.object_type and self.entity == other.entity ): return True return False @staticmethod def parse(element): """Parses the xml element of Entity Parameters ---------- element (xml.etree.ElementTree.Element): A entity element (same as generated by the class itself) Returns ------- entity (Entity): a Entity object """ name = element.attrib["name"] bytypes = [] entity_refs = [] members_element = element.find("Members") if members_element.find("ByType") != None: types = members_element.findall("ByType") for type in types: bytypes.append(convert_enum(type.attrib["objectType"], ObjectType)) entity_refs = None elif members_element.find("EntityRef") != None: entities = members_element.findall("EntityRef") for entity in entities: entity_refs.append(entity.attrib["entityRef"]) bytypes = None return Entity(name, object_type=bytypes, entityref=entity_refs) def get_attributes(self): """returns the attributes of the Entity as a dict""" return {"name": self.name} def get_element(self): """returns the elementTree of the Entity""" element = ET.Element("EntitySelection", attrib=self.get_attributes()) members = ET.SubElement(element, "Members") if self.entity: for entity in self.entity: members.append(entity.get_element()) if self.object_type: for object_type in self.object_type: ET.SubElement( members, "ByType", attrib={"objectType": object_type.get_name()} ) return element
Ancestors
Static methods
def parse(element)
-
Parses the xml element of Entity
Parameters
element (xml.etree.ElementTree.Element): A entity element (same as generated by the class itself)
Returns
entity (Entity): a Entity object
Expand source code
@staticmethod def parse(element): """Parses the xml element of Entity Parameters ---------- element (xml.etree.ElementTree.Element): A entity element (same as generated by the class itself) Returns ------- entity (Entity): a Entity object """ name = element.attrib["name"] bytypes = [] entity_refs = [] members_element = element.find("Members") if members_element.find("ByType") != None: types = members_element.findall("ByType") for type in types: bytypes.append(convert_enum(type.attrib["objectType"], ObjectType)) entity_refs = None elif members_element.find("EntityRef") != None: entities = members_element.findall("EntityRef") for entity in entities: entity_refs.append(entity.attrib["entityRef"]) bytypes = None return Entity(name, object_type=bytypes, entityref=entity_refs)
Methods
def get_attributes(self)
-
returns the attributes of the Entity as a dict
Expand source code
def get_attributes(self): """returns the attributes of the Entity as a dict""" return {"name": self.name}
def get_element(self)
-
returns the elementTree of the Entity
Expand source code
def get_element(self): """returns the elementTree of the Entity""" element = ET.Element("EntitySelection", attrib=self.get_attributes()) members = ET.SubElement(element, "Members") if self.entity: for entity in self.entity: members.append(entity.get_element()) if self.object_type: for object_type in self.object_type: ET.SubElement( members, "ByType", attrib={"objectType": object_type.get_name()} ) return element
class ExternalObjectReference (name)
-
the ExternalObjectReference describes the EntityObject ExternalObjectReference (valid from V1.1)
Parameters
name (str): identifier of the external object
Attributes
name (str): identifier of the external object
Methods
parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns the attributes of the class
initalzie the ExternalObjectReference
Parameters
name (str): identifier of the external object
Expand source code
class ExternalObjectReference(VersionBase): """the ExternalObjectReference describes the EntityObject ExternalObjectReference (valid from V1.1) Parameters ---------- name (str): identifier of the external object Attributes ---------- name (str): identifier of the external object Methods ------- parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns the attributes of the class """ def __init__(self, name): """initalzie the ExternalObjectReference Parameters ---------- name (str): identifier of the external object """ self.name = name def __eq__(self, other): if isinstance(other, ExternalObjectReference): if self.get_attributes() == other.get_attributes(): return True return False @staticmethod def parse(element): """Parses the xml element of ExternalObjectReference Parameters ---------- element (xml.etree.ElementTree.Element): A ExternalObjectReference element (same as generated by the class itself) Returns ------- reference (ExternalObjectReference): a ExternalObjectReference object """ name = element.attrib["name"] return ExternalObjectReference(name) def get_attributes(self): """returns the attributes of the Axle as a dict""" return {"name": self.name} def get_element(self): """returns the elementTree of the Axle""" if self.isVersion(minor=0): raise OpenSCENARIOVersionError( "ExternalObjectReference was introduced in OSC 1.1" ) return ET.Element("ExternalObjectReference", attrib=self.get_attributes())
Ancestors
Static methods
def parse(element)
-
Parses the xml element of ExternalObjectReference
Parameters
element (xml.etree.ElementTree.Element): A ExternalObjectReference element (same as generated by the class itself)
Returns
reference (ExternalObjectReference): a ExternalObjectReference object
Expand source code
@staticmethod def parse(element): """Parses the xml element of ExternalObjectReference Parameters ---------- element (xml.etree.ElementTree.Element): A ExternalObjectReference element (same as generated by the class itself) Returns ------- reference (ExternalObjectReference): a ExternalObjectReference object """ name = element.attrib["name"] return ExternalObjectReference(name)
Methods
def get_attributes(self)
-
returns the attributes of the Axle as a dict
Expand source code
def get_attributes(self): """returns the attributes of the Axle as a dict""" return {"name": self.name}
def get_element(self)
-
returns the elementTree of the Axle
Expand source code
def get_element(self): """returns the elementTree of the Axle""" if self.isVersion(minor=0): raise OpenSCENARIOVersionError( "ExternalObjectReference was introduced in OSC 1.1" ) return ET.Element("ExternalObjectReference", attrib=self.get_attributes())
class MiscObject (name, mass, category, boundingbox, model3d=None)
-
the MiscObject Class creates a MiscObject for openscenario
Parameters
name (str): name of the MiscObject mass (float): mass of the object category (MiscObjectCategory): the category of the misc object boundingbox (BoundingBox): the bounding box of the MiscObject model3d (str): path to model file (valid from V1.1) Default: None
Attributes
name (str): name of the object mass (float): mass of the object misc_type (MiscObjectCategory): type of misc object boundingbox (BoundingBox): the bounding box of the MiscObject parameters (ParameterDeclaration): Parameter declarations of the MiscObject properties (Properties): additional properties of the MiscObject model3d (str): path to model file (valid from V1.1) Default: None
Methods
add_parameter(parameter) adds a parameter declaration to the MiscObject add_property(name, value) adds a single property to the MiscObject add_property_file(filename) adds a property file to the MiscObject append_to_catalog(filename) adds the MiscObject to an existing catalog dump_to_catalog(filename,name,description,author) crates a new catalog with the MiscObject get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class parse(element) parses a ElementTree created by the class and returns an instance of the class
initalzie the MiscObject Class
Parameters
name (str): name of the MiscObject mass (float): mass of the object category (MiscObjectCategory): the category of the misc object boundingbox (BoundingBox): the bounding box of the MiscObject model3d (str): path to model file (valid from V1.1) Default: None
Expand source code
class MiscObject(_BaseCatalog): """the MiscObject Class creates a MiscObject for openscenario Parameters ---------- name (str): name of the MiscObject mass (float): mass of the object category (MiscObjectCategory): the category of the misc object boundingbox (BoundingBox): the bounding box of the MiscObject model3d (str): path to model file (valid from V1.1) Default: None Attributes ---------- name (str): name of the object mass (float): mass of the object misc_type (MiscObjectCategory): type of misc object boundingbox (BoundingBox): the bounding box of the MiscObject parameters (ParameterDeclaration): Parameter declarations of the MiscObject properties (Properties): additional properties of the MiscObject model3d (str): path to model file (valid from V1.1) Default: None Methods ------- add_parameter(parameter) adds a parameter declaration to the MiscObject add_property(name, value) adds a single property to the MiscObject add_property_file(filename) adds a property file to the MiscObject append_to_catalog(filename) adds the MiscObject to an existing catalog dump_to_catalog(filename,name,description,author) crates a new catalog with the MiscObject get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class parse(element) parses a ElementTree created by the class and returns an instance of the class """ def __init__(self, name, mass, category, boundingbox, model3d=None): """initalzie the MiscObject Class Parameters ---------- name (str): name of the MiscObject mass (float): mass of the object category (MiscObjectCategory): the category of the misc object boundingbox (BoundingBox): the bounding box of the MiscObject model3d (str): path to model file (valid from V1.1) Default: None """ super().__init__() self.name = name self.mass = convert_float(mass) self.category = convert_enum(category, MiscObjectCategory) if not isinstance(boundingbox, BoundingBox): raise TypeError("boundingbox input is not of type BoundingBox") self.boundingbox = boundingbox self.properties = Properties() self.model3d = model3d def __eq__(self, other): if isinstance(other, MiscObject): if ( self.get_attributes() == other.get_attributes() and self.boundingbox == other.boundingbox and self.properties == other.properties and self.parameters == other.parameters ): return True return False @staticmethod def parse(element): """Parses the xml element to MiscObject Parameters ---------- element (xml.etree.ElementTree.Element): A MiscObject element (same as generated by the class itself) Returns ------ object (MiscObject): a MiscObject object """ model3d = None if "model3d" in element.attrib: model3d = element.attrib["model3d"] mass = convert_float(element.attrib["mass"]) name = element.attrib["name"] properties = Properties.parse(element.find("Properties")) boundingbox = BoundingBox.parse(element.find("BoundingBox")) category = convert_enum( element.attrib["miscObjectCategory"], MiscObjectCategory ) if element.find("ParameterDeclarations") != None: parameters = ParameterDeclarations.parse( element.find("ParameterDeclarations") ) else: parameters = ParameterDeclarations() object = MiscObject(name, mass, category, boundingbox, model3d) object.parameters = parameters object.properties = properties return object def add_property(self, name, value): """adds a single property to the MiscObject Parameters ---------- name (str): name of the property value (str): value of the property """ self.properties.add_property(name, value) return self def add_property_file(self, filename): """adds a property file to the MiscObject Parameters ---------- filename (str): filename of a property file """ self.properties.add_file(filename) return self def get_attributes(self): """returns the attributes as a dict of the MiscObject""" retdict = {} retdict["name"] = str(self.name) retdict["miscObjectCategory"] = self.category.get_name() retdict["mass"] = str(self.mass) if not self.isVersion(minor=0) and self.model3d: retdict["model3d"] = self.model3d return retdict def get_element(self): """returns the elementTree of the MiscObject""" element = ET.Element("MiscObject", attrib=self.get_attributes()) self.add_parameters_to_element(element) element.append(self.boundingbox.get_element()) element.append(self.properties.get_element()) return element
Ancestors
- scenariogeneration.xosc.utils._BaseCatalog
- VersionBase
Static methods
def parse(element)
-
Parses the xml element to MiscObject
Parameters
element (xml.etree.ElementTree.Element): A MiscObject element (same as generated by the class itself)
Returns
object (MiscObject): a MiscObject object
Expand source code
@staticmethod def parse(element): """Parses the xml element to MiscObject Parameters ---------- element (xml.etree.ElementTree.Element): A MiscObject element (same as generated by the class itself) Returns ------ object (MiscObject): a MiscObject object """ model3d = None if "model3d" in element.attrib: model3d = element.attrib["model3d"] mass = convert_float(element.attrib["mass"]) name = element.attrib["name"] properties = Properties.parse(element.find("Properties")) boundingbox = BoundingBox.parse(element.find("BoundingBox")) category = convert_enum( element.attrib["miscObjectCategory"], MiscObjectCategory ) if element.find("ParameterDeclarations") != None: parameters = ParameterDeclarations.parse( element.find("ParameterDeclarations") ) else: parameters = ParameterDeclarations() object = MiscObject(name, mass, category, boundingbox, model3d) object.parameters = parameters object.properties = properties return object
Methods
def add_property(self, name, value)
-
adds a single property to the MiscObject
Parameters
name (str): name of the property value (str): value of the property
Expand source code
def add_property(self, name, value): """adds a single property to the MiscObject Parameters ---------- name (str): name of the property value (str): value of the property """ self.properties.add_property(name, value) return self
def add_property_file(self, filename)
-
adds a property file to the MiscObject
Parameters
filename (str): filename of a property file
Expand source code
def add_property_file(self, filename): """adds a property file to the MiscObject Parameters ---------- filename (str): filename of a property file """ self.properties.add_file(filename) return self
def get_attributes(self)
-
returns the attributes as a dict of the MiscObject
Expand source code
def get_attributes(self): """returns the attributes as a dict of the MiscObject""" retdict = {} retdict["name"] = str(self.name) retdict["miscObjectCategory"] = self.category.get_name() retdict["mass"] = str(self.mass) if not self.isVersion(minor=0) and self.model3d: retdict["model3d"] = self.model3d return retdict
def get_element(self)
-
returns the elementTree of the MiscObject
Expand source code
def get_element(self): """returns the elementTree of the MiscObject""" element = ET.Element("MiscObject", attrib=self.get_attributes()) self.add_parameters_to_element(element) element.append(self.boundingbox.get_element()) element.append(self.properties.get_element()) return element
class Pedestrian (name, mass, category, boundingbox, model=None, role=None)
-
the Pedestrian class creates a pedestrian type entity of openscenario
Parameters
name (str): name of the type (req for catalog) mass (float): mass of the pedestrian boundingbox (BoundingBox): the bounding box of the pedestrian category (PedestrianCategory): type of of pedestrian model (str): definition model of the pedestrian Default: None role (Role): the role of the Pedestrian (valid from OpenSCENARIO V1.2) Default: None
Attributes
name (str): name of the pedestrian model (str): definition model of the pedestrian mass (float): mass of the pedestrian category (PedestrianCategory): type of pedestrian boundingbox (BoundingBox): the bounding box of the pedestrian parameters (ParameterDeclaration): Parameter declarations of the pedestrian properties (Properties): additional properties of the pedestrian role (Role): the role of the Pedestrian
Methods
parse(element) parses a ElementTree created by the class and returns an instance of the class itself add_parameter(parameter) adds a parameter declaration to the pedestrian add_property(name, value) adds a single property to the pedestrian add_property_file(filename) adds a property file to the pedestrian append_to_catalog(filename) adds the vehicle to an existing pedestrian dump_to_catalog(filename,name,description,author) crates a new catalog with the pedestrian get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class
initalzie the Pedestrian Class
Parameters
name (str): name of the type (req for catalog) mass (float): mass of the pedestrian category (PedestrianCategory): type of of pedestrian boundingbox (BoundingBox): the bounding box of the pedestrian model (str): definition model of the pedestrian Default: None role (Role): the role of the Vehicle Default: None
Expand source code
class Pedestrian(_BaseCatalog): """the Pedestrian class creates a pedestrian type entity of openscenario Parameters ---------- name (str): name of the type (req for catalog) mass (float): mass of the pedestrian boundingbox (BoundingBox): the bounding box of the pedestrian category (PedestrianCategory): type of of pedestrian model (str): definition model of the pedestrian Default: None role (Role): the role of the Pedestrian (valid from OpenSCENARIO V1.2) Default: None Attributes ---------- name (str): name of the pedestrian model (str): definition model of the pedestrian mass (float): mass of the pedestrian category (PedestrianCategory): type of pedestrian boundingbox (BoundingBox): the bounding box of the pedestrian parameters (ParameterDeclaration): Parameter declarations of the pedestrian properties (Properties): additional properties of the pedestrian role (Role): the role of the Pedestrian Methods ------- parse(element) parses a ElementTree created by the class and returns an instance of the class itself add_parameter(parameter) adds a parameter declaration to the pedestrian add_property(name, value) adds a single property to the pedestrian add_property_file(filename) adds a property file to the pedestrian append_to_catalog(filename) adds the vehicle to an existing pedestrian dump_to_catalog(filename,name,description,author) crates a new catalog with the pedestrian get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class """ def __init__(self, name, mass, category, boundingbox, model=None, role=None): """initalzie the Pedestrian Class Parameters ---------- name (str): name of the type (req for catalog) mass (float): mass of the pedestrian category (PedestrianCategory): type of of pedestrian boundingbox (BoundingBox): the bounding box of the pedestrian model (str): definition model of the pedestrian Default: None role (Role): the role of the Vehicle Default: None """ super().__init__() self.name = name self.model = model self.mass = convert_float(mass) self.category = convert_enum(category, PedestrianCategory) if not isinstance(boundingbox, BoundingBox): raise TypeError("boundingbox input is not of type BoundingBox") self.boundingbox = boundingbox self.properties = Properties() self.role = convert_enum(role, Role, True) def __eq__(self, other): if isinstance(other, Pedestrian): if ( self.get_attributes() == other.get_attributes() and self.boundingbox == other.boundingbox and self.properties == other.properties and self.parameters == other.parameters and self.role == other.role ): return True return False @staticmethod def parse(element): """Parses the xml element of Pedestrian Parameters ---------- element (xml.etree.ElementTree.Element): A pedestrian element (same as generated by the class itself) Returns ------- pedestrian (Pedestrian): a Pedestrian object """ name = element.attrib["name"] mass = convert_float(element.attrib["mass"]) model = None if "model3d" in element.attrib: model = element.attrib["model3d"] elif "model" in element.attrib: model = element.attrib["model"] category = convert_enum( element.attrib["pedestrianCategory"], PedestrianCategory ) if element.find("ParameterDeclarations") != None: parameters = ParameterDeclarations.parse( element.find("ParameterDeclarations") ) else: parameters = ParameterDeclarations() boundingbox = BoundingBox.parse(element.find("BoundingBox")) properties = Properties.parse(element.find("Properties")) role = None if "role" in element.attrib: role = convert_enum(element.attrib["role"], Role) pedestrian = Pedestrian(name, mass, category, boundingbox, model, role) pedestrian.parameters = parameters pedestrian.properties = properties return pedestrian def add_property(self, name, value): """adds a single property to the pedestrian Parameters ---------- name (str): name of the property value (str): value of the property """ self.properties.add_property(name, value) return self def add_property_file(self, filename): """adds a property file to the pedestrian Parameters ---------- filename (str): filename of a property file """ self.properties.add_file(filename) return self def get_attributes(self): """returns the attributes as a dict of the pedestrian""" retdict = {} retdict["name"] = str(self.name) retdict["pedestrianCategory"] = self.category.get_name() if self.isVersion(minor=0) and self.model is None: raise OpenSCENARIOVersionError("model is required for OSC 1.0") if self.model is not None: if self.isVersion(minor=0): retdict["model"] = self.model else: retdict["model3d"] = self.model retdict["mass"] = str(self.mass) if self.role: if self.isVersionEqLess(minor=1): raise OpenSCENARIOVersionError( "role for Pedestrian was added in OSC V1.2" ) retdict["role"] = self.role.get_name() return retdict def get_element(self): """returns the elementTree of the pedestrian""" element = ET.Element("Pedestrian", attrib=self.get_attributes()) self.add_parameters_to_element(element) element.append(self.boundingbox.get_element()) element.append(self.properties.get_element()) return element
Ancestors
- scenariogeneration.xosc.utils._BaseCatalog
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of Pedestrian
Parameters
element (xml.etree.ElementTree.Element): A pedestrian element (same as generated by the class itself)
Returns
pedestrian (Pedestrian): a Pedestrian object
Expand source code
@staticmethod def parse(element): """Parses the xml element of Pedestrian Parameters ---------- element (xml.etree.ElementTree.Element): A pedestrian element (same as generated by the class itself) Returns ------- pedestrian (Pedestrian): a Pedestrian object """ name = element.attrib["name"] mass = convert_float(element.attrib["mass"]) model = None if "model3d" in element.attrib: model = element.attrib["model3d"] elif "model" in element.attrib: model = element.attrib["model"] category = convert_enum( element.attrib["pedestrianCategory"], PedestrianCategory ) if element.find("ParameterDeclarations") != None: parameters = ParameterDeclarations.parse( element.find("ParameterDeclarations") ) else: parameters = ParameterDeclarations() boundingbox = BoundingBox.parse(element.find("BoundingBox")) properties = Properties.parse(element.find("Properties")) role = None if "role" in element.attrib: role = convert_enum(element.attrib["role"], Role) pedestrian = Pedestrian(name, mass, category, boundingbox, model, role) pedestrian.parameters = parameters pedestrian.properties = properties return pedestrian
Methods
def add_property(self, name, value)
-
adds a single property to the pedestrian
Parameters
name (str): name of the property value (str): value of the property
Expand source code
def add_property(self, name, value): """adds a single property to the pedestrian Parameters ---------- name (str): name of the property value (str): value of the property """ self.properties.add_property(name, value) return self
def add_property_file(self, filename)
-
adds a property file to the pedestrian
Parameters
filename (str): filename of a property file
Expand source code
def add_property_file(self, filename): """adds a property file to the pedestrian Parameters ---------- filename (str): filename of a property file """ self.properties.add_file(filename) return self
def get_attributes(self)
-
returns the attributes as a dict of the pedestrian
Expand source code
def get_attributes(self): """returns the attributes as a dict of the pedestrian""" retdict = {} retdict["name"] = str(self.name) retdict["pedestrianCategory"] = self.category.get_name() if self.isVersion(minor=0) and self.model is None: raise OpenSCENARIOVersionError("model is required for OSC 1.0") if self.model is not None: if self.isVersion(minor=0): retdict["model"] = self.model else: retdict["model3d"] = self.model retdict["mass"] = str(self.mass) if self.role: if self.isVersionEqLess(minor=1): raise OpenSCENARIOVersionError( "role for Pedestrian was added in OSC V1.2" ) retdict["role"] = self.role.get_name() return retdict
def get_element(self)
-
returns the elementTree of the pedestrian
Expand source code
def get_element(self): """returns the elementTree of the pedestrian""" element = ET.Element("Pedestrian", attrib=self.get_attributes()) self.add_parameters_to_element(element) element.append(self.boundingbox.get_element()) element.append(self.properties.get_element()) return element
class ScenarioObject (name, entityobject, controller=None)
-
The ScenarioObject creates a scenario object of OpenScenario
Parameters
name (str): name of the object entityobject (CatalogReference, Vehicle, Pedestrian, MiscObject, or ExternalObjectReference): object description controller (CatalogReference, Controller, or list of CatalogReference/Controller): controller for the object
Attributes
name (str): name of the object entityobject (CatalogReference, Vehicle, Pedestrian, MiscObject, or ExternalObjectReference): object description controller (list of CatalogReference/Controller): controller for the object
Methods
parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() returns the attributes of the class
initalizes the ScenarioObject
Parameters
name (str): name of the object entityobject (CatalogReference, Vehicle, Pedestrian, MiscObject, or ExternalObjectReference): object description controller (CatalogReference, Controller, or list of CatalogReference/Controller): controller for the object (multiple controllers are valid since OSC V1.2) Default: None
Expand source code
class ScenarioObject(VersionBase): """The ScenarioObject creates a scenario object of OpenScenario Parameters ---------- name (str): name of the object entityobject (CatalogReference, Vehicle, Pedestrian, MiscObject, or ExternalObjectReference): object description controller (CatalogReference, Controller, or list of CatalogReference/Controller): controller for the object Attributes ---------- name (str): name of the object entityobject (CatalogReference, Vehicle, Pedestrian, MiscObject, or ExternalObjectReference): object description controller (list of CatalogReference/Controller): controller for the object Methods ------- parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() returns the attributes of the class """ def __init__(self, name, entityobject, controller=None): """initalizes the ScenarioObject Parameters ---------- name (str): name of the object entityobject (CatalogReference, Vehicle, Pedestrian, MiscObject, or ExternalObjectReference): object description controller (CatalogReference, Controller, or list of CatalogReference/Controller): controller for the object (multiple controllers are valid since OSC V1.2) Default: None """ self.name = name if not ( isinstance(entityobject, CatalogReference) or isinstance(entityobject, Vehicle) or isinstance(entityobject, Pedestrian) or isinstance(entityobject, MiscObject) or ( not self.isVersion(minor=0) and isinstance(entityobject, ExternalObjectReference) ) ): raise TypeError( "entityobject is not of type CatalogReference, Vehicle, Pedestrian, MiscObject, nor ExternalObjectReference (or to old version of openscenario)" ) if controller is not None: if not isinstance(controller, list): self.controller = [controller] else: self.controller = controller for cnt in self.controller: if cnt is not None and not ( isinstance(cnt, CatalogReference) or isinstance(cnt, Controller) ): raise TypeError( "controller input is not of type CatalogReference or Controller" ) else: self.controller = controller self.entityobject = entityobject def __eq__(self, other): if isinstance(other, ScenarioObject): if ( self.get_attributes() == other.get_attributes() and self.controller == other.controller and self.entityobject == other.entityobject ): return True return False @staticmethod def parse(element): """Parses the xml element of ScenarioObject Parameters ---------- element (xml.etree.ElementTree.Element): A scenarioobject element (same as generated by the class itself) Returns ------- scenarioobject (ScenarioObject): a ScenarioObject object """ name = element.attrib["name"] if element.find("CatalogReference") != None: entityobject = CatalogReference.parse(element.find("CatalogReference")) elif element.find("Vehicle") != None: entityobject = Vehicle.parse(element.find("Vehicle")) elif element.find("Pedestrian") != None: entityobject = Pedestrian.parse(element.find("Pedestrian")) elif element.find("MiscObject") != None: entityobject = MiscObject.parse(element.find("MiscObject")) elif element.find("ExternalObjectReference") != None: entityobject = ExternalObjectReference.parse( element.find("ExternalObjectReference") ) controller = None if element.find("ObjectController") != None: controller = [] for object_controller_element in element.findall("ObjectController"): if object_controller_element.find("Controller") != None: controller.append( Controller.parse(object_controller_element.find("Controller")) ) elif object_controller_element.find("CatalogReference") != None: controller.append( CatalogReference.parse( object_controller_element.find("CatalogReference") ) ) return ScenarioObject(name, entityobject, controller) def get_attributes(self): """returns the attributes of the Entity as a dict""" return {"name": self.name} def get_element(self): """returns the elementTree of the Entity""" element = ET.Element("ScenarioObject", attrib=self.get_attributes()) element.append(self.entityobject.get_element()) if self.controller: if self.version_minor < 2 and len(self.controller) > 1: raise OpenSCENARIOVersionError( "multiple controllers were added in OSC V1.2" ) for cnt in self.controller: objcont = ET.SubElement(element, "ObjectController") objcont.append(cnt.get_element()) return element
Ancestors
Static methods
def parse(element)
-
Parses the xml element of ScenarioObject
Parameters
element (xml.etree.ElementTree.Element): A scenarioobject element (same as generated by the class itself)
Returns
scenarioobject (ScenarioObject): a ScenarioObject object
Expand source code
@staticmethod def parse(element): """Parses the xml element of ScenarioObject Parameters ---------- element (xml.etree.ElementTree.Element): A scenarioobject element (same as generated by the class itself) Returns ------- scenarioobject (ScenarioObject): a ScenarioObject object """ name = element.attrib["name"] if element.find("CatalogReference") != None: entityobject = CatalogReference.parse(element.find("CatalogReference")) elif element.find("Vehicle") != None: entityobject = Vehicle.parse(element.find("Vehicle")) elif element.find("Pedestrian") != None: entityobject = Pedestrian.parse(element.find("Pedestrian")) elif element.find("MiscObject") != None: entityobject = MiscObject.parse(element.find("MiscObject")) elif element.find("ExternalObjectReference") != None: entityobject = ExternalObjectReference.parse( element.find("ExternalObjectReference") ) controller = None if element.find("ObjectController") != None: controller = [] for object_controller_element in element.findall("ObjectController"): if object_controller_element.find("Controller") != None: controller.append( Controller.parse(object_controller_element.find("Controller")) ) elif object_controller_element.find("CatalogReference") != None: controller.append( CatalogReference.parse( object_controller_element.find("CatalogReference") ) ) return ScenarioObject(name, entityobject, controller)
Methods
def get_attributes(self)
-
returns the attributes of the Entity as a dict
Expand source code
def get_attributes(self): """returns the attributes of the Entity as a dict""" return {"name": self.name}
def get_element(self)
-
returns the elementTree of the Entity
Expand source code
def get_element(self): """returns the elementTree of the Entity""" element = ET.Element("ScenarioObject", attrib=self.get_attributes()) element.append(self.entityobject.get_element()) if self.controller: if self.version_minor < 2 and len(self.controller) > 1: raise OpenSCENARIOVersionError( "multiple controllers were added in OSC V1.2" ) for cnt in self.controller: objcont = ET.SubElement(element, "ObjectController") objcont.append(cnt.get_element()) return element
class Vehicle (name, vehicle_type, boundingbox, frontaxle, rearaxle, max_speed, max_acceleration, max_deceleration, mass=None, model3d=None, max_acceleration_rate=None, max_deceleration_rate=None, role=None)
-
the Vehicle Class creates a Vehicle for openscenario
Parameters
name (str): name of the vehicle vehicle_type (VehicleCategory): type of vehicle boundingbox (BoundingBox): the bounding box of the vehicle frontaxle (Axle): the front axle properties of the vehicle rearaxle (Axle): the back axle properties of the vehicle max_speed (float): the maximum speed of the vehicle max_acceleration (float): the maximum acceleration of the vehicle max_deceleration (float): the maximum deceleration of the vehicle mass (float): the mass of the vehicle (valid from OpenSCENARIO V1.1) Default: None model3d (str): path to model file (valid from V1.1) Default: None max_acceleration_rate (float): the maximum acceleration rate (jerk) of the vehicle (valid from OpenSCENARIO V1.2) Default: None max_deceleration_rate (float): the maximum acceleration rate (jerk) of the vehicle (valid from OpenSCENARIO V1.2) Default: None role (Role): the role of the Vehicle (valid from OpenSCENARIO V1.2) Default: None
Attributes
name (str): name of the vehicle vehicle_type (VehicleCategory): type of vehicle boundingbox (BoundingBox): the bounding box of the vehicle axles (Axles): an Axles object dynamics (DynamicsConstraints): the allowed dynamics of the vehicle parameters (ParameterDeclaration): Parameter declarations of the vehicle properties (Properties): additional properties of the vehicle mass (float): the mass of the vehicle model3d (str): path to model file (valid from V1.1) role (Role): the role of the Vehicle
Methods
parse(element) parses a ElementTree created by the class and returns an instance of the class itself add_axle(axle) adds an additional axle to the vehicle add_parameter(parameter) adds a parameter declaration to the vehicle add_property(name, value) adds a single property to the vehicle add_property_file(filename) adds a property file to the vehicle append_to_catalog(filename) adds the vehicle to an existing catalog dump_to_catalog(filename,name,description,author) crates a new catalog with the vehicle get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class
initalzie the Vehicle Class
Parameters
name (str): name of the vehicle vehicle_type (VehicleCategory): type of vehicle boundingbox (BoundingBox): the bounding box of the vehicle frontaxle (Axle): the front axle properties of the vehicle rearaxle (Axle): the back axle properties of the vehicle max_speed (float): the maximum speed of the vehicle max_acceleration (float): the maximum acceleration of the vehicle max_deceleration (float): the maximum deceleration of the vehicle mass (float): the mass of the vehicle (valid from OpenSCENARIO V1.1) Default: None model3d (str): path to model file (valid from V1.1) Default: None max_acceleration_rate (float): the maximum acceleration rate (jerk) of the vehicle (valid from OpenSCENARIO V1.2) Default: None max_deceleration_rate (float): the maximum acceleration rate (jerk) of the vehicle (valid from OpenSCENARIO V1.2) Default: None role (Role): the role of the Vehicle Default: None
Expand source code
class Vehicle(_BaseCatalog): """the Vehicle Class creates a Vehicle for openscenario Parameters ---------- name (str): name of the vehicle vehicle_type (VehicleCategory): type of vehicle boundingbox (BoundingBox): the bounding box of the vehicle frontaxle (Axle): the front axle properties of the vehicle rearaxle (Axle): the back axle properties of the vehicle max_speed (float): the maximum speed of the vehicle max_acceleration (float): the maximum acceleration of the vehicle max_deceleration (float): the maximum deceleration of the vehicle mass (float): the mass of the vehicle (valid from OpenSCENARIO V1.1) Default: None model3d (str): path to model file (valid from V1.1) Default: None max_acceleration_rate (float): the maximum acceleration rate (jerk) of the vehicle (valid from OpenSCENARIO V1.2) Default: None max_deceleration_rate (float): the maximum acceleration rate (jerk) of the vehicle (valid from OpenSCENARIO V1.2) Default: None role (Role): the role of the Vehicle (valid from OpenSCENARIO V1.2) Default: None Attributes ---------- name (str): name of the vehicle vehicle_type (VehicleCategory): type of vehicle boundingbox (BoundingBox): the bounding box of the vehicle axles (Axles): an Axles object dynamics (DynamicsConstraints): the allowed dynamics of the vehicle parameters (ParameterDeclaration): Parameter declarations of the vehicle properties (Properties): additional properties of the vehicle mass (float): the mass of the vehicle model3d (str): path to model file (valid from V1.1) role (Role): the role of the Vehicle Methods ------- parse(element) parses a ElementTree created by the class and returns an instance of the class itself add_axle(axle) adds an additional axle to the vehicle add_parameter(parameter) adds a parameter declaration to the vehicle add_property(name, value) adds a single property to the vehicle add_property_file(filename) adds a property file to the vehicle append_to_catalog(filename) adds the vehicle to an existing catalog dump_to_catalog(filename,name,description,author) crates a new catalog with the vehicle get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class """ def __init__( self, name, vehicle_type, boundingbox, frontaxle, rearaxle, max_speed, max_acceleration, max_deceleration, mass=None, model3d=None, max_acceleration_rate=None, max_deceleration_rate=None, role=None, ): """initalzie the Vehicle Class Parameters ---------- name (str): name of the vehicle vehicle_type (VehicleCategory): type of vehicle boundingbox (BoundingBox): the bounding box of the vehicle frontaxle (Axle): the front axle properties of the vehicle rearaxle (Axle): the back axle properties of the vehicle max_speed (float): the maximum speed of the vehicle max_acceleration (float): the maximum acceleration of the vehicle max_deceleration (float): the maximum deceleration of the vehicle mass (float): the mass of the vehicle (valid from OpenSCENARIO V1.1) Default: None model3d (str): path to model file (valid from V1.1) Default: None max_acceleration_rate (float): the maximum acceleration rate (jerk) of the vehicle (valid from OpenSCENARIO V1.2) Default: None max_deceleration_rate (float): the maximum acceleration rate (jerk) of the vehicle (valid from OpenSCENARIO V1.2) Default: None role (Role): the role of the Vehicle Default: None """ super().__init__() self.name = name if not isinstance(boundingbox, BoundingBox): raise TypeError("boundingbox input is not of type BoundingBox") self.vehicle_type = convert_enum(vehicle_type, VehicleCategory) self.boundingbox = boundingbox self.axles = Axles(frontaxle, rearaxle) self.dynamics = DynamicsConstraints( max_acceleration, max_deceleration, max_speed, max_acceleration_rate, max_deceleration_rate, ) self.properties = Properties() self.mass = convert_float(mass) self.model3d = model3d self.role = convert_enum(role, Role, True) def __eq__(self, other): if isinstance(other, Vehicle): if ( self.get_attributes() == other.get_attributes() and self.boundingbox == other.boundingbox and self.properties == other.properties and self.axles == other.axles and self.dynamics == other.dynamics and self.parameters == other.parameters and self.mass == other.mass and self.role == other.role ): return True return False @staticmethod def parse(element): """Parses the xml element of Vehicle Parameters ---------- element (xml.etree.ElementTree.Element): A vehicle element (same as generated by the class itself) Returns ------- vehicle (Vehicle): a Vehicle object """ name = element.attrib["name"] mass = None if "mass" in element.attrib: mass = convert_float(element.attrib["mass"]) vehicle_type = convert_enum(element.attrib["vehicleCategory"], VehicleCategory) model3d = None if "model3d" in element.attrib: model3d = element.attrib["model3d"] # if element.find('ParameterDeclarations'): if element.find("ParameterDeclarations") != None: parameters = ParameterDeclarations.parse( element.find("ParameterDeclarations") ) else: parameters = ParameterDeclarations() boundingbox = BoundingBox.parse(element.find("BoundingBox")) properties = Properties.parse(element.find("Properties")) performance = DynamicsConstraints.parse(element.find("Performance")) max_speed = performance.max_speed max_acc = performance.max_acceleration max_dec = performance.max_deceleration max_acc_rate = performance.max_acceleration_rate max_dec_rate = performance.max_deceleration_rate axles_element = element.find("Axles") frontaxle = Axle.parse(axles_element.find("FrontAxle")) rearaxle = Axle.parse(axles_element.find("RearAxle")) role = None if "role" in element.attrib: role = convert_enum(element.attrib["role"], Role) vehicle = Vehicle( name, vehicle_type, boundingbox, frontaxle, rearaxle, max_speed, max_acc, max_dec, mass, model3d, max_acc_rate, max_dec_rate, role, ) vehicle.properties = properties vehicle.parameters = parameters additional_axles = axles_element.findall("AdditionalAxle") if additional_axles != None: for axle in additional_axles: vehicle.axles.add_axle(Axle.parse(axle)) return vehicle def add_axle(self, axle): """adds an additional axle to the vehicle Parameters ---------- axle (Axle): an additional Axle """ self.axles.add_axle(axle) return self def add_property(self, name, value): """adds a single property to the vehicle Parameters ---------- name (str): name of the property value (str): value of the property """ self.properties.add_property(name, value) return self def add_property_file(self, filename): """adds a property file to the vehicle Parameters ---------- filename (str): filename of a property file """ self.properties.add_file(filename) return self def get_attributes(self): """returns the attributes as a dict of the Vehicle""" retdict = {} retdict["name"] = str(self.name) retdict["vehicleCategory"] = self.vehicle_type.get_name() if self.mass: if self.isVersion(minor=0): raise OpenSCENARIOVersionError( "Mass of a vehcile was introduced in OSC 1.1" ) retdict["mass"] = str(self.mass) if self.model3d: if self.isVersion(minor=0): raise OpenSCENARIOVersionError( "model3d of a vehcile was introduced in OSC 1.1" ) retdict["model3d"] = self.model3d if self.role: if self.isVersionEqLess(minor=1): raise OpenSCENARIOVersionError( "the role of a vehcile was introduced in OSC 1.1" ) retdict["role"] = self.role.get_name() return retdict def get_element(self): """returns the elementTree of the Vehicle""" element = ET.Element("Vehicle", attrib=self.get_attributes()) self.add_parameters_to_element(element) element.append(self.boundingbox.get_element()) element.append(self.dynamics.get_element("Performance")) element.append(self.axles.get_element()) element.append(self.properties.get_element()) return element
Ancestors
- scenariogeneration.xosc.utils._BaseCatalog
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of Vehicle
Parameters
element (xml.etree.ElementTree.Element): A vehicle element (same as generated by the class itself)
Returns
vehicle (Vehicle): a Vehicle object
Expand source code
@staticmethod def parse(element): """Parses the xml element of Vehicle Parameters ---------- element (xml.etree.ElementTree.Element): A vehicle element (same as generated by the class itself) Returns ------- vehicle (Vehicle): a Vehicle object """ name = element.attrib["name"] mass = None if "mass" in element.attrib: mass = convert_float(element.attrib["mass"]) vehicle_type = convert_enum(element.attrib["vehicleCategory"], VehicleCategory) model3d = None if "model3d" in element.attrib: model3d = element.attrib["model3d"] # if element.find('ParameterDeclarations'): if element.find("ParameterDeclarations") != None: parameters = ParameterDeclarations.parse( element.find("ParameterDeclarations") ) else: parameters = ParameterDeclarations() boundingbox = BoundingBox.parse(element.find("BoundingBox")) properties = Properties.parse(element.find("Properties")) performance = DynamicsConstraints.parse(element.find("Performance")) max_speed = performance.max_speed max_acc = performance.max_acceleration max_dec = performance.max_deceleration max_acc_rate = performance.max_acceleration_rate max_dec_rate = performance.max_deceleration_rate axles_element = element.find("Axles") frontaxle = Axle.parse(axles_element.find("FrontAxle")) rearaxle = Axle.parse(axles_element.find("RearAxle")) role = None if "role" in element.attrib: role = convert_enum(element.attrib["role"], Role) vehicle = Vehicle( name, vehicle_type, boundingbox, frontaxle, rearaxle, max_speed, max_acc, max_dec, mass, model3d, max_acc_rate, max_dec_rate, role, ) vehicle.properties = properties vehicle.parameters = parameters additional_axles = axles_element.findall("AdditionalAxle") if additional_axles != None: for axle in additional_axles: vehicle.axles.add_axle(Axle.parse(axle)) return vehicle
Methods
def add_axle(self, axle)
-
adds an additional axle to the vehicle
Parameters
axle (Axle): an additional Axle
Expand source code
def add_axle(self, axle): """adds an additional axle to the vehicle Parameters ---------- axle (Axle): an additional Axle """ self.axles.add_axle(axle) return self
def add_property(self, name, value)
-
adds a single property to the vehicle
Parameters
name (str): name of the property value (str): value of the property
Expand source code
def add_property(self, name, value): """adds a single property to the vehicle Parameters ---------- name (str): name of the property value (str): value of the property """ self.properties.add_property(name, value) return self
def add_property_file(self, filename)
-
adds a property file to the vehicle
Parameters
filename (str): filename of a property file
Expand source code
def add_property_file(self, filename): """adds a property file to the vehicle Parameters ---------- filename (str): filename of a property file """ self.properties.add_file(filename) return self
def get_attributes(self)
-
returns the attributes as a dict of the Vehicle
Expand source code
def get_attributes(self): """returns the attributes as a dict of the Vehicle""" retdict = {} retdict["name"] = str(self.name) retdict["vehicleCategory"] = self.vehicle_type.get_name() if self.mass: if self.isVersion(minor=0): raise OpenSCENARIOVersionError( "Mass of a vehcile was introduced in OSC 1.1" ) retdict["mass"] = str(self.mass) if self.model3d: if self.isVersion(minor=0): raise OpenSCENARIOVersionError( "model3d of a vehcile was introduced in OSC 1.1" ) retdict["model3d"] = self.model3d if self.role: if self.isVersionEqLess(minor=1): raise OpenSCENARIOVersionError( "the role of a vehcile was introduced in OSC 1.1" ) retdict["role"] = self.role.get_name() return retdict
def get_element(self)
-
returns the elementTree of the Vehicle
Expand source code
def get_element(self): """returns the elementTree of the Vehicle""" element = ET.Element("Vehicle", attrib=self.get_attributes()) self.add_parameters_to_element(element) element.append(self.boundingbox.get_element()) element.append(self.dynamics.get_element("Performance")) element.append(self.axles.get_element()) element.append(self.properties.get_element()) return element