Module scenariogeneration.xosc.actions
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 (
DynamicsConstraints,
EntityRef,
TimeReference,
TrafficSignalController,
convert_bool,
TransitionDynamics,
CatalogReference,
TrafficDefinition,
Environment,
AbsoluteSpeed,
RelativeSpeedToMaster,
convert_float,
convert_int,
get_bool_string,
convert_enum,
_AnimationType,
_VehicleComponent,
_ComponentAnimation,
UserDefinedComponent,
_AnimationTypeFactory,
)
from .utils import (
Controller,
_PositionType,
Color,
UserDefinedLight,
_LightState,
DirectionOfTravelDistribution,
)
from .enumerations import (
CoordinateSystem,
DynamicsShapes,
LateralDisplacement,
SpeedTargetValueType,
FollowingMode,
VersionBase,
LongitudinalDisplacement,
DynamicsShapes,
VehicleLightType,
LightMode,
AutomaticGearType,
VehicleComponentType,
)
from .exceptions import (
NoActionsDefinedError,
NotAValidElement,
OpenSCENARIOVersionError,
NotEnoughInputArguments,
ToManyOptionalArguments,
)
from .position import _PositionFactory, Route, Trajectory
from .parameters import Range
class _GlobalActionFactory:
@staticmethod
def parse_globalaction(element):
if element.findall("EnvironmentAction"):
return EnvironmentAction.parse(element)
elif element.findall("EntityAction/AddEntityAction"):
return AddEntityAction.parse(element)
elif element.findall("EntityAction/DeleteEntityAction"):
return DeleteEntityAction.parse(element)
elif element.findall("ParameterAction/ModifyAction/Rule/AddValue"):
return ParameterAddAction.parse(element)
elif element.findall("ParameterAction/ModifyAction/Rule/MultiplyByValue"):
return ParameterMultiplyAction.parse(element)
elif element.findall("ParameterAction/SetAction"):
return ParameterSetAction.parse(element)
elif element.findall("VariableAction/ModifyAction/Rule/AddValue"):
return VariableAddAction.parse(element)
elif element.findall("VariableAction/ModifyAction/Rule/MultiplyByValue"):
return VariableMultiplyAction.parse(element)
elif element.findall("VariableAction/SetAction"):
return VariableSetAction.parse(element)
elif element.findall(
"InfrastructureAction/TrafficSignalAction/TrafficSignalStateAction"
):
return TrafficSignalStateAction.parse(element)
elif element.findall(
"InfrastructureAction/TrafficSignalAction/TrafficSignalControllerAction"
):
return TrafficSignalControllerAction.parse(element)
elif element.findall("TrafficAction/TrafficSourceAction"):
return TrafficSourceAction.parse(element)
elif element.findall("TrafficAction/TrafficSinkAction"):
return TrafficSinkAction.parse(element)
elif element.findall("TrafficAction/TrafficSwarmAction"):
return TrafficSwarmAction.parse(element)
elif element.findall("TrafficAction/TrafficStopAction"):
return TrafficStopAction.parse(element)
else:
raise NotAValidElement("element ", element, "is not a valid GlobalAction")
class _PrivateActionFactory:
@staticmethod
def parse_privateaction(element):
if element.findall(
"LongitudinalAction/SpeedAction/SpeedActionTarget/AbsoluteTargetSpeed"
):
return AbsoluteSpeedAction.parse(element)
elif element.findall(
"LongitudinalAction/SpeedAction/SpeedActionTarget/RelativeTargetSpeed"
):
return RelativeSpeedAction.parse(element)
elif element.findall("LongitudinalAction/LongitudinalDistanceAction"):
return LongitudinalDistanceAction.parse(element)
elif element.findall(
"LateralAction/LaneChangeAction/LaneChangeTarget/AbsoluteTargetLane"
):
return AbsoluteLaneChangeAction.parse(element)
elif element.findall(
"LateralAction/LaneChangeAction/LaneChangeTarget/RelativeTargetLane"
):
return RelativeLaneChangeAction.parse(element)
elif element.findall(
"LateralAction/LaneOffsetAction/LaneOffsetTarget/AbsoluteTargetLaneOffset"
):
return AbsoluteLaneOffsetAction.parse(element)
elif element.findall(
"LateralAction/LaneOffsetAction/LaneOffsetTarget/RelativeTargetLaneOffset"
):
return RelativeLaneOffsetAction.parse(element)
elif element.findall("LateralAction/LateralDistanceAction"):
return LateralDistanceAction.parse(element)
elif element.findall("VisibilityAction"):
return VisibilityAction.parse(element)
elif element.findall("SynchronizeAction"):
return SynchronizeAction.parse(element)
elif element.findall("ActivateControllerAction"):
return ActivateControllerAction.parse(element)
elif element.findall("ControllerAction"):
return ControllerAction.parse(element)
elif element.findall("TeleportAction"):
return TeleportAction.parse(element)
elif element.findall("RoutingAction/AssignRouteAction"):
return AssignRouteAction.parse(element)
elif element.findall("RoutingAction/FollowTrajectoryAction"):
return FollowTrajectoryAction.parse(element)
elif element.findall("RoutingAction/AcquirePositionAction"):
return AcquirePositionAction.parse(element)
elif element.findall("AppearanceAction/AnimationAction"):
return AnimationAction.parse(element)
elif element.findall("LongitudinalAction/SpeedProfileAction"):
return SpeedProfileAction.parse(element)
elif element.findall("AppearanceAction/LightStateAction"):
return LightStateAction.parse(element)
else:
raise NotAValidElement("element ", element, "is not a valid PrivateAction")
class _ActionType(VersionBase):
"""helper class for typesetting"""
pass
class _PrivateActionType(_ActionType):
"""helper class for typesetting"""
pass
class _Action(VersionBase):
"""Private class used to define an action, should not be used by the user.
Used as a wrapper to create the extra elements needed
Parameters
----------
name (str): name of the action
action (*Action): any action
Attributes
----------
name (str): name of the action
action (*Action): any action
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, action):
"""initalize _Action
Parameters
----------
name (str): name of the action
action (*Action): any action
"""
self.name = name
self.action = action
def __eq__(self, other):
if isinstance(other, _Action):
if (
self.get_attributes() == other.get_attributes()
and self.action == other.action
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of _Action
Parameters
----------
element (xml.etree.ElementTree.Element): A _Action element (same as generated by the class itself)
Returns
-------
action (_Action): a _Action object
"""
name = element.attrib["name"]
if element.find("PrivateAction") is not None:
action = _PrivateActionFactory.parse_privateaction(
element.find("PrivateAction")
)
elif element.find("GlobalAction") is not None:
action = _GlobalActionFactory.parse_globalaction(
element.find("GlobalAction")
)
elif element.find("UserDefinedAction") is not None:
action = UserDefinedAction.parse(element)
else:
raise NotAValidElement(element.tag, "is not a valid action")
return _Action(name, action)
def get_attributes(self):
"""returns the attributes of the _Action as a dict"""
return {"name": self.name}
def get_element(self):
"""returns the elementTree of the _Action"""
element = ET.Element("Action", attrib=self.get_attributes())
element.append(self.action.get_element())
return element
#### Private Actions ####
# LongitudinalAction
class AbsoluteSpeedAction(_PrivateActionType):
"""The AbsoluteSpeedAction class specifies a LongitudinalAction of type SpeedAction with an abosulte target speed
Parameters
----------
speed (float): the speed wanted
transition_dynamics (TransitionDynamics): how the change should be made
Attributes
----------
speed (float): the speed wanted
transition_dynamics (TransitionDynamics): how the change should be made
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, speed: float, transition_dynamics):
"""initalize the AbsoluteSpeedAction
Parameters
----------
speed (float): the speed wanted
transition_dynamics (TransitionDynamics): how the change should be made
"""
self.speed = convert_float(speed)
if not isinstance(transition_dynamics, TransitionDynamics):
raise TypeError("transition_dynamics input not of type TransitionDynamics")
self.transition_dynamics = transition_dynamics
def __eq__(self, other):
if isinstance(other, AbsoluteSpeedAction):
if (
self.get_attributes() == other.get_attributes()
and self.transition_dynamics == other.transition_dynamics
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of WorldPosition
Parameters
----------
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
-------
position (WorldPosition): a world position object
"""
speed_element = element.find(
"LongitudinalAction/SpeedAction/SpeedActionTarget/AbsoluteTargetSpeed"
)
td_element = element.find("LongitudinalAction/SpeedAction/SpeedActionDynamics")
speed = speed_element.attrib["value"]
transition_dynamics = TransitionDynamics.parse(td_element)
return AbsoluteSpeedAction(speed, transition_dynamics)
def get_attributes(self):
"""returns the attributes of the AbsoluteSpeedAction as a dict"""
return {"value": str(self.speed)}
def get_element(self):
"""returns the elementTree of the AbsoluteSpeedAction"""
element = ET.Element("PrivateAction")
longaction = ET.SubElement(element, "LongitudinalAction")
speedaction = ET.SubElement(longaction, "SpeedAction")
speedaction.append(self.transition_dynamics.get_element("SpeedActionDynamics"))
speedactiontarget = ET.SubElement(speedaction, "SpeedActionTarget")
ET.SubElement(speedactiontarget, "AbsoluteTargetSpeed", self.get_attributes())
return element
class RelativeSpeedAction(_PrivateActionType):
"""The RelativeSpeedAction creates a LongitudinalAction of type SpeedAction with a relative target
Parameters
----------
speed (float): the speed wanted
target (str): the name of the relative target (used for relative speed)
transition_dynamics (TransitionDynamics): how the change should be made
valuetype (str): the type of relative speed wanted (used for relative speed)
continuous (bool): if the controller tries to keep the relative speed
Attributes
----------
speed (float): the speed wanted
target (str): the name of the relative target (used for relative speed)
valuetype (str): the type of relative speed wanted (used for relative speed)
continuous (bool): if the controller tries to keep the relative speed
transition_dynamics (TransitionDynamics): how the change should be made
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,
speed,
entity,
transition_dynamics,
valuetype=SpeedTargetValueType.delta,
continuous=True,
):
"""initalizes RelativeSpeedAction
Parameters
----------
speed (float): the speed wanted
target (str): the name of the relative target
transition_dynamics (TransitionDynamics): how the change should be made
valuetype (SpeedTargetValueType): the type of relative speed wanted
continuous (bool): if the controller tries to keep the relative speed
"""
self.speed = convert_float(speed)
self.target = entity
if not hasattr(SpeedTargetValueType, str(valuetype)):
raise TypeError("valuetype input not of type SpeedTargetValueType")
self.valuetype = valuetype
if not isinstance(transition_dynamics, TransitionDynamics):
raise TypeError("transition_dynamics input not of type TransitionDynamics")
self.transition_dynamics = transition_dynamics
self.continuous = convert_bool(continuous)
def __eq__(self, other):
if isinstance(other, RelativeSpeedAction):
if (
self.get_attributes() == other.get_attributes()
and self.transition_dynamics == other.transition_dynamics
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of RelativeSpeedAction
Parameters
----------
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
-------
action (RelativeSpeedAction): the RelativeSpeedAction
"""
speed_element = element.find(
"LongitudinalAction/SpeedAction/SpeedActionTarget/RelativeTargetSpeed"
)
td_element = element.find("LongitudinalAction/SpeedAction/SpeedActionDynamics")
speed = speed_element.attrib["value"]
entity = speed_element.attrib["entityRef"]
continuous = convert_bool(speed_element.attrib["continuous"])
valuetype = getattr(
SpeedTargetValueType, speed_element.attrib["speedTargetValueType"]
)
transition_dynamics = TransitionDynamics.parse(td_element)
return RelativeSpeedAction(
speed, entity, transition_dynamics, valuetype, continuous
)
def get_attributes(self):
"""returns the attributes of the RelativeSpeedAction as a dict"""
return {
"entityRef": self.target,
"value": str(self.speed),
"speedTargetValueType": self.valuetype.get_name(),
"continuous": get_bool_string(self.continuous),
}
def get_element(self):
"""returns the elementTree of the RelativeSpeedAction"""
element = ET.Element("PrivateAction")
longaction = ET.SubElement(element, "LongitudinalAction")
speedaction = ET.SubElement(longaction, "SpeedAction")
speedaction.append(self.transition_dynamics.get_element("SpeedActionDynamics"))
speedactiontarget = ET.SubElement(speedaction, "SpeedActionTarget")
ET.SubElement(speedactiontarget, "RelativeTargetSpeed", self.get_attributes())
return element
class LongitudinalDistanceAction(_PrivateActionType):
"""The LongitudinalAction creates a LongitudinalAction of type LongitudinalAction with a distance target
Parameters
----------
distance (float): distance to the entity
entity (str): the target name
freespace (bool): (True) distance between bounding boxes, (False) distance between ref point
Default: True
continuous (bool): if the controller tries to keep the relative speed
Default: True
max_acceleration (float): maximum acceleration allowed
Default: None
max_deceleration (float): maximum deceleration allowed
Default: None
max_speed (float): maximum speed allowed
Default: None
coordinate_system (CoordinateSystem): the coordinate system for the distance calculation
Default CoordinateSystem.entity
displacement (LongitudinalDisplacement): type of displacement wanted
Default LongitudinalDisplacement.any
Attributes
----------
entity (str): the target name
freespace (bool): (True) distance between bounding boxes, (False) distance between ref point
continuous (bool): if the controller tries to keep the relative speed
distance (float): the distance to the entity
dynamic_constraint (DynamicsConstraints): Dynamics constraints of the action
coordinate_system (CoordinateSystem): the coordinate system for the distance calculation
displacement (LongitudinalDisplacement): type of displacement wanted
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,
entity,
freespace=True,
continuous=True,
max_acceleration=None,
max_deceleration=None,
max_speed=None,
distance=None,
timeGap=None,
coordinate_system=CoordinateSystem.entity,
displacement=LongitudinalDisplacement.any,
):
"""initalize the LongitudinalDistanceAction
Parameters
----------
distance (float): distance to the entity
timegap (float): time to the target
entity (str): the target name
freespace (bool): (True) distance between bounding boxes, (False) distance between ref point
Default: True
continuous (bool): if the controller tries to keep the relative speed
Default: True
max_acceleration (float): maximum acceleration allowed
Default: None
max_deceleration (float): maximum deceleration allowed
Default: None
max_speed (float): maximum speed allowed
Default: None
coordinate_system (CoordinateSystem): the coordinate system for the distance calculation
Default CoordinateSystem.entity
displacement (LongitudinalDisplacement): type of displacement wanted
Default LongitudinalDisplacement.any
"""
self.target = entity
self.freespace = convert_bool(freespace)
self.continuous = convert_bool(continuous)
self.dynamic_constraint = DynamicsConstraints(
max_acceleration, max_deceleration, max_speed
)
if distance is not None and timeGap is not None:
raise ToManyOptionalArguments(
"Not both of distance and timeGap can be used."
)
if distance is None and timeGap is None:
raise NotEnoughInputArguments("Either ds or dsLane is needed as input.")
self.distance = convert_float(distance)
self.timeGap = convert_float(timeGap)
self.coordinate_system = convert_enum(coordinate_system, CoordinateSystem)
self.displacement = convert_enum(displacement, LongitudinalDisplacement)
def __eq__(self, other):
if isinstance(other, LongitudinalDistanceAction):
if (
self.get_attributes() == other.get_attributes()
and self.dynamic_constraint == other.dynamic_constraint
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of LongitudinalAction
Parameters
----------
element (xml.etree.ElementTree.Element): A LongitudinalDistanceAction element (same as generated by the class itself)
Returns
-------
ld_action (LongitudinalDistanceAction): a LongitudinalDistanceAction object
"""
lda_element = element.find("LongitudinalAction/LongitudinalDistanceAction")
entity = lda_element.attrib["entityRef"]
freespace = convert_bool(lda_element.attrib["freespace"])
continuous = convert_bool(lda_element.attrib["continuous"])
distance = None
timeGap = None
if "distance" in lda_element.attrib:
distance = convert_float(lda_element.attrib["distance"])
if "timeGap" in lda_element.attrib:
timeGap = convert_float(lda_element.attrib["timeGap"])
coordinate_system = CoordinateSystem.entity
if "coordinateSystem" in lda_element.attrib:
coordinate_system = convert_enum(
lda_element.attrib["coordinateSystem"], CoordinateSystem, False
)
displacement = LongitudinalDisplacement.any
if "displacement" in lda_element.attrib:
displacement = convert_enum(
lda_element.attrib["displacement"], LongitudinalDisplacement, False
)
max_acceleration = None
max_deceleration = None
max_speed = None
constraints = None
if lda_element.find("DynamicConstraints") != None:
constraints = DynamicsConstraints.parse(
lda_element.find("DynamicConstraints")
)
max_acceleration = constraints.max_acceleration
max_deceleration = constraints.max_deceleration
max_speed = constraints.max_speed
return LongitudinalDistanceAction(
entity,
freespace,
continuous,
max_acceleration,
max_deceleration,
max_speed,
distance,
timeGap,
coordinate_system,
displacement,
)
def get_attributes(self):
"""returns the attributes of the LongitudinalDistanceAction as a dict"""
retdict = {}
retdict["entityRef"] = self.target
retdict["freespace"] = get_bool_string(self.freespace)
retdict["continuous"] = get_bool_string(self.continuous)
if self.distance != None:
retdict["distance"] = str(self.distance)
if self.timeGap != None:
retdict["timeGap"] = str(self.timeGap)
if not self.isVersion(minor=0):
retdict["coordinateSystem"] = self.coordinate_system.get_name()
retdict["displacement"] = self.displacement.get_name()
return retdict
def get_element(self):
"""returns the elementTree of the LongitudinalDistanceAction"""
element = ET.Element("PrivateAction")
longact = ET.SubElement(element, "LongitudinalAction")
longdistaction = ET.SubElement(
longact, "LongitudinalDistanceAction", attrib=self.get_attributes()
)
if self.dynamic_constraint.is_filled():
longdistaction.append(self.dynamic_constraint.get_element())
return element
class SpeedProfileAction(_PrivateActionType):
"""The SpeedProfileAction class specifies a LongitudinalAction of type SpeedProfileAction
Parameters
----------
speeds (list of float): the different speed entries wanted
following_mode (FollowingMode): how to follow the speed changes
times (list of float): optional time entries when the speed entries should be achieved
Default: None
dynamics_constraint (DynamicsConstraints): optional constraints for the speed profile
Default: None
entity (str): name of an entity, the speeds will then be interpreted as relative to that entity
Default: None
Attributes
----------
speeds (list of float): the different speed entries wanted
following_mode (FollowingMode): how to follow the speed changes
times (list of float): optional time entries when the speed entries should be achieved
dynamics_constraint (DynamicsConstraints): optional constraints for the speed profile
entity (str): name of an entity, the speeds will then be interpreted as relative to that 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, speeds, following_mode, times=None, dynamics_constraint=None, entity=None
):
"""initalize the SpeedProfileAction
Parameters
----------
speeds (list of float): the different speed entries wanted
following_mode (FollowingMode): how to follow the speed changes
times (list of float): optional time entries when the speed entries should be achieved
Default: None
dynamics_constraint (DynamicsConstraints): optional constraints for the speed profile
Default: None
entity (str): name of an entity, the speeds will then be interpreted as relative to that entity
Default: None
"""
if times and (len(times) != len(speeds)):
raise ValueError("times and speeds are not the same lenght")
self.speeds = [convert_float(x) for x in speeds]
if dynamics_constraint and not isinstance(
dynamics_constraint, DynamicsConstraints
):
raise TypeError("dynamics_constraint input not of type DynamicsConstraints")
self.dynamics_constraint = dynamics_constraint
self.following_mode = convert_enum(following_mode, FollowingMode)
if times:
self.times = [convert_float(x) for x in times]
else:
self.times = times
self.entity = entity
def __eq__(self, other):
if isinstance(other, SpeedProfileAction):
if (
self.get_attributes() == other.get_attributes()
and self.dynamics_constraint == other.dynamics_constraint
and self.entity == other.entity
and self.speeds == other.speeds
and self.times == other.times
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of SpeedProfileAction
Parameters
----------
element (xml.etree.ElementTree.Element): A SpeedProfileAction element (same as generated by the class itself)
Returns
-------
action (SpeedProfileAction): a SpeedProfileAction object
"""
speed_profile_element = element.find("LongitudinalAction/SpeedProfileAction")
following_mode = convert_enum(
speed_profile_element.attrib["followingMode"], FollowingMode
)
dynamics_constraint = None
entity = None
if "entityRef" in speed_profile_element.attrib:
entity = speed_profile_element.attrib["entityRef"]
if speed_profile_element.find("DynamicConstraints") is not None:
dynamics_constraint = DynamicsConstraints.parse(
speed_profile_element.find("DynamicConstraints")
)
entires = speed_profile_element.findall("SpeedProfileEntry")
speeds = []
times = []
for i in entires:
if "time" in i.attrib:
times.append(convert_float(i.attrib["time"]))
speeds.append(convert_float(i.attrib["speed"]))
return SpeedProfileAction(
speeds, following_mode, times, dynamics_constraint, entity
)
def get_attributes(self):
"""returns the attributes of the SpeedProfileAction as a dict"""
retdict = {"followingMode": self.following_mode.get_name()}
if self.entity:
retdict["entityRef"] = self.entity
return retdict
def get_element(self):
"""returns the elementTree of the SpeedProfileAction"""
if not self.isVersion(minor=2):
raise OpenSCENARIOVersionError(
"SpeedProfileAction was introduced in OpenSCENARIO V1.2"
)
element = ET.Element("PrivateAction")
longaction = ET.SubElement(element, "LongitudinalAction")
speedaction = ET.SubElement(
longaction, "SpeedProfileAction", attrib=self.get_attributes()
)
if self.dynamics_constraint is not None:
speedaction.append(self.dynamics_constraint.get_element())
for i in range(len(self.speeds)):
tmp_dict = {"speed": str(self.speeds[i])}
if self.times:
tmp_dict["time"] = str(self.times[i])
ET.SubElement(speedaction, "SpeedProfileEntry", attrib=tmp_dict)
return element
class AbsoluteLaneChangeAction(_PrivateActionType):
"""the AbsoluteLaneChangeAction creates a LateralAction of type LaneChangeAction with an absolute target
Parameters
----------
lane (int): lane to change to
transition_dynamics (TransitionDynamics): how the change should be made
target_lane_offset (float): if a offset in the target lane is wanted
Default: None
Attributes
----------
lane (int): lane to change to
target_lane_offset (float): offset in the target lane is wanted
transition_dynamics (TransitionDynamics): how the change should be made
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, lane, transition_dynamics, target_lane_offset=None):
"""initalize AbsoluteLaneChangeAction
Parameters
----------
lane (int): lane to change to
transition_dynamics (TransitionDynamics): how the change should be made
target_lane_offset (float): if a offset in the target lane is wanted
Default: None
"""
self.lane = convert_int(lane)
self.target_lane_offset = convert_float(target_lane_offset)
if not isinstance(transition_dynamics, TransitionDynamics):
raise TypeError("transition_dynamics input not of type TransitionDynamics")
self.transition_dynamics = transition_dynamics
def __eq__(self, other):
if isinstance(other, AbsoluteLaneChangeAction):
if (
self.get_attributes() == other.get_attributes()
and self.transition_dynamics == other.transition_dynamics
and self.target_lane_offset == other.target_lane_offset
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of AbsoluteLaneChangeAction
Parameters
----------
element (xml.etree.ElementTree.Element): A AbsoluteLaneChangeAction element (same as generated by the class itself)
Returns
-------
alc_action (AbsoluteLaneChangeAction): a AbsoluteLaneChangeAction object
"""
lca_element = element.find("LateralAction/LaneChangeAction")
target_lane_offset = None
if "targetLaneOffset" in lca_element.attrib:
target_lane_offset = convert_float(lca_element.attrib["targetLaneOffset"])
dynamics = TransitionDynamics.parse(
lca_element.find("LaneChangeActionDynamics")
)
targetlane_element = lca_element.find("LaneChangeTarget/AbsoluteTargetLane")
lane = convert_int(targetlane_element.attrib["value"])
return AbsoluteLaneChangeAction(lane, dynamics, target_lane_offset)
def get_attributes(self):
"""returns the attributes of the AbsoluteLaneChangeAction as a dict"""
retdict = {}
retdict["value"] = str(self.lane)
return retdict
def get_element(self):
"""returns the elementTree of the AbsoluteLaneChangeAction"""
element = ET.Element("PrivateAction")
laneoffset = {}
lataction = ET.SubElement(element, "LateralAction")
if self.target_lane_offset:
laneoffset = {"targetLaneOffset": str(self.target_lane_offset)}
lanechangeaction = ET.SubElement(
lataction, "LaneChangeAction", attrib=laneoffset
)
lanechangeaction.append(
self.transition_dynamics.get_element("LaneChangeActionDynamics")
)
lanchangetarget = ET.SubElement(lanechangeaction, "LaneChangeTarget")
ET.SubElement(lanchangetarget, "AbsoluteTargetLane", self.get_attributes())
return element
class RelativeLaneChangeAction(_PrivateActionType):
"""the RelativeLaneChangeAction creates a LateralAction of type LaneChangeAction with a relative target
Parameters
----------
lane (int): relative lane number
entity (str): the entity to run relative to
transition_dynamics (TransitionDynamics): how the change should be made
target_lane_offset (float): if a offset in the target lane is wanted
Default: None
Attributes
----------
value (int): lane to change to
target (str): target for relative lane change
target_lane_offset (float): offset in the target lane is wanted
transition_dynamics (TransitionDynamics): how the change should be made
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, lane, entity, transition_dynamics, target_lane_offset=None):
"""initalize RelativeLaneChangeAction
Parameters
----------
lane (int): relative lane number
entity (str): the entity to run relative to
transition_dynamics (TransitionDynamics): how the change should be made
target_lane_offset (float): if a offset in the target lane is wanted
Default: None
"""
self.lane = convert_int(lane)
self.target = entity
self.target_lane_offset = convert_float(target_lane_offset)
if not isinstance(transition_dynamics, TransitionDynamics):
raise TypeError("transition_dynamics input not of type TransitionDynamics")
self.transition_dynamics = transition_dynamics
def __eq__(self, other):
if isinstance(other, RelativeLaneChangeAction):
if (
self.get_attributes() == other.get_attributes()
and self.transition_dynamics == other.transition_dynamics
and self.target_lane_offset == other.target_lane_offset
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of AbsoluteLaneChangeAction
Parameters
----------
element (xml.etree.ElementTree.Element): A AbsoluteLaneChangeAction element (same as generated by the class itself)
Returns
-------
alc_action (AbsoluteLaneChangeAction): a AbsoluteLaneChangeAction object
"""
lca_element = element.find("LateralAction/LaneChangeAction")
target_lane_offset = None
if "targetLaneOffset" in lca_element.attrib:
target_lane_offset = convert_float(lca_element.attrib["targetLaneOffset"])
dynamics = TransitionDynamics.parse(
lca_element.find("LaneChangeActionDynamics")
)
targetlane_element = lca_element.find("LaneChangeTarget/RelativeTargetLane")
lane = convert_int(targetlane_element.attrib["value"])
target = targetlane_element.attrib["entityRef"]
return RelativeLaneChangeAction(lane, target, dynamics, target_lane_offset)
def get_attributes(self):
"""returns the attributes of the RelativeLaneChangeAction as a dict"""
retdict = {}
retdict["value"] = str(self.lane)
retdict["entityRef"] = self.target
return retdict
def get_element(self):
"""returns the elementTree of the RelativeLaneChangeAction"""
element = ET.Element("PrivateAction")
laneoffset = {}
lataction = ET.SubElement(element, "LateralAction")
if self.target_lane_offset is not None:
laneoffset = {"targetLaneOffset": str(self.target_lane_offset)}
lanechangeaction = ET.SubElement(
lataction, "LaneChangeAction", attrib=laneoffset
)
lanechangeaction.append(
self.transition_dynamics.get_element("LaneChangeActionDynamics")
)
lanchangetarget = ET.SubElement(lanechangeaction, "LaneChangeTarget")
ET.SubElement(lanchangetarget, "RelativeTargetLane", self.get_attributes())
return element
class AbsoluteLaneOffsetAction(_PrivateActionType):
"""the AbsoluteLaneOffsetAction class creates a LateralAction of type LaneOffsetAction with an absolute target
Parameters
----------
value (float): lateral offset of the lane
shape (DynamicsShapes): shape of the offset action
maxlatacc (float): maximum allowed lateral acceleration
continuous (bool): if the controller tries to keep the relative speed
Default: True
Attributes
----------
continuous (bool): if the controller tries to keep the relative speed
value (float): lateral offset of the lane
target (str): the name of the entity (relative only)
dynshape (DynamicsShapes): the shape of the action
maxlatacc (float): maximum allowed lateral acceleration
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, value, shape, maxlatacc=None, continuous=True):
"""initalizes the AbsoluteLaneOffsetAction
Parameters
----------
value (float): lateral offset of the lane
shape (DynamicsShapes): shape of the offset action
maxlatacc (float): maximum allowed lateral acceleration
continuous (bool): if the controller tries to keep the relative speed
Default: True
"""
self.continuous = convert_bool(continuous)
self.value = convert_float(value)
self.dynshape = convert_enum(shape, DynamicsShapes)
self.maxlatacc = convert_float(maxlatacc)
def __eq__(self, other):
if isinstance(other, AbsoluteLaneOffsetAction):
if (
self.get_attributes() == other.get_attributes()
and self.dynshape == other.dynshape
and self.maxlatacc == other.maxlatacc
and self.continuous == other.continuous
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of AbsoluteLaneOffsetAction
Parameters
----------
element (xml.etree.ElementTree.Element): A AbsoluteLaneOffsetAction element (same as generated by the class itself)
Returns
-------
alco_action (AbsoluteLaneOffsetAction): a AbsoluteLaneOffsetAction object
"""
loa_element = element.find("LateralAction/LaneOffsetAction")
continuous = convert_bool(loa_element.attrib["continuous"])
load_element = loa_element.find("LaneOffsetActionDynamics")
maxacc = convert_float(load_element.attrib["maxLateralAcc"])
dynamics = convert_enum(load_element.attrib["dynamicsShape"], DynamicsShapes)
atlo_element = loa_element.find("LaneOffsetTarget/AbsoluteTargetLaneOffset")
value = atlo_element.attrib["value"]
return AbsoluteLaneOffsetAction(value, dynamics, maxacc, continuous)
def get_attributes(self):
"""returns the attributes of the AbsoluteLaneOffsetAction as a dict"""
retdict = {}
retdict["value"] = str(self.value)
return retdict
def get_element(self):
"""returns the elementTree of the AbsoluteLaneOffsetAction"""
element = ET.Element("PrivateAction")
lataction = ET.SubElement(element, "LateralAction")
laneoffsetaction = ET.SubElement(
lataction,
"LaneOffsetAction",
attrib={"continuous": get_bool_string(self.continuous)},
)
ET.SubElement(
laneoffsetaction,
"LaneOffsetActionDynamics",
{
"maxLateralAcc": str(self.maxlatacc),
"dynamicsShape": self.dynshape.get_name(),
},
)
laneoftarget = ET.SubElement(laneoffsetaction, "LaneOffsetTarget")
ET.SubElement(laneoftarget, "AbsoluteTargetLaneOffset", self.get_attributes())
return element
class RelativeLaneOffsetAction(_PrivateActionType):
"""the RelativeLaneOffsetAction class creates a LateralAction of type LaneOffsetAction with a relative target
Parameters
----------
value (float): relative lateral offset of the target
entity (str): name of the entity
shape (str): shape of the offset action
maxlatacc (float): maximum allowed lateral acceleration
continuous (bool): if the controller tries to keep the relative speed
Default: True
Attributes
----------
continuous (bool): if the controller tries to keep the relative speed
value (float): relative lateral offset of the arget
target (str): the name of the entity
dynshape (str): the shape of the action
maxlatacc (float): maximum allowed lateral acceleration
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, value, entity, shape, maxlatacc, continuous=True):
"""initalizes the RelativeLaneOffsetAction,
Parameters
----------
value (float): relative lateral offset of the target
entity (str): name of the entity
shape (str): shape of the offset action
maxlatacc (float): maximum allowed lateral acceleration
continuous (bool): if the controller tries to keep the relative speed
Default: True
"""
self.continuous = convert_bool(continuous)
self.value = convert_float(value)
self.target = entity
if not hasattr(DynamicsShapes, str(shape)):
raise ValueError(shape + "; is not a valid shape.")
self.dynshape = shape
self.maxlatacc = convert_float(maxlatacc)
def __eq__(self, other):
if isinstance(other, RelativeLaneOffsetAction):
if (
self.get_attributes() == other.get_attributes()
and self.dynshape == other.dynshape
and self.maxlatacc == other.maxlatacc
and self.continuous == other.continuous
and self.target == other.target
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of AbsoluteLaneOffsetAction
Parameters
----------
element (xml.etree.ElementTree.Element): A AbsoluteLaneOffsetAction element (same as generated by the class itself)
Returns
-------
alco_action (AbsoluteLaneOffsetAction): a AbsoluteLaneOffsetAction object
"""
loa_element = element.find("LateralAction/LaneOffsetAction")
contiuous = convert_bool(loa_element.attrib["continuous"])
load_element = loa_element.find("LaneOffsetActionDynamics")
maxacc = convert_float(load_element.attrib["maxLateralAcc"])
dynamics = getattr(DynamicsShapes, load_element.attrib["dynamicsShape"])
rtlo_element = loa_element.find("LaneOffsetTarget/RelativeTargetLaneOffset")
value = convert_float(rtlo_element.attrib["value"])
entity = rtlo_element.attrib["entityRef"]
return RelativeLaneOffsetAction(value, entity, dynamics, maxacc, contiuous)
def get_attributes(self):
"""returns the attributes of the RelativeLaneOffsetAction as a dict"""
retdict = {}
retdict["value"] = str(self.value)
retdict["entityRef"] = self.target
return retdict
def get_element(self):
"""returns the elementTree of the RelativeLaneOffsetAction"""
element = ET.Element("PrivateAction")
lataction = ET.SubElement(element, "LateralAction")
laneoffsetaction = ET.SubElement(
lataction,
"LaneOffsetAction",
attrib={"continuous": get_bool_string(self.continuous)},
)
ET.SubElement(
laneoffsetaction,
"LaneOffsetActionDynamics",
{
"maxLateralAcc": str(self.maxlatacc),
"dynamicsShape": self.dynshape.get_name(),
},
)
laneoftarget = ET.SubElement(laneoffsetaction, "LaneOffsetTarget")
ET.SubElement(
laneoftarget, "RelativeTargetLaneOffset", attrib=self.get_attributes()
)
return element
class LateralDistanceAction(_PrivateActionType):
"""
Parameters
----------
entity (str): the target name
distance (float): the lateral distance to the entity
freespace (bool): (True) distance between bounding boxes, (False) distance between ref point
Default: True
continuous (bool): if the controller tries to keep the relative speed
Default: True
max_acceleration (float): maximum acceleration allowed
Default: None
max_deceleration (float): maximum deceleration allowed
Default: None
max_speed (float): maximum speed allowed
Default: None
coordinate_system (CoordinateSystem): the coordinate system for the distance calculation
Default CoordinateSystem.entity
displacement (LateralDisplacement): type of displacement wanted
Default LateralDisplacement.any
Attributes
----------
entity (str): the target name
distance (float): the lateral distance to the entity
freespace (bool): (True) distance between bounding boxes, (False) distance between ref point
continuous (bool): if the controller tries to keep the relative speed
distance (float): if the distance metric is used
timegap (float): if timegap metric is used
dynamic_constraint (DynamicsConstraints): Dynamics constraints of the action
coordinate_system (CoordinateSystem): the coordinate system for the distance calculation
displacement (LateralDisplacement): type of displacement wanted
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,
entity,
distance=None,
freespace=True,
continuous=True,
max_acceleration=None,
max_deceleration=None,
max_speed=None,
coordinate_system=CoordinateSystem.entity,
displacement=LateralDisplacement.any,
):
"""initalizes the LateralDistanceAction
Parameters
----------
entity (str): the target name
distance (float): the lateral distance to the entity
freespace (bool): (True) distance between bounding boxes, (False) distance between ref point
Default: True
continuous (bool): if the controller tries to keep the relative speed
Default: True
max_acceleration (float): maximum acceleration allowed
Default: None
max_deceleration (float): maximum deceleration allowed
Default: None
max_speed (float): maximum speed allowed
Default: None
coordinate_system (CoordinateSystem): the coordinate system for the distance calculation
Default CoordinateSystem.entity
displacement (LateralDisplacement): type of displacement wanted
Default LateralDisplacement.any
"""
self.distance = distance
self.target = entity
self.freespace = convert_bool(freespace)
self.continuous = convert_bool(continuous)
self.dynamic_constraint = DynamicsConstraints(
max_acceleration, max_deceleration, max_speed
)
self.coordinate_system = convert_enum(coordinate_system, CoordinateSystem)
self.displacement = convert_enum(displacement, LateralDisplacement)
def __eq__(self, other):
if isinstance(other, LateralDistanceAction):
if (
self.get_attributes() == other.get_attributes()
and self.dynamic_constraint == other.dynamic_constraint
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of LateralDistanceAction
Parameters
----------
element (xml.etree.ElementTree.Element): A LateralDistanceAction element (same as generated by the class itself)
Returns
-------
ld_action (LateralDistanceAction): a LateralDistanceActionobject
"""
lda_element = element.find("LateralAction/LateralDistanceAction")
continuous = convert_bool(lda_element.attrib["continuous"])
freespace = convert_bool(lda_element.attrib["freespace"])
entity = lda_element.attrib["entityRef"]
distance = None
if "distance" in lda_element.attrib:
distance = lda_element.attrib["distance"]
coordinate = None
if "coordinateSystem" in lda_element.attrib:
coordinate = convert_enum(
lda_element.attrib["coordinateSystem"], CoordinateSystem
)
displacement = None
if "displacement" in lda_element.attrib:
displacement = convert_enum(
lda_element.attrib["displacement"], LateralDisplacement
)
constraints = None
max_acc = None
max_dec = None
max_speed = None
if lda_element.find("DynamicConstraints") != None:
constraints = DynamicsConstraints.parse(
lda_element.find("DynamicConstraints")
)
max_acc = constraints.max_acceleration
max_dec = constraints.max_deceleration
max_speed = constraints.max_speed
return LateralDistanceAction(
entity,
distance,
freespace,
continuous,
max_acc,
max_dec,
max_speed,
coordinate,
displacement,
)
def get_attributes(self):
"""returns the attributes of the LateralDistanceAction as a dict"""
retdict = {}
retdict["entityRef"] = self.target
retdict["freespace"] = get_bool_string(self.freespace)
retdict["continuous"] = get_bool_string(self.continuous)
if self.distance != None:
retdict["distance"] = str(self.distance)
if not self.isVersion(minor=0):
retdict["coordinateSystem"] = self.coordinate_system.get_name()
retdict["displacement"] = self.displacement.get_name()
return retdict
def get_element(self):
"""returns the elementTree of the LateralDistanceAction"""
element = ET.Element("PrivateAction")
lataction = ET.SubElement(element, "LateralAction")
lateraldistanceaction = ET.SubElement(
lataction, "LateralDistanceAction", attrib=self.get_attributes()
)
if self.dynamic_constraint.is_filled():
lateraldistanceaction.append(self.dynamic_constraint.get_element())
return element
# teleport
class TeleportAction(_PrivateActionType):
"""the TeleportAction creates the Teleport action of OpenScenario
Parameters
----------
position (*Position): any position object
Attributes
----------
position (*Position): any position 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
"""
def __init__(self, position):
"""initalizes the TeleportAction
Parameters
----------
position (*Position): any position object
"""
if not isinstance(position, _PositionType):
raise TypeError("position input not a valid Position type")
self.position = position
def __eq__(self, other):
if isinstance(other, TeleportAction):
if self.position == other.position:
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of WorldPosition
Parameters
----------
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
-------
position (WorldPosition): a world position object
"""
position_element = element.find("TeleportAction/Position")
position = _PositionFactory.parse_position(position_element)
return TeleportAction(position)
def get_element(self):
"""returns the elementTree of the TeleportAction"""
element = ET.Element("PrivateAction")
telact = ET.SubElement(element, "TeleportAction")
telact.append(self.position.get_element())
return element
# Routing actions
class AssignRouteAction(_PrivateActionType):
"""AssignRouteAction creates a RouteAction of type AssignRouteAction
Parameters
----------
route (Route, or CatalogReference): the route to follow
Attributes
----------
route (Route, or CatalogReference): the route to follow
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
"""
def __init__(self, route):
"""initalizes the AssignRouteAction
Parameters
----------
route (Route, or CatalogReference): the route to follow
"""
if not (isinstance(route, Route) or isinstance(route, CatalogReference)):
raise TypeError("route input not of type Route or CatalogReference")
self.route = route
def __eq__(self, other):
if isinstance(other, AssignRouteAction):
if self.route == other.route:
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of AssignRouteAction
Parameters
----------
element (xml.etree.ElementTree.Element): A AssignRouteAction element (same as generated by the class itself)
Returns
-------
ar_action (AssignRouteAction): a AssignRouteAction object
"""
ara_element = element.find("RoutingAction/AssignRouteAction")
route = None
if ara_element.find("Route") != None:
route = Route.parse(ara_element.find("Route"))
elif ara_element.find("CatalogReference") != None:
route = CatalogReference.parse(ara_element.find("CatalogReference"))
return AssignRouteAction(route)
def get_element(self):
"""returns the elementTree of the AssignRouteAction"""
element = ET.Element("PrivateAction")
routeaction = ET.SubElement(element, "RoutingAction")
assignrouteaction = ET.SubElement(routeaction, "AssignRouteAction")
assignrouteaction.append(self.route.get_element())
return element
class AcquirePositionAction(_PrivateActionType):
"""AcquirePositionAction creates a RouteAction of type AcquirePositionAction
Parameters
----------
position (*Position): target position
Attributes
----------
position (*Position): target position
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
"""
def __init__(self, position):
"""initalizes the AcquirePositionAction
Parameters
----------
position (*Position): target position
"""
if not isinstance(position, _PositionType):
raise TypeError("position input not a valid Position type")
self.position = position
def __eq__(self, other):
if isinstance(other, AcquirePositionAction):
if self.position == other.position:
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of AcquirePositionAction
Parameters
----------
element (xml.etree.ElementTree.Element): A AcquirePositionAction element (same as generated by the class itself)
Returns
-------
ap_action (AcquirePositionAction): a AcquirePositionAction object
"""
pos_element = element.find("RoutingAction/AcquirePositionAction/Position")
position = _PositionFactory.parse_position(pos_element)
return AcquirePositionAction(position)
def get_element(self):
"""returns the elementTree of the AcquirePositionAction"""
element = ET.Element("PrivateAction")
routeaction = ET.SubElement(element, "RoutingAction")
posaction = ET.SubElement(routeaction, "AcquirePositionAction")
posaction.append(self.position.get_element())
return element
class FollowTrajectoryAction(_PrivateActionType):
"""FollowTrajectoryAction creates a RouteAction of type FollowTrajectoryAction
Parameters
----------
trajectory (Trajectory, or CatalogReference): the trajectory to follow
following_mode (FollowingMode): the following mode of the action
reference_domain (ReferenceContext): how to follow
Default: None
scale (float): scalefactor of the timeings (must be combined with reference_domain and offset)
Default: None
offset (float): offset for time values (must be combined with reference_domain and scale)
Default: None
initialDistanceOffset (float): start at this offset into the trajectory (v1.1)
Default: None
Attributes
----------
trajectory (Trajectory, or CatalogReference): the trajectory to follow
following_mode (str): the following mode of the action
timeref (TimeReference): the time reference of the trajectory
initialDistanceOffset (float): start at this offset into the trajectory (v1.1)
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
"""
def __init__(
self,
trajectory,
following_mode,
reference_domain=None,
scale=None,
offset=None,
initialDistanceOffset=None,
):
"""initalize the FollowTrajectoryAction
Parameters
----------
trajectory (Trajectory, or CatalogReference): the trajectory to follow
following_mode (FollowingMode): the following mode of the action
reference_domain (str): absolute or relative time reference (must be combined with scale and offset)
Default: None
scale (float): scalefactor of the timings (must be combined with reference_domain and offset)
Default: None
offset (float): offset for time values (must be combined with reference_domain and scale)
Default: None
initialDistanceOffset (float): start at this offset into the trajectory (v1.1)
Default: None
"""
# if following_mode not in FollowingMode:
# ValueError(str(following_mode) + ' is not a valied following mode.')
if not (
isinstance(trajectory, Trajectory)
or isinstance(trajectory, CatalogReference)
):
raise TypeError("route input not of type Route or CatalogReference")
self.trajectory = trajectory
self.following_mode = convert_enum(following_mode, FollowingMode)
# TODO: check reference_domain
self.timeref = TimeReference(reference_domain, scale, offset)
self.initialDistanceOffset = convert_float(initialDistanceOffset)
def __eq__(self, other):
if isinstance(other, FollowTrajectoryAction):
if (
self.timeref == other.timeref
and self.get_attributes() == other.get_attributes()
and self.trajectory == other.trajectory
and self.following_mode == other.following_mode
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of FollowTrajectoryAction
Parameters
----------
element (xml.etree.ElementTree.Element): A FollowTrajectoryAction element (same as generated by the class itself)
Returns
-------
ft_action (FollowTrajectoryAction): a FollowTrajectoryAction object
"""
fta_element = element.find("RoutingAction/FollowTrajectoryAction")
initial_distance_offset = None
if "initialDistanceOffset" in fta_element.attrib:
initial_distance_offset = convert_float(
fta_element.attrib["initialDistanceOffset"]
)
timeref = TimeReference.parse(fta_element.find("TimeReference"))
reference_domain = timeref.reference_domain
offset = timeref.offset
scale = timeref.scale
tfm_element = fta_element.find("TrajectoryFollowingMode")
following_mode = convert_enum(
tfm_element.attrib["followingMode"], FollowingMode
)
if fta_element.find("TrajectoryRef") != None:
fta_element = fta_element.find("TrajectoryRef")
trajectory = None
if fta_element.find("Trajectory") != None:
trajectory = Trajectory.parse(fta_element.find("Trajectory"))
if fta_element.find("CatalogReference") != None:
trajectory = CatalogReference.parse(fta_element.find("CatalogReference"))
return FollowTrajectoryAction(
trajectory,
following_mode,
reference_domain,
scale,
offset,
initial_distance_offset,
)
def get_attributes(self):
"""returns the attributes of the FollowTrajectoryAction as a dict"""
if self.initialDistanceOffset:
return {"initialDistanceOffset": str(self.initialDistanceOffset)}
else:
# If initialDistanceOffset is not set, return empty to stay backward compatible with v1.0
return {}
def get_element(self):
"""returns the elementTree of the FollowTrajectoryAction"""
element = ET.Element("PrivateAction")
routeaction = ET.SubElement(element, "RoutingAction")
trajaction = ET.SubElement(
routeaction, "FollowTrajectoryAction", attrib=self.get_attributes()
)
if self.isVersion(minor=0):
trajaction.append(self.trajectory.get_element())
else:
trajref = ET.SubElement(trajaction, "TrajectoryRef")
trajref.append(self.trajectory.get_element())
trajaction.append(self.timeref.get_element())
ET.SubElement(
trajaction,
"TrajectoryFollowingMode",
attrib={"followingMode": self.following_mode.get_name()},
)
return element
class ControllerAction(_PrivateActionType):
"""ControllerAction creates a ControllerAction of open scenario
Parameters
----------
assignControllerAction (AssignControllerAction): assign a controller to an entity
overrideControllerValueAction (OverrideControllerValueAction): values for brake, clutch, parking brake, steering wheel or gear
activateControllerAction (ActivateControllerAction): activate/deactivate a controller on the reference entity/entities. Replaces the depreciated
element in PrivateAction in 1.1
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
"""
def __init__(
self,
assignControllerAction=None,
overrideControllerValueAction=None,
activateControllerAction=None,
):
"""initalizes the ControllerAction
Parameters
----------
assignControllerAction (AssignControllerAction): assign a controller to an entity
overrideControllerValueAction (OverrideControllerValueAction): values for brake, clutch, parking brake, steering wheel or gear
activateControllerAction (ActivateControllerAction): activate/deactivate a controller on the reference entity/entities. Replaces the depreciated
element in PrivateAction in 1.1
"""
if assignControllerAction is not None and not isinstance(
assignControllerAction, AssignControllerAction
):
raise TypeError(
"assignControllerAction is not of type AssignControllerAction"
)
if overrideControllerValueAction is not None and not isinstance(
overrideControllerValueAction, OverrideControllerValueAction
):
raise TypeError(
"overrideControllerValueAction is not of type OverrideControllerValueAction"
)
if activateControllerAction is not None and not isinstance(
activateControllerAction, ActivateControllerAction
):
raise TypeError(
"activateControllerAction is not of type ActivateControllerAction"
)
self.assignControllerAction = assignControllerAction
self.overrideControllerValueAction = overrideControllerValueAction
self.activateControllerAction = activateControllerAction
if self.assignControllerAction is not None:
self.assignControllerAction._used_by_parent = True
if self.overrideControllerValueAction is not None:
self.overrideControllerValueAction._used_by_parent = True
def __eq__(self, other):
if isinstance(other, ControllerAction):
if (
self.activateControllerAction == other.activateControllerAction
and self.overrideControllerValueAction
== other.overrideControllerValueAction
and self.assignControllerAction == other.assignControllerAction
):
return True
if isinstance(other, AssignControllerAction):
if self.assignControllerAction == other:
return True
if isinstance(other, OverrideControllerValueAction):
if self.overrideControllerValueAction == other:
return True
if isinstance(other, ActivateControllerAction):
if self.activateControllerAction == other:
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of ControllerAction
Parameters
----------
element (xml.etree.ElementTree.Element): A ControllerAction element (same as generated by the class itself)
Returns
-------
(ControllerAction): a ActivateControllerAction object
"""
activateControllerAction = None
overrideControllerValueAction = None
assignControllerAction = None
ca_element = element.find("ControllerAction")
if ca_element.find("ActivateControllerAction") != None:
activateControllerAction = ActivateControllerAction.parse(element)
if ca_element.find("OverrideControllerValueAction") != None:
overrideControllerValueAction = OverrideControllerValueAction.parse(element)
if ca_element.find("AssignControllerAction") != None:
assignControllerAction = AssignControllerAction.parse(element)
return ControllerAction(
assignControllerAction,
overrideControllerValueAction,
activateControllerAction,
)
def get_element(self):
"""returns the elementTree of the ControllerAction"""
if self.isVersion(minor=0):
if (
self.assignControllerAction is None
or self.overrideControllerValueAction is None
):
raise NotEnoughInputArguments(
"Both assignControllerAction and overrideControllerValueAction are required in version 1.0."
)
if self.activateControllerAction is not None:
raise OpenSCENARIOVersionError(
"activateControllerAction is not parameter in version 1.0."
)
element = ET.Element("PrivateAction")
controlleraction = ET.SubElement(element, "ControllerAction")
if self.activateControllerAction != None:
pa_element = self.activateControllerAction.get_element()
aca_element = pa_element.find("ControllerAction/ActivateControllerAction")
controlleraction.append(aca_element)
if self.overrideControllerValueAction != None:
pa_element = self.overrideControllerValueAction.get_element()
ocva_element = pa_element.find(
"ControllerAction/OverrideControllerValueAction"
)
controlleraction.append(ocva_element)
if self.assignControllerAction != None:
pa_element = self.assignControllerAction.get_element()
aca_element = pa_element.find("ControllerAction/AssignControllerAction")
controlleraction.append(aca_element)
return element
class ActivateControllerAction(_PrivateActionType):
"""ActivateControllerAction creates a ActivateControllerAction of open scenario
Parameters
----------
lateral (boolean): activate or deactivate the controller
longitudinal (boolean): activate or deactivate the controller
animation (boolean): activate or deactivate an animation
lighting (boolean): activate or deactivate lights
controllerRef (Controller): reference to a controller assigned to the entity
Attributes
----------
lateral (boolean): activate or deactivate the controller
longitudinal (boolean): activate or deactivate the controller
animation (boolean): activate or deactivate an animation
lighting (boolean): activate or deactivate lights
controllerRef (Controller): reference to a controller assigned to the 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 the the attributes of the class
"""
def __init__(
self,
lateral=None,
longitudinal=None,
animation=None,
lighting=None,
controllerRef=None,
):
"""initalizes the ActivateControllerAction
Parameters
----------
lateral (boolean): activate or deactivate the controller
Default: None
longitudinal (boolean): activate or deactivate the controller
animation (boolean): activate or deactivate an animation
lighting (boolean): activate or deactivate lights
controllerRef (Controller): reference to a controller assigned to the entity
"""
self.lateral = convert_bool(lateral)
self.longitudinal = convert_bool(longitudinal)
self.animation = convert_bool(animation)
self.lighting = convert_bool(lighting)
self.controllerRef = controllerRef
def __eq__(self, other):
if isinstance(other, ActivateControllerAction):
if self.get_attributes() == other.get_attributes():
return True
elif isinstance(other, ControllerAction):
if self.get_attributes() == other.activateControllerAction.get_attributes():
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of ActivateControllerAction
Parameters
----------
element (xml.etree.ElementTree.Element): A ActivateControllerAction element (same as generated by the class itself)
Returns
-------
ac_action (ActivateControllerAction): a ActivateControllerAction object
"""
lateral = None
longitudinal = None
animation = None
lighting = None
controllerRef = None
aca_element = element.find("ControllerAction/ActivateControllerAction")
if "lateral" in aca_element.attrib:
lateral = convert_bool(aca_element.attrib["lateral"])
if "longitudinal" in aca_element.attrib:
longitudinal = convert_bool(aca_element.attrib["longitudinal"])
if "animation" in aca_element.attrib:
animation = convert_bool(aca_element.attrib["animation"])
if "lighting" in aca_element.attrib:
lighting = convert_bool(aca_element.attrib["lighting"])
if "controllerRef" in aca_element.attrib:
controllerRef = aca_element.attrib["controllerRef"]
return ActivateControllerAction(
lateral, longitudinal, animation, lighting, controllerRef
)
def get_attributes(self):
"""returns the attributes of the ActivateControllerAction as a dict"""
retdict = {}
if self.lateral is not None:
retdict["lateral"] = get_bool_string(self.lateral)
if self.longitudinal is not None:
retdict["longitudinal"] = get_bool_string(self.longitudinal)
if self.animation is not None and self.isVersion(minor=2):
retdict["animation"] = get_bool_string(self.animation)
if self.lighting is not None and self.isVersion(minor=2):
retdict["lighting"] = get_bool_string(self.lighting)
if self.controllerRef is not None and self.isVersion(minor=2):
retdict["controllerRef"] = self.controllerRef
return retdict
def get_element(self):
"""returns the elementTree of the ActivateControllerAction"""
element = ET.Element("PrivateAction")
if self.isVersion(minor=0):
ET.SubElement(
element, "ActivateControllerAction", attrib=self.get_attributes()
)
else:
subelem = ET.SubElement(element, "ControllerAction")
ET.SubElement(
subelem, "ActivateControllerAction", attrib=self.get_attributes()
)
return element
class AssignControllerAction(_PrivateActionType):
"""AssignControllerAction creates a ControllerAction of type AssignControllerAction
Parameters
----------
controller (Controller or Catalogreference): a controller to assign
activateLateral (bool): if the lateral control should be activated (valid from V1.1)
Default: True
activateLongitudinal (bool): if the longitudinal control should be activated (valid from V1.1)
Default: True
activateLighting (bool): if the lighting control should be activated (valid from V1.2)
Default: False
activateAnimation (bool): if the lighting control should be activated (valid from V1.2)
Default: False
Attributes
----------
controller (boolController or Catalogreferenceean): a controller to assign
activateLateral (bool): if the lateral control should be activated (valid from V1.1)
activateLongitudinal (bool): if the longitudinal control should be activated (valid from V1.1)
activateLighting (bool): if the lighting control should be activated (valid from V1.2)
activateAnimation (bool): if the lighting control should be activated (valid from V1.2)
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
"""
def __init__(
self,
controller,
activateLateral=True,
activateLongitudinal=True,
activateLighting=False,
activateAnimation=False,
):
"""initalizes the AssignControllerAction
Parameters
----------
controller (Controller or Catalogreference): a controller to assign
activateLateral (bool): if the lateral control should be activated (valid from V1.1)
Default: True
activateLongitudinal (bool): if the longitudinal control should be activated (valid from V1.1)
Default: True
"""
if not (
isinstance(controller, Controller)
or isinstance(controller, CatalogReference)
):
raise TypeError("route input not of type Route or CatalogReference")
self.controller = controller
self.activateLateral = convert_bool(activateLateral)
self.activateLongitudinal = convert_bool(activateLongitudinal)
self.activateLighting = convert_bool(activateLighting)
self.activateAnimation = convert_bool(activateAnimation)
self._used_by_parent = False
def __eq__(self, other):
if isinstance(other, AssignControllerAction):
if self.controller == other.controller:
return True
elif isinstance(other, ControllerAction):
if self.controller == other.assignControllerAction.controller:
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of AssignControllerAction
Parameters
----------
element (xml.etree.ElementTree.Element): A AssignControllerAction element (same as generated by the class itself)
Returns
-------
ac_action (AssignControllerAction): a AssignControllerAction object
"""
ca_element = element.find("ControllerAction")
aca_element = ca_element.find("AssignControllerAction")
activate_lateral = True
if "activateLateral" in aca_element.attrib:
activate_lateral = convert_bool(aca_element.attrib["activateLateral"])
activate_longitudinal = True
if "activateLongitudinal" in aca_element.attrib:
activate_longitudinal = convert_bool(
aca_element.attrib["activateLongitudinal"]
)
activate_lighting = False
if "activateLighting" in aca_element.attrib:
activate_lighting = convert_bool(aca_element.attrib["activateLighting"])
activate_animation = False
if "activateAnimation" in aca_element.attrib:
activate_animation = convert_bool(aca_element.attrib["activateAnimation"])
controller = None
if aca_element.find("Controller") != None:
controller = Controller.parse(aca_element.find("Controller"))
elif aca_element.find("CatalogReference") != None:
controller = CatalogReference.parse(aca_element.find("CatalogReference"))
else:
raise NotAValidElement("No Controller found for AssignControllerAction")
return AssignControllerAction(
controller,
activate_lateral,
activate_longitudinal,
activate_lighting,
activate_animation,
)
def get_attributes(self):
"""returns the attributes of the AssignControllerAction as a dict"""
retdict = {}
if self.isVersionEqLarger(minor=1):
retdict = {
"activateLateral": get_bool_string(self.activateLateral),
"activateLongitudinal": get_bool_string(self.activateLongitudinal),
}
if self.isVersionEqLarger(minor=2):
retdict["activateLighting"] = get_bool_string(self.activateLighting)
retdict["activateAnimation"] = get_bool_string(self.activateAnimation)
return retdict
def get_element(self):
"""returns the elementTree of the AssignControllerAction"""
if self.isVersion(minor=0) and not self._used_by_parent:
raise OpenSCENARIOVersionError(
"AssignControllerAction cannot be used alone in OSC 1.0, please add it to a ControllerAction."
)
element = ET.Element("PrivateAction")
controlleraction = ET.SubElement(element, "ControllerAction")
assigncontrolleraction = ET.SubElement(
controlleraction, "AssignControllerAction", self.get_attributes()
)
assigncontrolleraction.append(self.controller.get_element())
return element
class OverrideControllerValueAction(_PrivateActionType):
"""OverrideControllerValueAction creates a OverrideControllerValueAction action of openscenario which can include, throttle, brake, clutch, steeringwheel, gear, parkingbrake
NOTE: this implementation is compatible with osc v.1.1 where all attributes don't have to be set.
Attributes
----------
throttle_active (bool): if the throttle is active
Default: None (will not be written)
throttle_value (float): value of the throttle
brake_active (bool): if the brake is active
Default: None (will not be written)
brake_value (float): value of the brake
clutch_active (bool): if the clutch is active
Default: None (will not be written)
clutch_value (float): value of the clutch
steeringwheel_active (bool): if the steeringwheel is active
Default: None (will not be written)
steeringwheel_value (float): value of the steeringwheel
gear_active (bool): if the gear is active
Default: None (will not be written)
gear_value (float): value of the gear
parkingbrake_active (bool): if the parkingbrake is active
Default: None (will not be written)
parkingbrake_value (float): value of the parkingbrake
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 the attributes of the class
set_throttle(active,value)
sets the throttle value
set_brake(active,value)
sets the brake value
set_steeringwheel(active,value)
sets the steeringwheel value
set_clutch(active,value)
sets the clutch value
set_gear(active,value)
sets the gear value
set_parkingbrake(active,value)
sets the parkingbrake value
"""
def __init__(self):
self.throttle_active = None
self.throttle_value = convert_float(0)
self.throttle_rate = None
self.brake_active = None
self.brake_value = convert_float(0)
self.brake_rate = None
self.brake_force = False
self.clutch_active = None
self.clutch_value = convert_float(0)
self.clutch_rate = None
self.steeringwheel_active = None
self.steeringwheel_value = convert_float(0)
self.steeringwheel_rate = None
self.steeringwheel_torque = None
self.gear_active = None
self.gear_value = convert_float(0)
self._gear_maunal = True
self.parkingbrake_active = None
self.parkingbrake_value = convert_float(0)
self.parkingbrake_rate = None
self.parkingbrake_force = False
self._used_by_parent = False
def __eq__(self, other):
if isinstance(other, OverrideControllerValueAction):
if (
self.throttle_value == other.throttle_value
and self.throttle_value == other.throttle_value
and self.throttle_rate == other.throttle_rate
and self.brake_active == other.brake_active
and self.brake_value == other.brake_value
and self.brake_rate == other.brake_rate
and self.brake_force == other.brake_force
and self.clutch_active == other.clutch_active
and self.clutch_value == other.clutch_value
and self.clutch_rate == other.clutch_rate
and self.steeringwheel_active == other.steeringwheel_active
and self.steeringwheel_value == other.steeringwheel_value
and self.steeringwheel_rate == other.steeringwheel_rate
and self.steeringwheel_torque == other.steeringwheel_torque
and self.gear_active == other.gear_active
and self.gear_value == other.gear_value
and self.parkingbrake_active == other.parkingbrake_active
and self.parkingbrake_value == other.parkingbrake_value
and self.parkingbrake_force == other.parkingbrake_force
and self.parkingbrake_rate == other.parkingbrake_rate
):
return True
elif isinstance(other, ControllerAction):
if (
self.throttle_value
== other.overrideControllerValueAction.throttle_value
and self.throttle_value
== other.overrideControllerValueAction.throttle_value
and self.throttle_rate
== other.overrideControllerValueAction.throttle_rate
and self.brake_active
== other.overrideControllerValueAction.brake_active
and self.brake_value == other.overrideControllerValueAction.brake_value
and self.brake_rate == other.overrideControllerValueAction.brake_rate
and self.brake_force == other.overrideControllerValueAction.brake_force
and self.clutch_active
== other.overrideControllerValueAction.clutch_active
and self.clutch_value
== other.overrideControllerValueAction.clutch_value
and self.clutch_rate == other.overrideControllerValueAction.clutch_rate
and self.steeringwheel_active
== other.overrideControllerValueAction.steeringwheel_active
and self.steeringwheel_value
== other.overrideControllerValueAction.steeringwheel_value
and self.steeringwheel_rate
== other.overrideControllerValueAction.steeringwheel_rate
and self.steeringwheel_torque
== other.overrideControllerValueAction.steeringwheel_torque
and self.gear_active == other.overrideControllerValueAction.gear_active
and self.gear_value == other.overrideControllerValueAction.gear_value
and self.parkingbrake_active
== other.overrideControllerValueAction.parkingbrake_active
and self.parkingbrake_value
== other.overrideControllerValueAction.parkingbrake_value
and self.parkingbrake_force
== other.overrideControllerValueAction.parkingbrake_force
and self.parkingbrake_rate
== other.overrideControllerValueAction.parkingbrake_rate
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of OverrideControllerValueAction
Parameters
----------
element (xml.etree.ElementTree.Element): A OverrideControllerValueAction element (same as generated by the class itself)
Returns
-------
ocv_action (OverrideControllerValueAction): a OverrideControllerValueAction object
"""
ocv_action = OverrideControllerValueAction()
ocva_element = element.find("ControllerAction/OverrideControllerValueAction")
ocv_action.throttle_active = None
ocv_action.throttle_value = convert_float(0)
if ocva_element.find("Throttle") != None:
throttle_element = ocva_element.find("Throttle")
ocv_action.throttle_active = convert_bool(throttle_element.attrib["active"])
ocv_action.throttle_value = convert_float(throttle_element.attrib["value"])
if "maxRate" in throttle_element.attrib:
ocv_action.throttle_rate = convert_float(
throttle_element.attrib["maxRate"]
)
ocv_action.brake_active = None
ocv_action.brake_value = convert_float(0)
if ocva_element.find("Brake") != None:
brake_element = ocva_element.find("Brake")
ocv_action.brake_active = convert_bool(brake_element.attrib["active"])
if "value" in brake_element.attrib:
ocv_action.brake_value = convert_float(brake_element.attrib["value"])
else:
if brake_element.find("BrakePercent") is not None:
brake_input_element = brake_element.find("BrakePercent")
ocv_action.brake_force = False
elif brake_element.find("BrakeForce") is not None:
brake_input_element = brake_element.find("BrakeForce")
ocv_action.brake_force = True
else:
raise ValueError("No value found while parsing brake.")
ocv_action.brake_value = convert_float(
brake_input_element.attrib["value"]
)
if "maxRate" in brake_input_element.attrib:
ocv_action.brake_rate = brake_input_element.attrib["maxRate"]
ocv_action.clutch_active = None
ocv_action.clutch_value = convert_float(0)
if ocva_element.find("Clutch") != None:
cluth_element = ocva_element.find("Clutch")
ocv_action.clutch_active = convert_bool(cluth_element.attrib["active"])
ocv_action.clutch_value = convert_float(cluth_element.attrib["value"])
if "maxRate" in cluth_element.attrib:
ocv_action.clutch_rate = convert_float(cluth_element.attrib["maxRate"])
ocv_action.parkingbrake_active = None
ocv_action.parkingbrake_value = convert_float(0)
if ocva_element.find("ParkingBrake") != None:
parkingbrake_element = ocva_element.find("ParkingBrake")
ocv_action.parkingbrake_active = convert_bool(
parkingbrake_element.attrib["active"]
)
if "value" in parkingbrake_element.attrib:
ocv_action.parkingbrake_value = convert_float(
parkingbrake_element.attrib["value"]
)
else:
if parkingbrake_element.find("BrakePercent") is not None:
parkingbrake_input_element = parkingbrake_element.find(
"BrakePercent"
)
ocv_action.parkingbrake_force = False
elif parkingbrake_element.find("BrakeForce") is not None:
parkingbrake_input_element = parkingbrake_element.find("BrakeForce")
ocv_action.parkingbrake_force = True
else:
raise ValueError("No value found while parsing brake.")
ocv_action.parkingbrake_value = convert_float(
parkingbrake_input_element.attrib["value"]
)
if "maxRate" in parkingbrake_input_element.attrib:
ocv_action.parkingbrake_rate = convert_float(
parkingbrake_input_element.attrib["maxRate"]
)
ocv_action.steeringwheel_active = None
ocv_action.steeringwheel_value = convert_float(0)
if ocva_element.find("SteeringWheel") != None:
steeringwheel_element = ocva_element.find("SteeringWheel")
ocv_action.steeringwheel_active = convert_bool(
steeringwheel_element.attrib["active"]
)
ocv_action.steeringwheel_value = convert_float(
steeringwheel_element.attrib["value"]
)
if "maxRate" in steeringwheel_element.attrib:
ocv_action.steeringwheel_rate = convert_float(
steeringwheel_element.attrib["maxRate"]
)
if "maxTorque" in steeringwheel_element.attrib:
ocv_action.steeringwheel_torque = convert_float(
steeringwheel_element.attrib["maxTorque"]
)
ocv_action.gear_active = None
ocv_action.gear_value = convert_float(0)
if ocva_element.find("Gear") != None:
gear_element = ocva_element.find("Gear")
ocv_action.gear_active = convert_bool(gear_element.attrib["active"])
if "number" in gear_element.attrib:
ocv_action.gear_value = convert_float(gear_element.attrib["number"])
elif gear_element.find("AutomaticGear") is not None:
ocv_action.gear_value = getattr(
AutomaticGearType,
gear_element.find("AutomaticGear").attrib["gear"],
)
elif gear_element.find("ManualGear") is not None:
ocv_action.gear_value = convert_float(
gear_element.find("ManualGear").attrib["number"]
)
else:
raise ValueError("no gear number found in OverrideGearAction")
return ocv_action
def set_clutch(self, active, value=0, rate=None):
"""Sets the clutch value
Parameters
----------
active (bool): if the clutch should be overridden
value (float): value of the clutch
Default: 0
rate (float): rate of the change (Valid from OpenSCENARIO V1.2)
Default: None
"""
self.clutch_active = convert_bool(active)
self.clutch_value = convert_float(value)
self.clutch_rate = rate
def set_brake(self, active, value=0, rate=None, interpret_as_force=False):
"""Sets the brake value
Parameters
----------
active (bool): if the brake should be overridden
value (float): value of the brake
Default: 0
rate (float): the rate of the change (Valid from OpenSCENARIO V1.2)
Default: None
interpret_as_force (bool): interpret the value as force instead of percent (Valid from OpenSCENARIO V1.2)
Default: None
"""
self.brake_active = convert_bool(active)
self.brake_value = convert_float(value)
self.brake_rate = rate
self.brake_force = interpret_as_force
def set_throttle(self, active, value=0, rate=None):
"""Sets the throttle value
Parameters
----------
active (bool): if the throttle should be overridden
value (float): value of the throttle
Default: 0
rate (float): rate of the change (Valid from OpenSCENARIO V1.2)
Default: None
"""
self.throttle_active = convert_bool(active)
self.throttle_value = convert_float(value)
self.throttle_rate = rate
def set_steeringwheel(self, active, value=0, rate=None, torque=None):
"""Sets the steeringwheel value
Parameters
----------
active (bool): if the steeringwheel should be overridden
value (float): value of the steeringwheel
Default: 0
rate (float): the Max Rate of the change (Valid from OpenSCENARIO V1.2)
Default: None
torque (float): the Max Torque of the change (Valid from OpenSCENARIO V1.2)
Default: None
"""
self.steeringwheel_active = convert_bool(active)
self.steeringwheel_value = convert_float(value)
self.steeringwheel_rate = convert_float(rate)
self.steeringwheel_torque = convert_float(torque)
def set_parkingbrake(self, active, value=0, rate=None, interpret_as_force=False):
"""Sets the parkingbrake value
Parameters
----------
active (bool): if the parkingbrake should be overridden
value (float): value of the parkingbrake
Default: 0
rate (float): the rate of the change (Valid from OpenSCENARIO V1.2)
Default: None
interpret_as_force (bool): interpret the value as force instead of percent (Valid from OpenSCENARIO V1.2)
Default: None
"""
self.parkingbrake_active = convert_bool(active)
self.parkingbrake_value = convert_float(value)
self.parkingbrake_rate = rate
self.parkingbrake_force = interpret_as_force
def set_gear(self, active, value=0):
"""Sets the gear value
Parameters
----------
active (bool): if the gear should be overridden
value (float/AutomaticGearType): value of the gear
Default: 0
"""
self.gear_active = convert_bool(active)
if hasattr(AutomaticGearType, str(value)):
self.gear_value = value
self._gear_maunal = False
else:
self.gear_value = convert_float(value)
self._gear_maunal = True
def get_element(self):
"""returns the elementTree of the OverrideControllerValueAction"""
if self.isVersion(minor=0) and not self._used_by_parent:
raise OpenSCENARIOVersionError(
"OverrideControllerValueAction cannot be used alone in OSC 1.0, please add it to a ControllerAction"
)
element = ET.Element("PrivateAction")
controlleraction = ET.SubElement(element, "ControllerAction")
overrideaction = ET.SubElement(
controlleraction, "OverrideControllerValueAction"
)
if (
self.throttle_active == None
and self.brake_active == None
and self.clutch_active == None
and self.parkingbrake_active == None
and self.steeringwheel_active == None
and self.gear_active == None
):
raise NoActionsDefinedError(
"No actions were added to the OverrideControllerValueAction"
)
if self.throttle_active != None:
throttle_dict = {
"active": get_bool_string(self.throttle_active),
"value": str(self.throttle_value),
}
if self.throttle_rate is not None and self.isVersion(minor=2):
throttle_dict["maxRate"] = str(self.throttle_rate)
elif self.throttle_rate is not None and not self.isVersion(minor=2):
raise OpenSCENARIOVersionError(
"maxRate was introduced in OpenSCENARIO v1.2"
)
ET.SubElement(
overrideaction,
"Throttle",
throttle_dict,
)
if self.brake_active != None:
if not self.isVersion(minor=2):
ET.SubElement(
overrideaction,
"Brake",
{
"active": get_bool_string(self.brake_active),
"value": str(self.brake_value),
},
)
else:
override_brake = ET.SubElement(
overrideaction,
"Brake",
{"active": get_bool_string(self.brake_active)},
)
brake_dict = {"value": str(self.brake_value)}
if self.brake_rate is not None:
brake_dict["maxRate"] = str(self.brake_rate)
if self.brake_force:
ET.SubElement(override_brake, "BrakeForce", attrib=brake_dict)
else:
ET.SubElement(override_brake, "BrakePercent", attrib=brake_dict)
if self.clutch_active != None:
if self.throttle_rate is not None and self.isVersion(minor=2):
throttle_dict["maxRate"] = str(self.throttle_rate)
elif self.throttle_rate is not None and not self.isVersion(minor=2):
raise OpenSCENARIOVersionError(
"maxRate was introduced in OpenSCENARIO v1.2"
)
clutch_dict = {
"active": get_bool_string(self.clutch_active),
"value": str(self.clutch_value),
}
if self.clutch_rate is not None and self.isVersion(minor=2):
clutch_dict["maxRate"] = str(self.clutch_rate)
elif self.clutch_rate is not None and not self.isVersion(minor=2):
raise OpenSCENARIOVersionError(
"maxRate was introduced in OpenSCENARIO v1.2"
)
ET.SubElement(
overrideaction,
"Clutch",
clutch_dict,
)
if self.parkingbrake_active != None:
if not self.isVersion(minor=2):
ET.SubElement(
overrideaction,
"ParkingBrake",
{
"active": get_bool_string(self.parkingbrake_active),
"value": str(self.parkingbrake_value),
},
)
else:
override_parking = ET.SubElement(
overrideaction,
"ParkingBrake",
{"active": get_bool_string(self.parkingbrake_active)},
)
parkingbrake_dict = {"value": str(self.parkingbrake_value)}
if self.parkingbrake_rate is not None:
parkingbrake_dict["maxRate"] = str(self.parkingbrake_rate)
if self.parkingbrake_force:
ET.SubElement(
override_parking, "BrakeForce", attrib=parkingbrake_dict
)
else:
ET.SubElement(
override_parking, "BrakePercent", attrib=parkingbrake_dict
)
if self.steeringwheel_active != None:
steering_dict = {
"active": get_bool_string(self.steeringwheel_active),
"value": str(self.steeringwheel_value),
}
if self.steeringwheel_torque is not None:
if self.isVersion(minor=2):
steering_dict["maxTorque"] = str(self.steeringwheel_torque)
else:
raise OpenSCENARIOVersionError(
"maxTorque was introduced in OpenSCENARIO v1.2"
)
if self.steeringwheel_rate is not None:
if self.isVersion(minor=2):
steering_dict["maxRate"] = str(self.steeringwheel_rate)
else:
raise OpenSCENARIOVersionError(
"maxRate was introduced in OpenSCENARIO v1.2"
)
ET.SubElement(
overrideaction,
"SteeringWheel",
steering_dict,
)
if self.gear_active != None:
if not self.isVersion(minor=2):
ET.SubElement(
overrideaction,
"Gear",
{
"active": get_bool_string(self.gear_active),
"number": str(self.gear_value),
},
)
else:
override_gear_action = ET.SubElement(
overrideaction,
"Gear",
{
"active": get_bool_string(self.gear_active),
},
)
if self._gear_maunal:
ET.SubElement(
override_gear_action,
"ManualGear",
{"number": str(int(self.gear_value))},
)
else:
ET.SubElement(
override_gear_action,
"AutomaticGear",
{"gear": self.gear_value.get_name()},
)
return element
class VisibilityAction(_PrivateActionType):
"""creates a VisibilityAction
Parameters
----------
graphics (boolean): visible for graphics or not
traffic (boolean): visible for traffic
sensors (boolean): visible to sensors or not
Attributes
----------
graphics (boolean): visible for graphics or not
traffic (boolean): visible for traffic
sensors (boolean): visible to sensors or not
sensor_refs (list of str): all sensor references
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 the attributes of the class
"""
def __init__(self, graphics, traffic, sensors):
"""initalizes the VisibilityAction
Parameters
----------
graphics (boolean): visible for graphics or not
traffic (boolean): visible for traffic
sensors (boolean): visible to sensors or not
"""
self.graphics = convert_bool(graphics)
self.traffic = convert_bool(traffic)
self.sensors = convert_bool(sensors)
self.sensor_refs = []
def __eq__(self, other):
if isinstance(other, VisibilityAction):
if (
self.get_attributes() == other.get_attributes()
and self.sensor_refs == other.sensor_refs
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of VisibilityAction
Parameters
----------
element (xml.etree.ElementTree.Element): A VisibilityAction element (same as generated by the class itself)
Returns
-------
v_action (VisibilityAction): a VisibilityAction object
"""
va_element = element.find("VisibilityAction")
graphics = convert_bool(va_element.attrib["graphics"])
traffic = convert_bool(va_element.attrib["traffic"])
sensors = convert_bool(va_element.attrib["sensors"])
visibility_action = VisibilityAction(graphics, traffic, sensors)
sensor_ref_element = va_element.find("SensorReferenceSet")
if sensor_ref_element is not None:
for sensor_element in sensor_ref_element.findall("SensorReference"):
visibility_action.add_sensor_reference(sensor_element.attrib["name"])
return visibility_action
def add_sensor_reference(self, sensor_ref):
"""adds a sensor reference to the visibility action (Valid since OSC V1.2)
Parameters
----------
sensor_ref (str): name of a sensor
"""
self.sensor_refs.append(sensor_ref)
return self
def get_attributes(self):
"""returns the attributes of the VisibilityAction as a dict"""
return {
"graphics": get_bool_string(self.graphics),
"traffic": get_bool_string(self.traffic),
"sensors": get_bool_string(self.sensors),
}
def get_element(self):
"""returns the elementTree of the VisibilityAction"""
element = ET.Element("PrivateAction")
visibility_element = ET.SubElement(
element, "VisibilityAction", self.get_attributes()
)
if self.sensor_refs:
if self.isVersionEqLess(minor=1):
raise OpenSCENARIOVersionError("SensorReference was added in OSC V1.2")
sensor_ref_element = ET.SubElement(visibility_element, "SensorReferenceSet")
for sensor in self.sensor_refs:
ET.SubElement(
sensor_ref_element, "SensorReference", {"name": str(sensor)}
)
return element
class SynchronizeAction(_PrivateActionType):
"""Synchronizes an entity's arrival at a destination with a master entity. Both entities are provided with their own reference position which shall be reached at the same time. Final speed can be specified. Note that the reference positions can be different or identical.
Parameters
----------
entity (str): entity to syncronize with
entity_PositionType (*Position): the position of the entity to syncronize to
target_PositionType (*Position): the position of the target that should syncronize
speed (float): the absolute speed of the target that should syncronize
target_tolerance_master (optional) (float): tolerance offset of the master's position [m]. (Valid from OpenSCENARIO V1.1)
target_tolerance (optional) (float): tolerance offset of the target's position [m]. (Valid from OpenSCENARIO V1.1)
final_speed (AbsoluteSpeed or RelativeSpeedToMaster): The speed that the synchronized entity should have at its target position. (Valid from OpenSCENARIO V1.1)
Default: None
Attributes
----------
entity (str): entity to syncronize with
entity_PositionType (*Position): the position of the entity to syncronize to
target_PositionType (*Position): the position of the target that should syncronize
speed (float): the absolute speed of the target that should syncronize
target_tolerance_master (optional) (float): tolerance offset of the master's position [m]. (Valid from OpenSCENARIO V1.1)
target_tolerance (optional) (float): tolerance offset of the target's position [m]. (Valid from OpenSCENARIO V1.1)
final_speed (AbsoluteSpeed or RelativeSpeedToMaster): The speed that the synchronized entity should have at its target position. (Valid from OpenSCENARIO V1.1)
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 the attributes of the class
"""
def __init__(
self,
entity,
entity_PositionType: _PositionType,
target_PositionType: _PositionType,
target_tolerance_master=None,
target_tolerance=None,
final_speed=None,
):
"""initalize the SynchronizeAction
Parameters
----------
entity (str): entity to syncronize with
entity_PositionType (*Position): the position of the entity to syncronize to
target_PositionType (*Position): the position of the target that should syncronize
target_tolerance_master (optional) (float): tolerance offset of the master's position [m]. (Valid from OpenSCENARIO V1.1)
target_tolerance (optional) (float): tolerance offset of the target's position [m]. (Valid from OpenSCENARIO V1.1)
final_speed (AbsoluteSpeed or RelativeSpeedToMaster): The speed that the synchronized entity should have at its target position. (Valid from OpenSCENARIO V1.1)
Default: None
"""
self.entity = entity
if not isinstance(entity_PositionType, _PositionType):
raise TypeError("entity_PositionType input is not a valid Position")
if not isinstance(target_PositionType, _PositionType):
raise TypeError("target_PositionType input is not a valid Position")
self.entity_PositionType = entity_PositionType
self.target_PositionType = target_PositionType
self.target_tolerance_master = convert_float(target_tolerance_master)
self.target_tolerance = convert_float(target_tolerance)
if final_speed and not (
isinstance(final_speed, AbsoluteSpeed)
or isinstance(final_speed, RelativeSpeedToMaster)
):
raise TypeError(
"final_speed input is not AbsoluteSpeed or RelativeSpeedToMaster type"
)
else:
self.final_speed = final_speed
def __eq__(self, other):
if isinstance(other, SynchronizeAction):
if (
self.get_attributes() == other.get_attributes()
and self.entity_PositionType == other.entity_PositionType
and self.target_PositionType == other.target_PositionType
and self.final_speed == other.final_speed
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of SynchronizeAction
Parameters
----------
element (xml.etree.ElementTree.Element): A SynchronizeAction element (same as generated by the class itself)
Returns
-------
sync_action (SynchronizeAction): a SynchronizeAction object
"""
sa_element = element.find("SynchronizeAction")
entity = sa_element.attrib["masterEntityRef"]
target_tolerance = None
if "targetTolerance" in sa_element.attrib:
target_tolerance = convert_float(sa_element.attrib["targetTolerance"])
target_tolerance_master = None
if "targetToleranceMaster" in sa_element.attrib:
target_tolerance_master = convert_float(
sa_element.attrib["targetToleranceMaster"]
)
targetPositionMaster = _PositionFactory.parse_position(
sa_element.find("TargetPositionMaster")
)
targetPosition = _PositionFactory.parse_position(
sa_element.find("TargetPosition")
)
finalSpeed = None
if sa_element.find("FinalSpeed") != None:
sa_element = sa_element.find("FinalSpeed")
if sa_element.find("AbsoluteSpeed") != None:
finalSpeed = AbsoluteSpeed.parse(sa_element)
if sa_element.find("RelativeSpeedToMaster") != None:
finalSpeed = RelativeSpeedToMaster.parse(sa_element)
return SynchronizeAction(
entity,
targetPositionMaster,
targetPosition,
target_tolerance_master,
target_tolerance,
finalSpeed,
)
_
def get_attributes(self):
"""returns the attributes of the AbsoluteSynchronizeAction as a dict"""
attr = {"masterEntityRef": self.entity}
if self.isVersion(1, 0):
return attr
if self.target_tolerance_master is not None:
attr.update({"targetToleranceMaster": str(self.target_tolerance_master)})
if self.target_tolerance is not None:
attr.update({"targetTolerance": str(self.target_tolerance)})
return attr
def get_element(self):
"""returns the elementTree of the AbsoluteSynchronizeAction"""
element = ET.Element("PrivateAction")
syncaction = ET.SubElement(element, "SynchronizeAction", self.get_attributes())
syncaction.append(self.entity_PositionType.get_element("TargetPositionMaster"))
syncaction.append(self.target_PositionType.get_element("TargetPosition"))
if self.final_speed is not None:
syncaction.append(self.final_speed.get_element())
return element
class LightStateAction(_PrivateActionType):
"""LightStateAction creates an AppearanceAction of of the Type LightStateAction
Parameters
----------
light_type (VehicleLightType or UserDefinedLight):
mode (LightMode): the new mode of the light
transition_time (float): the transition time of the light
Default: 0
flashing_off_duration (float): how long the light should be off when LightMode is set to "flashing"
flashing_on_duration (float): how long the light should be on when when LightMode is set to "flashing"
intensity (float): the luminous intensity of the light
color (Color): the color of the light
Attributes
----------
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 the attributes of the class
"""
def __init__(
self,
light_type,
mode,
transition_time=0,
flashing_off_duration=None,
flashing_on_duration=None,
intensity=None,
color=None,
):
"""initalize the LightStateAction
Parameters
----------
light_type (VehicleLightType or UserDefinedLight):
mode (LightMode): the new mode of the light
transition_time (float): the transition time of the light
Default: 0
flashing_off_duration (float): how long the light should be off when LightMode is set to "flashing"
flashing_on_duration (float): how long the light should be on when when LightMode is set to "flashing"
intensity (float): the luminous intensity of the light
color (Color): the color of the light
"""
try:
self.light_type = convert_enum(light_type, VehicleLightType)
except Exception as e:
if not isinstance(light_type, UserDefinedLight):
raise TypeError(
"light_type input is not of type VehicleLightType or UserDefinedLight"
)
else:
self.light_type = light_type
self.lightstate = _LightState(
mode, color, intensity, flashing_off_duration, flashing_on_duration
)
self.transition_time = convert_float(transition_time)
def __eq__(self, other):
if isinstance(other, LightStateAction):
if (
self.get_attributes() == other.get_attributes()
and self.light_type == other.light_type
and self.lightstate == other.lightstate
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of LightStateAction
Parameters
----------
element (xml.etree.ElementTree.Element): A LightStateAction element (same as generated by the class itself)
Returns
-------
light_state_action (LightStateAction): a LightStateAction object
"""
light_element = element.find("AppearanceAction/LightStateAction")
transition_time = None
if "transitionTime" in light_element.attrib:
transition_time = convert_float(light_element.attrib["transitionTime"])
light_state = _LightState.parse(light_element.find("LightState"))
type_element = light_element.find("LightType")
if type_element.find("UserDefinedLight") is not None:
light_type = UserDefinedLight.parse(type_element.find("UserDefinedLight"))
else:
light_type = convert_enum(
type_element.find("VehicleLight").attrib["vehicleLightType"],
VehicleLightType,
)
# create with dummy mode
light_state_action = LightStateAction(light_type, LightMode.on, transition_time)
light_state_action.lightstate = light_state
return light_state_action
def get_attributes(self):
"""returns the attributes of the LightStateAction as a dict"""
attr = {"transitionTime": str(self.transition_time)}
return attr
def get_element(self):
"""returns the elementTree of the LightStateAction"""
element = ET.Element("PrivateAction")
appear_element = ET.SubElement(element, "AppearanceAction")
light_element = ET.SubElement(
appear_element, "LightStateAction", self.get_attributes()
)
light_element.append(self.lightstate.get_element())
light_type_element = ET.SubElement(light_element, "LightType")
if hasattr(VehicleLightType, str(self.light_type)):
ET.SubElement(
light_type_element,
"VehicleLight",
attrib={"vehicleLightType": self.light_type.get_name()},
)
else:
light_type_element.append(self.light_type.get_element())
return element
class AnimationAction(_PrivateActionType):
"""AnimationAction creates an AppearanceAction of of the Type AnimationAction
Parameters
----------
animation_type (VehicleComponentType, UserDefinedComponent, PedestrianAnimation, AnimationFile or UserDefinedAnimation): the animation to be taken place
duration (float): the duraton of the animation
Default: None
loop (bool): if the animation should be looped
Default: None
state (float): what state the animation should be put to
Default: None
Attributes
----------
animation_type (_ComponentAnimation, PedestrianAnimation, AnimationFile or UserDefinedAnimation): the animation to be taken place
duration (float): the duraton of the animation
loop (bool): if the animation should be looped
state (float): what state the animation should be put to
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 the attributes of the class
"""
def __init__(
self,
animation_type,
duration=None,
loop=None,
state=None,
):
"""initalize the AnimationAction
Parameters
----------
animation_type (VehicleComponentType, UserDefinedComponent, PedestrianAnimation, AnimationFile or UserDefinedAnimation): the animation to be taken place
duration (float): the duraton of the animation
Default: None
loop (bool): if the animation should be looped
Default: None
state (float): what state the animation should be put to
Default: None
"""
try:
self.animation_type = _ComponentAnimation(_VehicleComponent(animation_type))
except Exception as e:
self.animation_type = None
if self.animation_type:
pass
elif isinstance(animation_type, UserDefinedComponent):
self.animation_type = _ComponentAnimation(animation_type)
else:
self.animation_type = animation_type
self.duration = convert_float(duration)
if loop is not None and not isinstance(loop, bool):
raise TypeError("loop input is not of type bool")
self.loop = loop
self.state = convert_float(state)
def __eq__(self, other):
if isinstance(other, AnimationAction):
if (
self.get_attributes() == other.get_attributes()
and self.animation_type == other.animation_type
and self.state == other.state
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of AnimationAction
Parameters
----------
element (xml.etree.ElementTree.Element): A AnimationAction element (same as generated by the class itself)
Returns
-------
animation_action (AnimationAction): a AnimationAction object
"""
animation_element = element.find("AppearanceAction/AnimationAction")
duration = None
if "animationDuration" in animation_element.attrib:
duration = convert_float(animation_element.attrib["animationDuration"])
loop = None
if "loop" in animation_element.attrib:
loop = convert_bool(animation_element.attrib["loop"])
animation_state = animation_element.find("AnimationState")
state = None
if animation_state is not None:
state = convert_float(animation_state.attrib["state"])
animation_type = _AnimationTypeFactory.parse_animationtype(
animation_element.find("AnimationType")
)
return AnimationAction(animation_type, duration, loop, state)
def get_attributes(self):
"""returns the attributes of the AnimationAction as a dict"""
retdict = {}
if self.duration is not None:
retdict["animationDuration"] = str(self.duration)
if self.loop is not None:
retdict["loop"] = get_bool_string(self.loop)
return retdict
def get_element(self):
"""returns the elementTree of the AnimationAction"""
element = ET.Element("PrivateAction")
appear_element = ET.SubElement(element, "AppearanceAction")
animation_element = ET.SubElement(
appear_element, "AnimationAction", self.get_attributes()
)
animation_type_element = ET.SubElement(animation_element, "AnimationType")
animation_type_element.append(self.animation_type.get_element())
if self.state is not None:
ET.SubElement(
animation_element, "AnimationState", attrib={"state": str(self.state)}
)
return element
#### Global Actions ####
class ParameterAddAction(_ActionType):
"""The ParameterAddAction class creates a ParameterAction of type ParameterModifyAction which adds a value to an existing Parameter
(valid to V1.1, deprecated since V1.2)
Parameters
----------
parameter_ref (str): name of the parameter
value (float): the value that should be added to the parameter
Attributes
----------
parameter_ref (str): name of the parameter
value (float): the value that should be added to the parameter
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, parameter_ref, value):
"""initalize the ParameterAddAction
Parameters
----------
parameter_ref (str): name of the parameter
value (float): the value that should be added to the parameter
"""
self.parameter_ref = parameter_ref
self.value = convert_float(value)
def __eq__(self, other):
if isinstance(other, ParameterAddAction):
if (
self.get_attributes() == other.get_attributes()
and self.parameter_ref == other.parameter_ref
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of ParameterAddAction
Parameters
----------
element (xml.etree.ElementTree.Element): A ParameterAddAction element (same as generated by the class itself)
Returns
-------
paa_action (ParameterAddAction): a ParameterAddAction object
"""
pa_element = element.find("ParameterAction")
parameterRef = pa_element.attrib["parameterRef"]
ma_element = pa_element.find("ModifyAction")
rule_element = ma_element.find("Rule")
mbv_element = rule_element.find("AddValue")
value = convert_float(mbv_element.attrib["value"])
return ParameterAddAction(parameterRef, value)
def get_attributes(self):
"""returns the attributes of the ParameterAddAction as a dict"""
return {"value": str(self.value)}
def get_element(self):
"""returns the elementTree of the ParameterAddAction"""
if self.version_minor > 1:
raise OpenSCENARIOVersionError(
"ParameterAddAction was deprecated in OSC 1.2, please use VariableAddAction instead"
)
element = ET.Element("GlobalAction")
paramaction = ET.SubElement(
element, "ParameterAction", {"parameterRef": self.parameter_ref}
)
modifaction = ET.SubElement(paramaction, "ModifyAction")
rule = ET.SubElement(modifaction, "Rule")
ET.SubElement(rule, "AddValue", self.get_attributes())
return element
class ParameterMultiplyAction(_ActionType):
"""The ParameterMultiplyAction class creates a ParameterAction of tyoe ParameterModifyAction which adds a value to an existing Parameter
(valid to V1.1, deprecated since V1.2)
Parameters
----------
parameter_ref (str): name of the parameter
value (float): the value that should be multiplied to the parameter
Attributes
----------
parameter_ref (str): name of the parameter
value (float): the value that should be multiplied to the parameter
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, parameter_ref, value):
"""initalize the ParameterMultiplyAction
Parameters
----------
parameter_ref (str): name of the parameter
value (float): the value that should be added to the parameter
"""
self.parameter_ref = parameter_ref
self.value = convert_float(value)
def __eq__(self, other):
if isinstance(other, ParameterMultiplyAction):
if (
self.get_attributes() == other.get_attributes()
and self.parameter_ref == other.parameter_ref
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of ParameterMultiplyAction
Parameters
----------
element (xml.etree.ElementTree.Element): A ParameterMultiplyAction element (same as generated by the class itself)
Returns
-------
pma_action (ParameterMultiplyAction): a ParameterMultiplyAction object
"""
pa_element = element.find("ParameterAction")
parameterRef = pa_element.attrib["parameterRef"]
ma_element = pa_element.find("ModifyAction")
rule_element = ma_element.find("Rule")
mbv_element = rule_element.find("MultiplyByValue")
value = convert_float(mbv_element.attrib["value"])
return ParameterMultiplyAction(parameterRef, value)
def get_attributes(self):
"""returns the attributes of the ParameterMultiplyAction as a dict"""
return {"value": str(self.value)}
def get_element(self):
"""returns the elementTree of the ParameterMultiplyAction"""
if self.version_minor > 1:
raise OpenSCENARIOVersionError(
"ParameterMultiplyAction was deprecated in OSC 1.2, please use VariableMultiplyAction instead"
)
element = ET.Element("GlobalAction")
paramaction = ET.SubElement(
element, "ParameterAction", {"parameterRef": self.parameter_ref}
)
modifaction = ET.SubElement(paramaction, "ModifyAction")
rule = ET.SubElement(modifaction, "Rule")
ET.SubElement(rule, "MultiplyByValue", self.get_attributes())
return element
class ParameterSetAction(_ActionType):
"""The ParameterSetAction class creates a ParameterAction which adds a value to an existing Parameter
(valid to V1.1, deprecated since V1.2)
Parameters
----------
parameter_ref (str): name of the parameter
value (float): the value that should be set to the parameter
Attributes
----------
parameter_ref (str): name of the parameter
value (float): the value that should be set to the parameter
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, parameter_ref, value):
"""initalize the ParameterSetAction
Parameters
----------
parameter_ref (str): name of the parameter
value (float): the value that should be added to the parameter
"""
self.parameter_ref = parameter_ref
self.value = value
def __eq__(self, other):
if isinstance(other, ParameterSetAction):
if (
self.get_attributes() == other.get_attributes()
and self.parameter_ref == other.parameter_ref
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of ParameterSetAction
Parameters
----------
element (xml.etree.ElementTree.Element): A ParameterSetAction element (same as generated by the class itself)
Returns
-------
psa_action (ParameterSetAction): a ParameterSetAction object
"""
pa_element = element.find("ParameterAction")
parameterRef = pa_element.attrib["parameterRef"]
psa_element = pa_element.find("SetAction")
value = psa_element.attrib["value"]
psa = ParameterSetAction(parameterRef, value)
psa.setVersion(minor=1)
return psa # ParameterSetAction(parameterRef, value)
def get_attributes(self):
"""returns the attributes of the ParameterSetAction as a dict"""
return {"value": str(self.value)}
def get_element(self):
"""returns the elementTree of the ParameterSetAction"""
if self.version_minor > 1:
raise OpenSCENARIOVersionError(
"ParameterSetAction was deprecated in OSC 1.2, please use VariableSetAction instead"
)
element = ET.Element("GlobalAction")
paramaction = ET.SubElement(
element, "ParameterAction", {"parameterRef": self.parameter_ref}
)
ET.SubElement(paramaction, "SetAction", self.get_attributes())
return element
class VariableAddAction(_ActionType):
"""The VariableAddAction class creates a VariableAction of type VariableModifyAction which adds a value to an existing Variable
(valid from V1.2)
Parameters
----------
variable_ref (str): name of the variable
value (float): the value that should be added to the variable
Attributes
----------
variable_ref (str): name of the variable
value (float): the value that should be added to the variable
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, variable_ref, value):
"""initalize the VariableAddAction
Parameters
----------
variable_ref (str): name of the variable
value (float): the value that should be added to the variable
"""
self.variable_ref = variable_ref
self.value = value
def __eq__(self, other):
if isinstance(other, VariableAddAction):
if (
self.get_attributes() == other.get_attributes()
and self.variable_ref == other.variable_ref
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of VariableAddAction
Parameters
----------
element (xml.etree.ElementTree.Element): A VariableAddAction element (same as generated by the class itself)
Returns
-------
paa_action (VariableAddAction): a VariableAddAction object
"""
pa_element = element.find("VariableAction")
variableRef = pa_element.attrib["variableRef"]
ma_element = pa_element.find("ModifyAction")
rule_element = ma_element.find("Rule")
mbv_element = rule_element.find("AddValue")
value = mbv_element.attrib["value"]
return VariableAddAction(variableRef, value)
def get_attributes(self):
"""returns the attributes of the AbsoluteSpeedAction as a dict"""
return {"value": str(self.value)}
def get_element(self):
"""returns the elementTree of the AbsoluteSpeedAction"""
if self.version_minor < 2:
raise OpenSCENARIOVersionError("VariableActions were added in OSC 1.2")
element = ET.Element("GlobalAction")
paramaction = ET.SubElement(
element, "VariableAction", {"variableRef": self.variable_ref}
)
modifaction = ET.SubElement(paramaction, "ModifyAction")
rule = ET.SubElement(modifaction, "Rule")
ET.SubElement(rule, "AddValue", self.get_attributes())
return element
class VariableMultiplyAction(_ActionType):
"""The VariableMultiplyAction class creates a VariableAction of tyoe VariableModifyAction which adds a value to an existing Variable
(valid from V1.2)
Parameters
----------
variable_ref (str): name of the variable
value (float): the value that should be multiplied to the variable
Attributes
----------
variable_ref (str): name of the variable
value (float): the value that should be multiplied to the variable
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, variable_ref, value):
"""initalize the VariableMultiplyAction
Parameters
----------
variable_ref (str): name of the variable
value (float): the value that should be added to the variable
"""
self.variable_ref = variable_ref
self.value = value
def __eq__(self, other):
if isinstance(other, VariableMultiplyAction):
if (
self.get_attributes() == other.get_attributes()
and self.variable_ref == other.variable_ref
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of VariableMultiplyAction
Parameters
----------
element (xml.etree.ElementTree.Element): A VariableMultiplyAction element (same as generated by the class itself)
Returns
-------
pma_action (VariableMultiplyAction): a VariableMultiplyAction object
"""
pa_element = element.find("VariableAction")
variableRef = pa_element.attrib["variableRef"]
ma_element = pa_element.find("ModifyAction")
rule_element = ma_element.find("Rule")
mbv_element = rule_element.find("MultiplyByValue")
value = mbv_element.attrib["value"]
return VariableMultiplyAction(variableRef, value)
def get_attributes(self):
"""returns the attributes of the VariableMultiplyAction as a dict"""
return {"value": str(self.value)}
def get_element(self):
"""returns the elementTree of the VariableMultiplyAction"""
if self.version_minor < 2:
raise OpenSCENARIOVersionError("VariableActions were added in OSC 1.2")
element = ET.Element("GlobalAction")
paramaction = ET.SubElement(
element, "VariableAction", {"variableRef": self.variable_ref}
)
modifaction = ET.SubElement(paramaction, "ModifyAction")
rule = ET.SubElement(modifaction, "Rule")
ET.SubElement(rule, "MultiplyByValue", self.get_attributes())
return element
class VariableSetAction(_ActionType):
"""The VariableSetAction class creates a VariableAction which adds a value to an existing Variable
(valid from V1.2)
Parameters
----------
variable_ref (str): name of the variable
value (float): the value that should be set to the variable
Attributes
----------
variable_ref (str): name of the variable
value (float): the value that should be set to the variable
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, variable_ref, value):
"""initalize the VariableSetAction
Parameters
----------
variable_ref (str): name of the variable
value (float): the value that should be added to the variable
"""
self.variable_ref = variable_ref
self.value = value
def __eq__(self, other):
if isinstance(other, VariableSetAction):
if (
self.get_attributes() == other.get_attributes()
and self.variable_ref == other.variable_ref
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of VariableSetAction
Parameters
----------
element (xml.etree.ElementTree.Element): A VariableSetAction element (same as generated by the class itself)
Returns
-------
psa_action (VariableSetAction): a VariableSetAction object
"""
pa_element = element.find("VariableAction")
variableRef = pa_element.attrib["variableRef"]
psa_element = pa_element.find("SetAction")
value = psa_element.attrib["value"]
return VariableSetAction(variableRef, value)
def get_attributes(self):
"""returns the attributes of the VariableSetAction as a dict"""
return {"value": str(self.value)}
def get_element(self):
"""returns the elementTree of the VariableSetAction"""
if self.version_minor < 2:
raise OpenSCENARIOVersionError("VariableActions were added in OSC 1.2")
element = ET.Element("GlobalAction")
paramaction = ET.SubElement(
element, "VariableAction", {"variableRef": self.variable_ref}
)
ET.SubElement(paramaction, "SetAction", self.get_attributes())
return element
class TrafficSignalStateAction(_ActionType):
"""The TrafficSignalStateAction class creates a Infrastructure action which controls the state of a traffic signal
Parameters
----------
name (str): id of the signal in the road network
state (str): the state to set to the traffic light
Attributes
----------
name (str): id of the signal in the road network
state (str): the state to set to the traffic light
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, state):
"""initalize the TrafficSignalStateAction
Parameters
----------
name (str): id of the signal in the road network
state (str): the state to set to the traffic light
"""
self.name = name
self.state = state
def __eq__(self, other):
if isinstance(other, TrafficSignalStateAction):
if self.get_attributes() == other.get_attributes():
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of TrafficSignalStateAction
Parameters
----------
element (xml.etree.ElementTree.Element): A TrafficSignalStateAction element (same as generated by the class itself)
Returns
-------
tss_action (TrafficSignalStateAction): a TrafficSignalStateAction object
"""
isa_element = element.find("InfrastructureAction")
tsa_element = isa_element.find("TrafficSignalAction")
tss_element = tsa_element.find("TrafficSignalStateAction")
name = tss_element.attrib["name"]
state = tss_element.attrib["state"]
return TrafficSignalStateAction(name, state)
def get_attributes(self):
"""returns the attributes of the TrafficSignalStateAction as a dict"""
return {"name": self.name, "state": self.state}
def get_element(self):
"""returns the elementTree of the TrafficSignalStateAction"""
element = ET.Element("GlobalAction")
infra = ET.SubElement(element, "InfrastructureAction")
tsa = ET.SubElement(infra, "TrafficSignalAction")
ET.SubElement(tsa, "TrafficSignalStateAction", self.get_attributes())
return element
class AddEntityAction(_ActionType):
"""The AddEntityAction class creates a EntityAction which adds a entity to the scenario
Parameters
----------
entityref (str): reference name of the newly added vehicle
position (*Position): position where the vehicle should be added
Attributes
----------
entityref (str): reference name of the newly added vehicle
position (*Position): position where the vehicle should be added
Methods
-------
get_element()
Returns the full ElementTree of the class
get_attributes()
Returns a dictionary of all attributes of the class
"""
def __init__(self, entityref, position):
"""initalize the AddEntityAction
Parameters
----------
entityref (str): reference name of the newly added vehicle
position (*Position): position where the vehicle should be added
"""
self.entityref = entityref
self.position = position
def __eq__(self, other):
if isinstance(other, AddEntityAction):
if (
self.get_attributes() == other.get_attributes()
and self.position == other.position
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of AddEntityAction
Parameters
----------
element (xml.etree.ElementTree.Element): A AddEntityAction element (same as generated by the class itself)
Returns
-------
ae_action (AddEntityAction): a AddEntityAction object
"""
ea_element = element.find("EntityAction")
entityref = ea_element.attrib["entityRef"]
aea_element = ea_element.find("AddEntityAction")
position = _PositionFactory.parse_position(aea_element.find("Position"))
return AddEntityAction(entityref, position)
def get_attributes(self):
"""returns the attributes of the AddEntityAction as a dict"""
return {"entityRef": self.entityref}
def get_element(self):
"""returns the elementTree of the AddEntityAction"""
element = ET.Element("GlobalAction")
entityact = ET.SubElement(element, "EntityAction", attrib=self.get_attributes())
addentity = ET.SubElement(entityact, "AddEntityAction")
addentity.append(self.position.get_element())
return element
class DeleteEntityAction(_ActionType):
"""The DeleteEntityAction class creates a EntityAction which removes an entity to the scenario
Parameters
----------
entityref (str): reference name of the vehicle to remove
Attributes
----------
entityref (str): reference name of the vehicle to remove
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, entityref):
"""initalize the DeleteEntityAction
Parameters
----------
entityref (str): reference name of the vehicle to remove
"""
self.entityref = entityref
def __eq__(self, other):
if isinstance(other, DeleteEntityAction):
if self.get_attributes() == other.get_attributes():
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of DeleteEntityAction
Parameters
----------
element (xml.etree.ElementTree.Element): A DeleteEntityAction element (same as generated by the class itself)
Returns
-------
de_action (DeleteEntityAction): a DeleteEntityAction object
"""
ea_element = element.find("EntityAction")
entityref = ea_element.attrib["entityRef"]
return DeleteEntityAction(entityref)
def get_attributes(self):
"""returns the attributes of the DeleteEntityAction as a dict"""
return {"entityRef": self.entityref}
def get_element(self):
"""returns the elementTree of the DeleteEntityAction"""
element = ET.Element("GlobalAction")
entityact = ET.SubElement(element, "EntityAction", attrib=self.get_attributes())
ET.SubElement(entityact, "DeleteEntityAction")
return element
class TrafficSignalControllerAction(_ActionType):
"""The TrafficSignalControllerAction class creates a Infrastructure action which activates a controller of a traffic signal
Parameters
----------
phase (str): phase of the signal
traffic_signalcontroller_ref (str): reference to traffic signal controller
Attributes
----------
phase (str): phase of the signal
traffic_signalcontroller_ref (str): reference to traffic signal controller
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, phase, traffic_signalcontroller_ref):
"""initalize the TrafficSignalControllerAction
Parameters
----------
phase (str): phase of the signal
traffic_signalcontroller_ref (str): reference to traffic signal controller
"""
self.phase = phase
self.traffic_signalcontroller_ref = traffic_signalcontroller_ref
def __eq__(self, other):
if isinstance(other, TrafficSignalControllerAction):
if self.get_attributes() == other.get_attributes():
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of TrafficSignalControllerAction
Parameters
----------
element (xml.etree.ElementTree.Element): A TrafficSignalControllerAction element (same as generated by the class itself)
Returns
-------
tsc_action (TrafficSignalControllerAction): a TrafficSignalControllerAction object
"""
isa_element = element.find("InfrastructureAction")
tsa_element = isa_element.find("TrafficSignalAction")
tsc_element = tsa_element.find("TrafficSignalControllerAction")
phase = tsc_element.attrib["phase"]
tsc_ref = tsc_element.attrib["trafficSignalControllerRef"]
return TrafficSignalControllerAction(phase, tsc_ref)
def get_attributes(self):
"""returns the attributes of the TrafficSignalControllerAction as a dict"""
return {
"phase": self.phase,
"trafficSignalControllerRef": self.traffic_signalcontroller_ref,
}
def get_element(self):
"""returns the elementTree of the TrafficSignalControllerAction"""
element = ET.Element("GlobalAction")
infra = ET.SubElement(element, "InfrastructureAction")
tsa = ET.SubElement(infra, "TrafficSignalAction")
ET.SubElement(tsa, "TrafficSignalControllerAction", self.get_attributes())
return element
class TrafficSourceAction(_ActionType):
"""The TrafficSourceAction class creates a TrafficAction of the typ TrafficSourceAction
Parameters
----------
rate (float): rate of appearing traffic
radius (float): the radius of the source around the position
position (*Position): any Position to define the source
trafficdefinition (TrafficDefinition): definition of the traffic
velocity (float): optional starting velocity of the traffic
Default: None
name (str): name of the TrafficAction, can be used to stop the TrafficAction, (valid from V1.1)
Default: None
Attributes
----------
rate (float): rate of appearing traffic
radius (float): the radius of the source around the position
position (*Position): any Position to define the source
trafficdefinition (TrafficDefinition): definition of the traffic
velocity (float): optional starting velocity of the traffic
Default: None
name (str): name of the TrafficAction, can be used to stop the TrafficAction, (valid from V1.1)
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, rate, radius, position, trafficdefinition, velocity=None, name=None
):
"""initalize the TrafficSourceAction
Parameters
----------
rate (float): rate of appearing traffic
radius (float): the radius of the source around the position
position (*Position): any Position to define the source
trafficdefinition (TrafficDefinition): definition of the traffic
velocity (float): optional starting velocity of the traffic
Default: None
name (str): name of the TrafficAction, can be used to stop the TrafficAction, (valid from V1.1)
Default: None
"""
self.rate = convert_float(rate)
self.radius = convert_float(radius)
if not isinstance(position, _PositionType):
raise TypeError("position input is not a valid Position")
if not isinstance(trafficdefinition, TrafficDefinition):
raise TypeError("trafficdefinition input is not of type TrafficDefinition")
self.position = position
self.trafficdefinition = trafficdefinition
self.velocity = convert_float(velocity)
self.name = name
def __eq__(self, other):
if isinstance(other, TrafficSourceAction):
if (
self.get_attributes() == other.get_attributes()
and self.position == other.position
and self.trafficdefinition == other.trafficdefinition
and self.name == other.name
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of TrafficSourceAction
Parameters
----------
element (xml.etree.ElementTree.Element): A TrafficSourceAction element (same as generated by the class itself)
Returns
-------
tsa_action (TrafficSourceAction): a TrafficSourceAction object
"""
ta_element = element.find("TrafficAction")
name = None
if "trafficName" in ta_element.attrib:
name = ta_element.attrib["trafficName"]
tsa_element = ta_element.find("TrafficSourceAction")
radius = convert_float(tsa_element.attrib["radius"])
rate = convert_float(tsa_element.attrib["rate"])
velocity = None
if "velocity" in tsa_element.attrib:
velocity = convert_float(tsa_element.attrib["velocity"])
elif "speed" in tsa_element.attrib:
velocity = tsa_element.attrib["speed"]
position = _PositionFactory.parse_position(tsa_element.find("Position"))
trafficdefinition = TrafficDefinition.parse(
tsa_element.find("TrafficDefinition")
)
return TrafficSourceAction(
rate, radius, position, trafficdefinition, velocity, name
)
def get_attributes(self):
"""returns the attributes of the TrafficSourceAction as a dict"""
retdict = {}
retdict["rate"] = str(self.rate)
retdict["radius"] = str(self.radius)
if self.velocity is not None:
if self.version_minor < 2:
retdict["velocity"] = str(self.velocity)
else:
retdict["speed"] = str(self.velocity)
return retdict
def get_element(self):
"""returns the elementTree of the TrafficSourceAction"""
element = ET.Element("GlobalAction")
traffic_attrib = {}
if self.name and not self.isVersion(minor=0):
traffic_attrib = {"trafficName": self.name}
trafficaction = ET.SubElement(element, "TrafficAction", attrib=traffic_attrib)
sourceaction = ET.SubElement(
trafficaction, "TrafficSourceAction", attrib=self.get_attributes()
)
sourceaction.append(self.position.get_element())
sourceaction.append(self.trafficdefinition.get_element())
return element
class TrafficSinkAction(_ActionType):
"""The TrafficSinkAction class creates a TrafficAction of the typ TrafficSinkAction
Parameters
----------
rate (float): rate of appearing traffic
radius (float): the radius of the sink around the position
position (*Position): any Position to define the sink
trafficdefinition (TrafficDefinition): definition of the traffic
name (str): name of the TrafficAction, can be used to stop the TrafficAction, (valid from V1.1)
Default: None
Attributes
----------
rate (float): rate of appearing traffic
radius (float): the radius of the source around the position
position (*Position): any Position to define the source
trafficdefinition (TrafficDefinition): definition of the traffic
name (str): name of the TrafficAction, can be used to stop the TrafficAction, (valid from V1.1)
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, radius, position, trafficdefinition, rate=None, name=None):
"""initalize the TrafficSinkAction
Parameters
----------
rate (float): rate of appearing traffic
radius (float): the radius of the source around the position
position (*Position): any Position to define the source
trafficdefinition (TrafficDefinition): definition of the traffic
name (str): name of the TrafficAction, can be used to stop the TrafficAction, (valid from V1.1)
"""
self.rate = convert_float(rate)
self.radius = convert_float(radius)
if not isinstance(position, _PositionType):
raise TypeError("position input is not a valid Position")
if not isinstance(trafficdefinition, TrafficDefinition):
raise TypeError("trafficdefinition input is not of type TrafficDefinition")
self.position = position
self.trafficdefinition = trafficdefinition
self.name = name
def __eq__(self, other):
if isinstance(other, TrafficSinkAction):
if (
self.get_attributes() == other.get_attributes()
and self.position == other.position
and self.trafficdefinition == other.trafficdefinition
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of TrafficSinkAction
Parameters
----------
element (xml.etree.ElementTree.Element): A TrafficSinkAction element (same as generated by the class itself)
Returns
-------
ts_action (TrafficSinkAction): a TrafficSinkAction object
"""
ta_element = element.find("TrafficAction")
name = None
if "trafficName" in ta_element.attrib:
name = ta_element.attrib["trafficName"]
tsa_element = ta_element.find("TrafficSinkAction")
radius = convert_float(tsa_element.attrib["radius"])
rate = None
if "rate" in tsa_element.attrib:
rate = convert_float(tsa_element.attrib["rate"])
if tsa_element.find("TrafficDefinition") != None:
trafficdefinition = TrafficDefinition.parse(
tsa_element.find("TrafficDefinition")
)
position = _PositionFactory.parse_position(tsa_element.find("Position"))
return TrafficSinkAction(radius, position, trafficdefinition, rate, name)
def get_attributes(self):
"""returns the attributes of the TrafficSinkAction as a dict"""
retdict = {}
retdict["rate"] = str(self.rate)
retdict["radius"] = str(self.radius)
return retdict
def get_element(self):
"""returns the elementTree of the TrafficSinkAction"""
element = ET.Element("GlobalAction")
traffic_attrib = {}
if self.name and not self.isVersion(minor=0):
traffic_attrib = {"trafficName": self.name}
trafficaction = ET.SubElement(element, "TrafficAction", attrib=traffic_attrib)
sinkaction = ET.SubElement(
trafficaction, "TrafficSinkAction", attrib=self.get_attributes()
)
sinkaction.append(self.position.get_element())
sinkaction.append(self.trafficdefinition.get_element())
return element
class TrafficSwarmAction(_ActionType):
"""The TrafficSwarmAction class creates a TrafficAction of the typ TrafficSwarmAction
Parameters
----------
semimajoraxis (float): half length of major axis of ellipsis around target
semiminoraxis (float): half length of minor axis of ellipsis around target
innerradius (float): radius of inner circle
offset (float): longitudinal offset from central entity
numberofvehicles (int): maximum number of vehicles around entity
centralobject (str): entity to swarm around
trafficdefinition (TrafficDefinition): definition of the traffic
velocity (float or Range): optional starting velocity (range is replacing velocity in OSC V1.2)
Default: None
name (str): name of the TrafficAction, can be used to stop the TrafficAction, (valid from V1.1)
Default: None
direction_of_travel (DirectionOfTravelDistribution): adds the DirectionOfTravelDistribution to the action(valid from OSC V1.2)
Default: None
Attributes
----------
semimajoraxis (float): half length of major axis of ellipsis around target
semiminoraxis (float): half length of minor axis of ellipsis around target
innerradius (float): radius of inner cirvle
offset (float): longitudinal offset from central entity
numberofvehicles (int): maximum number of vehicles around entity
centralobject (str): entity to swarm around
trafficdefinition (TrafficDefinition): definition of the traffic
velocity (float): optional starting velocity
Default: None
name (str): name of the TrafficAction, can be used to stop the TrafficAction, (valid from V1.1)
direction_of_travel (DirectionOfTravelDistribution): adds the DirectionOfTravelDistribution to the action(valid from OSC V1.2)
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,
semimajoraxis,
semiminoraxis,
innerradius,
offset,
numberofvehicles,
centralobject,
trafficdefinition,
velocity=None,
name=None,
direction_of_travel=None,
):
"""initalize the TrafficSwarmAction
Parameters
----------
semimajoraxis (float): half length of major axis of ellipsis around target
semiminoraxis (float): half length of minor axis of ellipsis around target
innerradius (float): radius of inner circle
offset (float): longitudinal offset from central entity
numberofvehicles (int): maximum number of vehicles around entity
centralobject (str): entity to swarm around
trafficdefinition (TrafficDefinition): definition of the traffic
velocity (float): optional starting velocity
Default: None
name (str): name of the TrafficAction, can be used to stop the TrafficAction, (valid from V1.1)
Default: None
direction_of_travel (DirectionOfTravelDistribution): adds the DirectionOfTravelDistribution to the action(valid from OSC V1.2)
Default: None
"""
self.semimajoraxis = convert_float(semimajoraxis)
self.semiminoraxis = convert_float(semiminoraxis)
self.innerradius = convert_float(innerradius)
self.offset = convert_float(offset)
self.numberofvehicles = convert_int(numberofvehicles)
self.centralobject = centralobject
if not isinstance(trafficdefinition, TrafficDefinition):
raise TypeError("trafficdefinition input is not of type TrafficDefinition")
self.trafficdefinition = trafficdefinition
if velocity is not None:
if isinstance(velocity, Range):
self.velocity = velocity
else:
self.velocity = convert_float(velocity)
else:
self.velocity = None
self.name = name
if direction_of_travel is not None and not isinstance(
direction_of_travel, DirectionOfTravelDistribution
):
raise TypeError(
"direction_of_travel is not of type DirectionOfTravelDistribution"
)
self.direction_of_travel = direction_of_travel
def __eq__(self, other):
if isinstance(other, TrafficSwarmAction):
if (
self.get_attributes() == other.get_attributes()
and self.centralobject == other.centralobject
and self.trafficdefinition == other.trafficdefinition
and self.name == other.name
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of TrafficSwarmAction
Parameters
----------
element (xml.etree.ElementTree.Element): A TrafficSwarmAction element (same as generated by the class itself)
Returns
-------
ts_action (TrafficSwarmAction): a TrafficSwarmAction object
"""
ta_element = element.find("TrafficAction")
name = None
if "trafficName" in ta_element.attrib:
name = ta_element.attrib["trafficName"]
tsa_element = ta_element.find("TrafficSwarmAction")
innerradius = convert_float(tsa_element.attrib["innerRadius"])
numberofvehicles = convert_int(tsa_element.attrib["numberOfVehicles"])
offset = convert_float(tsa_element.attrib["offset"])
semimajoraxis = convert_float(tsa_element.attrib["semiMajorAxis"])
semiminoraxis = convert_float(tsa_element.attrib["semiMinorAxis"])
velocity = None
if "velocity" in tsa_element.attrib:
velocity = convert_float(tsa_element.attrib["velocity"])
elif tsa_element.find("InitalSpeedRange") is not None:
velocity = Range.parse(tsa_element.find("InitalSpeedRange"))
trafficdefinition = TrafficDefinition.parse(
tsa_element.find("TrafficDefinition")
)
dot = None
if tsa_element.find("DirectionOfTravelDistribution"):
dot = DirectionOfTravelDistribution.parse(
tsa_element.find("DirectionOfTravelDistribution")
)
central_element = tsa_element.find("CentralObject")
centralobject = central_element.attrib["entityRef"]
tsa_object = TrafficSwarmAction(
semimajoraxis,
semiminoraxis,
innerradius,
offset,
numberofvehicles,
centralobject,
trafficdefinition,
velocity,
name,
dot,
)
return tsa_object
def get_attributes(self):
"""returns the attributes of the TrafficSwarmAction as a dict"""
retdict = {}
retdict["semiMajorAxis"] = str(self.semimajoraxis)
retdict["semiMinorAxis"] = str(self.semiminoraxis)
retdict["innerRadius"] = str(self.innerradius)
retdict["offset"] = str(self.offset)
retdict["numberOfVehicles"] = str(self.numberofvehicles)
if self.velocity is not None and not isinstance(self.velocity, Range):
retdict["velocity"] = str(self.velocity)
return retdict
def get_element(self):
"""returns the elementTree of the TrafficSwarmAction"""
element = ET.Element("GlobalAction")
traffic_attrib = {}
if self.name and not self.isVersion(minor=0):
traffic_attrib = {"trafficName": self.name}
trafficaction = ET.SubElement(element, "TrafficAction", attrib=traffic_attrib)
swarmaction = ET.SubElement(
trafficaction, "TrafficSwarmAction", attrib=self.get_attributes()
)
swarmaction.append(self.trafficdefinition.get_element())
ET.SubElement(
swarmaction, "CentralObject", attrib={"entityRef": self.centralobject}
)
if self.velocity is not None:
if self.version_minor > 1:
if isinstance(self.velocity, Range):
swarmaction.append(self.velocity.get_element("InitialSpeedRange"))
else:
raise OpenSCENARIOVersionError(
"Range for TrafficSwarmAction was introduced in OSC V1.2, velocity should not be used anymore."
)
if self.direction_of_travel is not None:
if self.version_minor < 2:
raise OpenSCENARIOVersionError(
"DirectionOfTravelDistribution was added in OSC V1.2"
)
swarmaction.append(self.direction_of_travel.get_element())
return element
class TrafficStopAction(_ActionType):
"""The TrafficStopAction class creates a TrafficAction of the typ TrafficStopAction
Parameters
----------
name (str): name of the Traffic to stop
Default: None
Attributes
----------
name (str): name of the Traffic to stop
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=None):
"""initalize the TrafficSwarmAction
Parameters
----------
name (str): name of the Traffic to stop
Default: None
"""
self.name = name
def __eq__(self, other):
if isinstance(other, TrafficStopAction):
if self.get_attributes() == other.get_attributes():
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of TrafficStopAction
Parameters
----------
element (xml.etree.ElementTree.Element): A TrafficStopAction element (same as generated by the class itself)
Returns
-------
ts_action (TrafficStopAction): a TrafficStopAction object
"""
trafficaction_element = element.find("TrafficAction")
name = trafficaction_element.attrib["trafficName"]
return TrafficStopAction(name)
def get_attributes(self):
"""returns the attributes of the TrafficStopAction as a dict"""
retdict = {}
if self.name and not self.isVersion(minor=0):
retdict["trafficName"] = str(self.name)
elif self.isVersion(minor=0):
raise OpenSCENARIOVersionError(
"TrafficStopAction was introduced in OpenSCENARIO V1.1"
)
return retdict
def get_element(self):
"""returns the elementTree of the TrafficStopAction"""
element = ET.Element("GlobalAction")
trafficaction = ET.SubElement(
element, "TrafficAction", attrib=self.get_attributes()
)
ET.SubElement(trafficaction, "TrafficStopAction")
return element
class EnvironmentAction(_ActionType):
"""The EnvironmentAction class creates a GlobalAction of the typ EnvironmentAction
Parameters
----------
environment (Environment or CatalogReference): the environment to change to
Attributes
----------
environment (Environment or CatalogReference): the environment to change to
Methods
-------
parse(element)
parses a ElementTree created by the class and returns an instance of the class itself
get_element()
Returns the full ElementTree of the class
"""
def __init__(self, environment):
"""initalize the EnvironmentAction
Parameters
----------
name (str): name of the action
environment (Environment or CatalogReference): the environment to change to
"""
if not (
isinstance(environment, Environment)
or isinstance(environment, CatalogReference)
):
raise TypeError(
"environment input not of type Environment or CatalogReference"
)
self.environment = environment
def __eq__(self, other):
if isinstance(other, EnvironmentAction):
if self.environment == other.environment:
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of BoundingBox
Parameters
----------
element (xml.etree.ElementTree.Element): A orientation element (same as generated by the class itself)
Returns
-------
boundingBox (BoundingBox): a BoundingBox object
"""
action_element = element.find("EnvironmentAction")
if action_element.find("Environment") != None:
environment = Environment.parse(action_element.find("Environment"))
elif action_element.find("CatalogReference") != None:
environment = CatalogReference.parse(
action_element.find("CatalogReference")
)
return EnvironmentAction(environment)
def get_element(self):
"""returns the elementTree of the EnvironmentAction"""
element = ET.Element("GlobalAction")
envaction = ET.SubElement(element, "EnvironmentAction")
envaction.append(self.environment.get_element())
return element
class UserDefinedAction(_ActionType):
"""The UserDefinedAction enables adding simulator-specific CustomCommandActions.
Parameters
----------
Attributes
----------
Methods
-------
add_custom_command_action(custom_command_action)
Adds a CustomCommandAction to the UserDefinedAction
get_element()
Returns the full ElementTree of the class
"""
def __init__(self, custom_command_action):
"""initalize the UserDefinedAction
Parameters
----------
"""
self.custom_command_action = custom_command_action
def __eq__(self, other):
if isinstance(other, UserDefinedAction):
if self.custom_command_action == other.custom_command_action:
return True
return False
@staticmethod
def parse(element):
"""Parsese the xml element of a UserDefinedAction
Parameters
----------
element (xml.etree.ElementTree.Element): a UserDefinedAction element
Returns
-------
userDefinedAction (UserDefinedAction): a UserDefinedAction object
"""
custom_command_action = CustomCommandAction.parse(
element.find("CustomCommandAction")
)
user_defined_action = UserDefinedAction(custom_command_action)
return user_defined_action
def get_element(self):
"""returns the elementTree of the UserDefinedAction"""
element = ET.Element("UserDefinedAction")
element.append(self.custom_command_action.get_element())
return element
class CustomCommandAction(_ActionType):
"""The CustomCommandAction creates a simulator defined action
Parameters
----------
Attributes
----------
type (str): type of the custom command
Methods
-------
get_element()
Returns the full ElementTree of the class
"""
def __init__(self, type, content):
"""initalize the CustomCommandAction
Parameters
----------
type (str): type of the custom command
content (str): content of the custom command
"""
self.type = type
self.content = content
def __eq__(self, other):
if isinstance(other, CustomCommandAction):
if other.type == self.type:
return True
return False
@staticmethod
def parse(element):
"""Parsese the xml element of a CustomCommandAction
Parameters
----------
element (xml.etree.ElementTree.Element): a CustomCommandAction element
Returns
-------
customCommandAction (CustomCommandAction): a CustomCommandAction object
"""
if element.tag != "CustomCommandAction":
raise NotAValidElement(
f'Expected "CustomCommandAction" element, received "{element.tag}".'
)
action_type = element.attrib.get("type", None)
if action_type == None:
raise NotAValidElement(
'CustomCommandAction is missing required argument "type".'
)
return CustomCommandAction(action_type, element.text)
def get_element(self):
"""returns the elementTree of the CustomCommandAction"""
element = ET.Element("CustomCommandAction", attrib={"type": self.type})
element.text = self.content
return element
Classes
class AbsoluteLaneChangeAction (lane, transition_dynamics, target_lane_offset=None)
-
the AbsoluteLaneChangeAction creates a LateralAction of type LaneChangeAction with an absolute target
Parameters
lane (int): lane to change to transition_dynamics (TransitionDynamics): how the change should be made target_lane_offset (float): if a offset in the target lane is wanted Default: None
Attributes
lane (int): lane to change to target_lane_offset (float): offset in the target lane is wanted transition_dynamics (TransitionDynamics): how the change should be made
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
initalize AbsoluteLaneChangeAction
Parameters
lane (int): lane to change to transition_dynamics (TransitionDynamics): how the change should be made target_lane_offset (float): if a offset in the target lane is wanted Default: None
Expand source code
class AbsoluteLaneChangeAction(_PrivateActionType): """the AbsoluteLaneChangeAction creates a LateralAction of type LaneChangeAction with an absolute target Parameters ---------- lane (int): lane to change to transition_dynamics (TransitionDynamics): how the change should be made target_lane_offset (float): if a offset in the target lane is wanted Default: None Attributes ---------- lane (int): lane to change to target_lane_offset (float): offset in the target lane is wanted transition_dynamics (TransitionDynamics): how the change should be made 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, lane, transition_dynamics, target_lane_offset=None): """initalize AbsoluteLaneChangeAction Parameters ---------- lane (int): lane to change to transition_dynamics (TransitionDynamics): how the change should be made target_lane_offset (float): if a offset in the target lane is wanted Default: None """ self.lane = convert_int(lane) self.target_lane_offset = convert_float(target_lane_offset) if not isinstance(transition_dynamics, TransitionDynamics): raise TypeError("transition_dynamics input not of type TransitionDynamics") self.transition_dynamics = transition_dynamics def __eq__(self, other): if isinstance(other, AbsoluteLaneChangeAction): if ( self.get_attributes() == other.get_attributes() and self.transition_dynamics == other.transition_dynamics and self.target_lane_offset == other.target_lane_offset ): return True return False @staticmethod def parse(element): """Parses the xml element of AbsoluteLaneChangeAction Parameters ---------- element (xml.etree.ElementTree.Element): A AbsoluteLaneChangeAction element (same as generated by the class itself) Returns ------- alc_action (AbsoluteLaneChangeAction): a AbsoluteLaneChangeAction object """ lca_element = element.find("LateralAction/LaneChangeAction") target_lane_offset = None if "targetLaneOffset" in lca_element.attrib: target_lane_offset = convert_float(lca_element.attrib["targetLaneOffset"]) dynamics = TransitionDynamics.parse( lca_element.find("LaneChangeActionDynamics") ) targetlane_element = lca_element.find("LaneChangeTarget/AbsoluteTargetLane") lane = convert_int(targetlane_element.attrib["value"]) return AbsoluteLaneChangeAction(lane, dynamics, target_lane_offset) def get_attributes(self): """returns the attributes of the AbsoluteLaneChangeAction as a dict""" retdict = {} retdict["value"] = str(self.lane) return retdict def get_element(self): """returns the elementTree of the AbsoluteLaneChangeAction""" element = ET.Element("PrivateAction") laneoffset = {} lataction = ET.SubElement(element, "LateralAction") if self.target_lane_offset: laneoffset = {"targetLaneOffset": str(self.target_lane_offset)} lanechangeaction = ET.SubElement( lataction, "LaneChangeAction", attrib=laneoffset ) lanechangeaction.append( self.transition_dynamics.get_element("LaneChangeActionDynamics") ) lanchangetarget = ET.SubElement(lanechangeaction, "LaneChangeTarget") ET.SubElement(lanchangetarget, "AbsoluteTargetLane", self.get_attributes()) return element
Ancestors
- scenariogeneration.xosc.actions._PrivateActionType
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of AbsoluteLaneChangeAction
Parameters
element (xml.etree.ElementTree.Element): A AbsoluteLaneChangeAction element (same as generated by the class itself)
Returns
alc_action (AbsoluteLaneChangeAction): a AbsoluteLaneChangeAction object
Expand source code
@staticmethod def parse(element): """Parses the xml element of AbsoluteLaneChangeAction Parameters ---------- element (xml.etree.ElementTree.Element): A AbsoluteLaneChangeAction element (same as generated by the class itself) Returns ------- alc_action (AbsoluteLaneChangeAction): a AbsoluteLaneChangeAction object """ lca_element = element.find("LateralAction/LaneChangeAction") target_lane_offset = None if "targetLaneOffset" in lca_element.attrib: target_lane_offset = convert_float(lca_element.attrib["targetLaneOffset"]) dynamics = TransitionDynamics.parse( lca_element.find("LaneChangeActionDynamics") ) targetlane_element = lca_element.find("LaneChangeTarget/AbsoluteTargetLane") lane = convert_int(targetlane_element.attrib["value"]) return AbsoluteLaneChangeAction(lane, dynamics, target_lane_offset)
Methods
def get_attributes(self)
-
returns the attributes of the AbsoluteLaneChangeAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the AbsoluteLaneChangeAction as a dict""" retdict = {} retdict["value"] = str(self.lane) return retdict
def get_element(self)
-
returns the elementTree of the AbsoluteLaneChangeAction
Expand source code
def get_element(self): """returns the elementTree of the AbsoluteLaneChangeAction""" element = ET.Element("PrivateAction") laneoffset = {} lataction = ET.SubElement(element, "LateralAction") if self.target_lane_offset: laneoffset = {"targetLaneOffset": str(self.target_lane_offset)} lanechangeaction = ET.SubElement( lataction, "LaneChangeAction", attrib=laneoffset ) lanechangeaction.append( self.transition_dynamics.get_element("LaneChangeActionDynamics") ) lanchangetarget = ET.SubElement(lanechangeaction, "LaneChangeTarget") ET.SubElement(lanchangetarget, "AbsoluteTargetLane", self.get_attributes()) return element
class AbsoluteLaneOffsetAction (value, shape, maxlatacc=None, continuous=True)
-
the AbsoluteLaneOffsetAction class creates a LateralAction of type LaneOffsetAction with an absolute target
Parameters
value (float): lateral offset of the lane shape (DynamicsShapes): shape of the offset action maxlatacc (float): maximum allowed lateral acceleration continuous (bool): if the controller tries to keep the relative speed Default: True
Attributes
continuous (bool): if the controller tries to keep the relative speed value (float): lateral offset of the lane target (str): the name of the entity (relative only) dynshape (DynamicsShapes): the shape of the action maxlatacc (float): maximum allowed lateral acceleration
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 AbsoluteLaneOffsetAction Parameters
value (float): lateral offset of the lane shape (DynamicsShapes): shape of the offset action maxlatacc (float): maximum allowed lateral acceleration continuous (bool): if the controller tries to keep the relative speed Default: True
Expand source code
class AbsoluteLaneOffsetAction(_PrivateActionType): """the AbsoluteLaneOffsetAction class creates a LateralAction of type LaneOffsetAction with an absolute target Parameters ---------- value (float): lateral offset of the lane shape (DynamicsShapes): shape of the offset action maxlatacc (float): maximum allowed lateral acceleration continuous (bool): if the controller tries to keep the relative speed Default: True Attributes ---------- continuous (bool): if the controller tries to keep the relative speed value (float): lateral offset of the lane target (str): the name of the entity (relative only) dynshape (DynamicsShapes): the shape of the action maxlatacc (float): maximum allowed lateral acceleration 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, value, shape, maxlatacc=None, continuous=True): """initalizes the AbsoluteLaneOffsetAction Parameters ---------- value (float): lateral offset of the lane shape (DynamicsShapes): shape of the offset action maxlatacc (float): maximum allowed lateral acceleration continuous (bool): if the controller tries to keep the relative speed Default: True """ self.continuous = convert_bool(continuous) self.value = convert_float(value) self.dynshape = convert_enum(shape, DynamicsShapes) self.maxlatacc = convert_float(maxlatacc) def __eq__(self, other): if isinstance(other, AbsoluteLaneOffsetAction): if ( self.get_attributes() == other.get_attributes() and self.dynshape == other.dynshape and self.maxlatacc == other.maxlatacc and self.continuous == other.continuous ): return True return False @staticmethod def parse(element): """Parses the xml element of AbsoluteLaneOffsetAction Parameters ---------- element (xml.etree.ElementTree.Element): A AbsoluteLaneOffsetAction element (same as generated by the class itself) Returns ------- alco_action (AbsoluteLaneOffsetAction): a AbsoluteLaneOffsetAction object """ loa_element = element.find("LateralAction/LaneOffsetAction") continuous = convert_bool(loa_element.attrib["continuous"]) load_element = loa_element.find("LaneOffsetActionDynamics") maxacc = convert_float(load_element.attrib["maxLateralAcc"]) dynamics = convert_enum(load_element.attrib["dynamicsShape"], DynamicsShapes) atlo_element = loa_element.find("LaneOffsetTarget/AbsoluteTargetLaneOffset") value = atlo_element.attrib["value"] return AbsoluteLaneOffsetAction(value, dynamics, maxacc, continuous) def get_attributes(self): """returns the attributes of the AbsoluteLaneOffsetAction as a dict""" retdict = {} retdict["value"] = str(self.value) return retdict def get_element(self): """returns the elementTree of the AbsoluteLaneOffsetAction""" element = ET.Element("PrivateAction") lataction = ET.SubElement(element, "LateralAction") laneoffsetaction = ET.SubElement( lataction, "LaneOffsetAction", attrib={"continuous": get_bool_string(self.continuous)}, ) ET.SubElement( laneoffsetaction, "LaneOffsetActionDynamics", { "maxLateralAcc": str(self.maxlatacc), "dynamicsShape": self.dynshape.get_name(), }, ) laneoftarget = ET.SubElement(laneoffsetaction, "LaneOffsetTarget") ET.SubElement(laneoftarget, "AbsoluteTargetLaneOffset", self.get_attributes()) return element
Ancestors
- scenariogeneration.xosc.actions._PrivateActionType
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of AbsoluteLaneOffsetAction
Parameters
element (xml.etree.ElementTree.Element): A AbsoluteLaneOffsetAction element (same as generated by the class itself)
Returns
alco_action (AbsoluteLaneOffsetAction): a AbsoluteLaneOffsetAction object
Expand source code
@staticmethod def parse(element): """Parses the xml element of AbsoluteLaneOffsetAction Parameters ---------- element (xml.etree.ElementTree.Element): A AbsoluteLaneOffsetAction element (same as generated by the class itself) Returns ------- alco_action (AbsoluteLaneOffsetAction): a AbsoluteLaneOffsetAction object """ loa_element = element.find("LateralAction/LaneOffsetAction") continuous = convert_bool(loa_element.attrib["continuous"]) load_element = loa_element.find("LaneOffsetActionDynamics") maxacc = convert_float(load_element.attrib["maxLateralAcc"]) dynamics = convert_enum(load_element.attrib["dynamicsShape"], DynamicsShapes) atlo_element = loa_element.find("LaneOffsetTarget/AbsoluteTargetLaneOffset") value = atlo_element.attrib["value"] return AbsoluteLaneOffsetAction(value, dynamics, maxacc, continuous)
Methods
def get_attributes(self)
-
returns the attributes of the AbsoluteLaneOffsetAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the AbsoluteLaneOffsetAction as a dict""" retdict = {} retdict["value"] = str(self.value) return retdict
def get_element(self)
-
returns the elementTree of the AbsoluteLaneOffsetAction
Expand source code
def get_element(self): """returns the elementTree of the AbsoluteLaneOffsetAction""" element = ET.Element("PrivateAction") lataction = ET.SubElement(element, "LateralAction") laneoffsetaction = ET.SubElement( lataction, "LaneOffsetAction", attrib={"continuous": get_bool_string(self.continuous)}, ) ET.SubElement( laneoffsetaction, "LaneOffsetActionDynamics", { "maxLateralAcc": str(self.maxlatacc), "dynamicsShape": self.dynshape.get_name(), }, ) laneoftarget = ET.SubElement(laneoffsetaction, "LaneOffsetTarget") ET.SubElement(laneoftarget, "AbsoluteTargetLaneOffset", self.get_attributes()) return element
class AbsoluteSpeedAction (speed: float, transition_dynamics)
-
The AbsoluteSpeedAction class specifies a LongitudinalAction of type SpeedAction with an abosulte target speed
Parameters
speed (float): the speed wanted transition_dynamics (TransitionDynamics): how the change should be made
Attributes
speed (float): the speed wanted transition_dynamics (TransitionDynamics): how the change should be made
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
initalize the AbsoluteSpeedAction
Parameters
speed (float): the speed wanted transition_dynamics (TransitionDynamics): how the change should be made
Expand source code
class AbsoluteSpeedAction(_PrivateActionType): """The AbsoluteSpeedAction class specifies a LongitudinalAction of type SpeedAction with an abosulte target speed Parameters ---------- speed (float): the speed wanted transition_dynamics (TransitionDynamics): how the change should be made Attributes ---------- speed (float): the speed wanted transition_dynamics (TransitionDynamics): how the change should be made 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, speed: float, transition_dynamics): """initalize the AbsoluteSpeedAction Parameters ---------- speed (float): the speed wanted transition_dynamics (TransitionDynamics): how the change should be made """ self.speed = convert_float(speed) if not isinstance(transition_dynamics, TransitionDynamics): raise TypeError("transition_dynamics input not of type TransitionDynamics") self.transition_dynamics = transition_dynamics def __eq__(self, other): if isinstance(other, AbsoluteSpeedAction): if ( self.get_attributes() == other.get_attributes() and self.transition_dynamics == other.transition_dynamics ): return True return False @staticmethod def parse(element): """Parses the xml element of WorldPosition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- position (WorldPosition): a world position object """ speed_element = element.find( "LongitudinalAction/SpeedAction/SpeedActionTarget/AbsoluteTargetSpeed" ) td_element = element.find("LongitudinalAction/SpeedAction/SpeedActionDynamics") speed = speed_element.attrib["value"] transition_dynamics = TransitionDynamics.parse(td_element) return AbsoluteSpeedAction(speed, transition_dynamics) def get_attributes(self): """returns the attributes of the AbsoluteSpeedAction as a dict""" return {"value": str(self.speed)} def get_element(self): """returns the elementTree of the AbsoluteSpeedAction""" element = ET.Element("PrivateAction") longaction = ET.SubElement(element, "LongitudinalAction") speedaction = ET.SubElement(longaction, "SpeedAction") speedaction.append(self.transition_dynamics.get_element("SpeedActionDynamics")) speedactiontarget = ET.SubElement(speedaction, "SpeedActionTarget") ET.SubElement(speedactiontarget, "AbsoluteTargetSpeed", self.get_attributes()) return element
Ancestors
- scenariogeneration.xosc.actions._PrivateActionType
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of WorldPosition
Parameters
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
position (WorldPosition): a world position object
Expand source code
@staticmethod def parse(element): """Parses the xml element of WorldPosition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- position (WorldPosition): a world position object """ speed_element = element.find( "LongitudinalAction/SpeedAction/SpeedActionTarget/AbsoluteTargetSpeed" ) td_element = element.find("LongitudinalAction/SpeedAction/SpeedActionDynamics") speed = speed_element.attrib["value"] transition_dynamics = TransitionDynamics.parse(td_element) return AbsoluteSpeedAction(speed, transition_dynamics)
Methods
def get_attributes(self)
-
returns the attributes of the AbsoluteSpeedAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the AbsoluteSpeedAction as a dict""" return {"value": str(self.speed)}
def get_element(self)
-
returns the elementTree of the AbsoluteSpeedAction
Expand source code
def get_element(self): """returns the elementTree of the AbsoluteSpeedAction""" element = ET.Element("PrivateAction") longaction = ET.SubElement(element, "LongitudinalAction") speedaction = ET.SubElement(longaction, "SpeedAction") speedaction.append(self.transition_dynamics.get_element("SpeedActionDynamics")) speedactiontarget = ET.SubElement(speedaction, "SpeedActionTarget") ET.SubElement(speedactiontarget, "AbsoluteTargetSpeed", self.get_attributes()) return element
class AcquirePositionAction (position)
-
AcquirePositionAction creates a RouteAction of type AcquirePositionAction
Parameters
position (*Position): target position
Attributes
position (*Position): target position
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
initalizes the AcquirePositionAction
Parameters
position (*Position): target position
Expand source code
class AcquirePositionAction(_PrivateActionType): """AcquirePositionAction creates a RouteAction of type AcquirePositionAction Parameters ---------- position (*Position): target position Attributes ---------- position (*Position): target position 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 """ def __init__(self, position): """initalizes the AcquirePositionAction Parameters ---------- position (*Position): target position """ if not isinstance(position, _PositionType): raise TypeError("position input not a valid Position type") self.position = position def __eq__(self, other): if isinstance(other, AcquirePositionAction): if self.position == other.position: return True return False @staticmethod def parse(element): """Parses the xml element of AcquirePositionAction Parameters ---------- element (xml.etree.ElementTree.Element): A AcquirePositionAction element (same as generated by the class itself) Returns ------- ap_action (AcquirePositionAction): a AcquirePositionAction object """ pos_element = element.find("RoutingAction/AcquirePositionAction/Position") position = _PositionFactory.parse_position(pos_element) return AcquirePositionAction(position) def get_element(self): """returns the elementTree of the AcquirePositionAction""" element = ET.Element("PrivateAction") routeaction = ET.SubElement(element, "RoutingAction") posaction = ET.SubElement(routeaction, "AcquirePositionAction") posaction.append(self.position.get_element()) return element
Ancestors
- scenariogeneration.xosc.actions._PrivateActionType
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of AcquirePositionAction
Parameters
element (xml.etree.ElementTree.Element): A AcquirePositionAction element (same as generated by the class itself)
Returns
ap_action (AcquirePositionAction): a AcquirePositionAction object
Expand source code
@staticmethod def parse(element): """Parses the xml element of AcquirePositionAction Parameters ---------- element (xml.etree.ElementTree.Element): A AcquirePositionAction element (same as generated by the class itself) Returns ------- ap_action (AcquirePositionAction): a AcquirePositionAction object """ pos_element = element.find("RoutingAction/AcquirePositionAction/Position") position = _PositionFactory.parse_position(pos_element) return AcquirePositionAction(position)
Methods
def get_element(self)
-
returns the elementTree of the AcquirePositionAction
Expand source code
def get_element(self): """returns the elementTree of the AcquirePositionAction""" element = ET.Element("PrivateAction") routeaction = ET.SubElement(element, "RoutingAction") posaction = ET.SubElement(routeaction, "AcquirePositionAction") posaction.append(self.position.get_element()) return element
class ActivateControllerAction (lateral=None, longitudinal=None, animation=None, lighting=None, controllerRef=None)
-
ActivateControllerAction creates a ActivateControllerAction of open scenario
Parameters
lateral (boolean): activate or deactivate the controller longitudinal (boolean): activate or deactivate the controller animation (boolean): activate or deactivate an animation lighting (boolean): activate or deactivate lights controllerRef (Controller): reference to a controller assigned to the entity
Attributes
lateral (boolean): activate or deactivate the controller longitudinal (boolean): activate or deactivate the controller animation (boolean): activate or deactivate an animation lighting (boolean): activate or deactivate lights controllerRef (Controller): reference to a controller assigned to the 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 the the attributes of the class
initalizes the ActivateControllerAction
Parameters
lateral (boolean): activate or deactivate the controller Default: None longitudinal (boolean): activate or deactivate the controller animation (boolean): activate or deactivate an animation lighting (boolean): activate or deactivate lights controllerRef (Controller): reference to a controller assigned to the entity
Expand source code
class ActivateControllerAction(_PrivateActionType): """ActivateControllerAction creates a ActivateControllerAction of open scenario Parameters ---------- lateral (boolean): activate or deactivate the controller longitudinal (boolean): activate or deactivate the controller animation (boolean): activate or deactivate an animation lighting (boolean): activate or deactivate lights controllerRef (Controller): reference to a controller assigned to the entity Attributes ---------- lateral (boolean): activate or deactivate the controller longitudinal (boolean): activate or deactivate the controller animation (boolean): activate or deactivate an animation lighting (boolean): activate or deactivate lights controllerRef (Controller): reference to a controller assigned to the 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 the the attributes of the class """ def __init__( self, lateral=None, longitudinal=None, animation=None, lighting=None, controllerRef=None, ): """initalizes the ActivateControllerAction Parameters ---------- lateral (boolean): activate or deactivate the controller Default: None longitudinal (boolean): activate or deactivate the controller animation (boolean): activate or deactivate an animation lighting (boolean): activate or deactivate lights controllerRef (Controller): reference to a controller assigned to the entity """ self.lateral = convert_bool(lateral) self.longitudinal = convert_bool(longitudinal) self.animation = convert_bool(animation) self.lighting = convert_bool(lighting) self.controllerRef = controllerRef def __eq__(self, other): if isinstance(other, ActivateControllerAction): if self.get_attributes() == other.get_attributes(): return True elif isinstance(other, ControllerAction): if self.get_attributes() == other.activateControllerAction.get_attributes(): return True return False @staticmethod def parse(element): """Parses the xml element of ActivateControllerAction Parameters ---------- element (xml.etree.ElementTree.Element): A ActivateControllerAction element (same as generated by the class itself) Returns ------- ac_action (ActivateControllerAction): a ActivateControllerAction object """ lateral = None longitudinal = None animation = None lighting = None controllerRef = None aca_element = element.find("ControllerAction/ActivateControllerAction") if "lateral" in aca_element.attrib: lateral = convert_bool(aca_element.attrib["lateral"]) if "longitudinal" in aca_element.attrib: longitudinal = convert_bool(aca_element.attrib["longitudinal"]) if "animation" in aca_element.attrib: animation = convert_bool(aca_element.attrib["animation"]) if "lighting" in aca_element.attrib: lighting = convert_bool(aca_element.attrib["lighting"]) if "controllerRef" in aca_element.attrib: controllerRef = aca_element.attrib["controllerRef"] return ActivateControllerAction( lateral, longitudinal, animation, lighting, controllerRef ) def get_attributes(self): """returns the attributes of the ActivateControllerAction as a dict""" retdict = {} if self.lateral is not None: retdict["lateral"] = get_bool_string(self.lateral) if self.longitudinal is not None: retdict["longitudinal"] = get_bool_string(self.longitudinal) if self.animation is not None and self.isVersion(minor=2): retdict["animation"] = get_bool_string(self.animation) if self.lighting is not None and self.isVersion(minor=2): retdict["lighting"] = get_bool_string(self.lighting) if self.controllerRef is not None and self.isVersion(minor=2): retdict["controllerRef"] = self.controllerRef return retdict def get_element(self): """returns the elementTree of the ActivateControllerAction""" element = ET.Element("PrivateAction") if self.isVersion(minor=0): ET.SubElement( element, "ActivateControllerAction", attrib=self.get_attributes() ) else: subelem = ET.SubElement(element, "ControllerAction") ET.SubElement( subelem, "ActivateControllerAction", attrib=self.get_attributes() ) return element
Ancestors
- scenariogeneration.xosc.actions._PrivateActionType
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of ActivateControllerAction
Parameters
element (xml.etree.ElementTree.Element): A ActivateControllerAction element (same as generated by the class itself)
Returns
ac_action (ActivateControllerAction): a ActivateControllerAction object
Expand source code
@staticmethod def parse(element): """Parses the xml element of ActivateControllerAction Parameters ---------- element (xml.etree.ElementTree.Element): A ActivateControllerAction element (same as generated by the class itself) Returns ------- ac_action (ActivateControllerAction): a ActivateControllerAction object """ lateral = None longitudinal = None animation = None lighting = None controllerRef = None aca_element = element.find("ControllerAction/ActivateControllerAction") if "lateral" in aca_element.attrib: lateral = convert_bool(aca_element.attrib["lateral"]) if "longitudinal" in aca_element.attrib: longitudinal = convert_bool(aca_element.attrib["longitudinal"]) if "animation" in aca_element.attrib: animation = convert_bool(aca_element.attrib["animation"]) if "lighting" in aca_element.attrib: lighting = convert_bool(aca_element.attrib["lighting"]) if "controllerRef" in aca_element.attrib: controllerRef = aca_element.attrib["controllerRef"] return ActivateControllerAction( lateral, longitudinal, animation, lighting, controllerRef )
Methods
def get_attributes(self)
-
returns the attributes of the ActivateControllerAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the ActivateControllerAction as a dict""" retdict = {} if self.lateral is not None: retdict["lateral"] = get_bool_string(self.lateral) if self.longitudinal is not None: retdict["longitudinal"] = get_bool_string(self.longitudinal) if self.animation is not None and self.isVersion(minor=2): retdict["animation"] = get_bool_string(self.animation) if self.lighting is not None and self.isVersion(minor=2): retdict["lighting"] = get_bool_string(self.lighting) if self.controllerRef is not None and self.isVersion(minor=2): retdict["controllerRef"] = self.controllerRef return retdict
def get_element(self)
-
returns the elementTree of the ActivateControllerAction
Expand source code
def get_element(self): """returns the elementTree of the ActivateControllerAction""" element = ET.Element("PrivateAction") if self.isVersion(minor=0): ET.SubElement( element, "ActivateControllerAction", attrib=self.get_attributes() ) else: subelem = ET.SubElement(element, "ControllerAction") ET.SubElement( subelem, "ActivateControllerAction", attrib=self.get_attributes() ) return element
class AddEntityAction (entityref, position)
-
The AddEntityAction class creates a EntityAction which adds a entity to the scenario
Parameters
entityref (str): reference name of the newly added vehicle position (*Position): position where the vehicle should be added
Attributes
entityref (str): reference name of the newly added vehicle position (*Position): position where the vehicle should be added
Methods
get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class
initalize the AddEntityAction
Parameters
entityref (str): reference name of the newly added vehicle position (*Position): position where the vehicle should be added
Expand source code
class AddEntityAction(_ActionType): """The AddEntityAction class creates a EntityAction which adds a entity to the scenario Parameters ---------- entityref (str): reference name of the newly added vehicle position (*Position): position where the vehicle should be added Attributes ---------- entityref (str): reference name of the newly added vehicle position (*Position): position where the vehicle should be added Methods ------- get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class """ def __init__(self, entityref, position): """initalize the AddEntityAction Parameters ---------- entityref (str): reference name of the newly added vehicle position (*Position): position where the vehicle should be added """ self.entityref = entityref self.position = position def __eq__(self, other): if isinstance(other, AddEntityAction): if ( self.get_attributes() == other.get_attributes() and self.position == other.position ): return True return False @staticmethod def parse(element): """Parses the xml element of AddEntityAction Parameters ---------- element (xml.etree.ElementTree.Element): A AddEntityAction element (same as generated by the class itself) Returns ------- ae_action (AddEntityAction): a AddEntityAction object """ ea_element = element.find("EntityAction") entityref = ea_element.attrib["entityRef"] aea_element = ea_element.find("AddEntityAction") position = _PositionFactory.parse_position(aea_element.find("Position")) return AddEntityAction(entityref, position) def get_attributes(self): """returns the attributes of the AddEntityAction as a dict""" return {"entityRef": self.entityref} def get_element(self): """returns the elementTree of the AddEntityAction""" element = ET.Element("GlobalAction") entityact = ET.SubElement(element, "EntityAction", attrib=self.get_attributes()) addentity = ET.SubElement(entityact, "AddEntityAction") addentity.append(self.position.get_element()) return element
Ancestors
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of AddEntityAction
Parameters
element (xml.etree.ElementTree.Element): A AddEntityAction element (same as generated by the class itself)
Returns
ae_action (AddEntityAction): a AddEntityAction object
Expand source code
@staticmethod def parse(element): """Parses the xml element of AddEntityAction Parameters ---------- element (xml.etree.ElementTree.Element): A AddEntityAction element (same as generated by the class itself) Returns ------- ae_action (AddEntityAction): a AddEntityAction object """ ea_element = element.find("EntityAction") entityref = ea_element.attrib["entityRef"] aea_element = ea_element.find("AddEntityAction") position = _PositionFactory.parse_position(aea_element.find("Position")) return AddEntityAction(entityref, position)
Methods
def get_attributes(self)
-
returns the attributes of the AddEntityAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the AddEntityAction as a dict""" return {"entityRef": self.entityref}
def get_element(self)
-
returns the elementTree of the AddEntityAction
Expand source code
def get_element(self): """returns the elementTree of the AddEntityAction""" element = ET.Element("GlobalAction") entityact = ET.SubElement(element, "EntityAction", attrib=self.get_attributes()) addentity = ET.SubElement(entityact, "AddEntityAction") addentity.append(self.position.get_element()) return element
class AnimationAction (animation_type, duration=None, loop=None, state=None)
-
AnimationAction creates an AppearanceAction of of the Type AnimationAction
Parameters
animation_type (VehicleComponentType, UserDefinedComponent, PedestrianAnimation, AnimationFile or UserDefinedAnimation): the animation to be taken place duration (float): the duraton of the animation Default: None loop (bool): if the animation should be looped Default: None state (float): what state the animation should be put to Default: None
Attributes
animation_type (_ComponentAnimation, PedestrianAnimation, AnimationFile or UserDefinedAnimation): the animation to be taken place duration (float): the duraton of the animation loop (bool): if the animation should be looped state (float): what state the animation should be put to
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 the attributes of the class
initalize the AnimationAction
Parameters
animation_type (VehicleComponentType, UserDefinedComponent, PedestrianAnimation, AnimationFile or UserDefinedAnimation): the animation to be taken place duration (float): the duraton of the animation Default: None loop (bool): if the animation should be looped Default: None state (float): what state the animation should be put to Default: None
Expand source code
class AnimationAction(_PrivateActionType): """AnimationAction creates an AppearanceAction of of the Type AnimationAction Parameters ---------- animation_type (VehicleComponentType, UserDefinedComponent, PedestrianAnimation, AnimationFile or UserDefinedAnimation): the animation to be taken place duration (float): the duraton of the animation Default: None loop (bool): if the animation should be looped Default: None state (float): what state the animation should be put to Default: None Attributes ---------- animation_type (_ComponentAnimation, PedestrianAnimation, AnimationFile or UserDefinedAnimation): the animation to be taken place duration (float): the duraton of the animation loop (bool): if the animation should be looped state (float): what state the animation should be put to 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 the attributes of the class """ def __init__( self, animation_type, duration=None, loop=None, state=None, ): """initalize the AnimationAction Parameters ---------- animation_type (VehicleComponentType, UserDefinedComponent, PedestrianAnimation, AnimationFile or UserDefinedAnimation): the animation to be taken place duration (float): the duraton of the animation Default: None loop (bool): if the animation should be looped Default: None state (float): what state the animation should be put to Default: None """ try: self.animation_type = _ComponentAnimation(_VehicleComponent(animation_type)) except Exception as e: self.animation_type = None if self.animation_type: pass elif isinstance(animation_type, UserDefinedComponent): self.animation_type = _ComponentAnimation(animation_type) else: self.animation_type = animation_type self.duration = convert_float(duration) if loop is not None and not isinstance(loop, bool): raise TypeError("loop input is not of type bool") self.loop = loop self.state = convert_float(state) def __eq__(self, other): if isinstance(other, AnimationAction): if ( self.get_attributes() == other.get_attributes() and self.animation_type == other.animation_type and self.state == other.state ): return True return False @staticmethod def parse(element): """Parses the xml element of AnimationAction Parameters ---------- element (xml.etree.ElementTree.Element): A AnimationAction element (same as generated by the class itself) Returns ------- animation_action (AnimationAction): a AnimationAction object """ animation_element = element.find("AppearanceAction/AnimationAction") duration = None if "animationDuration" in animation_element.attrib: duration = convert_float(animation_element.attrib["animationDuration"]) loop = None if "loop" in animation_element.attrib: loop = convert_bool(animation_element.attrib["loop"]) animation_state = animation_element.find("AnimationState") state = None if animation_state is not None: state = convert_float(animation_state.attrib["state"]) animation_type = _AnimationTypeFactory.parse_animationtype( animation_element.find("AnimationType") ) return AnimationAction(animation_type, duration, loop, state) def get_attributes(self): """returns the attributes of the AnimationAction as a dict""" retdict = {} if self.duration is not None: retdict["animationDuration"] = str(self.duration) if self.loop is not None: retdict["loop"] = get_bool_string(self.loop) return retdict def get_element(self): """returns the elementTree of the AnimationAction""" element = ET.Element("PrivateAction") appear_element = ET.SubElement(element, "AppearanceAction") animation_element = ET.SubElement( appear_element, "AnimationAction", self.get_attributes() ) animation_type_element = ET.SubElement(animation_element, "AnimationType") animation_type_element.append(self.animation_type.get_element()) if self.state is not None: ET.SubElement( animation_element, "AnimationState", attrib={"state": str(self.state)} ) return element
Ancestors
- scenariogeneration.xosc.actions._PrivateActionType
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of AnimationAction
Parameters
element (xml.etree.ElementTree.Element): A AnimationAction element (same as generated by the class itself)
Returns
animation_action (AnimationAction): a AnimationAction object
Expand source code
@staticmethod def parse(element): """Parses the xml element of AnimationAction Parameters ---------- element (xml.etree.ElementTree.Element): A AnimationAction element (same as generated by the class itself) Returns ------- animation_action (AnimationAction): a AnimationAction object """ animation_element = element.find("AppearanceAction/AnimationAction") duration = None if "animationDuration" in animation_element.attrib: duration = convert_float(animation_element.attrib["animationDuration"]) loop = None if "loop" in animation_element.attrib: loop = convert_bool(animation_element.attrib["loop"]) animation_state = animation_element.find("AnimationState") state = None if animation_state is not None: state = convert_float(animation_state.attrib["state"]) animation_type = _AnimationTypeFactory.parse_animationtype( animation_element.find("AnimationType") ) return AnimationAction(animation_type, duration, loop, state)
Methods
def get_attributes(self)
-
returns the attributes of the AnimationAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the AnimationAction as a dict""" retdict = {} if self.duration is not None: retdict["animationDuration"] = str(self.duration) if self.loop is not None: retdict["loop"] = get_bool_string(self.loop) return retdict
def get_element(self)
-
returns the elementTree of the AnimationAction
Expand source code
def get_element(self): """returns the elementTree of the AnimationAction""" element = ET.Element("PrivateAction") appear_element = ET.SubElement(element, "AppearanceAction") animation_element = ET.SubElement( appear_element, "AnimationAction", self.get_attributes() ) animation_type_element = ET.SubElement(animation_element, "AnimationType") animation_type_element.append(self.animation_type.get_element()) if self.state is not None: ET.SubElement( animation_element, "AnimationState", attrib={"state": str(self.state)} ) return element
class AssignControllerAction (controller, activateLateral=True, activateLongitudinal=True, activateLighting=False, activateAnimation=False)
-
AssignControllerAction creates a ControllerAction of type AssignControllerAction
Parameters
controller (Controller or Catalogreference): a controller to assign activateLateral (bool): if the lateral control should be activated (valid from V1.1) Default: True activateLongitudinal (bool): if the longitudinal control should be activated (valid from V1.1) Default: True activateLighting (bool): if the lighting control should be activated (valid from V1.2) Default: False activateAnimation (bool): if the lighting control should be activated (valid from V1.2) Default: False
Attributes
controller (boolController or Catalogreferenceean): a controller to assign activateLateral (bool): if the lateral control should be activated (valid from V1.1) activateLongitudinal (bool): if the longitudinal control should be activated (valid from V1.1) activateLighting (bool): if the lighting control should be activated (valid from V1.2) activateAnimation (bool): if the lighting control should be activated (valid from V1.2)
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
initalizes the AssignControllerAction
Parameters
controller (Controller or Catalogreference): a controller to assign activateLateral (bool): if the lateral control should be activated (valid from V1.1) Default: True activateLongitudinal (bool): if the longitudinal control should be activated (valid from V1.1) Default: True
Expand source code
class AssignControllerAction(_PrivateActionType): """AssignControllerAction creates a ControllerAction of type AssignControllerAction Parameters ---------- controller (Controller or Catalogreference): a controller to assign activateLateral (bool): if the lateral control should be activated (valid from V1.1) Default: True activateLongitudinal (bool): if the longitudinal control should be activated (valid from V1.1) Default: True activateLighting (bool): if the lighting control should be activated (valid from V1.2) Default: False activateAnimation (bool): if the lighting control should be activated (valid from V1.2) Default: False Attributes ---------- controller (boolController or Catalogreferenceean): a controller to assign activateLateral (bool): if the lateral control should be activated (valid from V1.1) activateLongitudinal (bool): if the longitudinal control should be activated (valid from V1.1) activateLighting (bool): if the lighting control should be activated (valid from V1.2) activateAnimation (bool): if the lighting control should be activated (valid from V1.2) 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 """ def __init__( self, controller, activateLateral=True, activateLongitudinal=True, activateLighting=False, activateAnimation=False, ): """initalizes the AssignControllerAction Parameters ---------- controller (Controller or Catalogreference): a controller to assign activateLateral (bool): if the lateral control should be activated (valid from V1.1) Default: True activateLongitudinal (bool): if the longitudinal control should be activated (valid from V1.1) Default: True """ if not ( isinstance(controller, Controller) or isinstance(controller, CatalogReference) ): raise TypeError("route input not of type Route or CatalogReference") self.controller = controller self.activateLateral = convert_bool(activateLateral) self.activateLongitudinal = convert_bool(activateLongitudinal) self.activateLighting = convert_bool(activateLighting) self.activateAnimation = convert_bool(activateAnimation) self._used_by_parent = False def __eq__(self, other): if isinstance(other, AssignControllerAction): if self.controller == other.controller: return True elif isinstance(other, ControllerAction): if self.controller == other.assignControllerAction.controller: return True return False @staticmethod def parse(element): """Parses the xml element of AssignControllerAction Parameters ---------- element (xml.etree.ElementTree.Element): A AssignControllerAction element (same as generated by the class itself) Returns ------- ac_action (AssignControllerAction): a AssignControllerAction object """ ca_element = element.find("ControllerAction") aca_element = ca_element.find("AssignControllerAction") activate_lateral = True if "activateLateral" in aca_element.attrib: activate_lateral = convert_bool(aca_element.attrib["activateLateral"]) activate_longitudinal = True if "activateLongitudinal" in aca_element.attrib: activate_longitudinal = convert_bool( aca_element.attrib["activateLongitudinal"] ) activate_lighting = False if "activateLighting" in aca_element.attrib: activate_lighting = convert_bool(aca_element.attrib["activateLighting"]) activate_animation = False if "activateAnimation" in aca_element.attrib: activate_animation = convert_bool(aca_element.attrib["activateAnimation"]) controller = None if aca_element.find("Controller") != None: controller = Controller.parse(aca_element.find("Controller")) elif aca_element.find("CatalogReference") != None: controller = CatalogReference.parse(aca_element.find("CatalogReference")) else: raise NotAValidElement("No Controller found for AssignControllerAction") return AssignControllerAction( controller, activate_lateral, activate_longitudinal, activate_lighting, activate_animation, ) def get_attributes(self): """returns the attributes of the AssignControllerAction as a dict""" retdict = {} if self.isVersionEqLarger(minor=1): retdict = { "activateLateral": get_bool_string(self.activateLateral), "activateLongitudinal": get_bool_string(self.activateLongitudinal), } if self.isVersionEqLarger(minor=2): retdict["activateLighting"] = get_bool_string(self.activateLighting) retdict["activateAnimation"] = get_bool_string(self.activateAnimation) return retdict def get_element(self): """returns the elementTree of the AssignControllerAction""" if self.isVersion(minor=0) and not self._used_by_parent: raise OpenSCENARIOVersionError( "AssignControllerAction cannot be used alone in OSC 1.0, please add it to a ControllerAction." ) element = ET.Element("PrivateAction") controlleraction = ET.SubElement(element, "ControllerAction") assigncontrolleraction = ET.SubElement( controlleraction, "AssignControllerAction", self.get_attributes() ) assigncontrolleraction.append(self.controller.get_element()) return element
Ancestors
- scenariogeneration.xosc.actions._PrivateActionType
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of AssignControllerAction
Parameters
element (xml.etree.ElementTree.Element): A AssignControllerAction element (same as generated by the class itself)
Returns
ac_action (AssignControllerAction): a AssignControllerAction object
Expand source code
@staticmethod def parse(element): """Parses the xml element of AssignControllerAction Parameters ---------- element (xml.etree.ElementTree.Element): A AssignControllerAction element (same as generated by the class itself) Returns ------- ac_action (AssignControllerAction): a AssignControllerAction object """ ca_element = element.find("ControllerAction") aca_element = ca_element.find("AssignControllerAction") activate_lateral = True if "activateLateral" in aca_element.attrib: activate_lateral = convert_bool(aca_element.attrib["activateLateral"]) activate_longitudinal = True if "activateLongitudinal" in aca_element.attrib: activate_longitudinal = convert_bool( aca_element.attrib["activateLongitudinal"] ) activate_lighting = False if "activateLighting" in aca_element.attrib: activate_lighting = convert_bool(aca_element.attrib["activateLighting"]) activate_animation = False if "activateAnimation" in aca_element.attrib: activate_animation = convert_bool(aca_element.attrib["activateAnimation"]) controller = None if aca_element.find("Controller") != None: controller = Controller.parse(aca_element.find("Controller")) elif aca_element.find("CatalogReference") != None: controller = CatalogReference.parse(aca_element.find("CatalogReference")) else: raise NotAValidElement("No Controller found for AssignControllerAction") return AssignControllerAction( controller, activate_lateral, activate_longitudinal, activate_lighting, activate_animation, )
Methods
def get_attributes(self)
-
returns the attributes of the AssignControllerAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the AssignControllerAction as a dict""" retdict = {} if self.isVersionEqLarger(minor=1): retdict = { "activateLateral": get_bool_string(self.activateLateral), "activateLongitudinal": get_bool_string(self.activateLongitudinal), } if self.isVersionEqLarger(minor=2): retdict["activateLighting"] = get_bool_string(self.activateLighting) retdict["activateAnimation"] = get_bool_string(self.activateAnimation) return retdict
def get_element(self)
-
returns the elementTree of the AssignControllerAction
Expand source code
def get_element(self): """returns the elementTree of the AssignControllerAction""" if self.isVersion(minor=0) and not self._used_by_parent: raise OpenSCENARIOVersionError( "AssignControllerAction cannot be used alone in OSC 1.0, please add it to a ControllerAction." ) element = ET.Element("PrivateAction") controlleraction = ET.SubElement(element, "ControllerAction") assigncontrolleraction = ET.SubElement( controlleraction, "AssignControllerAction", self.get_attributes() ) assigncontrolleraction.append(self.controller.get_element()) return element
class AssignRouteAction (route)
-
AssignRouteAction creates a RouteAction of type AssignRouteAction
Parameters
route (Route, or CatalogReference): the route to follow
Attributes
route (Route, or CatalogReference): the route to follow
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
initalizes the AssignRouteAction
Parameters
route (Route, or CatalogReference): the route to follow
Expand source code
class AssignRouteAction(_PrivateActionType): """AssignRouteAction creates a RouteAction of type AssignRouteAction Parameters ---------- route (Route, or CatalogReference): the route to follow Attributes ---------- route (Route, or CatalogReference): the route to follow 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 """ def __init__(self, route): """initalizes the AssignRouteAction Parameters ---------- route (Route, or CatalogReference): the route to follow """ if not (isinstance(route, Route) or isinstance(route, CatalogReference)): raise TypeError("route input not of type Route or CatalogReference") self.route = route def __eq__(self, other): if isinstance(other, AssignRouteAction): if self.route == other.route: return True return False @staticmethod def parse(element): """Parses the xml element of AssignRouteAction Parameters ---------- element (xml.etree.ElementTree.Element): A AssignRouteAction element (same as generated by the class itself) Returns ------- ar_action (AssignRouteAction): a AssignRouteAction object """ ara_element = element.find("RoutingAction/AssignRouteAction") route = None if ara_element.find("Route") != None: route = Route.parse(ara_element.find("Route")) elif ara_element.find("CatalogReference") != None: route = CatalogReference.parse(ara_element.find("CatalogReference")) return AssignRouteAction(route) def get_element(self): """returns the elementTree of the AssignRouteAction""" element = ET.Element("PrivateAction") routeaction = ET.SubElement(element, "RoutingAction") assignrouteaction = ET.SubElement(routeaction, "AssignRouteAction") assignrouteaction.append(self.route.get_element()) return element
Ancestors
- scenariogeneration.xosc.actions._PrivateActionType
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of AssignRouteAction
Parameters
element (xml.etree.ElementTree.Element): A AssignRouteAction element (same as generated by the class itself)
Returns
ar_action (AssignRouteAction): a AssignRouteAction object
Expand source code
@staticmethod def parse(element): """Parses the xml element of AssignRouteAction Parameters ---------- element (xml.etree.ElementTree.Element): A AssignRouteAction element (same as generated by the class itself) Returns ------- ar_action (AssignRouteAction): a AssignRouteAction object """ ara_element = element.find("RoutingAction/AssignRouteAction") route = None if ara_element.find("Route") != None: route = Route.parse(ara_element.find("Route")) elif ara_element.find("CatalogReference") != None: route = CatalogReference.parse(ara_element.find("CatalogReference")) return AssignRouteAction(route)
Methods
def get_element(self)
-
returns the elementTree of the AssignRouteAction
Expand source code
def get_element(self): """returns the elementTree of the AssignRouteAction""" element = ET.Element("PrivateAction") routeaction = ET.SubElement(element, "RoutingAction") assignrouteaction = ET.SubElement(routeaction, "AssignRouteAction") assignrouteaction.append(self.route.get_element()) return element
class ControllerAction (assignControllerAction=None, overrideControllerValueAction=None, activateControllerAction=None)
-
ControllerAction creates a ControllerAction of open scenario
Parameters
assignControllerAction (AssignControllerAction): assign a controller to an entity overrideControllerValueAction (OverrideControllerValueAction): values for brake, clutch, parking brake, steering wheel or gear activateControllerAction (ActivateControllerAction): activate/deactivate a controller on the reference entity/entities. Replaces the depreciated element in PrivateAction in 1.1
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
initalizes the ControllerAction
Parameters
assignControllerAction (AssignControllerAction): assign a controller to an entity overrideControllerValueAction (OverrideControllerValueAction): values for brake, clutch, parking brake, steering wheel or gear activateControllerAction (ActivateControllerAction): activate/deactivate a controller on the reference entity/entities. Replaces the depreciated element in PrivateAction in 1.1
Expand source code
class ControllerAction(_PrivateActionType): """ControllerAction creates a ControllerAction of open scenario Parameters ---------- assignControllerAction (AssignControllerAction): assign a controller to an entity overrideControllerValueAction (OverrideControllerValueAction): values for brake, clutch, parking brake, steering wheel or gear activateControllerAction (ActivateControllerAction): activate/deactivate a controller on the reference entity/entities. Replaces the depreciated element in PrivateAction in 1.1 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 """ def __init__( self, assignControllerAction=None, overrideControllerValueAction=None, activateControllerAction=None, ): """initalizes the ControllerAction Parameters ---------- assignControllerAction (AssignControllerAction): assign a controller to an entity overrideControllerValueAction (OverrideControllerValueAction): values for brake, clutch, parking brake, steering wheel or gear activateControllerAction (ActivateControllerAction): activate/deactivate a controller on the reference entity/entities. Replaces the depreciated element in PrivateAction in 1.1 """ if assignControllerAction is not None and not isinstance( assignControllerAction, AssignControllerAction ): raise TypeError( "assignControllerAction is not of type AssignControllerAction" ) if overrideControllerValueAction is not None and not isinstance( overrideControllerValueAction, OverrideControllerValueAction ): raise TypeError( "overrideControllerValueAction is not of type OverrideControllerValueAction" ) if activateControllerAction is not None and not isinstance( activateControllerAction, ActivateControllerAction ): raise TypeError( "activateControllerAction is not of type ActivateControllerAction" ) self.assignControllerAction = assignControllerAction self.overrideControllerValueAction = overrideControllerValueAction self.activateControllerAction = activateControllerAction if self.assignControllerAction is not None: self.assignControllerAction._used_by_parent = True if self.overrideControllerValueAction is not None: self.overrideControllerValueAction._used_by_parent = True def __eq__(self, other): if isinstance(other, ControllerAction): if ( self.activateControllerAction == other.activateControllerAction and self.overrideControllerValueAction == other.overrideControllerValueAction and self.assignControllerAction == other.assignControllerAction ): return True if isinstance(other, AssignControllerAction): if self.assignControllerAction == other: return True if isinstance(other, OverrideControllerValueAction): if self.overrideControllerValueAction == other: return True if isinstance(other, ActivateControllerAction): if self.activateControllerAction == other: return True return False @staticmethod def parse(element): """Parses the xml element of ControllerAction Parameters ---------- element (xml.etree.ElementTree.Element): A ControllerAction element (same as generated by the class itself) Returns ------- (ControllerAction): a ActivateControllerAction object """ activateControllerAction = None overrideControllerValueAction = None assignControllerAction = None ca_element = element.find("ControllerAction") if ca_element.find("ActivateControllerAction") != None: activateControllerAction = ActivateControllerAction.parse(element) if ca_element.find("OverrideControllerValueAction") != None: overrideControllerValueAction = OverrideControllerValueAction.parse(element) if ca_element.find("AssignControllerAction") != None: assignControllerAction = AssignControllerAction.parse(element) return ControllerAction( assignControllerAction, overrideControllerValueAction, activateControllerAction, ) def get_element(self): """returns the elementTree of the ControllerAction""" if self.isVersion(minor=0): if ( self.assignControllerAction is None or self.overrideControllerValueAction is None ): raise NotEnoughInputArguments( "Both assignControllerAction and overrideControllerValueAction are required in version 1.0." ) if self.activateControllerAction is not None: raise OpenSCENARIOVersionError( "activateControllerAction is not parameter in version 1.0." ) element = ET.Element("PrivateAction") controlleraction = ET.SubElement(element, "ControllerAction") if self.activateControllerAction != None: pa_element = self.activateControllerAction.get_element() aca_element = pa_element.find("ControllerAction/ActivateControllerAction") controlleraction.append(aca_element) if self.overrideControllerValueAction != None: pa_element = self.overrideControllerValueAction.get_element() ocva_element = pa_element.find( "ControllerAction/OverrideControllerValueAction" ) controlleraction.append(ocva_element) if self.assignControllerAction != None: pa_element = self.assignControllerAction.get_element() aca_element = pa_element.find("ControllerAction/AssignControllerAction") controlleraction.append(aca_element) return element
Ancestors
- scenariogeneration.xosc.actions._PrivateActionType
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of ControllerAction
Parameters
element (xml.etree.ElementTree.Element): A ControllerAction element (same as generated by the class itself)
Returns
(ControllerAction): a ActivateControllerAction object
Expand source code
@staticmethod def parse(element): """Parses the xml element of ControllerAction Parameters ---------- element (xml.etree.ElementTree.Element): A ControllerAction element (same as generated by the class itself) Returns ------- (ControllerAction): a ActivateControllerAction object """ activateControllerAction = None overrideControllerValueAction = None assignControllerAction = None ca_element = element.find("ControllerAction") if ca_element.find("ActivateControllerAction") != None: activateControllerAction = ActivateControllerAction.parse(element) if ca_element.find("OverrideControllerValueAction") != None: overrideControllerValueAction = OverrideControllerValueAction.parse(element) if ca_element.find("AssignControllerAction") != None: assignControllerAction = AssignControllerAction.parse(element) return ControllerAction( assignControllerAction, overrideControllerValueAction, activateControllerAction, )
Methods
def get_element(self)
-
returns the elementTree of the ControllerAction
Expand source code
def get_element(self): """returns the elementTree of the ControllerAction""" if self.isVersion(minor=0): if ( self.assignControllerAction is None or self.overrideControllerValueAction is None ): raise NotEnoughInputArguments( "Both assignControllerAction and overrideControllerValueAction are required in version 1.0." ) if self.activateControllerAction is not None: raise OpenSCENARIOVersionError( "activateControllerAction is not parameter in version 1.0." ) element = ET.Element("PrivateAction") controlleraction = ET.SubElement(element, "ControllerAction") if self.activateControllerAction != None: pa_element = self.activateControllerAction.get_element() aca_element = pa_element.find("ControllerAction/ActivateControllerAction") controlleraction.append(aca_element) if self.overrideControllerValueAction != None: pa_element = self.overrideControllerValueAction.get_element() ocva_element = pa_element.find( "ControllerAction/OverrideControllerValueAction" ) controlleraction.append(ocva_element) if self.assignControllerAction != None: pa_element = self.assignControllerAction.get_element() aca_element = pa_element.find("ControllerAction/AssignControllerAction") controlleraction.append(aca_element) return element
class CustomCommandAction (type, content)
-
The CustomCommandAction creates a simulator defined action
Parameters
Attributes
type (str): type of the custom command
Methods
get_element() Returns the full ElementTree of the class
initalize the CustomCommandAction
Parameters
type (str): type of the custom command content (str): content of the custom command
Expand source code
class CustomCommandAction(_ActionType): """The CustomCommandAction creates a simulator defined action Parameters ---------- Attributes ---------- type (str): type of the custom command Methods ------- get_element() Returns the full ElementTree of the class """ def __init__(self, type, content): """initalize the CustomCommandAction Parameters ---------- type (str): type of the custom command content (str): content of the custom command """ self.type = type self.content = content def __eq__(self, other): if isinstance(other, CustomCommandAction): if other.type == self.type: return True return False @staticmethod def parse(element): """Parsese the xml element of a CustomCommandAction Parameters ---------- element (xml.etree.ElementTree.Element): a CustomCommandAction element Returns ------- customCommandAction (CustomCommandAction): a CustomCommandAction object """ if element.tag != "CustomCommandAction": raise NotAValidElement( f'Expected "CustomCommandAction" element, received "{element.tag}".' ) action_type = element.attrib.get("type", None) if action_type == None: raise NotAValidElement( 'CustomCommandAction is missing required argument "type".' ) return CustomCommandAction(action_type, element.text) def get_element(self): """returns the elementTree of the CustomCommandAction""" element = ET.Element("CustomCommandAction", attrib={"type": self.type}) element.text = self.content return element
Ancestors
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parsese the xml element of a CustomCommandAction
Parameters
element (xml.etree.ElementTree.Element): a CustomCommandAction element
Returns
customCommandAction (CustomCommandAction): a CustomCommandAction object
Expand source code
@staticmethod def parse(element): """Parsese the xml element of a CustomCommandAction Parameters ---------- element (xml.etree.ElementTree.Element): a CustomCommandAction element Returns ------- customCommandAction (CustomCommandAction): a CustomCommandAction object """ if element.tag != "CustomCommandAction": raise NotAValidElement( f'Expected "CustomCommandAction" element, received "{element.tag}".' ) action_type = element.attrib.get("type", None) if action_type == None: raise NotAValidElement( 'CustomCommandAction is missing required argument "type".' ) return CustomCommandAction(action_type, element.text)
Methods
def get_element(self)
-
returns the elementTree of the CustomCommandAction
Expand source code
def get_element(self): """returns the elementTree of the CustomCommandAction""" element = ET.Element("CustomCommandAction", attrib={"type": self.type}) element.text = self.content return element
class DeleteEntityAction (entityref)
-
The DeleteEntityAction class creates a EntityAction which removes an entity to the scenario
Parameters
entityref (str): reference name of the vehicle to remove
Attributes
entityref (str): reference name of the vehicle to remove
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
initalize the DeleteEntityAction
Parameters
entityref (str): reference name of the vehicle to remove
Expand source code
class DeleteEntityAction(_ActionType): """The DeleteEntityAction class creates a EntityAction which removes an entity to the scenario Parameters ---------- entityref (str): reference name of the vehicle to remove Attributes ---------- entityref (str): reference name of the vehicle to remove 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, entityref): """initalize the DeleteEntityAction Parameters ---------- entityref (str): reference name of the vehicle to remove """ self.entityref = entityref def __eq__(self, other): if isinstance(other, DeleteEntityAction): if self.get_attributes() == other.get_attributes(): return True return False @staticmethod def parse(element): """Parses the xml element of DeleteEntityAction Parameters ---------- element (xml.etree.ElementTree.Element): A DeleteEntityAction element (same as generated by the class itself) Returns ------- de_action (DeleteEntityAction): a DeleteEntityAction object """ ea_element = element.find("EntityAction") entityref = ea_element.attrib["entityRef"] return DeleteEntityAction(entityref) def get_attributes(self): """returns the attributes of the DeleteEntityAction as a dict""" return {"entityRef": self.entityref} def get_element(self): """returns the elementTree of the DeleteEntityAction""" element = ET.Element("GlobalAction") entityact = ET.SubElement(element, "EntityAction", attrib=self.get_attributes()) ET.SubElement(entityact, "DeleteEntityAction") return element
Ancestors
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of DeleteEntityAction
Parameters
element (xml.etree.ElementTree.Element): A DeleteEntityAction element (same as generated by the class itself)
Returns
de_action (DeleteEntityAction): a DeleteEntityAction object
Expand source code
@staticmethod def parse(element): """Parses the xml element of DeleteEntityAction Parameters ---------- element (xml.etree.ElementTree.Element): A DeleteEntityAction element (same as generated by the class itself) Returns ------- de_action (DeleteEntityAction): a DeleteEntityAction object """ ea_element = element.find("EntityAction") entityref = ea_element.attrib["entityRef"] return DeleteEntityAction(entityref)
Methods
def get_attributes(self)
-
returns the attributes of the DeleteEntityAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the DeleteEntityAction as a dict""" return {"entityRef": self.entityref}
def get_element(self)
-
returns the elementTree of the DeleteEntityAction
Expand source code
def get_element(self): """returns the elementTree of the DeleteEntityAction""" element = ET.Element("GlobalAction") entityact = ET.SubElement(element, "EntityAction", attrib=self.get_attributes()) ET.SubElement(entityact, "DeleteEntityAction") return element
class EnvironmentAction (environment)
-
The EnvironmentAction class creates a GlobalAction of the typ EnvironmentAction
Parameters
environment (Environment or CatalogReference): the environment to change to
Attributes
environment (Environment or CatalogReference): the environment to change to
Methods
parse(element) parses a ElementTree created by the class and returns an instance of the class itself get_element() Returns the full ElementTree of the class
initalize the EnvironmentAction
Parameters
name (str): name of the action environment (Environment or CatalogReference): the environment to change to
Expand source code
class EnvironmentAction(_ActionType): """The EnvironmentAction class creates a GlobalAction of the typ EnvironmentAction Parameters ---------- environment (Environment or CatalogReference): the environment to change to Attributes ---------- environment (Environment or CatalogReference): the environment to change to Methods ------- parse(element) parses a ElementTree created by the class and returns an instance of the class itself get_element() Returns the full ElementTree of the class """ def __init__(self, environment): """initalize the EnvironmentAction Parameters ---------- name (str): name of the action environment (Environment or CatalogReference): the environment to change to """ if not ( isinstance(environment, Environment) or isinstance(environment, CatalogReference) ): raise TypeError( "environment input not of type Environment or CatalogReference" ) self.environment = environment def __eq__(self, other): if isinstance(other, EnvironmentAction): if self.environment == other.environment: return True return False @staticmethod def parse(element): """Parses the xml element of BoundingBox Parameters ---------- element (xml.etree.ElementTree.Element): A orientation element (same as generated by the class itself) Returns ------- boundingBox (BoundingBox): a BoundingBox object """ action_element = element.find("EnvironmentAction") if action_element.find("Environment") != None: environment = Environment.parse(action_element.find("Environment")) elif action_element.find("CatalogReference") != None: environment = CatalogReference.parse( action_element.find("CatalogReference") ) return EnvironmentAction(environment) def get_element(self): """returns the elementTree of the EnvironmentAction""" element = ET.Element("GlobalAction") envaction = ET.SubElement(element, "EnvironmentAction") envaction.append(self.environment.get_element()) return element
Ancestors
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of BoundingBox
Parameters
element (xml.etree.ElementTree.Element): A orientation element (same as generated by the class itself)
Returns
boundingBox (BoundingBox): a BoundingBox object
Expand source code
@staticmethod def parse(element): """Parses the xml element of BoundingBox Parameters ---------- element (xml.etree.ElementTree.Element): A orientation element (same as generated by the class itself) Returns ------- boundingBox (BoundingBox): a BoundingBox object """ action_element = element.find("EnvironmentAction") if action_element.find("Environment") != None: environment = Environment.parse(action_element.find("Environment")) elif action_element.find("CatalogReference") != None: environment = CatalogReference.parse( action_element.find("CatalogReference") ) return EnvironmentAction(environment)
Methods
def get_element(self)
-
returns the elementTree of the EnvironmentAction
Expand source code
def get_element(self): """returns the elementTree of the EnvironmentAction""" element = ET.Element("GlobalAction") envaction = ET.SubElement(element, "EnvironmentAction") envaction.append(self.environment.get_element()) return element
class FollowTrajectoryAction (trajectory, following_mode, reference_domain=None, scale=None, offset=None, initialDistanceOffset=None)
-
FollowTrajectoryAction creates a RouteAction of type FollowTrajectoryAction
Parameters
trajectory (Trajectory, or CatalogReference): the trajectory to follow following_mode (FollowingMode): the following mode of the action reference_domain (ReferenceContext): how to follow Default: None scale (float): scalefactor of the timeings (must be combined with reference_domain and offset) Default: None offset (float): offset for time values (must be combined with reference_domain and scale) Default: None initialDistanceOffset (float): start at this offset into the trajectory (v1.1) Default: None
Attributes
trajectory (Trajectory, or CatalogReference): the trajectory to follow following_mode (str): the following mode of the action timeref (TimeReference): the time reference of the trajectory initialDistanceOffset (float): start at this offset into the trajectory (v1.1)
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
initalize the FollowTrajectoryAction
Parameters
trajectory (Trajectory, or CatalogReference): the trajectory to follow following_mode (FollowingMode): the following mode of the action reference_domain (str): absolute or relative time reference (must be combined with scale and offset) Default: None scale (float): scalefactor of the timings (must be combined with reference_domain and offset) Default: None offset (float): offset for time values (must be combined with reference_domain and scale) Default: None initialDistanceOffset (float): start at this offset into the trajectory (v1.1) Default: None
Expand source code
class FollowTrajectoryAction(_PrivateActionType): """FollowTrajectoryAction creates a RouteAction of type FollowTrajectoryAction Parameters ---------- trajectory (Trajectory, or CatalogReference): the trajectory to follow following_mode (FollowingMode): the following mode of the action reference_domain (ReferenceContext): how to follow Default: None scale (float): scalefactor of the timeings (must be combined with reference_domain and offset) Default: None offset (float): offset for time values (must be combined with reference_domain and scale) Default: None initialDistanceOffset (float): start at this offset into the trajectory (v1.1) Default: None Attributes ---------- trajectory (Trajectory, or CatalogReference): the trajectory to follow following_mode (str): the following mode of the action timeref (TimeReference): the time reference of the trajectory initialDistanceOffset (float): start at this offset into the trajectory (v1.1) 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 """ def __init__( self, trajectory, following_mode, reference_domain=None, scale=None, offset=None, initialDistanceOffset=None, ): """initalize the FollowTrajectoryAction Parameters ---------- trajectory (Trajectory, or CatalogReference): the trajectory to follow following_mode (FollowingMode): the following mode of the action reference_domain (str): absolute or relative time reference (must be combined with scale and offset) Default: None scale (float): scalefactor of the timings (must be combined with reference_domain and offset) Default: None offset (float): offset for time values (must be combined with reference_domain and scale) Default: None initialDistanceOffset (float): start at this offset into the trajectory (v1.1) Default: None """ # if following_mode not in FollowingMode: # ValueError(str(following_mode) + ' is not a valied following mode.') if not ( isinstance(trajectory, Trajectory) or isinstance(trajectory, CatalogReference) ): raise TypeError("route input not of type Route or CatalogReference") self.trajectory = trajectory self.following_mode = convert_enum(following_mode, FollowingMode) # TODO: check reference_domain self.timeref = TimeReference(reference_domain, scale, offset) self.initialDistanceOffset = convert_float(initialDistanceOffset) def __eq__(self, other): if isinstance(other, FollowTrajectoryAction): if ( self.timeref == other.timeref and self.get_attributes() == other.get_attributes() and self.trajectory == other.trajectory and self.following_mode == other.following_mode ): return True return False @staticmethod def parse(element): """Parses the xml element of FollowTrajectoryAction Parameters ---------- element (xml.etree.ElementTree.Element): A FollowTrajectoryAction element (same as generated by the class itself) Returns ------- ft_action (FollowTrajectoryAction): a FollowTrajectoryAction object """ fta_element = element.find("RoutingAction/FollowTrajectoryAction") initial_distance_offset = None if "initialDistanceOffset" in fta_element.attrib: initial_distance_offset = convert_float( fta_element.attrib["initialDistanceOffset"] ) timeref = TimeReference.parse(fta_element.find("TimeReference")) reference_domain = timeref.reference_domain offset = timeref.offset scale = timeref.scale tfm_element = fta_element.find("TrajectoryFollowingMode") following_mode = convert_enum( tfm_element.attrib["followingMode"], FollowingMode ) if fta_element.find("TrajectoryRef") != None: fta_element = fta_element.find("TrajectoryRef") trajectory = None if fta_element.find("Trajectory") != None: trajectory = Trajectory.parse(fta_element.find("Trajectory")) if fta_element.find("CatalogReference") != None: trajectory = CatalogReference.parse(fta_element.find("CatalogReference")) return FollowTrajectoryAction( trajectory, following_mode, reference_domain, scale, offset, initial_distance_offset, ) def get_attributes(self): """returns the attributes of the FollowTrajectoryAction as a dict""" if self.initialDistanceOffset: return {"initialDistanceOffset": str(self.initialDistanceOffset)} else: # If initialDistanceOffset is not set, return empty to stay backward compatible with v1.0 return {} def get_element(self): """returns the elementTree of the FollowTrajectoryAction""" element = ET.Element("PrivateAction") routeaction = ET.SubElement(element, "RoutingAction") trajaction = ET.SubElement( routeaction, "FollowTrajectoryAction", attrib=self.get_attributes() ) if self.isVersion(minor=0): trajaction.append(self.trajectory.get_element()) else: trajref = ET.SubElement(trajaction, "TrajectoryRef") trajref.append(self.trajectory.get_element()) trajaction.append(self.timeref.get_element()) ET.SubElement( trajaction, "TrajectoryFollowingMode", attrib={"followingMode": self.following_mode.get_name()}, ) return element
Ancestors
- scenariogeneration.xosc.actions._PrivateActionType
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of FollowTrajectoryAction
Parameters
element (xml.etree.ElementTree.Element): A FollowTrajectoryAction element (same as generated by the class itself)
Returns
ft_action (FollowTrajectoryAction): a FollowTrajectoryAction object
Expand source code
@staticmethod def parse(element): """Parses the xml element of FollowTrajectoryAction Parameters ---------- element (xml.etree.ElementTree.Element): A FollowTrajectoryAction element (same as generated by the class itself) Returns ------- ft_action (FollowTrajectoryAction): a FollowTrajectoryAction object """ fta_element = element.find("RoutingAction/FollowTrajectoryAction") initial_distance_offset = None if "initialDistanceOffset" in fta_element.attrib: initial_distance_offset = convert_float( fta_element.attrib["initialDistanceOffset"] ) timeref = TimeReference.parse(fta_element.find("TimeReference")) reference_domain = timeref.reference_domain offset = timeref.offset scale = timeref.scale tfm_element = fta_element.find("TrajectoryFollowingMode") following_mode = convert_enum( tfm_element.attrib["followingMode"], FollowingMode ) if fta_element.find("TrajectoryRef") != None: fta_element = fta_element.find("TrajectoryRef") trajectory = None if fta_element.find("Trajectory") != None: trajectory = Trajectory.parse(fta_element.find("Trajectory")) if fta_element.find("CatalogReference") != None: trajectory = CatalogReference.parse(fta_element.find("CatalogReference")) return FollowTrajectoryAction( trajectory, following_mode, reference_domain, scale, offset, initial_distance_offset, )
Methods
def get_attributes(self)
-
returns the attributes of the FollowTrajectoryAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the FollowTrajectoryAction as a dict""" if self.initialDistanceOffset: return {"initialDistanceOffset": str(self.initialDistanceOffset)} else: # If initialDistanceOffset is not set, return empty to stay backward compatible with v1.0 return {}
def get_element(self)
-
returns the elementTree of the FollowTrajectoryAction
Expand source code
def get_element(self): """returns the elementTree of the FollowTrajectoryAction""" element = ET.Element("PrivateAction") routeaction = ET.SubElement(element, "RoutingAction") trajaction = ET.SubElement( routeaction, "FollowTrajectoryAction", attrib=self.get_attributes() ) if self.isVersion(minor=0): trajaction.append(self.trajectory.get_element()) else: trajref = ET.SubElement(trajaction, "TrajectoryRef") trajref.append(self.trajectory.get_element()) trajaction.append(self.timeref.get_element()) ET.SubElement( trajaction, "TrajectoryFollowingMode", attrib={"followingMode": self.following_mode.get_name()}, ) return element
class LateralDistanceAction (entity, distance=None, freespace=True, continuous=True, max_acceleration=None, max_deceleration=None, max_speed=None, coordinate_system=<scenariogeneration.xosc.enumerations._OscEnum object>, displacement=<scenariogeneration.xosc.enumerations._OscEnum object>)
-
Parameters
entity (str): the target name distance (float): the lateral distance to the entity freespace (bool): (True) distance between bounding boxes, (False) distance between ref point Default: True continuous (bool): if the controller tries to keep the relative speed Default: True max_acceleration (float): maximum acceleration allowed Default: None max_deceleration (float): maximum deceleration allowed Default: None max_speed (float): maximum speed allowed Default: None coordinate_system (CoordinateSystem): the coordinate system for the distance calculation Default CoordinateSystem.entity displacement (LateralDisplacement): type of displacement wanted Default LateralDisplacement.any
Attributes
entity (str): the target name distance (float): the lateral distance to the entity freespace (bool): (True) distance between bounding boxes, (False) distance between ref point continuous (bool): if the controller tries to keep the relative speed distance (float): if the distance metric is used timegap (float): if timegap metric is used dynamic_constraint (DynamicsConstraints): Dynamics constraints of the action coordinate_system (CoordinateSystem): the coordinate system for the distance calculation displacement (LateralDisplacement): type of displacement wanted
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 LateralDistanceAction
Parameters
entity (str): the target name distance (float): the lateral distance to the entity freespace (bool): (True) distance between bounding boxes, (False) distance between ref point Default: True continuous (bool): if the controller tries to keep the relative speed Default: True max_acceleration (float): maximum acceleration allowed Default: None max_deceleration (float): maximum deceleration allowed Default: None max_speed (float): maximum speed allowed Default: None coordinate_system (CoordinateSystem): the coordinate system for the distance calculation Default CoordinateSystem.entity displacement (LateralDisplacement): type of displacement wanted Default LateralDisplacement.any
Expand source code
class LateralDistanceAction(_PrivateActionType): """ Parameters ---------- entity (str): the target name distance (float): the lateral distance to the entity freespace (bool): (True) distance between bounding boxes, (False) distance between ref point Default: True continuous (bool): if the controller tries to keep the relative speed Default: True max_acceleration (float): maximum acceleration allowed Default: None max_deceleration (float): maximum deceleration allowed Default: None max_speed (float): maximum speed allowed Default: None coordinate_system (CoordinateSystem): the coordinate system for the distance calculation Default CoordinateSystem.entity displacement (LateralDisplacement): type of displacement wanted Default LateralDisplacement.any Attributes ---------- entity (str): the target name distance (float): the lateral distance to the entity freespace (bool): (True) distance between bounding boxes, (False) distance between ref point continuous (bool): if the controller tries to keep the relative speed distance (float): if the distance metric is used timegap (float): if timegap metric is used dynamic_constraint (DynamicsConstraints): Dynamics constraints of the action coordinate_system (CoordinateSystem): the coordinate system for the distance calculation displacement (LateralDisplacement): type of displacement wanted 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, entity, distance=None, freespace=True, continuous=True, max_acceleration=None, max_deceleration=None, max_speed=None, coordinate_system=CoordinateSystem.entity, displacement=LateralDisplacement.any, ): """initalizes the LateralDistanceAction Parameters ---------- entity (str): the target name distance (float): the lateral distance to the entity freespace (bool): (True) distance between bounding boxes, (False) distance between ref point Default: True continuous (bool): if the controller tries to keep the relative speed Default: True max_acceleration (float): maximum acceleration allowed Default: None max_deceleration (float): maximum deceleration allowed Default: None max_speed (float): maximum speed allowed Default: None coordinate_system (CoordinateSystem): the coordinate system for the distance calculation Default CoordinateSystem.entity displacement (LateralDisplacement): type of displacement wanted Default LateralDisplacement.any """ self.distance = distance self.target = entity self.freespace = convert_bool(freespace) self.continuous = convert_bool(continuous) self.dynamic_constraint = DynamicsConstraints( max_acceleration, max_deceleration, max_speed ) self.coordinate_system = convert_enum(coordinate_system, CoordinateSystem) self.displacement = convert_enum(displacement, LateralDisplacement) def __eq__(self, other): if isinstance(other, LateralDistanceAction): if ( self.get_attributes() == other.get_attributes() and self.dynamic_constraint == other.dynamic_constraint ): return True return False @staticmethod def parse(element): """Parses the xml element of LateralDistanceAction Parameters ---------- element (xml.etree.ElementTree.Element): A LateralDistanceAction element (same as generated by the class itself) Returns ------- ld_action (LateralDistanceAction): a LateralDistanceActionobject """ lda_element = element.find("LateralAction/LateralDistanceAction") continuous = convert_bool(lda_element.attrib["continuous"]) freespace = convert_bool(lda_element.attrib["freespace"]) entity = lda_element.attrib["entityRef"] distance = None if "distance" in lda_element.attrib: distance = lda_element.attrib["distance"] coordinate = None if "coordinateSystem" in lda_element.attrib: coordinate = convert_enum( lda_element.attrib["coordinateSystem"], CoordinateSystem ) displacement = None if "displacement" in lda_element.attrib: displacement = convert_enum( lda_element.attrib["displacement"], LateralDisplacement ) constraints = None max_acc = None max_dec = None max_speed = None if lda_element.find("DynamicConstraints") != None: constraints = DynamicsConstraints.parse( lda_element.find("DynamicConstraints") ) max_acc = constraints.max_acceleration max_dec = constraints.max_deceleration max_speed = constraints.max_speed return LateralDistanceAction( entity, distance, freespace, continuous, max_acc, max_dec, max_speed, coordinate, displacement, ) def get_attributes(self): """returns the attributes of the LateralDistanceAction as a dict""" retdict = {} retdict["entityRef"] = self.target retdict["freespace"] = get_bool_string(self.freespace) retdict["continuous"] = get_bool_string(self.continuous) if self.distance != None: retdict["distance"] = str(self.distance) if not self.isVersion(minor=0): retdict["coordinateSystem"] = self.coordinate_system.get_name() retdict["displacement"] = self.displacement.get_name() return retdict def get_element(self): """returns the elementTree of the LateralDistanceAction""" element = ET.Element("PrivateAction") lataction = ET.SubElement(element, "LateralAction") lateraldistanceaction = ET.SubElement( lataction, "LateralDistanceAction", attrib=self.get_attributes() ) if self.dynamic_constraint.is_filled(): lateraldistanceaction.append(self.dynamic_constraint.get_element()) return element
Ancestors
- scenariogeneration.xosc.actions._PrivateActionType
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of LateralDistanceAction
Parameters
element (xml.etree.ElementTree.Element): A LateralDistanceAction element (same as generated by the class itself)
Returns
ld_action (LateralDistanceAction): a LateralDistanceActionobject
Expand source code
@staticmethod def parse(element): """Parses the xml element of LateralDistanceAction Parameters ---------- element (xml.etree.ElementTree.Element): A LateralDistanceAction element (same as generated by the class itself) Returns ------- ld_action (LateralDistanceAction): a LateralDistanceActionobject """ lda_element = element.find("LateralAction/LateralDistanceAction") continuous = convert_bool(lda_element.attrib["continuous"]) freespace = convert_bool(lda_element.attrib["freespace"]) entity = lda_element.attrib["entityRef"] distance = None if "distance" in lda_element.attrib: distance = lda_element.attrib["distance"] coordinate = None if "coordinateSystem" in lda_element.attrib: coordinate = convert_enum( lda_element.attrib["coordinateSystem"], CoordinateSystem ) displacement = None if "displacement" in lda_element.attrib: displacement = convert_enum( lda_element.attrib["displacement"], LateralDisplacement ) constraints = None max_acc = None max_dec = None max_speed = None if lda_element.find("DynamicConstraints") != None: constraints = DynamicsConstraints.parse( lda_element.find("DynamicConstraints") ) max_acc = constraints.max_acceleration max_dec = constraints.max_deceleration max_speed = constraints.max_speed return LateralDistanceAction( entity, distance, freespace, continuous, max_acc, max_dec, max_speed, coordinate, displacement, )
Methods
def get_attributes(self)
-
returns the attributes of the LateralDistanceAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the LateralDistanceAction as a dict""" retdict = {} retdict["entityRef"] = self.target retdict["freespace"] = get_bool_string(self.freespace) retdict["continuous"] = get_bool_string(self.continuous) if self.distance != None: retdict["distance"] = str(self.distance) if not self.isVersion(minor=0): retdict["coordinateSystem"] = self.coordinate_system.get_name() retdict["displacement"] = self.displacement.get_name() return retdict
def get_element(self)
-
returns the elementTree of the LateralDistanceAction
Expand source code
def get_element(self): """returns the elementTree of the LateralDistanceAction""" element = ET.Element("PrivateAction") lataction = ET.SubElement(element, "LateralAction") lateraldistanceaction = ET.SubElement( lataction, "LateralDistanceAction", attrib=self.get_attributes() ) if self.dynamic_constraint.is_filled(): lateraldistanceaction.append(self.dynamic_constraint.get_element()) return element
class LightStateAction (light_type, mode, transition_time=0, flashing_off_duration=None, flashing_on_duration=None, intensity=None, color=None)
-
LightStateAction creates an AppearanceAction of of the Type LightStateAction
Parameters
light_type (VehicleLightType or UserDefinedLight): mode (LightMode): the new mode of the light transition_time (float): the transition time of the light Default: 0 flashing_off_duration (float): how long the light should be off when LightMode is set to "flashing" flashing_on_duration (float): how long the light should be on when when LightMode is set to "flashing" intensity (float): the luminous intensity of the light color (Color): the color of the light
Attributes
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 the attributes of the class
initalize the LightStateAction
Parameters
light_type (VehicleLightType or UserDefinedLight): mode (LightMode): the new mode of the light transition_time (float): the transition time of the light Default: 0 flashing_off_duration (float): how long the light should be off when LightMode is set to "flashing" flashing_on_duration (float): how long the light should be on when when LightMode is set to "flashing" intensity (float): the luminous intensity of the light color (Color): the color of the light
Expand source code
class LightStateAction(_PrivateActionType): """LightStateAction creates an AppearanceAction of of the Type LightStateAction Parameters ---------- light_type (VehicleLightType or UserDefinedLight): mode (LightMode): the new mode of the light transition_time (float): the transition time of the light Default: 0 flashing_off_duration (float): how long the light should be off when LightMode is set to "flashing" flashing_on_duration (float): how long the light should be on when when LightMode is set to "flashing" intensity (float): the luminous intensity of the light color (Color): the color of the light Attributes ---------- 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 the attributes of the class """ def __init__( self, light_type, mode, transition_time=0, flashing_off_duration=None, flashing_on_duration=None, intensity=None, color=None, ): """initalize the LightStateAction Parameters ---------- light_type (VehicleLightType or UserDefinedLight): mode (LightMode): the new mode of the light transition_time (float): the transition time of the light Default: 0 flashing_off_duration (float): how long the light should be off when LightMode is set to "flashing" flashing_on_duration (float): how long the light should be on when when LightMode is set to "flashing" intensity (float): the luminous intensity of the light color (Color): the color of the light """ try: self.light_type = convert_enum(light_type, VehicleLightType) except Exception as e: if not isinstance(light_type, UserDefinedLight): raise TypeError( "light_type input is not of type VehicleLightType or UserDefinedLight" ) else: self.light_type = light_type self.lightstate = _LightState( mode, color, intensity, flashing_off_duration, flashing_on_duration ) self.transition_time = convert_float(transition_time) def __eq__(self, other): if isinstance(other, LightStateAction): if ( self.get_attributes() == other.get_attributes() and self.light_type == other.light_type and self.lightstate == other.lightstate ): return True return False @staticmethod def parse(element): """Parses the xml element of LightStateAction Parameters ---------- element (xml.etree.ElementTree.Element): A LightStateAction element (same as generated by the class itself) Returns ------- light_state_action (LightStateAction): a LightStateAction object """ light_element = element.find("AppearanceAction/LightStateAction") transition_time = None if "transitionTime" in light_element.attrib: transition_time = convert_float(light_element.attrib["transitionTime"]) light_state = _LightState.parse(light_element.find("LightState")) type_element = light_element.find("LightType") if type_element.find("UserDefinedLight") is not None: light_type = UserDefinedLight.parse(type_element.find("UserDefinedLight")) else: light_type = convert_enum( type_element.find("VehicleLight").attrib["vehicleLightType"], VehicleLightType, ) # create with dummy mode light_state_action = LightStateAction(light_type, LightMode.on, transition_time) light_state_action.lightstate = light_state return light_state_action def get_attributes(self): """returns the attributes of the LightStateAction as a dict""" attr = {"transitionTime": str(self.transition_time)} return attr def get_element(self): """returns the elementTree of the LightStateAction""" element = ET.Element("PrivateAction") appear_element = ET.SubElement(element, "AppearanceAction") light_element = ET.SubElement( appear_element, "LightStateAction", self.get_attributes() ) light_element.append(self.lightstate.get_element()) light_type_element = ET.SubElement(light_element, "LightType") if hasattr(VehicleLightType, str(self.light_type)): ET.SubElement( light_type_element, "VehicleLight", attrib={"vehicleLightType": self.light_type.get_name()}, ) else: light_type_element.append(self.light_type.get_element()) return element
Ancestors
- scenariogeneration.xosc.actions._PrivateActionType
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of LightStateAction
Parameters
element (xml.etree.ElementTree.Element): A LightStateAction element (same as generated by the class itself)
Returns
light_state_action (LightStateAction): a LightStateAction object
Expand source code
@staticmethod def parse(element): """Parses the xml element of LightStateAction Parameters ---------- element (xml.etree.ElementTree.Element): A LightStateAction element (same as generated by the class itself) Returns ------- light_state_action (LightStateAction): a LightStateAction object """ light_element = element.find("AppearanceAction/LightStateAction") transition_time = None if "transitionTime" in light_element.attrib: transition_time = convert_float(light_element.attrib["transitionTime"]) light_state = _LightState.parse(light_element.find("LightState")) type_element = light_element.find("LightType") if type_element.find("UserDefinedLight") is not None: light_type = UserDefinedLight.parse(type_element.find("UserDefinedLight")) else: light_type = convert_enum( type_element.find("VehicleLight").attrib["vehicleLightType"], VehicleLightType, ) # create with dummy mode light_state_action = LightStateAction(light_type, LightMode.on, transition_time) light_state_action.lightstate = light_state return light_state_action
Methods
def get_attributes(self)
-
returns the attributes of the LightStateAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the LightStateAction as a dict""" attr = {"transitionTime": str(self.transition_time)} return attr
def get_element(self)
-
returns the elementTree of the LightStateAction
Expand source code
def get_element(self): """returns the elementTree of the LightStateAction""" element = ET.Element("PrivateAction") appear_element = ET.SubElement(element, "AppearanceAction") light_element = ET.SubElement( appear_element, "LightStateAction", self.get_attributes() ) light_element.append(self.lightstate.get_element()) light_type_element = ET.SubElement(light_element, "LightType") if hasattr(VehicleLightType, str(self.light_type)): ET.SubElement( light_type_element, "VehicleLight", attrib={"vehicleLightType": self.light_type.get_name()}, ) else: light_type_element.append(self.light_type.get_element()) return element
class LongitudinalDistanceAction (entity, freespace=True, continuous=True, max_acceleration=None, max_deceleration=None, max_speed=None, distance=None, timeGap=None, coordinate_system=<scenariogeneration.xosc.enumerations._OscEnum object>, displacement=<scenariogeneration.xosc.enumerations._OscEnum object>)
-
The LongitudinalAction creates a LongitudinalAction of type LongitudinalAction with a distance target
Parameters
distance (float): distance to the entity entity (str): the target name freespace (bool): (True) distance between bounding boxes, (False) distance between ref point Default: True continuous (bool): if the controller tries to keep the relative speed Default: True max_acceleration (float): maximum acceleration allowed Default: None max_deceleration (float): maximum deceleration allowed Default: None max_speed (float): maximum speed allowed Default: None coordinate_system (CoordinateSystem): the coordinate system for the distance calculation Default CoordinateSystem.entity displacement (LongitudinalDisplacement): type of displacement wanted Default LongitudinalDisplacement.any
Attributes
entity (str): the target name freespace (bool): (True) distance between bounding boxes, (False) distance between ref point continuous (bool): if the controller tries to keep the relative speed distance (float): the distance to the entity dynamic_constraint (DynamicsConstraints): Dynamics constraints of the action coordinate_system (CoordinateSystem): the coordinate system for the distance calculation displacement (LongitudinalDisplacement): type of displacement wanted
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
initalize the LongitudinalDistanceAction
Parameters
distance (float): distance to the entity timegap (float): time to the target entity (str): the target name freespace (bool): (True) distance between bounding boxes, (False) distance between ref point Default: True continuous (bool): if the controller tries to keep the relative speed Default: True max_acceleration (float): maximum acceleration allowed Default: None max_deceleration (float): maximum deceleration allowed Default: None max_speed (float): maximum speed allowed Default: None coordinate_system (CoordinateSystem): the coordinate system for the distance calculation Default CoordinateSystem.entity displacement (LongitudinalDisplacement): type of displacement wanted Default LongitudinalDisplacement.any
Expand source code
class LongitudinalDistanceAction(_PrivateActionType): """The LongitudinalAction creates a LongitudinalAction of type LongitudinalAction with a distance target Parameters ---------- distance (float): distance to the entity entity (str): the target name freespace (bool): (True) distance between bounding boxes, (False) distance between ref point Default: True continuous (bool): if the controller tries to keep the relative speed Default: True max_acceleration (float): maximum acceleration allowed Default: None max_deceleration (float): maximum deceleration allowed Default: None max_speed (float): maximum speed allowed Default: None coordinate_system (CoordinateSystem): the coordinate system for the distance calculation Default CoordinateSystem.entity displacement (LongitudinalDisplacement): type of displacement wanted Default LongitudinalDisplacement.any Attributes ---------- entity (str): the target name freespace (bool): (True) distance between bounding boxes, (False) distance between ref point continuous (bool): if the controller tries to keep the relative speed distance (float): the distance to the entity dynamic_constraint (DynamicsConstraints): Dynamics constraints of the action coordinate_system (CoordinateSystem): the coordinate system for the distance calculation displacement (LongitudinalDisplacement): type of displacement wanted 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, entity, freespace=True, continuous=True, max_acceleration=None, max_deceleration=None, max_speed=None, distance=None, timeGap=None, coordinate_system=CoordinateSystem.entity, displacement=LongitudinalDisplacement.any, ): """initalize the LongitudinalDistanceAction Parameters ---------- distance (float): distance to the entity timegap (float): time to the target entity (str): the target name freespace (bool): (True) distance between bounding boxes, (False) distance between ref point Default: True continuous (bool): if the controller tries to keep the relative speed Default: True max_acceleration (float): maximum acceleration allowed Default: None max_deceleration (float): maximum deceleration allowed Default: None max_speed (float): maximum speed allowed Default: None coordinate_system (CoordinateSystem): the coordinate system for the distance calculation Default CoordinateSystem.entity displacement (LongitudinalDisplacement): type of displacement wanted Default LongitudinalDisplacement.any """ self.target = entity self.freespace = convert_bool(freespace) self.continuous = convert_bool(continuous) self.dynamic_constraint = DynamicsConstraints( max_acceleration, max_deceleration, max_speed ) if distance is not None and timeGap is not None: raise ToManyOptionalArguments( "Not both of distance and timeGap can be used." ) if distance is None and timeGap is None: raise NotEnoughInputArguments("Either ds or dsLane is needed as input.") self.distance = convert_float(distance) self.timeGap = convert_float(timeGap) self.coordinate_system = convert_enum(coordinate_system, CoordinateSystem) self.displacement = convert_enum(displacement, LongitudinalDisplacement) def __eq__(self, other): if isinstance(other, LongitudinalDistanceAction): if ( self.get_attributes() == other.get_attributes() and self.dynamic_constraint == other.dynamic_constraint ): return True return False @staticmethod def parse(element): """Parses the xml element of LongitudinalAction Parameters ---------- element (xml.etree.ElementTree.Element): A LongitudinalDistanceAction element (same as generated by the class itself) Returns ------- ld_action (LongitudinalDistanceAction): a LongitudinalDistanceAction object """ lda_element = element.find("LongitudinalAction/LongitudinalDistanceAction") entity = lda_element.attrib["entityRef"] freespace = convert_bool(lda_element.attrib["freespace"]) continuous = convert_bool(lda_element.attrib["continuous"]) distance = None timeGap = None if "distance" in lda_element.attrib: distance = convert_float(lda_element.attrib["distance"]) if "timeGap" in lda_element.attrib: timeGap = convert_float(lda_element.attrib["timeGap"]) coordinate_system = CoordinateSystem.entity if "coordinateSystem" in lda_element.attrib: coordinate_system = convert_enum( lda_element.attrib["coordinateSystem"], CoordinateSystem, False ) displacement = LongitudinalDisplacement.any if "displacement" in lda_element.attrib: displacement = convert_enum( lda_element.attrib["displacement"], LongitudinalDisplacement, False ) max_acceleration = None max_deceleration = None max_speed = None constraints = None if lda_element.find("DynamicConstraints") != None: constraints = DynamicsConstraints.parse( lda_element.find("DynamicConstraints") ) max_acceleration = constraints.max_acceleration max_deceleration = constraints.max_deceleration max_speed = constraints.max_speed return LongitudinalDistanceAction( entity, freespace, continuous, max_acceleration, max_deceleration, max_speed, distance, timeGap, coordinate_system, displacement, ) def get_attributes(self): """returns the attributes of the LongitudinalDistanceAction as a dict""" retdict = {} retdict["entityRef"] = self.target retdict["freespace"] = get_bool_string(self.freespace) retdict["continuous"] = get_bool_string(self.continuous) if self.distance != None: retdict["distance"] = str(self.distance) if self.timeGap != None: retdict["timeGap"] = str(self.timeGap) if not self.isVersion(minor=0): retdict["coordinateSystem"] = self.coordinate_system.get_name() retdict["displacement"] = self.displacement.get_name() return retdict def get_element(self): """returns the elementTree of the LongitudinalDistanceAction""" element = ET.Element("PrivateAction") longact = ET.SubElement(element, "LongitudinalAction") longdistaction = ET.SubElement( longact, "LongitudinalDistanceAction", attrib=self.get_attributes() ) if self.dynamic_constraint.is_filled(): longdistaction.append(self.dynamic_constraint.get_element()) return element
Ancestors
- scenariogeneration.xosc.actions._PrivateActionType
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of LongitudinalAction
Parameters
element (xml.etree.ElementTree.Element): A LongitudinalDistanceAction element (same as generated by the class itself)
Returns
ld_action (LongitudinalDistanceAction): a LongitudinalDistanceAction object
Expand source code
@staticmethod def parse(element): """Parses the xml element of LongitudinalAction Parameters ---------- element (xml.etree.ElementTree.Element): A LongitudinalDistanceAction element (same as generated by the class itself) Returns ------- ld_action (LongitudinalDistanceAction): a LongitudinalDistanceAction object """ lda_element = element.find("LongitudinalAction/LongitudinalDistanceAction") entity = lda_element.attrib["entityRef"] freespace = convert_bool(lda_element.attrib["freespace"]) continuous = convert_bool(lda_element.attrib["continuous"]) distance = None timeGap = None if "distance" in lda_element.attrib: distance = convert_float(lda_element.attrib["distance"]) if "timeGap" in lda_element.attrib: timeGap = convert_float(lda_element.attrib["timeGap"]) coordinate_system = CoordinateSystem.entity if "coordinateSystem" in lda_element.attrib: coordinate_system = convert_enum( lda_element.attrib["coordinateSystem"], CoordinateSystem, False ) displacement = LongitudinalDisplacement.any if "displacement" in lda_element.attrib: displacement = convert_enum( lda_element.attrib["displacement"], LongitudinalDisplacement, False ) max_acceleration = None max_deceleration = None max_speed = None constraints = None if lda_element.find("DynamicConstraints") != None: constraints = DynamicsConstraints.parse( lda_element.find("DynamicConstraints") ) max_acceleration = constraints.max_acceleration max_deceleration = constraints.max_deceleration max_speed = constraints.max_speed return LongitudinalDistanceAction( entity, freespace, continuous, max_acceleration, max_deceleration, max_speed, distance, timeGap, coordinate_system, displacement, )
Methods
def get_attributes(self)
-
returns the attributes of the LongitudinalDistanceAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the LongitudinalDistanceAction as a dict""" retdict = {} retdict["entityRef"] = self.target retdict["freespace"] = get_bool_string(self.freespace) retdict["continuous"] = get_bool_string(self.continuous) if self.distance != None: retdict["distance"] = str(self.distance) if self.timeGap != None: retdict["timeGap"] = str(self.timeGap) if not self.isVersion(minor=0): retdict["coordinateSystem"] = self.coordinate_system.get_name() retdict["displacement"] = self.displacement.get_name() return retdict
def get_element(self)
-
returns the elementTree of the LongitudinalDistanceAction
Expand source code
def get_element(self): """returns the elementTree of the LongitudinalDistanceAction""" element = ET.Element("PrivateAction") longact = ET.SubElement(element, "LongitudinalAction") longdistaction = ET.SubElement( longact, "LongitudinalDistanceAction", attrib=self.get_attributes() ) if self.dynamic_constraint.is_filled(): longdistaction.append(self.dynamic_constraint.get_element()) return element
class OverrideControllerValueAction
-
OverrideControllerValueAction creates a OverrideControllerValueAction action of openscenario which can include, throttle, brake, clutch, steeringwheel, gear, parkingbrake NOTE: this implementation is compatible with osc v.1.1 where all attributes don't have to be set.
Attributes
throttle_active (bool): if the throttle is active Default: None (will not be written) throttle_value (float): value of the throttle brake_active (bool): if the brake is active Default: None (will not be written) brake_value (float): value of the brake clutch_active (bool): if the clutch is active Default: None (will not be written) clutch_value (float): value of the clutch steeringwheel_active (bool): if the steeringwheel is active Default: None (will not be written) steeringwheel_value (float): value of the steeringwheel gear_active (bool): if the gear is active Default: None (will not be written) gear_value (float): value of the gear parkingbrake_active (bool): if the parkingbrake is active Default: None (will not be written) parkingbrake_value (float): value of the parkingbrake
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 the attributes of the class set_throttle(active,value) sets the throttle value set_brake(active,value) sets the brake value set_steeringwheel(active,value) sets the steeringwheel value set_clutch(active,value) sets the clutch value set_gear(active,value) sets the gear value set_parkingbrake(active,value) sets the parkingbrake value
Expand source code
class OverrideControllerValueAction(_PrivateActionType): """OverrideControllerValueAction creates a OverrideControllerValueAction action of openscenario which can include, throttle, brake, clutch, steeringwheel, gear, parkingbrake NOTE: this implementation is compatible with osc v.1.1 where all attributes don't have to be set. Attributes ---------- throttle_active (bool): if the throttle is active Default: None (will not be written) throttle_value (float): value of the throttle brake_active (bool): if the brake is active Default: None (will not be written) brake_value (float): value of the brake clutch_active (bool): if the clutch is active Default: None (will not be written) clutch_value (float): value of the clutch steeringwheel_active (bool): if the steeringwheel is active Default: None (will not be written) steeringwheel_value (float): value of the steeringwheel gear_active (bool): if the gear is active Default: None (will not be written) gear_value (float): value of the gear parkingbrake_active (bool): if the parkingbrake is active Default: None (will not be written) parkingbrake_value (float): value of the parkingbrake 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 the attributes of the class set_throttle(active,value) sets the throttle value set_brake(active,value) sets the brake value set_steeringwheel(active,value) sets the steeringwheel value set_clutch(active,value) sets the clutch value set_gear(active,value) sets the gear value set_parkingbrake(active,value) sets the parkingbrake value """ def __init__(self): self.throttle_active = None self.throttle_value = convert_float(0) self.throttle_rate = None self.brake_active = None self.brake_value = convert_float(0) self.brake_rate = None self.brake_force = False self.clutch_active = None self.clutch_value = convert_float(0) self.clutch_rate = None self.steeringwheel_active = None self.steeringwheel_value = convert_float(0) self.steeringwheel_rate = None self.steeringwheel_torque = None self.gear_active = None self.gear_value = convert_float(0) self._gear_maunal = True self.parkingbrake_active = None self.parkingbrake_value = convert_float(0) self.parkingbrake_rate = None self.parkingbrake_force = False self._used_by_parent = False def __eq__(self, other): if isinstance(other, OverrideControllerValueAction): if ( self.throttle_value == other.throttle_value and self.throttle_value == other.throttle_value and self.throttle_rate == other.throttle_rate and self.brake_active == other.brake_active and self.brake_value == other.brake_value and self.brake_rate == other.brake_rate and self.brake_force == other.brake_force and self.clutch_active == other.clutch_active and self.clutch_value == other.clutch_value and self.clutch_rate == other.clutch_rate and self.steeringwheel_active == other.steeringwheel_active and self.steeringwheel_value == other.steeringwheel_value and self.steeringwheel_rate == other.steeringwheel_rate and self.steeringwheel_torque == other.steeringwheel_torque and self.gear_active == other.gear_active and self.gear_value == other.gear_value and self.parkingbrake_active == other.parkingbrake_active and self.parkingbrake_value == other.parkingbrake_value and self.parkingbrake_force == other.parkingbrake_force and self.parkingbrake_rate == other.parkingbrake_rate ): return True elif isinstance(other, ControllerAction): if ( self.throttle_value == other.overrideControllerValueAction.throttle_value and self.throttle_value == other.overrideControllerValueAction.throttle_value and self.throttle_rate == other.overrideControllerValueAction.throttle_rate and self.brake_active == other.overrideControllerValueAction.brake_active and self.brake_value == other.overrideControllerValueAction.brake_value and self.brake_rate == other.overrideControllerValueAction.brake_rate and self.brake_force == other.overrideControllerValueAction.brake_force and self.clutch_active == other.overrideControllerValueAction.clutch_active and self.clutch_value == other.overrideControllerValueAction.clutch_value and self.clutch_rate == other.overrideControllerValueAction.clutch_rate and self.steeringwheel_active == other.overrideControllerValueAction.steeringwheel_active and self.steeringwheel_value == other.overrideControllerValueAction.steeringwheel_value and self.steeringwheel_rate == other.overrideControllerValueAction.steeringwheel_rate and self.steeringwheel_torque == other.overrideControllerValueAction.steeringwheel_torque and self.gear_active == other.overrideControllerValueAction.gear_active and self.gear_value == other.overrideControllerValueAction.gear_value and self.parkingbrake_active == other.overrideControllerValueAction.parkingbrake_active and self.parkingbrake_value == other.overrideControllerValueAction.parkingbrake_value and self.parkingbrake_force == other.overrideControllerValueAction.parkingbrake_force and self.parkingbrake_rate == other.overrideControllerValueAction.parkingbrake_rate ): return True return False @staticmethod def parse(element): """Parses the xml element of OverrideControllerValueAction Parameters ---------- element (xml.etree.ElementTree.Element): A OverrideControllerValueAction element (same as generated by the class itself) Returns ------- ocv_action (OverrideControllerValueAction): a OverrideControllerValueAction object """ ocv_action = OverrideControllerValueAction() ocva_element = element.find("ControllerAction/OverrideControllerValueAction") ocv_action.throttle_active = None ocv_action.throttle_value = convert_float(0) if ocva_element.find("Throttle") != None: throttle_element = ocva_element.find("Throttle") ocv_action.throttle_active = convert_bool(throttle_element.attrib["active"]) ocv_action.throttle_value = convert_float(throttle_element.attrib["value"]) if "maxRate" in throttle_element.attrib: ocv_action.throttle_rate = convert_float( throttle_element.attrib["maxRate"] ) ocv_action.brake_active = None ocv_action.brake_value = convert_float(0) if ocva_element.find("Brake") != None: brake_element = ocva_element.find("Brake") ocv_action.brake_active = convert_bool(brake_element.attrib["active"]) if "value" in brake_element.attrib: ocv_action.brake_value = convert_float(brake_element.attrib["value"]) else: if brake_element.find("BrakePercent") is not None: brake_input_element = brake_element.find("BrakePercent") ocv_action.brake_force = False elif brake_element.find("BrakeForce") is not None: brake_input_element = brake_element.find("BrakeForce") ocv_action.brake_force = True else: raise ValueError("No value found while parsing brake.") ocv_action.brake_value = convert_float( brake_input_element.attrib["value"] ) if "maxRate" in brake_input_element.attrib: ocv_action.brake_rate = brake_input_element.attrib["maxRate"] ocv_action.clutch_active = None ocv_action.clutch_value = convert_float(0) if ocva_element.find("Clutch") != None: cluth_element = ocva_element.find("Clutch") ocv_action.clutch_active = convert_bool(cluth_element.attrib["active"]) ocv_action.clutch_value = convert_float(cluth_element.attrib["value"]) if "maxRate" in cluth_element.attrib: ocv_action.clutch_rate = convert_float(cluth_element.attrib["maxRate"]) ocv_action.parkingbrake_active = None ocv_action.parkingbrake_value = convert_float(0) if ocva_element.find("ParkingBrake") != None: parkingbrake_element = ocva_element.find("ParkingBrake") ocv_action.parkingbrake_active = convert_bool( parkingbrake_element.attrib["active"] ) if "value" in parkingbrake_element.attrib: ocv_action.parkingbrake_value = convert_float( parkingbrake_element.attrib["value"] ) else: if parkingbrake_element.find("BrakePercent") is not None: parkingbrake_input_element = parkingbrake_element.find( "BrakePercent" ) ocv_action.parkingbrake_force = False elif parkingbrake_element.find("BrakeForce") is not None: parkingbrake_input_element = parkingbrake_element.find("BrakeForce") ocv_action.parkingbrake_force = True else: raise ValueError("No value found while parsing brake.") ocv_action.parkingbrake_value = convert_float( parkingbrake_input_element.attrib["value"] ) if "maxRate" in parkingbrake_input_element.attrib: ocv_action.parkingbrake_rate = convert_float( parkingbrake_input_element.attrib["maxRate"] ) ocv_action.steeringwheel_active = None ocv_action.steeringwheel_value = convert_float(0) if ocva_element.find("SteeringWheel") != None: steeringwheel_element = ocva_element.find("SteeringWheel") ocv_action.steeringwheel_active = convert_bool( steeringwheel_element.attrib["active"] ) ocv_action.steeringwheel_value = convert_float( steeringwheel_element.attrib["value"] ) if "maxRate" in steeringwheel_element.attrib: ocv_action.steeringwheel_rate = convert_float( steeringwheel_element.attrib["maxRate"] ) if "maxTorque" in steeringwheel_element.attrib: ocv_action.steeringwheel_torque = convert_float( steeringwheel_element.attrib["maxTorque"] ) ocv_action.gear_active = None ocv_action.gear_value = convert_float(0) if ocva_element.find("Gear") != None: gear_element = ocva_element.find("Gear") ocv_action.gear_active = convert_bool(gear_element.attrib["active"]) if "number" in gear_element.attrib: ocv_action.gear_value = convert_float(gear_element.attrib["number"]) elif gear_element.find("AutomaticGear") is not None: ocv_action.gear_value = getattr( AutomaticGearType, gear_element.find("AutomaticGear").attrib["gear"], ) elif gear_element.find("ManualGear") is not None: ocv_action.gear_value = convert_float( gear_element.find("ManualGear").attrib["number"] ) else: raise ValueError("no gear number found in OverrideGearAction") return ocv_action def set_clutch(self, active, value=0, rate=None): """Sets the clutch value Parameters ---------- active (bool): if the clutch should be overridden value (float): value of the clutch Default: 0 rate (float): rate of the change (Valid from OpenSCENARIO V1.2) Default: None """ self.clutch_active = convert_bool(active) self.clutch_value = convert_float(value) self.clutch_rate = rate def set_brake(self, active, value=0, rate=None, interpret_as_force=False): """Sets the brake value Parameters ---------- active (bool): if the brake should be overridden value (float): value of the brake Default: 0 rate (float): the rate of the change (Valid from OpenSCENARIO V1.2) Default: None interpret_as_force (bool): interpret the value as force instead of percent (Valid from OpenSCENARIO V1.2) Default: None """ self.brake_active = convert_bool(active) self.brake_value = convert_float(value) self.brake_rate = rate self.brake_force = interpret_as_force def set_throttle(self, active, value=0, rate=None): """Sets the throttle value Parameters ---------- active (bool): if the throttle should be overridden value (float): value of the throttle Default: 0 rate (float): rate of the change (Valid from OpenSCENARIO V1.2) Default: None """ self.throttle_active = convert_bool(active) self.throttle_value = convert_float(value) self.throttle_rate = rate def set_steeringwheel(self, active, value=0, rate=None, torque=None): """Sets the steeringwheel value Parameters ---------- active (bool): if the steeringwheel should be overridden value (float): value of the steeringwheel Default: 0 rate (float): the Max Rate of the change (Valid from OpenSCENARIO V1.2) Default: None torque (float): the Max Torque of the change (Valid from OpenSCENARIO V1.2) Default: None """ self.steeringwheel_active = convert_bool(active) self.steeringwheel_value = convert_float(value) self.steeringwheel_rate = convert_float(rate) self.steeringwheel_torque = convert_float(torque) def set_parkingbrake(self, active, value=0, rate=None, interpret_as_force=False): """Sets the parkingbrake value Parameters ---------- active (bool): if the parkingbrake should be overridden value (float): value of the parkingbrake Default: 0 rate (float): the rate of the change (Valid from OpenSCENARIO V1.2) Default: None interpret_as_force (bool): interpret the value as force instead of percent (Valid from OpenSCENARIO V1.2) Default: None """ self.parkingbrake_active = convert_bool(active) self.parkingbrake_value = convert_float(value) self.parkingbrake_rate = rate self.parkingbrake_force = interpret_as_force def set_gear(self, active, value=0): """Sets the gear value Parameters ---------- active (bool): if the gear should be overridden value (float/AutomaticGearType): value of the gear Default: 0 """ self.gear_active = convert_bool(active) if hasattr(AutomaticGearType, str(value)): self.gear_value = value self._gear_maunal = False else: self.gear_value = convert_float(value) self._gear_maunal = True def get_element(self): """returns the elementTree of the OverrideControllerValueAction""" if self.isVersion(minor=0) and not self._used_by_parent: raise OpenSCENARIOVersionError( "OverrideControllerValueAction cannot be used alone in OSC 1.0, please add it to a ControllerAction" ) element = ET.Element("PrivateAction") controlleraction = ET.SubElement(element, "ControllerAction") overrideaction = ET.SubElement( controlleraction, "OverrideControllerValueAction" ) if ( self.throttle_active == None and self.brake_active == None and self.clutch_active == None and self.parkingbrake_active == None and self.steeringwheel_active == None and self.gear_active == None ): raise NoActionsDefinedError( "No actions were added to the OverrideControllerValueAction" ) if self.throttle_active != None: throttle_dict = { "active": get_bool_string(self.throttle_active), "value": str(self.throttle_value), } if self.throttle_rate is not None and self.isVersion(minor=2): throttle_dict["maxRate"] = str(self.throttle_rate) elif self.throttle_rate is not None and not self.isVersion(minor=2): raise OpenSCENARIOVersionError( "maxRate was introduced in OpenSCENARIO v1.2" ) ET.SubElement( overrideaction, "Throttle", throttle_dict, ) if self.brake_active != None: if not self.isVersion(minor=2): ET.SubElement( overrideaction, "Brake", { "active": get_bool_string(self.brake_active), "value": str(self.brake_value), }, ) else: override_brake = ET.SubElement( overrideaction, "Brake", {"active": get_bool_string(self.brake_active)}, ) brake_dict = {"value": str(self.brake_value)} if self.brake_rate is not None: brake_dict["maxRate"] = str(self.brake_rate) if self.brake_force: ET.SubElement(override_brake, "BrakeForce", attrib=brake_dict) else: ET.SubElement(override_brake, "BrakePercent", attrib=brake_dict) if self.clutch_active != None: if self.throttle_rate is not None and self.isVersion(minor=2): throttle_dict["maxRate"] = str(self.throttle_rate) elif self.throttle_rate is not None and not self.isVersion(minor=2): raise OpenSCENARIOVersionError( "maxRate was introduced in OpenSCENARIO v1.2" ) clutch_dict = { "active": get_bool_string(self.clutch_active), "value": str(self.clutch_value), } if self.clutch_rate is not None and self.isVersion(minor=2): clutch_dict["maxRate"] = str(self.clutch_rate) elif self.clutch_rate is not None and not self.isVersion(minor=2): raise OpenSCENARIOVersionError( "maxRate was introduced in OpenSCENARIO v1.2" ) ET.SubElement( overrideaction, "Clutch", clutch_dict, ) if self.parkingbrake_active != None: if not self.isVersion(minor=2): ET.SubElement( overrideaction, "ParkingBrake", { "active": get_bool_string(self.parkingbrake_active), "value": str(self.parkingbrake_value), }, ) else: override_parking = ET.SubElement( overrideaction, "ParkingBrake", {"active": get_bool_string(self.parkingbrake_active)}, ) parkingbrake_dict = {"value": str(self.parkingbrake_value)} if self.parkingbrake_rate is not None: parkingbrake_dict["maxRate"] = str(self.parkingbrake_rate) if self.parkingbrake_force: ET.SubElement( override_parking, "BrakeForce", attrib=parkingbrake_dict ) else: ET.SubElement( override_parking, "BrakePercent", attrib=parkingbrake_dict ) if self.steeringwheel_active != None: steering_dict = { "active": get_bool_string(self.steeringwheel_active), "value": str(self.steeringwheel_value), } if self.steeringwheel_torque is not None: if self.isVersion(minor=2): steering_dict["maxTorque"] = str(self.steeringwheel_torque) else: raise OpenSCENARIOVersionError( "maxTorque was introduced in OpenSCENARIO v1.2" ) if self.steeringwheel_rate is not None: if self.isVersion(minor=2): steering_dict["maxRate"] = str(self.steeringwheel_rate) else: raise OpenSCENARIOVersionError( "maxRate was introduced in OpenSCENARIO v1.2" ) ET.SubElement( overrideaction, "SteeringWheel", steering_dict, ) if self.gear_active != None: if not self.isVersion(minor=2): ET.SubElement( overrideaction, "Gear", { "active": get_bool_string(self.gear_active), "number": str(self.gear_value), }, ) else: override_gear_action = ET.SubElement( overrideaction, "Gear", { "active": get_bool_string(self.gear_active), }, ) if self._gear_maunal: ET.SubElement( override_gear_action, "ManualGear", {"number": str(int(self.gear_value))}, ) else: ET.SubElement( override_gear_action, "AutomaticGear", {"gear": self.gear_value.get_name()}, ) return element
Ancestors
- scenariogeneration.xosc.actions._PrivateActionType
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of OverrideControllerValueAction
Parameters
element (xml.etree.ElementTree.Element): A OverrideControllerValueAction element (same as generated by the class itself)
Returns
ocv_action (OverrideControllerValueAction): a OverrideControllerValueAction object
Expand source code
@staticmethod def parse(element): """Parses the xml element of OverrideControllerValueAction Parameters ---------- element (xml.etree.ElementTree.Element): A OverrideControllerValueAction element (same as generated by the class itself) Returns ------- ocv_action (OverrideControllerValueAction): a OverrideControllerValueAction object """ ocv_action = OverrideControllerValueAction() ocva_element = element.find("ControllerAction/OverrideControllerValueAction") ocv_action.throttle_active = None ocv_action.throttle_value = convert_float(0) if ocva_element.find("Throttle") != None: throttle_element = ocva_element.find("Throttle") ocv_action.throttle_active = convert_bool(throttle_element.attrib["active"]) ocv_action.throttle_value = convert_float(throttle_element.attrib["value"]) if "maxRate" in throttle_element.attrib: ocv_action.throttle_rate = convert_float( throttle_element.attrib["maxRate"] ) ocv_action.brake_active = None ocv_action.brake_value = convert_float(0) if ocva_element.find("Brake") != None: brake_element = ocva_element.find("Brake") ocv_action.brake_active = convert_bool(brake_element.attrib["active"]) if "value" in brake_element.attrib: ocv_action.brake_value = convert_float(brake_element.attrib["value"]) else: if brake_element.find("BrakePercent") is not None: brake_input_element = brake_element.find("BrakePercent") ocv_action.brake_force = False elif brake_element.find("BrakeForce") is not None: brake_input_element = brake_element.find("BrakeForce") ocv_action.brake_force = True else: raise ValueError("No value found while parsing brake.") ocv_action.brake_value = convert_float( brake_input_element.attrib["value"] ) if "maxRate" in brake_input_element.attrib: ocv_action.brake_rate = brake_input_element.attrib["maxRate"] ocv_action.clutch_active = None ocv_action.clutch_value = convert_float(0) if ocva_element.find("Clutch") != None: cluth_element = ocva_element.find("Clutch") ocv_action.clutch_active = convert_bool(cluth_element.attrib["active"]) ocv_action.clutch_value = convert_float(cluth_element.attrib["value"]) if "maxRate" in cluth_element.attrib: ocv_action.clutch_rate = convert_float(cluth_element.attrib["maxRate"]) ocv_action.parkingbrake_active = None ocv_action.parkingbrake_value = convert_float(0) if ocva_element.find("ParkingBrake") != None: parkingbrake_element = ocva_element.find("ParkingBrake") ocv_action.parkingbrake_active = convert_bool( parkingbrake_element.attrib["active"] ) if "value" in parkingbrake_element.attrib: ocv_action.parkingbrake_value = convert_float( parkingbrake_element.attrib["value"] ) else: if parkingbrake_element.find("BrakePercent") is not None: parkingbrake_input_element = parkingbrake_element.find( "BrakePercent" ) ocv_action.parkingbrake_force = False elif parkingbrake_element.find("BrakeForce") is not None: parkingbrake_input_element = parkingbrake_element.find("BrakeForce") ocv_action.parkingbrake_force = True else: raise ValueError("No value found while parsing brake.") ocv_action.parkingbrake_value = convert_float( parkingbrake_input_element.attrib["value"] ) if "maxRate" in parkingbrake_input_element.attrib: ocv_action.parkingbrake_rate = convert_float( parkingbrake_input_element.attrib["maxRate"] ) ocv_action.steeringwheel_active = None ocv_action.steeringwheel_value = convert_float(0) if ocva_element.find("SteeringWheel") != None: steeringwheel_element = ocva_element.find("SteeringWheel") ocv_action.steeringwheel_active = convert_bool( steeringwheel_element.attrib["active"] ) ocv_action.steeringwheel_value = convert_float( steeringwheel_element.attrib["value"] ) if "maxRate" in steeringwheel_element.attrib: ocv_action.steeringwheel_rate = convert_float( steeringwheel_element.attrib["maxRate"] ) if "maxTorque" in steeringwheel_element.attrib: ocv_action.steeringwheel_torque = convert_float( steeringwheel_element.attrib["maxTorque"] ) ocv_action.gear_active = None ocv_action.gear_value = convert_float(0) if ocva_element.find("Gear") != None: gear_element = ocva_element.find("Gear") ocv_action.gear_active = convert_bool(gear_element.attrib["active"]) if "number" in gear_element.attrib: ocv_action.gear_value = convert_float(gear_element.attrib["number"]) elif gear_element.find("AutomaticGear") is not None: ocv_action.gear_value = getattr( AutomaticGearType, gear_element.find("AutomaticGear").attrib["gear"], ) elif gear_element.find("ManualGear") is not None: ocv_action.gear_value = convert_float( gear_element.find("ManualGear").attrib["number"] ) else: raise ValueError("no gear number found in OverrideGearAction") return ocv_action
Methods
def get_element(self)
-
returns the elementTree of the OverrideControllerValueAction
Expand source code
def get_element(self): """returns the elementTree of the OverrideControllerValueAction""" if self.isVersion(minor=0) and not self._used_by_parent: raise OpenSCENARIOVersionError( "OverrideControllerValueAction cannot be used alone in OSC 1.0, please add it to a ControllerAction" ) element = ET.Element("PrivateAction") controlleraction = ET.SubElement(element, "ControllerAction") overrideaction = ET.SubElement( controlleraction, "OverrideControllerValueAction" ) if ( self.throttle_active == None and self.brake_active == None and self.clutch_active == None and self.parkingbrake_active == None and self.steeringwheel_active == None and self.gear_active == None ): raise NoActionsDefinedError( "No actions were added to the OverrideControllerValueAction" ) if self.throttle_active != None: throttle_dict = { "active": get_bool_string(self.throttle_active), "value": str(self.throttle_value), } if self.throttle_rate is not None and self.isVersion(minor=2): throttle_dict["maxRate"] = str(self.throttle_rate) elif self.throttle_rate is not None and not self.isVersion(minor=2): raise OpenSCENARIOVersionError( "maxRate was introduced in OpenSCENARIO v1.2" ) ET.SubElement( overrideaction, "Throttle", throttle_dict, ) if self.brake_active != None: if not self.isVersion(minor=2): ET.SubElement( overrideaction, "Brake", { "active": get_bool_string(self.brake_active), "value": str(self.brake_value), }, ) else: override_brake = ET.SubElement( overrideaction, "Brake", {"active": get_bool_string(self.brake_active)}, ) brake_dict = {"value": str(self.brake_value)} if self.brake_rate is not None: brake_dict["maxRate"] = str(self.brake_rate) if self.brake_force: ET.SubElement(override_brake, "BrakeForce", attrib=brake_dict) else: ET.SubElement(override_brake, "BrakePercent", attrib=brake_dict) if self.clutch_active != None: if self.throttle_rate is not None and self.isVersion(minor=2): throttle_dict["maxRate"] = str(self.throttle_rate) elif self.throttle_rate is not None and not self.isVersion(minor=2): raise OpenSCENARIOVersionError( "maxRate was introduced in OpenSCENARIO v1.2" ) clutch_dict = { "active": get_bool_string(self.clutch_active), "value": str(self.clutch_value), } if self.clutch_rate is not None and self.isVersion(minor=2): clutch_dict["maxRate"] = str(self.clutch_rate) elif self.clutch_rate is not None and not self.isVersion(minor=2): raise OpenSCENARIOVersionError( "maxRate was introduced in OpenSCENARIO v1.2" ) ET.SubElement( overrideaction, "Clutch", clutch_dict, ) if self.parkingbrake_active != None: if not self.isVersion(minor=2): ET.SubElement( overrideaction, "ParkingBrake", { "active": get_bool_string(self.parkingbrake_active), "value": str(self.parkingbrake_value), }, ) else: override_parking = ET.SubElement( overrideaction, "ParkingBrake", {"active": get_bool_string(self.parkingbrake_active)}, ) parkingbrake_dict = {"value": str(self.parkingbrake_value)} if self.parkingbrake_rate is not None: parkingbrake_dict["maxRate"] = str(self.parkingbrake_rate) if self.parkingbrake_force: ET.SubElement( override_parking, "BrakeForce", attrib=parkingbrake_dict ) else: ET.SubElement( override_parking, "BrakePercent", attrib=parkingbrake_dict ) if self.steeringwheel_active != None: steering_dict = { "active": get_bool_string(self.steeringwheel_active), "value": str(self.steeringwheel_value), } if self.steeringwheel_torque is not None: if self.isVersion(minor=2): steering_dict["maxTorque"] = str(self.steeringwheel_torque) else: raise OpenSCENARIOVersionError( "maxTorque was introduced in OpenSCENARIO v1.2" ) if self.steeringwheel_rate is not None: if self.isVersion(minor=2): steering_dict["maxRate"] = str(self.steeringwheel_rate) else: raise OpenSCENARIOVersionError( "maxRate was introduced in OpenSCENARIO v1.2" ) ET.SubElement( overrideaction, "SteeringWheel", steering_dict, ) if self.gear_active != None: if not self.isVersion(minor=2): ET.SubElement( overrideaction, "Gear", { "active": get_bool_string(self.gear_active), "number": str(self.gear_value), }, ) else: override_gear_action = ET.SubElement( overrideaction, "Gear", { "active": get_bool_string(self.gear_active), }, ) if self._gear_maunal: ET.SubElement( override_gear_action, "ManualGear", {"number": str(int(self.gear_value))}, ) else: ET.SubElement( override_gear_action, "AutomaticGear", {"gear": self.gear_value.get_name()}, ) return element
def set_brake(self, active, value=0, rate=None, interpret_as_force=False)
-
Sets the brake value
Parameters
active (bool): if the brake should be overridden value (float): value of the brake Default: 0 rate (float): the rate of the change (Valid from OpenSCENARIO V1.2) Default: None interpret_as_force (bool): interpret the value as force instead of percent (Valid from OpenSCENARIO V1.2) Default: None
Expand source code
def set_brake(self, active, value=0, rate=None, interpret_as_force=False): """Sets the brake value Parameters ---------- active (bool): if the brake should be overridden value (float): value of the brake Default: 0 rate (float): the rate of the change (Valid from OpenSCENARIO V1.2) Default: None interpret_as_force (bool): interpret the value as force instead of percent (Valid from OpenSCENARIO V1.2) Default: None """ self.brake_active = convert_bool(active) self.brake_value = convert_float(value) self.brake_rate = rate self.brake_force = interpret_as_force
def set_clutch(self, active, value=0, rate=None)
-
Sets the clutch value
Parameters
active (bool): if the clutch should be overridden value (float): value of the clutch Default: 0 rate (float): rate of the change (Valid from OpenSCENARIO V1.2) Default: None
Expand source code
def set_clutch(self, active, value=0, rate=None): """Sets the clutch value Parameters ---------- active (bool): if the clutch should be overridden value (float): value of the clutch Default: 0 rate (float): rate of the change (Valid from OpenSCENARIO V1.2) Default: None """ self.clutch_active = convert_bool(active) self.clutch_value = convert_float(value) self.clutch_rate = rate
def set_gear(self, active, value=0)
-
Sets the gear value
Parameters
active (bool): if the gear should be overridden value (float/AutomaticGearType): value of the gear Default: 0
Expand source code
def set_gear(self, active, value=0): """Sets the gear value Parameters ---------- active (bool): if the gear should be overridden value (float/AutomaticGearType): value of the gear Default: 0 """ self.gear_active = convert_bool(active) if hasattr(AutomaticGearType, str(value)): self.gear_value = value self._gear_maunal = False else: self.gear_value = convert_float(value) self._gear_maunal = True
def set_parkingbrake(self, active, value=0, rate=None, interpret_as_force=False)
-
Sets the parkingbrake value
Parameters
active (bool): if the parkingbrake should be overridden value (float): value of the parkingbrake Default: 0 rate (float): the rate of the change (Valid from OpenSCENARIO V1.2) Default: None interpret_as_force (bool): interpret the value as force instead of percent (Valid from OpenSCENARIO V1.2) Default: None
Expand source code
def set_parkingbrake(self, active, value=0, rate=None, interpret_as_force=False): """Sets the parkingbrake value Parameters ---------- active (bool): if the parkingbrake should be overridden value (float): value of the parkingbrake Default: 0 rate (float): the rate of the change (Valid from OpenSCENARIO V1.2) Default: None interpret_as_force (bool): interpret the value as force instead of percent (Valid from OpenSCENARIO V1.2) Default: None """ self.parkingbrake_active = convert_bool(active) self.parkingbrake_value = convert_float(value) self.parkingbrake_rate = rate self.parkingbrake_force = interpret_as_force
def set_steeringwheel(self, active, value=0, rate=None, torque=None)
-
Sets the steeringwheel value
Parameters
active (bool): if the steeringwheel should be overridden value (float): value of the steeringwheel Default: 0 rate (float): the Max Rate of the change (Valid from OpenSCENARIO V1.2) Default: None torque (float): the Max Torque of the change (Valid from OpenSCENARIO V1.2) Default: None
Expand source code
def set_steeringwheel(self, active, value=0, rate=None, torque=None): """Sets the steeringwheel value Parameters ---------- active (bool): if the steeringwheel should be overridden value (float): value of the steeringwheel Default: 0 rate (float): the Max Rate of the change (Valid from OpenSCENARIO V1.2) Default: None torque (float): the Max Torque of the change (Valid from OpenSCENARIO V1.2) Default: None """ self.steeringwheel_active = convert_bool(active) self.steeringwheel_value = convert_float(value) self.steeringwheel_rate = convert_float(rate) self.steeringwheel_torque = convert_float(torque)
def set_throttle(self, active, value=0, rate=None)
-
Sets the throttle value
Parameters
active (bool): if the throttle should be overridden value (float): value of the throttle Default: 0 rate (float): rate of the change (Valid from OpenSCENARIO V1.2) Default: None
Expand source code
def set_throttle(self, active, value=0, rate=None): """Sets the throttle value Parameters ---------- active (bool): if the throttle should be overridden value (float): value of the throttle Default: 0 rate (float): rate of the change (Valid from OpenSCENARIO V1.2) Default: None """ self.throttle_active = convert_bool(active) self.throttle_value = convert_float(value) self.throttle_rate = rate
class ParameterAddAction (parameter_ref, value)
-
The ParameterAddAction class creates a ParameterAction of type ParameterModifyAction which adds a value to an existing Parameter (valid to V1.1, deprecated since V1.2) Parameters
parameter_ref (str): name of the parameter value (float): the value that should be added to the parameter
Attributes
parameter_ref (str): name of the parameter value (float): the value that should be added to the parameter
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
initalize the ParameterAddAction
Parameters
parameter_ref (str): name of the parameter value (float): the value that should be added to the parameter
Expand source code
class ParameterAddAction(_ActionType): """The ParameterAddAction class creates a ParameterAction of type ParameterModifyAction which adds a value to an existing Parameter (valid to V1.1, deprecated since V1.2) Parameters ---------- parameter_ref (str): name of the parameter value (float): the value that should be added to the parameter Attributes ---------- parameter_ref (str): name of the parameter value (float): the value that should be added to the parameter 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, parameter_ref, value): """initalize the ParameterAddAction Parameters ---------- parameter_ref (str): name of the parameter value (float): the value that should be added to the parameter """ self.parameter_ref = parameter_ref self.value = convert_float(value) def __eq__(self, other): if isinstance(other, ParameterAddAction): if ( self.get_attributes() == other.get_attributes() and self.parameter_ref == other.parameter_ref ): return True return False @staticmethod def parse(element): """Parses the xml element of ParameterAddAction Parameters ---------- element (xml.etree.ElementTree.Element): A ParameterAddAction element (same as generated by the class itself) Returns ------- paa_action (ParameterAddAction): a ParameterAddAction object """ pa_element = element.find("ParameterAction") parameterRef = pa_element.attrib["parameterRef"] ma_element = pa_element.find("ModifyAction") rule_element = ma_element.find("Rule") mbv_element = rule_element.find("AddValue") value = convert_float(mbv_element.attrib["value"]) return ParameterAddAction(parameterRef, value) def get_attributes(self): """returns the attributes of the ParameterAddAction as a dict""" return {"value": str(self.value)} def get_element(self): """returns the elementTree of the ParameterAddAction""" if self.version_minor > 1: raise OpenSCENARIOVersionError( "ParameterAddAction was deprecated in OSC 1.2, please use VariableAddAction instead" ) element = ET.Element("GlobalAction") paramaction = ET.SubElement( element, "ParameterAction", {"parameterRef": self.parameter_ref} ) modifaction = ET.SubElement(paramaction, "ModifyAction") rule = ET.SubElement(modifaction, "Rule") ET.SubElement(rule, "AddValue", self.get_attributes()) return element
Ancestors
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of ParameterAddAction
Parameters
element (xml.etree.ElementTree.Element): A ParameterAddAction element (same as generated by the class itself)
Returns
paa_action (ParameterAddAction): a ParameterAddAction object
Expand source code
@staticmethod def parse(element): """Parses the xml element of ParameterAddAction Parameters ---------- element (xml.etree.ElementTree.Element): A ParameterAddAction element (same as generated by the class itself) Returns ------- paa_action (ParameterAddAction): a ParameterAddAction object """ pa_element = element.find("ParameterAction") parameterRef = pa_element.attrib["parameterRef"] ma_element = pa_element.find("ModifyAction") rule_element = ma_element.find("Rule") mbv_element = rule_element.find("AddValue") value = convert_float(mbv_element.attrib["value"]) return ParameterAddAction(parameterRef, value)
Methods
def get_attributes(self)
-
returns the attributes of the ParameterAddAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the ParameterAddAction as a dict""" return {"value": str(self.value)}
def get_element(self)
-
returns the elementTree of the ParameterAddAction
Expand source code
def get_element(self): """returns the elementTree of the ParameterAddAction""" if self.version_minor > 1: raise OpenSCENARIOVersionError( "ParameterAddAction was deprecated in OSC 1.2, please use VariableAddAction instead" ) element = ET.Element("GlobalAction") paramaction = ET.SubElement( element, "ParameterAction", {"parameterRef": self.parameter_ref} ) modifaction = ET.SubElement(paramaction, "ModifyAction") rule = ET.SubElement(modifaction, "Rule") ET.SubElement(rule, "AddValue", self.get_attributes()) return element
class ParameterMultiplyAction (parameter_ref, value)
-
The ParameterMultiplyAction class creates a ParameterAction of tyoe ParameterModifyAction which adds a value to an existing Parameter (valid to V1.1, deprecated since V1.2) Parameters
parameter_ref (str): name of the parameter value (float): the value that should be multiplied to the parameter
Attributes
parameter_ref (str): name of the parameter value (float): the value that should be multiplied to the parameter
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
initalize the ParameterMultiplyAction
Parameters
parameter_ref (str): name of the parameter value (float): the value that should be added to the parameter
Expand source code
class ParameterMultiplyAction(_ActionType): """The ParameterMultiplyAction class creates a ParameterAction of tyoe ParameterModifyAction which adds a value to an existing Parameter (valid to V1.1, deprecated since V1.2) Parameters ---------- parameter_ref (str): name of the parameter value (float): the value that should be multiplied to the parameter Attributes ---------- parameter_ref (str): name of the parameter value (float): the value that should be multiplied to the parameter 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, parameter_ref, value): """initalize the ParameterMultiplyAction Parameters ---------- parameter_ref (str): name of the parameter value (float): the value that should be added to the parameter """ self.parameter_ref = parameter_ref self.value = convert_float(value) def __eq__(self, other): if isinstance(other, ParameterMultiplyAction): if ( self.get_attributes() == other.get_attributes() and self.parameter_ref == other.parameter_ref ): return True return False @staticmethod def parse(element): """Parses the xml element of ParameterMultiplyAction Parameters ---------- element (xml.etree.ElementTree.Element): A ParameterMultiplyAction element (same as generated by the class itself) Returns ------- pma_action (ParameterMultiplyAction): a ParameterMultiplyAction object """ pa_element = element.find("ParameterAction") parameterRef = pa_element.attrib["parameterRef"] ma_element = pa_element.find("ModifyAction") rule_element = ma_element.find("Rule") mbv_element = rule_element.find("MultiplyByValue") value = convert_float(mbv_element.attrib["value"]) return ParameterMultiplyAction(parameterRef, value) def get_attributes(self): """returns the attributes of the ParameterMultiplyAction as a dict""" return {"value": str(self.value)} def get_element(self): """returns the elementTree of the ParameterMultiplyAction""" if self.version_minor > 1: raise OpenSCENARIOVersionError( "ParameterMultiplyAction was deprecated in OSC 1.2, please use VariableMultiplyAction instead" ) element = ET.Element("GlobalAction") paramaction = ET.SubElement( element, "ParameterAction", {"parameterRef": self.parameter_ref} ) modifaction = ET.SubElement(paramaction, "ModifyAction") rule = ET.SubElement(modifaction, "Rule") ET.SubElement(rule, "MultiplyByValue", self.get_attributes()) return element
Ancestors
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of ParameterMultiplyAction
Parameters
element (xml.etree.ElementTree.Element): A ParameterMultiplyAction element (same as generated by the class itself)
Returns
pma_action (ParameterMultiplyAction): a ParameterMultiplyAction object
Expand source code
@staticmethod def parse(element): """Parses the xml element of ParameterMultiplyAction Parameters ---------- element (xml.etree.ElementTree.Element): A ParameterMultiplyAction element (same as generated by the class itself) Returns ------- pma_action (ParameterMultiplyAction): a ParameterMultiplyAction object """ pa_element = element.find("ParameterAction") parameterRef = pa_element.attrib["parameterRef"] ma_element = pa_element.find("ModifyAction") rule_element = ma_element.find("Rule") mbv_element = rule_element.find("MultiplyByValue") value = convert_float(mbv_element.attrib["value"]) return ParameterMultiplyAction(parameterRef, value)
Methods
def get_attributes(self)
-
returns the attributes of the ParameterMultiplyAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the ParameterMultiplyAction as a dict""" return {"value": str(self.value)}
def get_element(self)
-
returns the elementTree of the ParameterMultiplyAction
Expand source code
def get_element(self): """returns the elementTree of the ParameterMultiplyAction""" if self.version_minor > 1: raise OpenSCENARIOVersionError( "ParameterMultiplyAction was deprecated in OSC 1.2, please use VariableMultiplyAction instead" ) element = ET.Element("GlobalAction") paramaction = ET.SubElement( element, "ParameterAction", {"parameterRef": self.parameter_ref} ) modifaction = ET.SubElement(paramaction, "ModifyAction") rule = ET.SubElement(modifaction, "Rule") ET.SubElement(rule, "MultiplyByValue", self.get_attributes()) return element
class ParameterSetAction (parameter_ref, value)
-
The ParameterSetAction class creates a ParameterAction which adds a value to an existing Parameter (valid to V1.1, deprecated since V1.2) Parameters
parameter_ref (str): name of the parameter value (float): the value that should be set to the parameter
Attributes
parameter_ref (str): name of the parameter value (float): the value that should be set to the parameter
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
initalize the ParameterSetAction
Parameters
parameter_ref (str): name of the parameter value (float): the value that should be added to the parameter
Expand source code
class ParameterSetAction(_ActionType): """The ParameterSetAction class creates a ParameterAction which adds a value to an existing Parameter (valid to V1.1, deprecated since V1.2) Parameters ---------- parameter_ref (str): name of the parameter value (float): the value that should be set to the parameter Attributes ---------- parameter_ref (str): name of the parameter value (float): the value that should be set to the parameter 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, parameter_ref, value): """initalize the ParameterSetAction Parameters ---------- parameter_ref (str): name of the parameter value (float): the value that should be added to the parameter """ self.parameter_ref = parameter_ref self.value = value def __eq__(self, other): if isinstance(other, ParameterSetAction): if ( self.get_attributes() == other.get_attributes() and self.parameter_ref == other.parameter_ref ): return True return False @staticmethod def parse(element): """Parses the xml element of ParameterSetAction Parameters ---------- element (xml.etree.ElementTree.Element): A ParameterSetAction element (same as generated by the class itself) Returns ------- psa_action (ParameterSetAction): a ParameterSetAction object """ pa_element = element.find("ParameterAction") parameterRef = pa_element.attrib["parameterRef"] psa_element = pa_element.find("SetAction") value = psa_element.attrib["value"] psa = ParameterSetAction(parameterRef, value) psa.setVersion(minor=1) return psa # ParameterSetAction(parameterRef, value) def get_attributes(self): """returns the attributes of the ParameterSetAction as a dict""" return {"value": str(self.value)} def get_element(self): """returns the elementTree of the ParameterSetAction""" if self.version_minor > 1: raise OpenSCENARIOVersionError( "ParameterSetAction was deprecated in OSC 1.2, please use VariableSetAction instead" ) element = ET.Element("GlobalAction") paramaction = ET.SubElement( element, "ParameterAction", {"parameterRef": self.parameter_ref} ) ET.SubElement(paramaction, "SetAction", self.get_attributes()) return element
Ancestors
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of ParameterSetAction
Parameters
element (xml.etree.ElementTree.Element): A ParameterSetAction element (same as generated by the class itself)
Returns
psa_action (ParameterSetAction): a ParameterSetAction object
Expand source code
@staticmethod def parse(element): """Parses the xml element of ParameterSetAction Parameters ---------- element (xml.etree.ElementTree.Element): A ParameterSetAction element (same as generated by the class itself) Returns ------- psa_action (ParameterSetAction): a ParameterSetAction object """ pa_element = element.find("ParameterAction") parameterRef = pa_element.attrib["parameterRef"] psa_element = pa_element.find("SetAction") value = psa_element.attrib["value"] psa = ParameterSetAction(parameterRef, value) psa.setVersion(minor=1) return psa # ParameterSetAction(parameterRef, value)
Methods
def get_attributes(self)
-
returns the attributes of the ParameterSetAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the ParameterSetAction as a dict""" return {"value": str(self.value)}
def get_element(self)
-
returns the elementTree of the ParameterSetAction
Expand source code
def get_element(self): """returns the elementTree of the ParameterSetAction""" if self.version_minor > 1: raise OpenSCENARIOVersionError( "ParameterSetAction was deprecated in OSC 1.2, please use VariableSetAction instead" ) element = ET.Element("GlobalAction") paramaction = ET.SubElement( element, "ParameterAction", {"parameterRef": self.parameter_ref} ) ET.SubElement(paramaction, "SetAction", self.get_attributes()) return element
class RelativeLaneChangeAction (lane, entity, transition_dynamics, target_lane_offset=None)
-
the RelativeLaneChangeAction creates a LateralAction of type LaneChangeAction with a relative target
Parameters
lane (int): relative lane number entity (str): the entity to run relative to transition_dynamics (TransitionDynamics): how the change should be made target_lane_offset (float): if a offset in the target lane is wanted Default: None
Attributes
value (int): lane to change to target (str): target for relative lane change target_lane_offset (float): offset in the target lane is wanted transition_dynamics (TransitionDynamics): how the change should be made
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
initalize RelativeLaneChangeAction
Parameters
lane (int): relative lane number entity (str): the entity to run relative to transition_dynamics (TransitionDynamics): how the change should be made target_lane_offset (float): if a offset in the target lane is wanted Default: None
Expand source code
class RelativeLaneChangeAction(_PrivateActionType): """the RelativeLaneChangeAction creates a LateralAction of type LaneChangeAction with a relative target Parameters ---------- lane (int): relative lane number entity (str): the entity to run relative to transition_dynamics (TransitionDynamics): how the change should be made target_lane_offset (float): if a offset in the target lane is wanted Default: None Attributes ---------- value (int): lane to change to target (str): target for relative lane change target_lane_offset (float): offset in the target lane is wanted transition_dynamics (TransitionDynamics): how the change should be made 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, lane, entity, transition_dynamics, target_lane_offset=None): """initalize RelativeLaneChangeAction Parameters ---------- lane (int): relative lane number entity (str): the entity to run relative to transition_dynamics (TransitionDynamics): how the change should be made target_lane_offset (float): if a offset in the target lane is wanted Default: None """ self.lane = convert_int(lane) self.target = entity self.target_lane_offset = convert_float(target_lane_offset) if not isinstance(transition_dynamics, TransitionDynamics): raise TypeError("transition_dynamics input not of type TransitionDynamics") self.transition_dynamics = transition_dynamics def __eq__(self, other): if isinstance(other, RelativeLaneChangeAction): if ( self.get_attributes() == other.get_attributes() and self.transition_dynamics == other.transition_dynamics and self.target_lane_offset == other.target_lane_offset ): return True return False @staticmethod def parse(element): """Parses the xml element of AbsoluteLaneChangeAction Parameters ---------- element (xml.etree.ElementTree.Element): A AbsoluteLaneChangeAction element (same as generated by the class itself) Returns ------- alc_action (AbsoluteLaneChangeAction): a AbsoluteLaneChangeAction object """ lca_element = element.find("LateralAction/LaneChangeAction") target_lane_offset = None if "targetLaneOffset" in lca_element.attrib: target_lane_offset = convert_float(lca_element.attrib["targetLaneOffset"]) dynamics = TransitionDynamics.parse( lca_element.find("LaneChangeActionDynamics") ) targetlane_element = lca_element.find("LaneChangeTarget/RelativeTargetLane") lane = convert_int(targetlane_element.attrib["value"]) target = targetlane_element.attrib["entityRef"] return RelativeLaneChangeAction(lane, target, dynamics, target_lane_offset) def get_attributes(self): """returns the attributes of the RelativeLaneChangeAction as a dict""" retdict = {} retdict["value"] = str(self.lane) retdict["entityRef"] = self.target return retdict def get_element(self): """returns the elementTree of the RelativeLaneChangeAction""" element = ET.Element("PrivateAction") laneoffset = {} lataction = ET.SubElement(element, "LateralAction") if self.target_lane_offset is not None: laneoffset = {"targetLaneOffset": str(self.target_lane_offset)} lanechangeaction = ET.SubElement( lataction, "LaneChangeAction", attrib=laneoffset ) lanechangeaction.append( self.transition_dynamics.get_element("LaneChangeActionDynamics") ) lanchangetarget = ET.SubElement(lanechangeaction, "LaneChangeTarget") ET.SubElement(lanchangetarget, "RelativeTargetLane", self.get_attributes()) return element
Ancestors
- scenariogeneration.xosc.actions._PrivateActionType
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of AbsoluteLaneChangeAction
Parameters
element (xml.etree.ElementTree.Element): A AbsoluteLaneChangeAction element (same as generated by the class itself)
Returns
alc_action (AbsoluteLaneChangeAction): a AbsoluteLaneChangeAction object
Expand source code
@staticmethod def parse(element): """Parses the xml element of AbsoluteLaneChangeAction Parameters ---------- element (xml.etree.ElementTree.Element): A AbsoluteLaneChangeAction element (same as generated by the class itself) Returns ------- alc_action (AbsoluteLaneChangeAction): a AbsoluteLaneChangeAction object """ lca_element = element.find("LateralAction/LaneChangeAction") target_lane_offset = None if "targetLaneOffset" in lca_element.attrib: target_lane_offset = convert_float(lca_element.attrib["targetLaneOffset"]) dynamics = TransitionDynamics.parse( lca_element.find("LaneChangeActionDynamics") ) targetlane_element = lca_element.find("LaneChangeTarget/RelativeTargetLane") lane = convert_int(targetlane_element.attrib["value"]) target = targetlane_element.attrib["entityRef"] return RelativeLaneChangeAction(lane, target, dynamics, target_lane_offset)
Methods
def get_attributes(self)
-
returns the attributes of the RelativeLaneChangeAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the RelativeLaneChangeAction as a dict""" retdict = {} retdict["value"] = str(self.lane) retdict["entityRef"] = self.target return retdict
def get_element(self)
-
returns the elementTree of the RelativeLaneChangeAction
Expand source code
def get_element(self): """returns the elementTree of the RelativeLaneChangeAction""" element = ET.Element("PrivateAction") laneoffset = {} lataction = ET.SubElement(element, "LateralAction") if self.target_lane_offset is not None: laneoffset = {"targetLaneOffset": str(self.target_lane_offset)} lanechangeaction = ET.SubElement( lataction, "LaneChangeAction", attrib=laneoffset ) lanechangeaction.append( self.transition_dynamics.get_element("LaneChangeActionDynamics") ) lanchangetarget = ET.SubElement(lanechangeaction, "LaneChangeTarget") ET.SubElement(lanchangetarget, "RelativeTargetLane", self.get_attributes()) return element
class RelativeLaneOffsetAction (value, entity, shape, maxlatacc, continuous=True)
-
the RelativeLaneOffsetAction class creates a LateralAction of type LaneOffsetAction with a relative target
Parameters
value (float): relative lateral offset of the target entity (str): name of the entity shape (str): shape of the offset action maxlatacc (float): maximum allowed lateral acceleration continuous (bool): if the controller tries to keep the relative speed Default: True
Attributes
continuous (bool): if the controller tries to keep the relative speed value (float): relative lateral offset of the arget target (str): the name of the entity dynshape (str): the shape of the action maxlatacc (float): maximum allowed lateral acceleration
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 RelativeLaneOffsetAction,
Parameters
value (float): relative lateral offset of the target entity (str): name of the entity shape (str): shape of the offset action maxlatacc (float): maximum allowed lateral acceleration continuous (bool): if the controller tries to keep the relative speed Default: True
Expand source code
class RelativeLaneOffsetAction(_PrivateActionType): """the RelativeLaneOffsetAction class creates a LateralAction of type LaneOffsetAction with a relative target Parameters ---------- value (float): relative lateral offset of the target entity (str): name of the entity shape (str): shape of the offset action maxlatacc (float): maximum allowed lateral acceleration continuous (bool): if the controller tries to keep the relative speed Default: True Attributes ---------- continuous (bool): if the controller tries to keep the relative speed value (float): relative lateral offset of the arget target (str): the name of the entity dynshape (str): the shape of the action maxlatacc (float): maximum allowed lateral acceleration 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, value, entity, shape, maxlatacc, continuous=True): """initalizes the RelativeLaneOffsetAction, Parameters ---------- value (float): relative lateral offset of the target entity (str): name of the entity shape (str): shape of the offset action maxlatacc (float): maximum allowed lateral acceleration continuous (bool): if the controller tries to keep the relative speed Default: True """ self.continuous = convert_bool(continuous) self.value = convert_float(value) self.target = entity if not hasattr(DynamicsShapes, str(shape)): raise ValueError(shape + "; is not a valid shape.") self.dynshape = shape self.maxlatacc = convert_float(maxlatacc) def __eq__(self, other): if isinstance(other, RelativeLaneOffsetAction): if ( self.get_attributes() == other.get_attributes() and self.dynshape == other.dynshape and self.maxlatacc == other.maxlatacc and self.continuous == other.continuous and self.target == other.target ): return True return False @staticmethod def parse(element): """Parses the xml element of AbsoluteLaneOffsetAction Parameters ---------- element (xml.etree.ElementTree.Element): A AbsoluteLaneOffsetAction element (same as generated by the class itself) Returns ------- alco_action (AbsoluteLaneOffsetAction): a AbsoluteLaneOffsetAction object """ loa_element = element.find("LateralAction/LaneOffsetAction") contiuous = convert_bool(loa_element.attrib["continuous"]) load_element = loa_element.find("LaneOffsetActionDynamics") maxacc = convert_float(load_element.attrib["maxLateralAcc"]) dynamics = getattr(DynamicsShapes, load_element.attrib["dynamicsShape"]) rtlo_element = loa_element.find("LaneOffsetTarget/RelativeTargetLaneOffset") value = convert_float(rtlo_element.attrib["value"]) entity = rtlo_element.attrib["entityRef"] return RelativeLaneOffsetAction(value, entity, dynamics, maxacc, contiuous) def get_attributes(self): """returns the attributes of the RelativeLaneOffsetAction as a dict""" retdict = {} retdict["value"] = str(self.value) retdict["entityRef"] = self.target return retdict def get_element(self): """returns the elementTree of the RelativeLaneOffsetAction""" element = ET.Element("PrivateAction") lataction = ET.SubElement(element, "LateralAction") laneoffsetaction = ET.SubElement( lataction, "LaneOffsetAction", attrib={"continuous": get_bool_string(self.continuous)}, ) ET.SubElement( laneoffsetaction, "LaneOffsetActionDynamics", { "maxLateralAcc": str(self.maxlatacc), "dynamicsShape": self.dynshape.get_name(), }, ) laneoftarget = ET.SubElement(laneoffsetaction, "LaneOffsetTarget") ET.SubElement( laneoftarget, "RelativeTargetLaneOffset", attrib=self.get_attributes() ) return element
Ancestors
- scenariogeneration.xosc.actions._PrivateActionType
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of AbsoluteLaneOffsetAction
Parameters
element (xml.etree.ElementTree.Element): A AbsoluteLaneOffsetAction element (same as generated by the class itself)
Returns
alco_action (AbsoluteLaneOffsetAction): a AbsoluteLaneOffsetAction object
Expand source code
@staticmethod def parse(element): """Parses the xml element of AbsoluteLaneOffsetAction Parameters ---------- element (xml.etree.ElementTree.Element): A AbsoluteLaneOffsetAction element (same as generated by the class itself) Returns ------- alco_action (AbsoluteLaneOffsetAction): a AbsoluteLaneOffsetAction object """ loa_element = element.find("LateralAction/LaneOffsetAction") contiuous = convert_bool(loa_element.attrib["continuous"]) load_element = loa_element.find("LaneOffsetActionDynamics") maxacc = convert_float(load_element.attrib["maxLateralAcc"]) dynamics = getattr(DynamicsShapes, load_element.attrib["dynamicsShape"]) rtlo_element = loa_element.find("LaneOffsetTarget/RelativeTargetLaneOffset") value = convert_float(rtlo_element.attrib["value"]) entity = rtlo_element.attrib["entityRef"] return RelativeLaneOffsetAction(value, entity, dynamics, maxacc, contiuous)
Methods
def get_attributes(self)
-
returns the attributes of the RelativeLaneOffsetAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the RelativeLaneOffsetAction as a dict""" retdict = {} retdict["value"] = str(self.value) retdict["entityRef"] = self.target return retdict
def get_element(self)
-
returns the elementTree of the RelativeLaneOffsetAction
Expand source code
def get_element(self): """returns the elementTree of the RelativeLaneOffsetAction""" element = ET.Element("PrivateAction") lataction = ET.SubElement(element, "LateralAction") laneoffsetaction = ET.SubElement( lataction, "LaneOffsetAction", attrib={"continuous": get_bool_string(self.continuous)}, ) ET.SubElement( laneoffsetaction, "LaneOffsetActionDynamics", { "maxLateralAcc": str(self.maxlatacc), "dynamicsShape": self.dynshape.get_name(), }, ) laneoftarget = ET.SubElement(laneoffsetaction, "LaneOffsetTarget") ET.SubElement( laneoftarget, "RelativeTargetLaneOffset", attrib=self.get_attributes() ) return element
class RelativeSpeedAction (speed, entity, transition_dynamics, valuetype=<scenariogeneration.xosc.enumerations._OscEnum object>, continuous=True)
-
The RelativeSpeedAction creates a LongitudinalAction of type SpeedAction with a relative target
Parameters
speed (float): the speed wanted target (str): the name of the relative target (used for relative speed) transition_dynamics (TransitionDynamics): how the change should be made valuetype (str): the type of relative speed wanted (used for relative speed) continuous (bool): if the controller tries to keep the relative speed
Attributes
speed (float): the speed wanted target (str): the name of the relative target (used for relative speed) valuetype (str): the type of relative speed wanted (used for relative speed) continuous (bool): if the controller tries to keep the relative speed transition_dynamics (TransitionDynamics): how the change should be made
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 RelativeSpeedAction
Parameters
speed (float): the speed wanted target (str): the name of the relative target transition_dynamics (TransitionDynamics): how the change should be made valuetype (SpeedTargetValueType): the type of relative speed wanted continuous (bool): if the controller tries to keep the relative speed
Expand source code
class RelativeSpeedAction(_PrivateActionType): """The RelativeSpeedAction creates a LongitudinalAction of type SpeedAction with a relative target Parameters ---------- speed (float): the speed wanted target (str): the name of the relative target (used for relative speed) transition_dynamics (TransitionDynamics): how the change should be made valuetype (str): the type of relative speed wanted (used for relative speed) continuous (bool): if the controller tries to keep the relative speed Attributes ---------- speed (float): the speed wanted target (str): the name of the relative target (used for relative speed) valuetype (str): the type of relative speed wanted (used for relative speed) continuous (bool): if the controller tries to keep the relative speed transition_dynamics (TransitionDynamics): how the change should be made 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, speed, entity, transition_dynamics, valuetype=SpeedTargetValueType.delta, continuous=True, ): """initalizes RelativeSpeedAction Parameters ---------- speed (float): the speed wanted target (str): the name of the relative target transition_dynamics (TransitionDynamics): how the change should be made valuetype (SpeedTargetValueType): the type of relative speed wanted continuous (bool): if the controller tries to keep the relative speed """ self.speed = convert_float(speed) self.target = entity if not hasattr(SpeedTargetValueType, str(valuetype)): raise TypeError("valuetype input not of type SpeedTargetValueType") self.valuetype = valuetype if not isinstance(transition_dynamics, TransitionDynamics): raise TypeError("transition_dynamics input not of type TransitionDynamics") self.transition_dynamics = transition_dynamics self.continuous = convert_bool(continuous) def __eq__(self, other): if isinstance(other, RelativeSpeedAction): if ( self.get_attributes() == other.get_attributes() and self.transition_dynamics == other.transition_dynamics ): return True return False @staticmethod def parse(element): """Parses the xml element of RelativeSpeedAction Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- action (RelativeSpeedAction): the RelativeSpeedAction """ speed_element = element.find( "LongitudinalAction/SpeedAction/SpeedActionTarget/RelativeTargetSpeed" ) td_element = element.find("LongitudinalAction/SpeedAction/SpeedActionDynamics") speed = speed_element.attrib["value"] entity = speed_element.attrib["entityRef"] continuous = convert_bool(speed_element.attrib["continuous"]) valuetype = getattr( SpeedTargetValueType, speed_element.attrib["speedTargetValueType"] ) transition_dynamics = TransitionDynamics.parse(td_element) return RelativeSpeedAction( speed, entity, transition_dynamics, valuetype, continuous ) def get_attributes(self): """returns the attributes of the RelativeSpeedAction as a dict""" return { "entityRef": self.target, "value": str(self.speed), "speedTargetValueType": self.valuetype.get_name(), "continuous": get_bool_string(self.continuous), } def get_element(self): """returns the elementTree of the RelativeSpeedAction""" element = ET.Element("PrivateAction") longaction = ET.SubElement(element, "LongitudinalAction") speedaction = ET.SubElement(longaction, "SpeedAction") speedaction.append(self.transition_dynamics.get_element("SpeedActionDynamics")) speedactiontarget = ET.SubElement(speedaction, "SpeedActionTarget") ET.SubElement(speedactiontarget, "RelativeTargetSpeed", self.get_attributes()) return element
Ancestors
- scenariogeneration.xosc.actions._PrivateActionType
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of RelativeSpeedAction
Parameters
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
action (RelativeSpeedAction): the RelativeSpeedAction
Expand source code
@staticmethod def parse(element): """Parses the xml element of RelativeSpeedAction Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- action (RelativeSpeedAction): the RelativeSpeedAction """ speed_element = element.find( "LongitudinalAction/SpeedAction/SpeedActionTarget/RelativeTargetSpeed" ) td_element = element.find("LongitudinalAction/SpeedAction/SpeedActionDynamics") speed = speed_element.attrib["value"] entity = speed_element.attrib["entityRef"] continuous = convert_bool(speed_element.attrib["continuous"]) valuetype = getattr( SpeedTargetValueType, speed_element.attrib["speedTargetValueType"] ) transition_dynamics = TransitionDynamics.parse(td_element) return RelativeSpeedAction( speed, entity, transition_dynamics, valuetype, continuous )
Methods
def get_attributes(self)
-
returns the attributes of the RelativeSpeedAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the RelativeSpeedAction as a dict""" return { "entityRef": self.target, "value": str(self.speed), "speedTargetValueType": self.valuetype.get_name(), "continuous": get_bool_string(self.continuous), }
def get_element(self)
-
returns the elementTree of the RelativeSpeedAction
Expand source code
def get_element(self): """returns the elementTree of the RelativeSpeedAction""" element = ET.Element("PrivateAction") longaction = ET.SubElement(element, "LongitudinalAction") speedaction = ET.SubElement(longaction, "SpeedAction") speedaction.append(self.transition_dynamics.get_element("SpeedActionDynamics")) speedactiontarget = ET.SubElement(speedaction, "SpeedActionTarget") ET.SubElement(speedactiontarget, "RelativeTargetSpeed", self.get_attributes()) return element
class SpeedProfileAction (speeds, following_mode, times=None, dynamics_constraint=None, entity=None)
-
The SpeedProfileAction class specifies a LongitudinalAction of type SpeedProfileAction
Parameters
speeds (list of float): the different speed entries wanted following_mode (FollowingMode): how to follow the speed changes times (list of float): optional time entries when the speed entries should be achieved Default: None dynamics_constraint (DynamicsConstraints): optional constraints for the speed profile Default: None entity (str): name of an entity, the speeds will then be interpreted as relative to that entity Default: None
Attributes
speeds (list of float): the different speed entries wanted following_mode (FollowingMode): how to follow the speed changes times (list of float): optional time entries when the speed entries should be achieved dynamics_constraint (DynamicsConstraints): optional constraints for the speed profile entity (str): name of an entity, the speeds will then be interpreted as relative to that 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
initalize the SpeedProfileAction
Parameters
speeds (list of float): the different speed entries wanted following_mode (FollowingMode): how to follow the speed changes times (list of float): optional time entries when the speed entries should be achieved Default: None dynamics_constraint (DynamicsConstraints): optional constraints for the speed profile Default: None entity (str): name of an entity, the speeds will then be interpreted as relative to that entity Default: None
Expand source code
class SpeedProfileAction(_PrivateActionType): """The SpeedProfileAction class specifies a LongitudinalAction of type SpeedProfileAction Parameters ---------- speeds (list of float): the different speed entries wanted following_mode (FollowingMode): how to follow the speed changes times (list of float): optional time entries when the speed entries should be achieved Default: None dynamics_constraint (DynamicsConstraints): optional constraints for the speed profile Default: None entity (str): name of an entity, the speeds will then be interpreted as relative to that entity Default: None Attributes ---------- speeds (list of float): the different speed entries wanted following_mode (FollowingMode): how to follow the speed changes times (list of float): optional time entries when the speed entries should be achieved dynamics_constraint (DynamicsConstraints): optional constraints for the speed profile entity (str): name of an entity, the speeds will then be interpreted as relative to that 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, speeds, following_mode, times=None, dynamics_constraint=None, entity=None ): """initalize the SpeedProfileAction Parameters ---------- speeds (list of float): the different speed entries wanted following_mode (FollowingMode): how to follow the speed changes times (list of float): optional time entries when the speed entries should be achieved Default: None dynamics_constraint (DynamicsConstraints): optional constraints for the speed profile Default: None entity (str): name of an entity, the speeds will then be interpreted as relative to that entity Default: None """ if times and (len(times) != len(speeds)): raise ValueError("times and speeds are not the same lenght") self.speeds = [convert_float(x) for x in speeds] if dynamics_constraint and not isinstance( dynamics_constraint, DynamicsConstraints ): raise TypeError("dynamics_constraint input not of type DynamicsConstraints") self.dynamics_constraint = dynamics_constraint self.following_mode = convert_enum(following_mode, FollowingMode) if times: self.times = [convert_float(x) for x in times] else: self.times = times self.entity = entity def __eq__(self, other): if isinstance(other, SpeedProfileAction): if ( self.get_attributes() == other.get_attributes() and self.dynamics_constraint == other.dynamics_constraint and self.entity == other.entity and self.speeds == other.speeds and self.times == other.times ): return True return False @staticmethod def parse(element): """Parses the xml element of SpeedProfileAction Parameters ---------- element (xml.etree.ElementTree.Element): A SpeedProfileAction element (same as generated by the class itself) Returns ------- action (SpeedProfileAction): a SpeedProfileAction object """ speed_profile_element = element.find("LongitudinalAction/SpeedProfileAction") following_mode = convert_enum( speed_profile_element.attrib["followingMode"], FollowingMode ) dynamics_constraint = None entity = None if "entityRef" in speed_profile_element.attrib: entity = speed_profile_element.attrib["entityRef"] if speed_profile_element.find("DynamicConstraints") is not None: dynamics_constraint = DynamicsConstraints.parse( speed_profile_element.find("DynamicConstraints") ) entires = speed_profile_element.findall("SpeedProfileEntry") speeds = [] times = [] for i in entires: if "time" in i.attrib: times.append(convert_float(i.attrib["time"])) speeds.append(convert_float(i.attrib["speed"])) return SpeedProfileAction( speeds, following_mode, times, dynamics_constraint, entity ) def get_attributes(self): """returns the attributes of the SpeedProfileAction as a dict""" retdict = {"followingMode": self.following_mode.get_name()} if self.entity: retdict["entityRef"] = self.entity return retdict def get_element(self): """returns the elementTree of the SpeedProfileAction""" if not self.isVersion(minor=2): raise OpenSCENARIOVersionError( "SpeedProfileAction was introduced in OpenSCENARIO V1.2" ) element = ET.Element("PrivateAction") longaction = ET.SubElement(element, "LongitudinalAction") speedaction = ET.SubElement( longaction, "SpeedProfileAction", attrib=self.get_attributes() ) if self.dynamics_constraint is not None: speedaction.append(self.dynamics_constraint.get_element()) for i in range(len(self.speeds)): tmp_dict = {"speed": str(self.speeds[i])} if self.times: tmp_dict["time"] = str(self.times[i]) ET.SubElement(speedaction, "SpeedProfileEntry", attrib=tmp_dict) return element
Ancestors
- scenariogeneration.xosc.actions._PrivateActionType
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of SpeedProfileAction
Parameters
element (xml.etree.ElementTree.Element): A SpeedProfileAction element (same as generated by the class itself)
Returns
action (SpeedProfileAction): a SpeedProfileAction object
Expand source code
@staticmethod def parse(element): """Parses the xml element of SpeedProfileAction Parameters ---------- element (xml.etree.ElementTree.Element): A SpeedProfileAction element (same as generated by the class itself) Returns ------- action (SpeedProfileAction): a SpeedProfileAction object """ speed_profile_element = element.find("LongitudinalAction/SpeedProfileAction") following_mode = convert_enum( speed_profile_element.attrib["followingMode"], FollowingMode ) dynamics_constraint = None entity = None if "entityRef" in speed_profile_element.attrib: entity = speed_profile_element.attrib["entityRef"] if speed_profile_element.find("DynamicConstraints") is not None: dynamics_constraint = DynamicsConstraints.parse( speed_profile_element.find("DynamicConstraints") ) entires = speed_profile_element.findall("SpeedProfileEntry") speeds = [] times = [] for i in entires: if "time" in i.attrib: times.append(convert_float(i.attrib["time"])) speeds.append(convert_float(i.attrib["speed"])) return SpeedProfileAction( speeds, following_mode, times, dynamics_constraint, entity )
Methods
def get_attributes(self)
-
returns the attributes of the SpeedProfileAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the SpeedProfileAction as a dict""" retdict = {"followingMode": self.following_mode.get_name()} if self.entity: retdict["entityRef"] = self.entity return retdict
def get_element(self)
-
returns the elementTree of the SpeedProfileAction
Expand source code
def get_element(self): """returns the elementTree of the SpeedProfileAction""" if not self.isVersion(minor=2): raise OpenSCENARIOVersionError( "SpeedProfileAction was introduced in OpenSCENARIO V1.2" ) element = ET.Element("PrivateAction") longaction = ET.SubElement(element, "LongitudinalAction") speedaction = ET.SubElement( longaction, "SpeedProfileAction", attrib=self.get_attributes() ) if self.dynamics_constraint is not None: speedaction.append(self.dynamics_constraint.get_element()) for i in range(len(self.speeds)): tmp_dict = {"speed": str(self.speeds[i])} if self.times: tmp_dict["time"] = str(self.times[i]) ET.SubElement(speedaction, "SpeedProfileEntry", attrib=tmp_dict) return element
class SynchronizeAction (entity, entity_PositionType: scenariogeneration.xosc.utils._PositionType, target_PositionType: scenariogeneration.xosc.utils._PositionType, target_tolerance_master=None, target_tolerance=None, final_speed=None)
-
Synchronizes an entity's arrival at a destination with a master entity. Both entities are provided with their own reference position which shall be reached at the same time. Final speed can be specified. Note that the reference positions can be different or identical.
Parameters
entity (str): entity to syncronize with entity_PositionType (*Position): the position of the entity to syncronize to target_PositionType (*Position): the position of the target that should syncronize speed (float): the absolute speed of the target that should syncronize target_tolerance_master (optional) (float): tolerance offset of the master's position [m]. (Valid from OpenSCENARIO V1.1) target_tolerance (optional) (float): tolerance offset of the target's position [m]. (Valid from OpenSCENARIO V1.1) final_speed (AbsoluteSpeed or RelativeSpeedToMaster): The speed that the synchronized entity should have at its target position. (Valid from OpenSCENARIO V1.1) Default: None
Attributes
entity (str): entity to syncronize with entity_PositionType (*Position): the position of the entity to syncronize to target_PositionType (*Position): the position of the target that should syncronize speed (float): the absolute speed of the target that should syncronize target_tolerance_master (optional) (float): tolerance offset of the master's position [m]. (Valid from OpenSCENARIO V1.1) target_tolerance (optional) (float): tolerance offset of the target's position [m]. (Valid from OpenSCENARIO V1.1) final_speed (AbsoluteSpeed or RelativeSpeedToMaster): The speed that the synchronized entity should have at its target position. (Valid from OpenSCENARIO V1.1)
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 the attributes of the class
initalize the SynchronizeAction
Parameters
entity (str): entity to syncronize with entity_PositionType (*Position): the position of the entity to syncronize to target_PositionType (*Position): the position of the target that should syncronize target_tolerance_master (optional) (float): tolerance offset of the master's position [m]. (Valid from OpenSCENARIO V1.1) target_tolerance (optional) (float): tolerance offset of the target's position [m]. (Valid from OpenSCENARIO V1.1) final_speed (AbsoluteSpeed or RelativeSpeedToMaster): The speed that the synchronized entity should have at its target position. (Valid from OpenSCENARIO V1.1) Default: None
Expand source code
class SynchronizeAction(_PrivateActionType): """Synchronizes an entity's arrival at a destination with a master entity. Both entities are provided with their own reference position which shall be reached at the same time. Final speed can be specified. Note that the reference positions can be different or identical. Parameters ---------- entity (str): entity to syncronize with entity_PositionType (*Position): the position of the entity to syncronize to target_PositionType (*Position): the position of the target that should syncronize speed (float): the absolute speed of the target that should syncronize target_tolerance_master (optional) (float): tolerance offset of the master's position [m]. (Valid from OpenSCENARIO V1.1) target_tolerance (optional) (float): tolerance offset of the target's position [m]. (Valid from OpenSCENARIO V1.1) final_speed (AbsoluteSpeed or RelativeSpeedToMaster): The speed that the synchronized entity should have at its target position. (Valid from OpenSCENARIO V1.1) Default: None Attributes ---------- entity (str): entity to syncronize with entity_PositionType (*Position): the position of the entity to syncronize to target_PositionType (*Position): the position of the target that should syncronize speed (float): the absolute speed of the target that should syncronize target_tolerance_master (optional) (float): tolerance offset of the master's position [m]. (Valid from OpenSCENARIO V1.1) target_tolerance (optional) (float): tolerance offset of the target's position [m]. (Valid from OpenSCENARIO V1.1) final_speed (AbsoluteSpeed or RelativeSpeedToMaster): The speed that the synchronized entity should have at its target position. (Valid from OpenSCENARIO V1.1) 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 the attributes of the class """ def __init__( self, entity, entity_PositionType: _PositionType, target_PositionType: _PositionType, target_tolerance_master=None, target_tolerance=None, final_speed=None, ): """initalize the SynchronizeAction Parameters ---------- entity (str): entity to syncronize with entity_PositionType (*Position): the position of the entity to syncronize to target_PositionType (*Position): the position of the target that should syncronize target_tolerance_master (optional) (float): tolerance offset of the master's position [m]. (Valid from OpenSCENARIO V1.1) target_tolerance (optional) (float): tolerance offset of the target's position [m]. (Valid from OpenSCENARIO V1.1) final_speed (AbsoluteSpeed or RelativeSpeedToMaster): The speed that the synchronized entity should have at its target position. (Valid from OpenSCENARIO V1.1) Default: None """ self.entity = entity if not isinstance(entity_PositionType, _PositionType): raise TypeError("entity_PositionType input is not a valid Position") if not isinstance(target_PositionType, _PositionType): raise TypeError("target_PositionType input is not a valid Position") self.entity_PositionType = entity_PositionType self.target_PositionType = target_PositionType self.target_tolerance_master = convert_float(target_tolerance_master) self.target_tolerance = convert_float(target_tolerance) if final_speed and not ( isinstance(final_speed, AbsoluteSpeed) or isinstance(final_speed, RelativeSpeedToMaster) ): raise TypeError( "final_speed input is not AbsoluteSpeed or RelativeSpeedToMaster type" ) else: self.final_speed = final_speed def __eq__(self, other): if isinstance(other, SynchronizeAction): if ( self.get_attributes() == other.get_attributes() and self.entity_PositionType == other.entity_PositionType and self.target_PositionType == other.target_PositionType and self.final_speed == other.final_speed ): return True return False @staticmethod def parse(element): """Parses the xml element of SynchronizeAction Parameters ---------- element (xml.etree.ElementTree.Element): A SynchronizeAction element (same as generated by the class itself) Returns ------- sync_action (SynchronizeAction): a SynchronizeAction object """ sa_element = element.find("SynchronizeAction") entity = sa_element.attrib["masterEntityRef"] target_tolerance = None if "targetTolerance" in sa_element.attrib: target_tolerance = convert_float(sa_element.attrib["targetTolerance"]) target_tolerance_master = None if "targetToleranceMaster" in sa_element.attrib: target_tolerance_master = convert_float( sa_element.attrib["targetToleranceMaster"] ) targetPositionMaster = _PositionFactory.parse_position( sa_element.find("TargetPositionMaster") ) targetPosition = _PositionFactory.parse_position( sa_element.find("TargetPosition") ) finalSpeed = None if sa_element.find("FinalSpeed") != None: sa_element = sa_element.find("FinalSpeed") if sa_element.find("AbsoluteSpeed") != None: finalSpeed = AbsoluteSpeed.parse(sa_element) if sa_element.find("RelativeSpeedToMaster") != None: finalSpeed = RelativeSpeedToMaster.parse(sa_element) return SynchronizeAction( entity, targetPositionMaster, targetPosition, target_tolerance_master, target_tolerance, finalSpeed, ) _ def get_attributes(self): """returns the attributes of the AbsoluteSynchronizeAction as a dict""" attr = {"masterEntityRef": self.entity} if self.isVersion(1, 0): return attr if self.target_tolerance_master is not None: attr.update({"targetToleranceMaster": str(self.target_tolerance_master)}) if self.target_tolerance is not None: attr.update({"targetTolerance": str(self.target_tolerance)}) return attr def get_element(self): """returns the elementTree of the AbsoluteSynchronizeAction""" element = ET.Element("PrivateAction") syncaction = ET.SubElement(element, "SynchronizeAction", self.get_attributes()) syncaction.append(self.entity_PositionType.get_element("TargetPositionMaster")) syncaction.append(self.target_PositionType.get_element("TargetPosition")) if self.final_speed is not None: syncaction.append(self.final_speed.get_element()) return element
Ancestors
- scenariogeneration.xosc.actions._PrivateActionType
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of SynchronizeAction
Parameters
element (xml.etree.ElementTree.Element): A SynchronizeAction element (same as generated by the class itself)
Returns
sync_action (SynchronizeAction): a SynchronizeAction object
Expand source code
@staticmethod def parse(element): """Parses the xml element of SynchronizeAction Parameters ---------- element (xml.etree.ElementTree.Element): A SynchronizeAction element (same as generated by the class itself) Returns ------- sync_action (SynchronizeAction): a SynchronizeAction object """ sa_element = element.find("SynchronizeAction") entity = sa_element.attrib["masterEntityRef"] target_tolerance = None if "targetTolerance" in sa_element.attrib: target_tolerance = convert_float(sa_element.attrib["targetTolerance"]) target_tolerance_master = None if "targetToleranceMaster" in sa_element.attrib: target_tolerance_master = convert_float( sa_element.attrib["targetToleranceMaster"] ) targetPositionMaster = _PositionFactory.parse_position( sa_element.find("TargetPositionMaster") ) targetPosition = _PositionFactory.parse_position( sa_element.find("TargetPosition") ) finalSpeed = None if sa_element.find("FinalSpeed") != None: sa_element = sa_element.find("FinalSpeed") if sa_element.find("AbsoluteSpeed") != None: finalSpeed = AbsoluteSpeed.parse(sa_element) if sa_element.find("RelativeSpeedToMaster") != None: finalSpeed = RelativeSpeedToMaster.parse(sa_element) return SynchronizeAction( entity, targetPositionMaster, targetPosition, target_tolerance_master, target_tolerance, finalSpeed, ) _
Methods
def get_attributes(self)
-
returns the attributes of the AbsoluteSynchronizeAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the AbsoluteSynchronizeAction as a dict""" attr = {"masterEntityRef": self.entity} if self.isVersion(1, 0): return attr if self.target_tolerance_master is not None: attr.update({"targetToleranceMaster": str(self.target_tolerance_master)}) if self.target_tolerance is not None: attr.update({"targetTolerance": str(self.target_tolerance)}) return attr
def get_element(self)
-
returns the elementTree of the AbsoluteSynchronizeAction
Expand source code
def get_element(self): """returns the elementTree of the AbsoluteSynchronizeAction""" element = ET.Element("PrivateAction") syncaction = ET.SubElement(element, "SynchronizeAction", self.get_attributes()) syncaction.append(self.entity_PositionType.get_element("TargetPositionMaster")) syncaction.append(self.target_PositionType.get_element("TargetPosition")) if self.final_speed is not None: syncaction.append(self.final_speed.get_element()) return element
class TeleportAction (position)
-
the TeleportAction creates the Teleport action of OpenScenario
Parameters
position (*Position): any position object
Attributes
position (*Position): any position 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
initalizes the TeleportAction
Parameters
position (*Position): any position object
Expand source code
class TeleportAction(_PrivateActionType): """the TeleportAction creates the Teleport action of OpenScenario Parameters ---------- position (*Position): any position object Attributes ---------- position (*Position): any position 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 """ def __init__(self, position): """initalizes the TeleportAction Parameters ---------- position (*Position): any position object """ if not isinstance(position, _PositionType): raise TypeError("position input not a valid Position type") self.position = position def __eq__(self, other): if isinstance(other, TeleportAction): if self.position == other.position: return True return False @staticmethod def parse(element): """Parses the xml element of WorldPosition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- position (WorldPosition): a world position object """ position_element = element.find("TeleportAction/Position") position = _PositionFactory.parse_position(position_element) return TeleportAction(position) def get_element(self): """returns the elementTree of the TeleportAction""" element = ET.Element("PrivateAction") telact = ET.SubElement(element, "TeleportAction") telact.append(self.position.get_element()) return element
Ancestors
- scenariogeneration.xosc.actions._PrivateActionType
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of WorldPosition
Parameters
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
position (WorldPosition): a world position object
Expand source code
@staticmethod def parse(element): """Parses the xml element of WorldPosition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- position (WorldPosition): a world position object """ position_element = element.find("TeleportAction/Position") position = _PositionFactory.parse_position(position_element) return TeleportAction(position)
Methods
def get_element(self)
-
returns the elementTree of the TeleportAction
Expand source code
def get_element(self): """returns the elementTree of the TeleportAction""" element = ET.Element("PrivateAction") telact = ET.SubElement(element, "TeleportAction") telact.append(self.position.get_element()) return element
class TrafficSignalControllerAction (phase, traffic_signalcontroller_ref)
-
The TrafficSignalControllerAction class creates a Infrastructure action which activates a controller of a traffic signal
Parameters
phase (str): phase of the signal traffic_signalcontroller_ref (str): reference to traffic signal controller
Attributes
phase (str): phase of the signal traffic_signalcontroller_ref (str): reference to traffic signal controller
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
initalize the TrafficSignalControllerAction
Parameters
phase (str): phase of the signal traffic_signalcontroller_ref (str): reference to traffic signal controller
Expand source code
class TrafficSignalControllerAction(_ActionType): """The TrafficSignalControllerAction class creates a Infrastructure action which activates a controller of a traffic signal Parameters ---------- phase (str): phase of the signal traffic_signalcontroller_ref (str): reference to traffic signal controller Attributes ---------- phase (str): phase of the signal traffic_signalcontroller_ref (str): reference to traffic signal controller 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, phase, traffic_signalcontroller_ref): """initalize the TrafficSignalControllerAction Parameters ---------- phase (str): phase of the signal traffic_signalcontroller_ref (str): reference to traffic signal controller """ self.phase = phase self.traffic_signalcontroller_ref = traffic_signalcontroller_ref def __eq__(self, other): if isinstance(other, TrafficSignalControllerAction): if self.get_attributes() == other.get_attributes(): return True return False @staticmethod def parse(element): """Parses the xml element of TrafficSignalControllerAction Parameters ---------- element (xml.etree.ElementTree.Element): A TrafficSignalControllerAction element (same as generated by the class itself) Returns ------- tsc_action (TrafficSignalControllerAction): a TrafficSignalControllerAction object """ isa_element = element.find("InfrastructureAction") tsa_element = isa_element.find("TrafficSignalAction") tsc_element = tsa_element.find("TrafficSignalControllerAction") phase = tsc_element.attrib["phase"] tsc_ref = tsc_element.attrib["trafficSignalControllerRef"] return TrafficSignalControllerAction(phase, tsc_ref) def get_attributes(self): """returns the attributes of the TrafficSignalControllerAction as a dict""" return { "phase": self.phase, "trafficSignalControllerRef": self.traffic_signalcontroller_ref, } def get_element(self): """returns the elementTree of the TrafficSignalControllerAction""" element = ET.Element("GlobalAction") infra = ET.SubElement(element, "InfrastructureAction") tsa = ET.SubElement(infra, "TrafficSignalAction") ET.SubElement(tsa, "TrafficSignalControllerAction", self.get_attributes()) return element
Ancestors
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of TrafficSignalControllerAction
Parameters
element (xml.etree.ElementTree.Element): A TrafficSignalControllerAction element (same as generated by the class itself)
Returns
tsc_action (TrafficSignalControllerAction): a TrafficSignalControllerAction object
Expand source code
@staticmethod def parse(element): """Parses the xml element of TrafficSignalControllerAction Parameters ---------- element (xml.etree.ElementTree.Element): A TrafficSignalControllerAction element (same as generated by the class itself) Returns ------- tsc_action (TrafficSignalControllerAction): a TrafficSignalControllerAction object """ isa_element = element.find("InfrastructureAction") tsa_element = isa_element.find("TrafficSignalAction") tsc_element = tsa_element.find("TrafficSignalControllerAction") phase = tsc_element.attrib["phase"] tsc_ref = tsc_element.attrib["trafficSignalControllerRef"] return TrafficSignalControllerAction(phase, tsc_ref)
Methods
def get_attributes(self)
-
returns the attributes of the TrafficSignalControllerAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the TrafficSignalControllerAction as a dict""" return { "phase": self.phase, "trafficSignalControllerRef": self.traffic_signalcontroller_ref, }
def get_element(self)
-
returns the elementTree of the TrafficSignalControllerAction
Expand source code
def get_element(self): """returns the elementTree of the TrafficSignalControllerAction""" element = ET.Element("GlobalAction") infra = ET.SubElement(element, "InfrastructureAction") tsa = ET.SubElement(infra, "TrafficSignalAction") ET.SubElement(tsa, "TrafficSignalControllerAction", self.get_attributes()) return element
class TrafficSignalStateAction (name, state)
-
The TrafficSignalStateAction class creates a Infrastructure action which controls the state of a traffic signal
Parameters
name (str): id of the signal in the road network state (str): the state to set to the traffic light
Attributes
name (str): id of the signal in the road network state (str): the state to set to the traffic light
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
initalize the TrafficSignalStateAction
Parameters
name (str): id of the signal in the road network state (str): the state to set to the traffic light
Expand source code
class TrafficSignalStateAction(_ActionType): """The TrafficSignalStateAction class creates a Infrastructure action which controls the state of a traffic signal Parameters ---------- name (str): id of the signal in the road network state (str): the state to set to the traffic light Attributes ---------- name (str): id of the signal in the road network state (str): the state to set to the traffic light 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, state): """initalize the TrafficSignalStateAction Parameters ---------- name (str): id of the signal in the road network state (str): the state to set to the traffic light """ self.name = name self.state = state def __eq__(self, other): if isinstance(other, TrafficSignalStateAction): if self.get_attributes() == other.get_attributes(): return True return False @staticmethod def parse(element): """Parses the xml element of TrafficSignalStateAction Parameters ---------- element (xml.etree.ElementTree.Element): A TrafficSignalStateAction element (same as generated by the class itself) Returns ------- tss_action (TrafficSignalStateAction): a TrafficSignalStateAction object """ isa_element = element.find("InfrastructureAction") tsa_element = isa_element.find("TrafficSignalAction") tss_element = tsa_element.find("TrafficSignalStateAction") name = tss_element.attrib["name"] state = tss_element.attrib["state"] return TrafficSignalStateAction(name, state) def get_attributes(self): """returns the attributes of the TrafficSignalStateAction as a dict""" return {"name": self.name, "state": self.state} def get_element(self): """returns the elementTree of the TrafficSignalStateAction""" element = ET.Element("GlobalAction") infra = ET.SubElement(element, "InfrastructureAction") tsa = ET.SubElement(infra, "TrafficSignalAction") ET.SubElement(tsa, "TrafficSignalStateAction", self.get_attributes()) return element
Ancestors
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of TrafficSignalStateAction
Parameters
element (xml.etree.ElementTree.Element): A TrafficSignalStateAction element (same as generated by the class itself)
Returns
tss_action (TrafficSignalStateAction): a TrafficSignalStateAction object
Expand source code
@staticmethod def parse(element): """Parses the xml element of TrafficSignalStateAction Parameters ---------- element (xml.etree.ElementTree.Element): A TrafficSignalStateAction element (same as generated by the class itself) Returns ------- tss_action (TrafficSignalStateAction): a TrafficSignalStateAction object """ isa_element = element.find("InfrastructureAction") tsa_element = isa_element.find("TrafficSignalAction") tss_element = tsa_element.find("TrafficSignalStateAction") name = tss_element.attrib["name"] state = tss_element.attrib["state"] return TrafficSignalStateAction(name, state)
Methods
def get_attributes(self)
-
returns the attributes of the TrafficSignalStateAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the TrafficSignalStateAction as a dict""" return {"name": self.name, "state": self.state}
def get_element(self)
-
returns the elementTree of the TrafficSignalStateAction
Expand source code
def get_element(self): """returns the elementTree of the TrafficSignalStateAction""" element = ET.Element("GlobalAction") infra = ET.SubElement(element, "InfrastructureAction") tsa = ET.SubElement(infra, "TrafficSignalAction") ET.SubElement(tsa, "TrafficSignalStateAction", self.get_attributes()) return element
class TrafficSinkAction (radius, position, trafficdefinition, rate=None, name=None)
-
The TrafficSinkAction class creates a TrafficAction of the typ TrafficSinkAction
Parameters
rate (float): rate of appearing traffic radius (float): the radius of the sink around the position position (*Position): any Position to define the sink trafficdefinition (TrafficDefinition): definition of the traffic name (str): name of the TrafficAction, can be used to stop the TrafficAction, (valid from V1.1) Default: None
Attributes
rate (float): rate of appearing traffic radius (float): the radius of the source around the position position (*Position): any Position to define the source trafficdefinition (TrafficDefinition): definition of the traffic name (str): name of the TrafficAction, can be used to stop the TrafficAction, (valid from V1.1)
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
initalize the TrafficSinkAction
Parameters
rate (float): rate of appearing traffic radius (float): the radius of the source around the position position (*Position): any Position to define the source trafficdefinition (TrafficDefinition): definition of the traffic name (str): name of the TrafficAction, can be used to stop the TrafficAction, (valid from V1.1)
Expand source code
class TrafficSinkAction(_ActionType): """The TrafficSinkAction class creates a TrafficAction of the typ TrafficSinkAction Parameters ---------- rate (float): rate of appearing traffic radius (float): the radius of the sink around the position position (*Position): any Position to define the sink trafficdefinition (TrafficDefinition): definition of the traffic name (str): name of the TrafficAction, can be used to stop the TrafficAction, (valid from V1.1) Default: None Attributes ---------- rate (float): rate of appearing traffic radius (float): the radius of the source around the position position (*Position): any Position to define the source trafficdefinition (TrafficDefinition): definition of the traffic name (str): name of the TrafficAction, can be used to stop the TrafficAction, (valid from V1.1) 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, radius, position, trafficdefinition, rate=None, name=None): """initalize the TrafficSinkAction Parameters ---------- rate (float): rate of appearing traffic radius (float): the radius of the source around the position position (*Position): any Position to define the source trafficdefinition (TrafficDefinition): definition of the traffic name (str): name of the TrafficAction, can be used to stop the TrafficAction, (valid from V1.1) """ self.rate = convert_float(rate) self.radius = convert_float(radius) if not isinstance(position, _PositionType): raise TypeError("position input is not a valid Position") if not isinstance(trafficdefinition, TrafficDefinition): raise TypeError("trafficdefinition input is not of type TrafficDefinition") self.position = position self.trafficdefinition = trafficdefinition self.name = name def __eq__(self, other): if isinstance(other, TrafficSinkAction): if ( self.get_attributes() == other.get_attributes() and self.position == other.position and self.trafficdefinition == other.trafficdefinition ): return True return False @staticmethod def parse(element): """Parses the xml element of TrafficSinkAction Parameters ---------- element (xml.etree.ElementTree.Element): A TrafficSinkAction element (same as generated by the class itself) Returns ------- ts_action (TrafficSinkAction): a TrafficSinkAction object """ ta_element = element.find("TrafficAction") name = None if "trafficName" in ta_element.attrib: name = ta_element.attrib["trafficName"] tsa_element = ta_element.find("TrafficSinkAction") radius = convert_float(tsa_element.attrib["radius"]) rate = None if "rate" in tsa_element.attrib: rate = convert_float(tsa_element.attrib["rate"]) if tsa_element.find("TrafficDefinition") != None: trafficdefinition = TrafficDefinition.parse( tsa_element.find("TrafficDefinition") ) position = _PositionFactory.parse_position(tsa_element.find("Position")) return TrafficSinkAction(radius, position, trafficdefinition, rate, name) def get_attributes(self): """returns the attributes of the TrafficSinkAction as a dict""" retdict = {} retdict["rate"] = str(self.rate) retdict["radius"] = str(self.radius) return retdict def get_element(self): """returns the elementTree of the TrafficSinkAction""" element = ET.Element("GlobalAction") traffic_attrib = {} if self.name and not self.isVersion(minor=0): traffic_attrib = {"trafficName": self.name} trafficaction = ET.SubElement(element, "TrafficAction", attrib=traffic_attrib) sinkaction = ET.SubElement( trafficaction, "TrafficSinkAction", attrib=self.get_attributes() ) sinkaction.append(self.position.get_element()) sinkaction.append(self.trafficdefinition.get_element()) return element
Ancestors
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of TrafficSinkAction
Parameters
element (xml.etree.ElementTree.Element): A TrafficSinkAction element (same as generated by the class itself)
Returns
ts_action (TrafficSinkAction): a TrafficSinkAction object
Expand source code
@staticmethod def parse(element): """Parses the xml element of TrafficSinkAction Parameters ---------- element (xml.etree.ElementTree.Element): A TrafficSinkAction element (same as generated by the class itself) Returns ------- ts_action (TrafficSinkAction): a TrafficSinkAction object """ ta_element = element.find("TrafficAction") name = None if "trafficName" in ta_element.attrib: name = ta_element.attrib["trafficName"] tsa_element = ta_element.find("TrafficSinkAction") radius = convert_float(tsa_element.attrib["radius"]) rate = None if "rate" in tsa_element.attrib: rate = convert_float(tsa_element.attrib["rate"]) if tsa_element.find("TrafficDefinition") != None: trafficdefinition = TrafficDefinition.parse( tsa_element.find("TrafficDefinition") ) position = _PositionFactory.parse_position(tsa_element.find("Position")) return TrafficSinkAction(radius, position, trafficdefinition, rate, name)
Methods
def get_attributes(self)
-
returns the attributes of the TrafficSinkAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the TrafficSinkAction as a dict""" retdict = {} retdict["rate"] = str(self.rate) retdict["radius"] = str(self.radius) return retdict
def get_element(self)
-
returns the elementTree of the TrafficSinkAction
Expand source code
def get_element(self): """returns the elementTree of the TrafficSinkAction""" element = ET.Element("GlobalAction") traffic_attrib = {} if self.name and not self.isVersion(minor=0): traffic_attrib = {"trafficName": self.name} trafficaction = ET.SubElement(element, "TrafficAction", attrib=traffic_attrib) sinkaction = ET.SubElement( trafficaction, "TrafficSinkAction", attrib=self.get_attributes() ) sinkaction.append(self.position.get_element()) sinkaction.append(self.trafficdefinition.get_element()) return element
class TrafficSourceAction (rate, radius, position, trafficdefinition, velocity=None, name=None)
-
The TrafficSourceAction class creates a TrafficAction of the typ TrafficSourceAction
Parameters
rate (float): rate of appearing traffic radius (float): the radius of the source around the position position (*Position): any Position to define the source trafficdefinition (TrafficDefinition): definition of the traffic velocity (float): optional starting velocity of the traffic Default: None name (str): name of the TrafficAction, can be used to stop the TrafficAction, (valid from V1.1) Default: None
Attributes
rate (float): rate of appearing traffic radius (float): the radius of the source around the position position (*Position): any Position to define the source trafficdefinition (TrafficDefinition): definition of the traffic velocity (float): optional starting velocity of the traffic Default: None name (str): name of the TrafficAction, can be used to stop the TrafficAction, (valid from V1.1)
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
initalize the TrafficSourceAction
Parameters
rate (float): rate of appearing traffic radius (float): the radius of the source around the position position (*Position): any Position to define the source trafficdefinition (TrafficDefinition): definition of the traffic velocity (float): optional starting velocity of the traffic Default: None name (str): name of the TrafficAction, can be used to stop the TrafficAction, (valid from V1.1) Default: None
Expand source code
class TrafficSourceAction(_ActionType): """The TrafficSourceAction class creates a TrafficAction of the typ TrafficSourceAction Parameters ---------- rate (float): rate of appearing traffic radius (float): the radius of the source around the position position (*Position): any Position to define the source trafficdefinition (TrafficDefinition): definition of the traffic velocity (float): optional starting velocity of the traffic Default: None name (str): name of the TrafficAction, can be used to stop the TrafficAction, (valid from V1.1) Default: None Attributes ---------- rate (float): rate of appearing traffic radius (float): the radius of the source around the position position (*Position): any Position to define the source trafficdefinition (TrafficDefinition): definition of the traffic velocity (float): optional starting velocity of the traffic Default: None name (str): name of the TrafficAction, can be used to stop the TrafficAction, (valid from V1.1) 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, rate, radius, position, trafficdefinition, velocity=None, name=None ): """initalize the TrafficSourceAction Parameters ---------- rate (float): rate of appearing traffic radius (float): the radius of the source around the position position (*Position): any Position to define the source trafficdefinition (TrafficDefinition): definition of the traffic velocity (float): optional starting velocity of the traffic Default: None name (str): name of the TrafficAction, can be used to stop the TrafficAction, (valid from V1.1) Default: None """ self.rate = convert_float(rate) self.radius = convert_float(radius) if not isinstance(position, _PositionType): raise TypeError("position input is not a valid Position") if not isinstance(trafficdefinition, TrafficDefinition): raise TypeError("trafficdefinition input is not of type TrafficDefinition") self.position = position self.trafficdefinition = trafficdefinition self.velocity = convert_float(velocity) self.name = name def __eq__(self, other): if isinstance(other, TrafficSourceAction): if ( self.get_attributes() == other.get_attributes() and self.position == other.position and self.trafficdefinition == other.trafficdefinition and self.name == other.name ): return True return False @staticmethod def parse(element): """Parses the xml element of TrafficSourceAction Parameters ---------- element (xml.etree.ElementTree.Element): A TrafficSourceAction element (same as generated by the class itself) Returns ------- tsa_action (TrafficSourceAction): a TrafficSourceAction object """ ta_element = element.find("TrafficAction") name = None if "trafficName" in ta_element.attrib: name = ta_element.attrib["trafficName"] tsa_element = ta_element.find("TrafficSourceAction") radius = convert_float(tsa_element.attrib["radius"]) rate = convert_float(tsa_element.attrib["rate"]) velocity = None if "velocity" in tsa_element.attrib: velocity = convert_float(tsa_element.attrib["velocity"]) elif "speed" in tsa_element.attrib: velocity = tsa_element.attrib["speed"] position = _PositionFactory.parse_position(tsa_element.find("Position")) trafficdefinition = TrafficDefinition.parse( tsa_element.find("TrafficDefinition") ) return TrafficSourceAction( rate, radius, position, trafficdefinition, velocity, name ) def get_attributes(self): """returns the attributes of the TrafficSourceAction as a dict""" retdict = {} retdict["rate"] = str(self.rate) retdict["radius"] = str(self.radius) if self.velocity is not None: if self.version_minor < 2: retdict["velocity"] = str(self.velocity) else: retdict["speed"] = str(self.velocity) return retdict def get_element(self): """returns the elementTree of the TrafficSourceAction""" element = ET.Element("GlobalAction") traffic_attrib = {} if self.name and not self.isVersion(minor=0): traffic_attrib = {"trafficName": self.name} trafficaction = ET.SubElement(element, "TrafficAction", attrib=traffic_attrib) sourceaction = ET.SubElement( trafficaction, "TrafficSourceAction", attrib=self.get_attributes() ) sourceaction.append(self.position.get_element()) sourceaction.append(self.trafficdefinition.get_element()) return element
Ancestors
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of TrafficSourceAction
Parameters
element (xml.etree.ElementTree.Element): A TrafficSourceAction element (same as generated by the class itself)
Returns
tsa_action (TrafficSourceAction): a TrafficSourceAction object
Expand source code
@staticmethod def parse(element): """Parses the xml element of TrafficSourceAction Parameters ---------- element (xml.etree.ElementTree.Element): A TrafficSourceAction element (same as generated by the class itself) Returns ------- tsa_action (TrafficSourceAction): a TrafficSourceAction object """ ta_element = element.find("TrafficAction") name = None if "trafficName" in ta_element.attrib: name = ta_element.attrib["trafficName"] tsa_element = ta_element.find("TrafficSourceAction") radius = convert_float(tsa_element.attrib["radius"]) rate = convert_float(tsa_element.attrib["rate"]) velocity = None if "velocity" in tsa_element.attrib: velocity = convert_float(tsa_element.attrib["velocity"]) elif "speed" in tsa_element.attrib: velocity = tsa_element.attrib["speed"] position = _PositionFactory.parse_position(tsa_element.find("Position")) trafficdefinition = TrafficDefinition.parse( tsa_element.find("TrafficDefinition") ) return TrafficSourceAction( rate, radius, position, trafficdefinition, velocity, name )
Methods
def get_attributes(self)
-
returns the attributes of the TrafficSourceAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the TrafficSourceAction as a dict""" retdict = {} retdict["rate"] = str(self.rate) retdict["radius"] = str(self.radius) if self.velocity is not None: if self.version_minor < 2: retdict["velocity"] = str(self.velocity) else: retdict["speed"] = str(self.velocity) return retdict
def get_element(self)
-
returns the elementTree of the TrafficSourceAction
Expand source code
def get_element(self): """returns the elementTree of the TrafficSourceAction""" element = ET.Element("GlobalAction") traffic_attrib = {} if self.name and not self.isVersion(minor=0): traffic_attrib = {"trafficName": self.name} trafficaction = ET.SubElement(element, "TrafficAction", attrib=traffic_attrib) sourceaction = ET.SubElement( trafficaction, "TrafficSourceAction", attrib=self.get_attributes() ) sourceaction.append(self.position.get_element()) sourceaction.append(self.trafficdefinition.get_element()) return element
class TrafficStopAction (name=None)
-
The TrafficStopAction class creates a TrafficAction of the typ TrafficStopAction
Parameters
name (str): name of the Traffic to stop Default: None
Attributes
name (str): name of the Traffic to stop
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
initalize the TrafficSwarmAction
Parameters
name (str): name of the Traffic to stop Default: None
Expand source code
class TrafficStopAction(_ActionType): """The TrafficStopAction class creates a TrafficAction of the typ TrafficStopAction Parameters ---------- name (str): name of the Traffic to stop Default: None Attributes ---------- name (str): name of the Traffic to stop 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=None): """initalize the TrafficSwarmAction Parameters ---------- name (str): name of the Traffic to stop Default: None """ self.name = name def __eq__(self, other): if isinstance(other, TrafficStopAction): if self.get_attributes() == other.get_attributes(): return True return False @staticmethod def parse(element): """Parses the xml element of TrafficStopAction Parameters ---------- element (xml.etree.ElementTree.Element): A TrafficStopAction element (same as generated by the class itself) Returns ------- ts_action (TrafficStopAction): a TrafficStopAction object """ trafficaction_element = element.find("TrafficAction") name = trafficaction_element.attrib["trafficName"] return TrafficStopAction(name) def get_attributes(self): """returns the attributes of the TrafficStopAction as a dict""" retdict = {} if self.name and not self.isVersion(minor=0): retdict["trafficName"] = str(self.name) elif self.isVersion(minor=0): raise OpenSCENARIOVersionError( "TrafficStopAction was introduced in OpenSCENARIO V1.1" ) return retdict def get_element(self): """returns the elementTree of the TrafficStopAction""" element = ET.Element("GlobalAction") trafficaction = ET.SubElement( element, "TrafficAction", attrib=self.get_attributes() ) ET.SubElement(trafficaction, "TrafficStopAction") return element
Ancestors
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of TrafficStopAction
Parameters
element (xml.etree.ElementTree.Element): A TrafficStopAction element (same as generated by the class itself)
Returns
ts_action (TrafficStopAction): a TrafficStopAction object
Expand source code
@staticmethod def parse(element): """Parses the xml element of TrafficStopAction Parameters ---------- element (xml.etree.ElementTree.Element): A TrafficStopAction element (same as generated by the class itself) Returns ------- ts_action (TrafficStopAction): a TrafficStopAction object """ trafficaction_element = element.find("TrafficAction") name = trafficaction_element.attrib["trafficName"] return TrafficStopAction(name)
Methods
def get_attributes(self)
-
returns the attributes of the TrafficStopAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the TrafficStopAction as a dict""" retdict = {} if self.name and not self.isVersion(minor=0): retdict["trafficName"] = str(self.name) elif self.isVersion(minor=0): raise OpenSCENARIOVersionError( "TrafficStopAction was introduced in OpenSCENARIO V1.1" ) return retdict
def get_element(self)
-
returns the elementTree of the TrafficStopAction
Expand source code
def get_element(self): """returns the elementTree of the TrafficStopAction""" element = ET.Element("GlobalAction") trafficaction = ET.SubElement( element, "TrafficAction", attrib=self.get_attributes() ) ET.SubElement(trafficaction, "TrafficStopAction") return element
class TrafficSwarmAction (semimajoraxis, semiminoraxis, innerradius, offset, numberofvehicles, centralobject, trafficdefinition, velocity=None, name=None, direction_of_travel=None)
-
The TrafficSwarmAction class creates a TrafficAction of the typ TrafficSwarmAction
Parameters
semimajoraxis (float): half length of major axis of ellipsis around target semiminoraxis (float): half length of minor axis of ellipsis around target innerradius (float): radius of inner circle offset (float): longitudinal offset from central entity numberofvehicles (int): maximum number of vehicles around entity centralobject (str): entity to swarm around trafficdefinition (TrafficDefinition): definition of the traffic velocity (float or Range): optional starting velocity (range is replacing velocity in OSC V1.2) Default: None name (str): name of the TrafficAction, can be used to stop the TrafficAction, (valid from V1.1) Default: None direction_of_travel (DirectionOfTravelDistribution): adds the DirectionOfTravelDistribution to the action(valid from OSC V1.2) Default: None
Attributes
semimajoraxis (float): half length of major axis of ellipsis around target semiminoraxis (float): half length of minor axis of ellipsis around target innerradius (float): radius of inner cirvle offset (float): longitudinal offset from central entity numberofvehicles (int): maximum number of vehicles around entity centralobject (str): entity to swarm around trafficdefinition (TrafficDefinition): definition of the traffic velocity (float): optional starting velocity Default: None name (str): name of the TrafficAction, can be used to stop the TrafficAction, (valid from V1.1) direction_of_travel (DirectionOfTravelDistribution): adds the DirectionOfTravelDistribution to the action(valid from OSC V1.2)
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
initalize the TrafficSwarmAction
Parameters
semimajoraxis (float): half length of major axis of ellipsis around target semiminoraxis (float): half length of minor axis of ellipsis around target innerradius (float): radius of inner circle offset (float): longitudinal offset from central entity numberofvehicles (int): maximum number of vehicles around entity centralobject (str): entity to swarm around trafficdefinition (TrafficDefinition): definition of the traffic velocity (float): optional starting velocity Default: None name (str): name of the TrafficAction, can be used to stop the TrafficAction, (valid from V1.1) Default: None direction_of_travel (DirectionOfTravelDistribution): adds the DirectionOfTravelDistribution to the action(valid from OSC V1.2) Default: None
Expand source code
class TrafficSwarmAction(_ActionType): """The TrafficSwarmAction class creates a TrafficAction of the typ TrafficSwarmAction Parameters ---------- semimajoraxis (float): half length of major axis of ellipsis around target semiminoraxis (float): half length of minor axis of ellipsis around target innerradius (float): radius of inner circle offset (float): longitudinal offset from central entity numberofvehicles (int): maximum number of vehicles around entity centralobject (str): entity to swarm around trafficdefinition (TrafficDefinition): definition of the traffic velocity (float or Range): optional starting velocity (range is replacing velocity in OSC V1.2) Default: None name (str): name of the TrafficAction, can be used to stop the TrafficAction, (valid from V1.1) Default: None direction_of_travel (DirectionOfTravelDistribution): adds the DirectionOfTravelDistribution to the action(valid from OSC V1.2) Default: None Attributes ---------- semimajoraxis (float): half length of major axis of ellipsis around target semiminoraxis (float): half length of minor axis of ellipsis around target innerradius (float): radius of inner cirvle offset (float): longitudinal offset from central entity numberofvehicles (int): maximum number of vehicles around entity centralobject (str): entity to swarm around trafficdefinition (TrafficDefinition): definition of the traffic velocity (float): optional starting velocity Default: None name (str): name of the TrafficAction, can be used to stop the TrafficAction, (valid from V1.1) direction_of_travel (DirectionOfTravelDistribution): adds the DirectionOfTravelDistribution to the action(valid from OSC V1.2) 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, semimajoraxis, semiminoraxis, innerradius, offset, numberofvehicles, centralobject, trafficdefinition, velocity=None, name=None, direction_of_travel=None, ): """initalize the TrafficSwarmAction Parameters ---------- semimajoraxis (float): half length of major axis of ellipsis around target semiminoraxis (float): half length of minor axis of ellipsis around target innerradius (float): radius of inner circle offset (float): longitudinal offset from central entity numberofvehicles (int): maximum number of vehicles around entity centralobject (str): entity to swarm around trafficdefinition (TrafficDefinition): definition of the traffic velocity (float): optional starting velocity Default: None name (str): name of the TrafficAction, can be used to stop the TrafficAction, (valid from V1.1) Default: None direction_of_travel (DirectionOfTravelDistribution): adds the DirectionOfTravelDistribution to the action(valid from OSC V1.2) Default: None """ self.semimajoraxis = convert_float(semimajoraxis) self.semiminoraxis = convert_float(semiminoraxis) self.innerradius = convert_float(innerradius) self.offset = convert_float(offset) self.numberofvehicles = convert_int(numberofvehicles) self.centralobject = centralobject if not isinstance(trafficdefinition, TrafficDefinition): raise TypeError("trafficdefinition input is not of type TrafficDefinition") self.trafficdefinition = trafficdefinition if velocity is not None: if isinstance(velocity, Range): self.velocity = velocity else: self.velocity = convert_float(velocity) else: self.velocity = None self.name = name if direction_of_travel is not None and not isinstance( direction_of_travel, DirectionOfTravelDistribution ): raise TypeError( "direction_of_travel is not of type DirectionOfTravelDistribution" ) self.direction_of_travel = direction_of_travel def __eq__(self, other): if isinstance(other, TrafficSwarmAction): if ( self.get_attributes() == other.get_attributes() and self.centralobject == other.centralobject and self.trafficdefinition == other.trafficdefinition and self.name == other.name ): return True return False @staticmethod def parse(element): """Parses the xml element of TrafficSwarmAction Parameters ---------- element (xml.etree.ElementTree.Element): A TrafficSwarmAction element (same as generated by the class itself) Returns ------- ts_action (TrafficSwarmAction): a TrafficSwarmAction object """ ta_element = element.find("TrafficAction") name = None if "trafficName" in ta_element.attrib: name = ta_element.attrib["trafficName"] tsa_element = ta_element.find("TrafficSwarmAction") innerradius = convert_float(tsa_element.attrib["innerRadius"]) numberofvehicles = convert_int(tsa_element.attrib["numberOfVehicles"]) offset = convert_float(tsa_element.attrib["offset"]) semimajoraxis = convert_float(tsa_element.attrib["semiMajorAxis"]) semiminoraxis = convert_float(tsa_element.attrib["semiMinorAxis"]) velocity = None if "velocity" in tsa_element.attrib: velocity = convert_float(tsa_element.attrib["velocity"]) elif tsa_element.find("InitalSpeedRange") is not None: velocity = Range.parse(tsa_element.find("InitalSpeedRange")) trafficdefinition = TrafficDefinition.parse( tsa_element.find("TrafficDefinition") ) dot = None if tsa_element.find("DirectionOfTravelDistribution"): dot = DirectionOfTravelDistribution.parse( tsa_element.find("DirectionOfTravelDistribution") ) central_element = tsa_element.find("CentralObject") centralobject = central_element.attrib["entityRef"] tsa_object = TrafficSwarmAction( semimajoraxis, semiminoraxis, innerradius, offset, numberofvehicles, centralobject, trafficdefinition, velocity, name, dot, ) return tsa_object def get_attributes(self): """returns the attributes of the TrafficSwarmAction as a dict""" retdict = {} retdict["semiMajorAxis"] = str(self.semimajoraxis) retdict["semiMinorAxis"] = str(self.semiminoraxis) retdict["innerRadius"] = str(self.innerradius) retdict["offset"] = str(self.offset) retdict["numberOfVehicles"] = str(self.numberofvehicles) if self.velocity is not None and not isinstance(self.velocity, Range): retdict["velocity"] = str(self.velocity) return retdict def get_element(self): """returns the elementTree of the TrafficSwarmAction""" element = ET.Element("GlobalAction") traffic_attrib = {} if self.name and not self.isVersion(minor=0): traffic_attrib = {"trafficName": self.name} trafficaction = ET.SubElement(element, "TrafficAction", attrib=traffic_attrib) swarmaction = ET.SubElement( trafficaction, "TrafficSwarmAction", attrib=self.get_attributes() ) swarmaction.append(self.trafficdefinition.get_element()) ET.SubElement( swarmaction, "CentralObject", attrib={"entityRef": self.centralobject} ) if self.velocity is not None: if self.version_minor > 1: if isinstance(self.velocity, Range): swarmaction.append(self.velocity.get_element("InitialSpeedRange")) else: raise OpenSCENARIOVersionError( "Range for TrafficSwarmAction was introduced in OSC V1.2, velocity should not be used anymore." ) if self.direction_of_travel is not None: if self.version_minor < 2: raise OpenSCENARIOVersionError( "DirectionOfTravelDistribution was added in OSC V1.2" ) swarmaction.append(self.direction_of_travel.get_element()) return element
Ancestors
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of TrafficSwarmAction
Parameters
element (xml.etree.ElementTree.Element): A TrafficSwarmAction element (same as generated by the class itself)
Returns
ts_action (TrafficSwarmAction): a TrafficSwarmAction object
Expand source code
@staticmethod def parse(element): """Parses the xml element of TrafficSwarmAction Parameters ---------- element (xml.etree.ElementTree.Element): A TrafficSwarmAction element (same as generated by the class itself) Returns ------- ts_action (TrafficSwarmAction): a TrafficSwarmAction object """ ta_element = element.find("TrafficAction") name = None if "trafficName" in ta_element.attrib: name = ta_element.attrib["trafficName"] tsa_element = ta_element.find("TrafficSwarmAction") innerradius = convert_float(tsa_element.attrib["innerRadius"]) numberofvehicles = convert_int(tsa_element.attrib["numberOfVehicles"]) offset = convert_float(tsa_element.attrib["offset"]) semimajoraxis = convert_float(tsa_element.attrib["semiMajorAxis"]) semiminoraxis = convert_float(tsa_element.attrib["semiMinorAxis"]) velocity = None if "velocity" in tsa_element.attrib: velocity = convert_float(tsa_element.attrib["velocity"]) elif tsa_element.find("InitalSpeedRange") is not None: velocity = Range.parse(tsa_element.find("InitalSpeedRange")) trafficdefinition = TrafficDefinition.parse( tsa_element.find("TrafficDefinition") ) dot = None if tsa_element.find("DirectionOfTravelDistribution"): dot = DirectionOfTravelDistribution.parse( tsa_element.find("DirectionOfTravelDistribution") ) central_element = tsa_element.find("CentralObject") centralobject = central_element.attrib["entityRef"] tsa_object = TrafficSwarmAction( semimajoraxis, semiminoraxis, innerradius, offset, numberofvehicles, centralobject, trafficdefinition, velocity, name, dot, ) return tsa_object
Methods
def get_attributes(self)
-
returns the attributes of the TrafficSwarmAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the TrafficSwarmAction as a dict""" retdict = {} retdict["semiMajorAxis"] = str(self.semimajoraxis) retdict["semiMinorAxis"] = str(self.semiminoraxis) retdict["innerRadius"] = str(self.innerradius) retdict["offset"] = str(self.offset) retdict["numberOfVehicles"] = str(self.numberofvehicles) if self.velocity is not None and not isinstance(self.velocity, Range): retdict["velocity"] = str(self.velocity) return retdict
def get_element(self)
-
returns the elementTree of the TrafficSwarmAction
Expand source code
def get_element(self): """returns the elementTree of the TrafficSwarmAction""" element = ET.Element("GlobalAction") traffic_attrib = {} if self.name and not self.isVersion(minor=0): traffic_attrib = {"trafficName": self.name} trafficaction = ET.SubElement(element, "TrafficAction", attrib=traffic_attrib) swarmaction = ET.SubElement( trafficaction, "TrafficSwarmAction", attrib=self.get_attributes() ) swarmaction.append(self.trafficdefinition.get_element()) ET.SubElement( swarmaction, "CentralObject", attrib={"entityRef": self.centralobject} ) if self.velocity is not None: if self.version_minor > 1: if isinstance(self.velocity, Range): swarmaction.append(self.velocity.get_element("InitialSpeedRange")) else: raise OpenSCENARIOVersionError( "Range for TrafficSwarmAction was introduced in OSC V1.2, velocity should not be used anymore." ) if self.direction_of_travel is not None: if self.version_minor < 2: raise OpenSCENARIOVersionError( "DirectionOfTravelDistribution was added in OSC V1.2" ) swarmaction.append(self.direction_of_travel.get_element()) return element
class UserDefinedAction (custom_command_action)
-
The UserDefinedAction enables adding simulator-specific CustomCommandActions.
Parameters
Attributes
Methods
add_custom_command_action(custom_command_action) Adds a CustomCommandAction to the UserDefinedAction get_element() Returns the full ElementTree of the class
initalize the UserDefinedAction
Parameters
Expand source code
class UserDefinedAction(_ActionType): """The UserDefinedAction enables adding simulator-specific CustomCommandActions. Parameters ---------- Attributes ---------- Methods ------- add_custom_command_action(custom_command_action) Adds a CustomCommandAction to the UserDefinedAction get_element() Returns the full ElementTree of the class """ def __init__(self, custom_command_action): """initalize the UserDefinedAction Parameters ---------- """ self.custom_command_action = custom_command_action def __eq__(self, other): if isinstance(other, UserDefinedAction): if self.custom_command_action == other.custom_command_action: return True return False @staticmethod def parse(element): """Parsese the xml element of a UserDefinedAction Parameters ---------- element (xml.etree.ElementTree.Element): a UserDefinedAction element Returns ------- userDefinedAction (UserDefinedAction): a UserDefinedAction object """ custom_command_action = CustomCommandAction.parse( element.find("CustomCommandAction") ) user_defined_action = UserDefinedAction(custom_command_action) return user_defined_action def get_element(self): """returns the elementTree of the UserDefinedAction""" element = ET.Element("UserDefinedAction") element.append(self.custom_command_action.get_element()) return element
Ancestors
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parsese the xml element of a UserDefinedAction
Parameters
element (xml.etree.ElementTree.Element): a UserDefinedAction element
Returns
userDefinedAction (UserDefinedAction): a UserDefinedAction object
Expand source code
@staticmethod def parse(element): """Parsese the xml element of a UserDefinedAction Parameters ---------- element (xml.etree.ElementTree.Element): a UserDefinedAction element Returns ------- userDefinedAction (UserDefinedAction): a UserDefinedAction object """ custom_command_action = CustomCommandAction.parse( element.find("CustomCommandAction") ) user_defined_action = UserDefinedAction(custom_command_action) return user_defined_action
Methods
def get_element(self)
-
returns the elementTree of the UserDefinedAction
Expand source code
def get_element(self): """returns the elementTree of the UserDefinedAction""" element = ET.Element("UserDefinedAction") element.append(self.custom_command_action.get_element()) return element
class VariableAddAction (variable_ref, value)
-
The VariableAddAction class creates a VariableAction of type VariableModifyAction which adds a value to an existing Variable (valid from V1.2) Parameters
variable_ref (str): name of the variable value (float): the value that should be added to the variable
Attributes
variable_ref (str): name of the variable value (float): the value that should be added to the variable
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
initalize the VariableAddAction
Parameters
variable_ref (str): name of the variable value (float): the value that should be added to the variable
Expand source code
class VariableAddAction(_ActionType): """The VariableAddAction class creates a VariableAction of type VariableModifyAction which adds a value to an existing Variable (valid from V1.2) Parameters ---------- variable_ref (str): name of the variable value (float): the value that should be added to the variable Attributes ---------- variable_ref (str): name of the variable value (float): the value that should be added to the variable 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, variable_ref, value): """initalize the VariableAddAction Parameters ---------- variable_ref (str): name of the variable value (float): the value that should be added to the variable """ self.variable_ref = variable_ref self.value = value def __eq__(self, other): if isinstance(other, VariableAddAction): if ( self.get_attributes() == other.get_attributes() and self.variable_ref == other.variable_ref ): return True return False @staticmethod def parse(element): """Parses the xml element of VariableAddAction Parameters ---------- element (xml.etree.ElementTree.Element): A VariableAddAction element (same as generated by the class itself) Returns ------- paa_action (VariableAddAction): a VariableAddAction object """ pa_element = element.find("VariableAction") variableRef = pa_element.attrib["variableRef"] ma_element = pa_element.find("ModifyAction") rule_element = ma_element.find("Rule") mbv_element = rule_element.find("AddValue") value = mbv_element.attrib["value"] return VariableAddAction(variableRef, value) def get_attributes(self): """returns the attributes of the AbsoluteSpeedAction as a dict""" return {"value": str(self.value)} def get_element(self): """returns the elementTree of the AbsoluteSpeedAction""" if self.version_minor < 2: raise OpenSCENARIOVersionError("VariableActions were added in OSC 1.2") element = ET.Element("GlobalAction") paramaction = ET.SubElement( element, "VariableAction", {"variableRef": self.variable_ref} ) modifaction = ET.SubElement(paramaction, "ModifyAction") rule = ET.SubElement(modifaction, "Rule") ET.SubElement(rule, "AddValue", self.get_attributes()) return element
Ancestors
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of VariableAddAction
Parameters
element (xml.etree.ElementTree.Element): A VariableAddAction element (same as generated by the class itself)
Returns
paa_action (VariableAddAction): a VariableAddAction object
Expand source code
@staticmethod def parse(element): """Parses the xml element of VariableAddAction Parameters ---------- element (xml.etree.ElementTree.Element): A VariableAddAction element (same as generated by the class itself) Returns ------- paa_action (VariableAddAction): a VariableAddAction object """ pa_element = element.find("VariableAction") variableRef = pa_element.attrib["variableRef"] ma_element = pa_element.find("ModifyAction") rule_element = ma_element.find("Rule") mbv_element = rule_element.find("AddValue") value = mbv_element.attrib["value"] return VariableAddAction(variableRef, value)
Methods
def get_attributes(self)
-
returns the attributes of the AbsoluteSpeedAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the AbsoluteSpeedAction as a dict""" return {"value": str(self.value)}
def get_element(self)
-
returns the elementTree of the AbsoluteSpeedAction
Expand source code
def get_element(self): """returns the elementTree of the AbsoluteSpeedAction""" if self.version_minor < 2: raise OpenSCENARIOVersionError("VariableActions were added in OSC 1.2") element = ET.Element("GlobalAction") paramaction = ET.SubElement( element, "VariableAction", {"variableRef": self.variable_ref} ) modifaction = ET.SubElement(paramaction, "ModifyAction") rule = ET.SubElement(modifaction, "Rule") ET.SubElement(rule, "AddValue", self.get_attributes()) return element
class VariableMultiplyAction (variable_ref, value)
-
The VariableMultiplyAction class creates a VariableAction of tyoe VariableModifyAction which adds a value to an existing Variable (valid from V1.2) Parameters
variable_ref (str): name of the variable value (float): the value that should be multiplied to the variable
Attributes
variable_ref (str): name of the variable value (float): the value that should be multiplied to the variable
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
initalize the VariableMultiplyAction
Parameters
variable_ref (str): name of the variable value (float): the value that should be added to the variable
Expand source code
class VariableMultiplyAction(_ActionType): """The VariableMultiplyAction class creates a VariableAction of tyoe VariableModifyAction which adds a value to an existing Variable (valid from V1.2) Parameters ---------- variable_ref (str): name of the variable value (float): the value that should be multiplied to the variable Attributes ---------- variable_ref (str): name of the variable value (float): the value that should be multiplied to the variable 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, variable_ref, value): """initalize the VariableMultiplyAction Parameters ---------- variable_ref (str): name of the variable value (float): the value that should be added to the variable """ self.variable_ref = variable_ref self.value = value def __eq__(self, other): if isinstance(other, VariableMultiplyAction): if ( self.get_attributes() == other.get_attributes() and self.variable_ref == other.variable_ref ): return True return False @staticmethod def parse(element): """Parses the xml element of VariableMultiplyAction Parameters ---------- element (xml.etree.ElementTree.Element): A VariableMultiplyAction element (same as generated by the class itself) Returns ------- pma_action (VariableMultiplyAction): a VariableMultiplyAction object """ pa_element = element.find("VariableAction") variableRef = pa_element.attrib["variableRef"] ma_element = pa_element.find("ModifyAction") rule_element = ma_element.find("Rule") mbv_element = rule_element.find("MultiplyByValue") value = mbv_element.attrib["value"] return VariableMultiplyAction(variableRef, value) def get_attributes(self): """returns the attributes of the VariableMultiplyAction as a dict""" return {"value": str(self.value)} def get_element(self): """returns the elementTree of the VariableMultiplyAction""" if self.version_minor < 2: raise OpenSCENARIOVersionError("VariableActions were added in OSC 1.2") element = ET.Element("GlobalAction") paramaction = ET.SubElement( element, "VariableAction", {"variableRef": self.variable_ref} ) modifaction = ET.SubElement(paramaction, "ModifyAction") rule = ET.SubElement(modifaction, "Rule") ET.SubElement(rule, "MultiplyByValue", self.get_attributes()) return element
Ancestors
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of VariableMultiplyAction
Parameters
element (xml.etree.ElementTree.Element): A VariableMultiplyAction element (same as generated by the class itself)
Returns
pma_action (VariableMultiplyAction): a VariableMultiplyAction object
Expand source code
@staticmethod def parse(element): """Parses the xml element of VariableMultiplyAction Parameters ---------- element (xml.etree.ElementTree.Element): A VariableMultiplyAction element (same as generated by the class itself) Returns ------- pma_action (VariableMultiplyAction): a VariableMultiplyAction object """ pa_element = element.find("VariableAction") variableRef = pa_element.attrib["variableRef"] ma_element = pa_element.find("ModifyAction") rule_element = ma_element.find("Rule") mbv_element = rule_element.find("MultiplyByValue") value = mbv_element.attrib["value"] return VariableMultiplyAction(variableRef, value)
Methods
def get_attributes(self)
-
returns the attributes of the VariableMultiplyAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the VariableMultiplyAction as a dict""" return {"value": str(self.value)}
def get_element(self)
-
returns the elementTree of the VariableMultiplyAction
Expand source code
def get_element(self): """returns the elementTree of the VariableMultiplyAction""" if self.version_minor < 2: raise OpenSCENARIOVersionError("VariableActions were added in OSC 1.2") element = ET.Element("GlobalAction") paramaction = ET.SubElement( element, "VariableAction", {"variableRef": self.variable_ref} ) modifaction = ET.SubElement(paramaction, "ModifyAction") rule = ET.SubElement(modifaction, "Rule") ET.SubElement(rule, "MultiplyByValue", self.get_attributes()) return element
class VariableSetAction (variable_ref, value)
-
The VariableSetAction class creates a VariableAction which adds a value to an existing Variable (valid from V1.2) Parameters
variable_ref (str): name of the variable value (float): the value that should be set to the variable
Attributes
variable_ref (str): name of the variable value (float): the value that should be set to the variable
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
initalize the VariableSetAction
Parameters
variable_ref (str): name of the variable value (float): the value that should be added to the variable
Expand source code
class VariableSetAction(_ActionType): """The VariableSetAction class creates a VariableAction which adds a value to an existing Variable (valid from V1.2) Parameters ---------- variable_ref (str): name of the variable value (float): the value that should be set to the variable Attributes ---------- variable_ref (str): name of the variable value (float): the value that should be set to the variable 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, variable_ref, value): """initalize the VariableSetAction Parameters ---------- variable_ref (str): name of the variable value (float): the value that should be added to the variable """ self.variable_ref = variable_ref self.value = value def __eq__(self, other): if isinstance(other, VariableSetAction): if ( self.get_attributes() == other.get_attributes() and self.variable_ref == other.variable_ref ): return True return False @staticmethod def parse(element): """Parses the xml element of VariableSetAction Parameters ---------- element (xml.etree.ElementTree.Element): A VariableSetAction element (same as generated by the class itself) Returns ------- psa_action (VariableSetAction): a VariableSetAction object """ pa_element = element.find("VariableAction") variableRef = pa_element.attrib["variableRef"] psa_element = pa_element.find("SetAction") value = psa_element.attrib["value"] return VariableSetAction(variableRef, value) def get_attributes(self): """returns the attributes of the VariableSetAction as a dict""" return {"value": str(self.value)} def get_element(self): """returns the elementTree of the VariableSetAction""" if self.version_minor < 2: raise OpenSCENARIOVersionError("VariableActions were added in OSC 1.2") element = ET.Element("GlobalAction") paramaction = ET.SubElement( element, "VariableAction", {"variableRef": self.variable_ref} ) ET.SubElement(paramaction, "SetAction", self.get_attributes()) return element
Ancestors
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of VariableSetAction
Parameters
element (xml.etree.ElementTree.Element): A VariableSetAction element (same as generated by the class itself)
Returns
psa_action (VariableSetAction): a VariableSetAction object
Expand source code
@staticmethod def parse(element): """Parses the xml element of VariableSetAction Parameters ---------- element (xml.etree.ElementTree.Element): A VariableSetAction element (same as generated by the class itself) Returns ------- psa_action (VariableSetAction): a VariableSetAction object """ pa_element = element.find("VariableAction") variableRef = pa_element.attrib["variableRef"] psa_element = pa_element.find("SetAction") value = psa_element.attrib["value"] return VariableSetAction(variableRef, value)
Methods
def get_attributes(self)
-
returns the attributes of the VariableSetAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the VariableSetAction as a dict""" return {"value": str(self.value)}
def get_element(self)
-
returns the elementTree of the VariableSetAction
Expand source code
def get_element(self): """returns the elementTree of the VariableSetAction""" if self.version_minor < 2: raise OpenSCENARIOVersionError("VariableActions were added in OSC 1.2") element = ET.Element("GlobalAction") paramaction = ET.SubElement( element, "VariableAction", {"variableRef": self.variable_ref} ) ET.SubElement(paramaction, "SetAction", self.get_attributes()) return element
class VisibilityAction (graphics, traffic, sensors)
-
creates a VisibilityAction
Parameters
graphics (boolean): visible for graphics or not traffic (boolean): visible for traffic sensors (boolean): visible to sensors or not
Attributes
graphics (boolean): visible for graphics or not traffic (boolean): visible for traffic sensors (boolean): visible to sensors or not sensor_refs (list of str): all sensor references
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 the attributes of the class
initalizes the VisibilityAction
Parameters
graphics (boolean): visible for graphics or not
traffic (boolean): visible for traffic
sensors (boolean): visible to sensors or not
Expand source code
class VisibilityAction(_PrivateActionType): """creates a VisibilityAction Parameters ---------- graphics (boolean): visible for graphics or not traffic (boolean): visible for traffic sensors (boolean): visible to sensors or not Attributes ---------- graphics (boolean): visible for graphics or not traffic (boolean): visible for traffic sensors (boolean): visible to sensors or not sensor_refs (list of str): all sensor references 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 the attributes of the class """ def __init__(self, graphics, traffic, sensors): """initalizes the VisibilityAction Parameters ---------- graphics (boolean): visible for graphics or not traffic (boolean): visible for traffic sensors (boolean): visible to sensors or not """ self.graphics = convert_bool(graphics) self.traffic = convert_bool(traffic) self.sensors = convert_bool(sensors) self.sensor_refs = [] def __eq__(self, other): if isinstance(other, VisibilityAction): if ( self.get_attributes() == other.get_attributes() and self.sensor_refs == other.sensor_refs ): return True return False @staticmethod def parse(element): """Parses the xml element of VisibilityAction Parameters ---------- element (xml.etree.ElementTree.Element): A VisibilityAction element (same as generated by the class itself) Returns ------- v_action (VisibilityAction): a VisibilityAction object """ va_element = element.find("VisibilityAction") graphics = convert_bool(va_element.attrib["graphics"]) traffic = convert_bool(va_element.attrib["traffic"]) sensors = convert_bool(va_element.attrib["sensors"]) visibility_action = VisibilityAction(graphics, traffic, sensors) sensor_ref_element = va_element.find("SensorReferenceSet") if sensor_ref_element is not None: for sensor_element in sensor_ref_element.findall("SensorReference"): visibility_action.add_sensor_reference(sensor_element.attrib["name"]) return visibility_action def add_sensor_reference(self, sensor_ref): """adds a sensor reference to the visibility action (Valid since OSC V1.2) Parameters ---------- sensor_ref (str): name of a sensor """ self.sensor_refs.append(sensor_ref) return self def get_attributes(self): """returns the attributes of the VisibilityAction as a dict""" return { "graphics": get_bool_string(self.graphics), "traffic": get_bool_string(self.traffic), "sensors": get_bool_string(self.sensors), } def get_element(self): """returns the elementTree of the VisibilityAction""" element = ET.Element("PrivateAction") visibility_element = ET.SubElement( element, "VisibilityAction", self.get_attributes() ) if self.sensor_refs: if self.isVersionEqLess(minor=1): raise OpenSCENARIOVersionError("SensorReference was added in OSC V1.2") sensor_ref_element = ET.SubElement(visibility_element, "SensorReferenceSet") for sensor in self.sensor_refs: ET.SubElement( sensor_ref_element, "SensorReference", {"name": str(sensor)} ) return element
Ancestors
- scenariogeneration.xosc.actions._PrivateActionType
- scenariogeneration.xosc.actions._ActionType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of VisibilityAction
Parameters
element (xml.etree.ElementTree.Element): A VisibilityAction element (same as generated by the class itself)
Returns
v_action (VisibilityAction): a VisibilityAction object
Expand source code
@staticmethod def parse(element): """Parses the xml element of VisibilityAction Parameters ---------- element (xml.etree.ElementTree.Element): A VisibilityAction element (same as generated by the class itself) Returns ------- v_action (VisibilityAction): a VisibilityAction object """ va_element = element.find("VisibilityAction") graphics = convert_bool(va_element.attrib["graphics"]) traffic = convert_bool(va_element.attrib["traffic"]) sensors = convert_bool(va_element.attrib["sensors"]) visibility_action = VisibilityAction(graphics, traffic, sensors) sensor_ref_element = va_element.find("SensorReferenceSet") if sensor_ref_element is not None: for sensor_element in sensor_ref_element.findall("SensorReference"): visibility_action.add_sensor_reference(sensor_element.attrib["name"]) return visibility_action
Methods
def add_sensor_reference(self, sensor_ref)
-
adds a sensor reference to the visibility action (Valid since OSC V1.2)
Parameters
sensor_ref (str): name of a sensor
Expand source code
def add_sensor_reference(self, sensor_ref): """adds a sensor reference to the visibility action (Valid since OSC V1.2) Parameters ---------- sensor_ref (str): name of a sensor """ self.sensor_refs.append(sensor_ref) return self
def get_attributes(self)
-
returns the attributes of the VisibilityAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the VisibilityAction as a dict""" return { "graphics": get_bool_string(self.graphics), "traffic": get_bool_string(self.traffic), "sensors": get_bool_string(self.sensors), }
def get_element(self)
-
returns the elementTree of the VisibilityAction
Expand source code
def get_element(self): """returns the elementTree of the VisibilityAction""" element = ET.Element("PrivateAction") visibility_element = ET.SubElement( element, "VisibilityAction", self.get_attributes() ) if self.sensor_refs: if self.isVersionEqLess(minor=1): raise OpenSCENARIOVersionError("SensorReference was added in OSC V1.2") sensor_ref_element = ET.SubElement(visibility_element, "SensorReferenceSet") for sensor in self.sensor_refs: ET.SubElement( sensor_ref_element, "SensorReference", {"name": str(sensor)} ) return element