Skip to content

Commit

Permalink
VTD: Add support for xosc v1.0
Browse files Browse the repository at this point in the history
this commit includes:
	- modifing vtd_binding.cpp to support reading of xosc xml tags
	- adding more roadmark_types to omni_sensor_component.cpp
	- adding xosc test case with corresponding xodr and osgb file
  • Loading branch information
scpa1055 authored and cassava committed Mar 8, 2023
1 parent 2076e1f commit 83103e6
Show file tree
Hide file tree
Showing 8 changed files with 467 additions and 14 deletions.

This file was deleted.

192 changes: 192 additions & 0 deletions optional/vtd/contrib/projects/cloe_tests/Scenarios/acc-test.xosc
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Demonstrate and test ACC controller -->
<!-- A white car is driving with constant speed, set by init event -->
<!-- The white car approaches a red leading car -->
<!-- The red leading car will perform some maneuvers to exercise the ACC function -->

<OpenSCENARIO>
<FileHeader revMajor="1" revMinor="0" date="2020-02-21T10:00:00" description="straight 500m" author="Patrick Schuster, Bosch"/>
<CatalogLocations>
<VehicleCatalog>
<Directory path="Distros/Current/Config/Players/Vehicles" />
</VehicleCatalog>
</CatalogLocations>
<RoadNetwork>
<LogicFile filepath="Projects/Current/Databases/Germany.2018/Germany_2018.xodr"/>
<SceneGraphFile filepath="Projects/Current/Databases/Germany.2018/Germany_2018.opt.osgb"/>
</RoadNetwork>
<Entities>
<ScenarioObject name="Ego">
<Vehicle name="Audi_A3_2009_black" vehicleCategory="car">
<ParameterDeclarations/>
<Performance maxSpeed="69.444" maxAcceleration="200" maxDeceleration="10.0"/>
<BoundingBox>
<Center x="1.5" y="0.0" z="0.9"/>
<Dimensions width="2.1" length="4.5" height="1.8"/>
</BoundingBox>
<Axles>
<FrontAxle maxSteering="0.5" wheelDiameter="0.6" trackWidth="1.8" positionX="3.1" positionZ="0.3"/>
<RearAxle maxSteering="0.0" wheelDiameter="0.6" trackWidth="1.8" positionX="0.0" positionZ="0.3"/>
</Axles>
<Properties>
<Property name="control" value="external"/>
</Properties>
</Vehicle>
</ScenarioObject>
<ScenarioObject name="Opponent">
<Vehicle name="Audi_A3_2009_white" vehicleCategory="car">
<ParameterDeclarations/>
<Performance maxSpeed="69.444" maxAcceleration="200" maxDeceleration="10.0"/>
<BoundingBox>
<Center x="1.5" y="0.0" z="0.9"/>
<Dimensions width="2.1" length="4.5" height="1.8"/>
</BoundingBox>
<Axles>
<FrontAxle maxSteering="0.5" wheelDiameter="0.6" trackWidth="1.8" positionX="3.1" positionZ="0.3"/>
<RearAxle maxSteering="0.0" wheelDiameter="0.6" trackWidth="1.8" positionX="0.0" positionZ="0.3"/>
</Axles>
<Properties>
<Property name="control" value="internal"/>
</Properties>
</Vehicle>
</ScenarioObject>
</Entities>
<Storyboard>
<Init>
<Actions>
<Private entityRef="Ego">
<PrivateAction>
<TeleportAction>
<Position>
<!--<LanePosition roadId="1" laneId="-1" offset="0" s="10"/>-->
<WorldPosition x="3641.578" y="-7263.547" z="0" h="0" p="0" r="0" />
</Position>
</TeleportAction>
</PrivateAction>
<PrivateAction>
<LongitudinalAction>
<SpeedAction>
<SpeedActionDynamics dynamicsShape="step" value="0" dynamicsDimension="time"/>
<SpeedActionTarget>
<AbsoluteTargetSpeed value="30" />
</SpeedActionTarget>
</SpeedAction>
</LongitudinalAction>
</PrivateAction>
</Private>
<Private entityRef="Opponent">
<PrivateAction>
<TeleportAction>
<Position>
<!--<LanePosition roadId="1" laneId="-1" offset="0" s="10"/>-->
<WorldPosition x="3661.578" y="-7263.547" z="0" h="0" p="0" r="0" />
</Position>
</TeleportAction>
</PrivateAction>
</Private>
</Actions>
</Init>
<Story name="Story1">
<Act name="Act1">
<ManeuverGroup name="Sequence2" maximumExecutionCount="1">
<Actors selectTriggeringEntities="true">
<EntityRef entityRef="Opponent" />
</Actors>
<Maneuver name="Maneuver1">
<Event name="Event1" priority="overwrite">
<Action name="Action1">
<PrivateAction>
<LongitudinalAction>
<SpeedAction>
<SpeedActionDynamics dynamicsShape="step" value="0" dynamicsDimension="time" />
<SpeedActionTarget>
<AbsoluteTargetSpeed value="30" />
</SpeedActionTarget>
</SpeedAction>
</LongitudinalAction>
</PrivateAction>
</Action>
<StartTrigger>
<ConditionGroup>
<Condition name="StartCondition1" delay="0" conditionEdge="rising">
<ByValueCondition>
<SimulationTimeCondition value="0" rule="greaterThan" />
</ByValueCondition>
</Condition>
</ConditionGroup>
</StartTrigger>
</Event>
</Maneuver>
<Maneuver name="Maneuver2">
<Event name="Event2" priority="overwrite">
<Action name="Action2">
<PrivateAction>
<LongitudinalAction>
<SpeedAction>
<SpeedActionDynamics dynamicsShape="step" value="0" dynamicsDimension="time" />
<SpeedActionTarget>
<AbsoluteTargetSpeed value="40" />
</SpeedActionTarget>
</SpeedAction>
</LongitudinalAction>
</PrivateAction>
</Action>
<StartTrigger>
<ConditionGroup>
<Condition name="StartCondition2" delay="0" conditionEdge="rising">
<ByValueCondition>
<SimulationTimeCondition value="5" rule="greaterThan" />
</ByValueCondition>
</Condition>
</ConditionGroup>
</StartTrigger>
</Event>
</Maneuver>
</ManeuverGroup>
<ManeuverGroup name="Sequence3" maximumExecutionCount="1">
<Actors selectTriggeringEntities="true">
<EntityRef entityRef="Opponent" />
</Actors>
<Maneuver name="Maneuver3">
<Event name="Event3" priority="overwrite">
<Action name="Action3">
<PrivateAction>
<LongitudinalAction>
<SpeedAction>
<SpeedActionDynamics dynamicsShape="step" value="0" dynamicsDimension="time" />
<SpeedActionTarget>
<AbsoluteTargetSpeed value="25" />
</SpeedActionTarget>
</SpeedAction>
</LongitudinalAction>
</PrivateAction>
</Action>
<StartTrigger>
<ConditionGroup>
<Condition name="StartCondition3" delay="0" conditionEdge="rising">
<ByValueCondition>
<SimulationTimeCondition value="10" rule="greaterThan" />
</ByValueCondition>
</Condition>
</ConditionGroup>
</StartTrigger>
</Event>
</Maneuver>
</ManeuverGroup>
<StartTrigger>
</StartTrigger>
<StopTrigger>
</StopTrigger>
</Act>
</Story>
<StopTrigger>
<ConditionGroup>
<Condition name="StopCondition1" delay="0" conditionEdge="rising">
<ByValueCondition>
<SimulationTimeCondition value="15" rule="greaterThan" />
</ByValueCondition>
</Condition>
</ConditionGroup>
</StopTrigger>
</Storyboard>
</OpenSCENARIO>
4 changes: 4 additions & 0 deletions optional/vtd/src/omni_sensor_component.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,10 @@ const std::map<int, cloe::LaneBoundary::Type> vtd_roadmark_type_map = {
{RDB_ROADMARK_TYPE_GRASS, cloe::LaneBoundary::Type::Grass},
{RDB_ROADMARK_TYPE_BOTDOT, cloe::LaneBoundary::Type::Unknown},
{RDB_ROADMARK_TYPE_OTHER, cloe::LaneBoundary::Type::Unknown},
{RDB_ROADMARK_TYPE_SOLID_SOLID, cloe::LaneBoundary::Type::Unknown},
{RDB_ROADMARK_TYPE_BROKEN_SOLID, cloe::LaneBoundary::Type::Unknown},
{RDB_ROADMARK_TYPE_SOLID_BROKEN, cloe::LaneBoundary::Type::Unknown},
{RDB_ROADMARK_TYPE_LANE_CENTER, cloe::LaneBoundary::Type::Unknown},
};

/**
Expand Down
57 changes: 44 additions & 13 deletions optional/vtd/src/vtd_binding.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -627,19 +627,50 @@ class VtdBinding : public cloe::Simulator {
}

void apply_scp_scenario_response(boost::property_tree::ptree& xml) {
auto trafficcontrol = xml.get_child("Scenario").get_child("TrafficControl");
for (auto& it : trafficcontrol) {
if (it.first != "Player") continue;
auto p = it.second;
std::string control = p.get("Description.<xmlattr>.Control", "default");
if (control == "external") {
auto name = p.get("Description.<xmlattr>.Name", "unspecified");
agents_expected_.insert(name);

// Ask VTD to create a vehicle dynamics instance for this vehicle
scp::DynamicsPluginConfig cfg;
cfg.name = name;
scp_client_->send(cfg);
boost::optional<boost::property_tree::ptree&> scenario = xml.get_child_optional("Scenario");
if (scenario) {
auto tc = xml.get_child("Scenario").get_child("TrafficControl");
for (auto& it : tc) {
if (it.first != "Player") {
continue;
}
auto p = it.second;
std::string control = p.get("Description.<xmlattr>.Control", "default");
if (control == "external") {
auto name = p.get("Description.<xmlattr>.Name", "unspecified");
agents_expected_.insert(name);

// Ask VTD to create a vehicle dynamics instance for this vehicle
scp::DynamicsPluginConfig cfg;
cfg.name = name;
scp_client_->send(cfg);
}
}
} else {
auto& entities = xml.get_child("OpenSCENARIO").get_child("Entities");
for (auto& it : entities) {
if (it.first != "ScenarioObject") {
continue;
}
auto& obj = it.second;
boost::optional<boost::property_tree::ptree&> properties_avail = obj.get_child("Vehicle").get_child_optional("Properties");
if (!properties_avail) {
continue;
}
auto& properties = obj.get_child("Vehicle").get_child("Properties");
for (auto& property : properties) {
auto prop = property.second;
std::string control = prop.get("<xmlattr>.value", "default");
if (control == "external") {
auto name = obj.get("<xmlattr>.name", "unspecified");
agents_expected_.insert(name);

// Ask VTD to create a vehicle dynamics instance for this vehicle
scp::DynamicsPluginConfig cfg;
cfg.name = name;
scp_client_->send(cfg);
}
}
}
}
}
Expand Down
Loading

0 comments on commit 83103e6

Please sign in to comment.