diff --git a/doc/source/user_guide/sim_user_guide/input/profilescatalog.rst b/doc/source/user_guide/sim_user_guide/input/profilescatalog.rst index 36e933fcefd9ead55ae81f77a9593edf91612dd9..450501c73e77f80d92bc9540c1677b64779d808c 100644 --- a/doc/source/user_guide/sim_user_guide/input/profilescatalog.rst +++ b/doc/source/user_guide/sim_user_guide/input/profilescatalog.rst @@ -15,7 +15,7 @@ ProfilesCatalog =============== The ProfilesCatalog contains all AgentProfiles, VehicleProfiles and generic ProfileGroups and Profiles. -Depending on the configuration the simulator could require a "Driver"-ProfileGroup, a "Spawner"- and "TrafficGroup"-ProfileGroup, or sensor and vehiclecomponent specific ProfileGroups. +Depending on the configuration the simulator could require a "Driver"-ProfileGroup, a "Spawner"- and "TrafficGroup"-ProfileGroup, a "TrafficRules"-ProfileGroup or sensor and vehiclecomponent specific ProfileGroups. * :ref:`profilescatalog_agentprofiles` * :ref:`profilescatalog_vehicleprofiles` @@ -23,6 +23,7 @@ Depending on the configuration the simulator could require a "Driver"-ProfileGro * :ref:`profilescatalog_driverprofiles` * :ref:`profilescatalog_vehiclecomponentprofiles` * :ref:`profilescatalog_spawnerprofiles` +* :ref:`profilescatalog_trafficrulesprofiles` .. _profilescatalog_agentprofiles: @@ -303,3 +304,33 @@ For details on the indivual parameters see the :ref:`components reference ... + + +.. _profilescatalog_trafficrulesprofiles: + +TrafficRules ProfileGroup +------------------------- + +This sections contains the global traffic rules, that may vary depending on the country. +The :ref:`slaveconfig_environment` section in the SlaveConfig defines which set is used. +Currently there are only rules regulating highway traffic. These are the following: + ++---------------------------+---------+---------------------------------------------------------------------------------------------------------------------+ +| Name | Type | Description | ++===========================+=========+=====================================================================================================================+ +| OpenSpeedLimit | Double | maximum allowed speed if not restricted by signs | ++---------------------------+---------+---------------------------------------------------------------------------------------------------------------------+ +| KeepToOuterLanes | Bool | if true, vehicles must use the outermost free lane for driving | ++---------------------------+---------+---------------------------------------------------------------------------------------------------------------------+ +| DontOvertakeOnOuterLanes | Bool | if true, it is prohibited to overtake another vehicle, that is driving further left (or right for lefthand traffic) | ++---------------------------+---------+---------------------------------------------------------------------------------------------------------------------+ +| FormRescueLane | Bool | if true, vehicles driving in a traffic jam must form a corridor for emergency vehicles | ++---------------------------+---------+---------------------------------------------------------------------------------------------------------------------+ +| ZipperMerge | Bool | if true all merging shall be performed using zipper merge | ++---------------------------+---------+---------------------------------------------------------------------------------------------------------------------+ + +.. literalinclude:: @OP_REL_SIM@/contrib/examples/Common/ProfilesCatalog.xml + :language: xml + :start-at: + :end-at: + diff --git a/doc/source/user_guide/sim_user_guide/input/slaveconfig.rst b/doc/source/user_guide/sim_user_guide/input/slaveconfig.rst index 02f780ef220afa9b9cab8cd751033692e52197fe..8c57238f06bffb04e7aca10ee455b5208f61d918 100644 --- a/doc/source/user_guide/sim_user_guide/input/slaveconfig.rst +++ b/doc/source/user_guide/sim_user_guide/input/slaveconfig.rst @@ -112,6 +112,7 @@ All probabilities need to add up to 1.0. VisibilityDistance Defines how far a human driver can see [m]. 1+ entry Friction Friction on the road. Used by DynamicsRegularDriving and LimiterAccelerationVehicleComponents. 1+ entry Weather **Currently unused.** Weather as string 1+ entry + TrafficRules Defines which set of TrafficRules to use from the ProfilesCatalog yes =================== ============================================================================================== ========= **Example** diff --git a/gui/plugins/pcmSimulation/Models/ConfigurationGeneratorPcm/DataStructuresXml/XmlProfilesConfig.cpp b/gui/plugins/pcmSimulation/Models/ConfigurationGeneratorPcm/DataStructuresXml/XmlProfilesConfig.cpp index fb7e90418d698b2d26cefca7f2f82c58dda3947f..f4852bb7d812fe45650dcff3ad18d1a40d136865 100644 --- a/gui/plugins/pcmSimulation/Models/ConfigurationGeneratorPcm/DataStructuresXml/XmlProfilesConfig.cpp +++ b/gui/plugins/pcmSimulation/Models/ConfigurationGeneratorPcm/DataStructuresXml/XmlProfilesConfig.cpp @@ -89,8 +89,32 @@ bool XmlProfilesConfig::WriteToXml(QXmlStreamWriter *xmlWriter) xmlWriter->writeStartElement("ProfileGroup"); xmlWriter->writeAttribute("Type","Driver"); + xmlWriter->writeEndElement(); // ProfileGroup + + xmlWriter->writeStartElement("ProfileGroup"); + xmlWriter->writeAttribute("Type","TrafficRules"); xmlWriter->writeStartElement("Profile"); - xmlWriter->writeAttribute("Name","Regular"); + xmlWriter->writeAttribute("Name","Germany"); + xmlWriter->writeStartElement("Double"); + xmlWriter->writeAttribute("Key", "OpenSpeedLimit"); + xmlWriter->writeAttribute("Value", "infinity"); + xmlWriter->writeEndElement(); // Double + xmlWriter->writeStartElement("Bool"); + xmlWriter->writeAttribute("Key", "KeepToOuterLanes"); + xmlWriter->writeAttribute("Value", "true"); + xmlWriter->writeEndElement(); // Bool + xmlWriter->writeStartElement("Bool"); + xmlWriter->writeAttribute("Key", "DontOvertakeOnOuterLanes"); + xmlWriter->writeAttribute("Value", "true"); + xmlWriter->writeEndElement(); // Bool + xmlWriter->writeStartElement("Bool"); + xmlWriter->writeAttribute("Key", "FormRescueLane"); + xmlWriter->writeAttribute("Value", "true"); + xmlWriter->writeEndElement(); // Bool + xmlWriter->writeStartElement("Bool"); + xmlWriter->writeAttribute("Key", "ZipperMerge"); + xmlWriter->writeAttribute("Value", "true"); + xmlWriter->writeEndElement(); // Bool xmlWriter->writeEndElement(); // Profile xmlWriter->writeEndElement(); // ProfileGroup diff --git a/gui/plugins/pcmSimulation/Models/ConfigurationGeneratorPcm/DataStructuresXml/XmlSlaveConfig.cpp b/gui/plugins/pcmSimulation/Models/ConfigurationGeneratorPcm/DataStructuresXml/XmlSlaveConfig.cpp index 9531512fcd1257be54cfe192b82554cc2c5f8f25..de0e1e9ef8859315ebc1bb82e74597bb39e3e442 100644 --- a/gui/plugins/pcmSimulation/Models/ConfigurationGeneratorPcm/DataStructuresXml/XmlSlaveConfig.cpp +++ b/gui/plugins/pcmSimulation/Models/ConfigurationGeneratorPcm/DataStructuresXml/XmlSlaveConfig.cpp @@ -91,6 +91,7 @@ bool XmlSlaveConfig::WriteToXml(QXmlStreamWriter *xmlWriter) xmlWriter->writeAttribute("Value","Clear"); xmlWriter->writeEndElement(); // Weather xmlWriter->writeEndElement(); // Weathers + xmlWriter->writeTextElement("TrafficRules", "Germany"); xmlWriter->writeEndElement(); // Environment diff --git a/sim/contrib/examples/Common/ProfilesCatalog.xml b/sim/contrib/examples/Common/ProfilesCatalog.xml index bd7ff60261c03dae2b6d428fa25fdc016b362f5d..85998b37856660636fd0438204dd6943e984785e 100644 --- a/sim/contrib/examples/Common/ProfilesCatalog.xml +++ b/sim/contrib/examples/Common/ProfilesCatalog.xml @@ -181,4 +181,27 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sim/contrib/examples/Common/slaveConfig.xml b/sim/contrib/examples/Common/slaveConfig.xml index 49b5ecd708d7079a8b3047a5a09ba4a3f92b5dd4..be4c849face8ba4db77ad1de90734f0e496af0e7 100644 --- a/sim/contrib/examples/Common/slaveConfig.xml +++ b/sim/contrib/examples/Common/slaveConfig.xml @@ -27,6 +27,7 @@ + Germany @@ -77,4 +78,4 @@ DefaultRuntimeCommon - \ No newline at end of file + diff --git a/sim/contrib/examples/Configurations/ADAS_AEB_CutIn/ProfilesCatalog.xml b/sim/contrib/examples/Configurations/ADAS_AEB_CutIn/ProfilesCatalog.xml index 0a5e945f5c81763550e58ccadb3cdec7a6dbd376..4aacffd4bfb01a5046d6143c767c9ef88b3c6078 100644 --- a/sim/contrib/examples/Configurations/ADAS_AEB_CutIn/ProfilesCatalog.xml +++ b/sim/contrib/examples/Configurations/ADAS_AEB_CutIn/ProfilesCatalog.xml @@ -232,4 +232,27 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sim/contrib/examples/Configurations/ADAS_AEB_CutIn/slaveConfig.xml b/sim/contrib/examples/Configurations/ADAS_AEB_CutIn/slaveConfig.xml index ba9a62208b412c7d97bd790b89f1ebc0b29a6461..2472d86fe7f62dad0a06ce10b4d98239cad20889 100644 --- a/sim/contrib/examples/Configurations/ADAS_AEB_CutIn/slaveConfig.xml +++ b/sim/contrib/examples/Configurations/ADAS_AEB_CutIn/slaveConfig.xml @@ -27,6 +27,7 @@ + Germany diff --git a/sim/contrib/examples/Configurations/ADAS_AEB_PreventingCollisionWithObstacle/ProfilesCatalog.xml b/sim/contrib/examples/Configurations/ADAS_AEB_PreventingCollisionWithObstacle/ProfilesCatalog.xml index 2d39a6cef4e0d0e61da2516c416a7c78b1cb9e24..b6975149a6fe7003c88bc02621e6095c7437e5bd 100644 --- a/sim/contrib/examples/Configurations/ADAS_AEB_PreventingCollisionWithObstacle/ProfilesCatalog.xml +++ b/sim/contrib/examples/Configurations/ADAS_AEB_PreventingCollisionWithObstacle/ProfilesCatalog.xml @@ -85,4 +85,27 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sim/contrib/examples/Configurations/ADAS_AEB_PreventingCollisionWithObstacle/slaveConfig.xml b/sim/contrib/examples/Configurations/ADAS_AEB_PreventingCollisionWithObstacle/slaveConfig.xml index 56622d36f880560abbcc4f1008028cb0b6303c7d..02b13e6ab761f05b14bbc913d17621ecb31b9991 100644 --- a/sim/contrib/examples/Configurations/ADAS_AEB_PreventingCollisionWithObstacle/slaveConfig.xml +++ b/sim/contrib/examples/Configurations/ADAS_AEB_PreventingCollisionWithObstacle/slaveConfig.xml @@ -24,6 +24,7 @@ + Germany diff --git a/sim/contrib/examples/Configurations/ADAS_AEB_PreventingCollisionWithObstacleInCurve/ProfilesCatalog.xml b/sim/contrib/examples/Configurations/ADAS_AEB_PreventingCollisionWithObstacleInCurve/ProfilesCatalog.xml index 9a414f941ffeb794e937c0621c12216cb809a85f..e1807b3ee884f2c062b684839b3faa73d4433c8e 100644 --- a/sim/contrib/examples/Configurations/ADAS_AEB_PreventingCollisionWithObstacleInCurve/ProfilesCatalog.xml +++ b/sim/contrib/examples/Configurations/ADAS_AEB_PreventingCollisionWithObstacleInCurve/ProfilesCatalog.xml @@ -283,4 +283,27 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sim/contrib/examples/Configurations/ADAS_AEB_PreventingCollisionWithObstacleInCurve/slaveConfig.xml b/sim/contrib/examples/Configurations/ADAS_AEB_PreventingCollisionWithObstacleInCurve/slaveConfig.xml index 9c5b4a6b9d8d9048fcc893c7148726d6022c3c0d..715a85a7ad721c0f20e7bc73025f8bd19358722d 100644 --- a/sim/contrib/examples/Configurations/ADAS_AEB_PreventingCollisionWithObstacleInCurve/slaveConfig.xml +++ b/sim/contrib/examples/Configurations/ADAS_AEB_PreventingCollisionWithObstacleInCurve/slaveConfig.xml @@ -27,6 +27,7 @@ + Germany diff --git a/sim/contrib/examples/Configurations/AFDM_TJunction/slaveConfig.xml b/sim/contrib/examples/Configurations/AFDM_TJunction/slaveConfig.xml index abe4d0cd74a5d003908181178ce7bbca73a88311..7b1e8c1e88511e5059eb346322cf4664d63db8a0 100644 --- a/sim/contrib/examples/Configurations/AFDM_TJunction/slaveConfig.xml +++ b/sim/contrib/examples/Configurations/AFDM_TJunction/slaveConfig.xml @@ -24,6 +24,7 @@ + Germany diff --git a/sim/contrib/examples/Configurations/ByEntityCondition_RelativeLane/ProfilesCatalog.xml b/sim/contrib/examples/Configurations/ByEntityCondition_RelativeLane/ProfilesCatalog.xml old mode 100755 new mode 100644 index 61f960d7cf3b7dab7f8b00f1d585d4152c2f5121..dafb879ad94b3e6f1754009b2dc4822868c143d5 --- a/sim/contrib/examples/Configurations/ByEntityCondition_RelativeLane/ProfilesCatalog.xml +++ b/sim/contrib/examples/Configurations/ByEntityCondition_RelativeLane/ProfilesCatalog.xml @@ -65,4 +65,27 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sim/contrib/examples/Configurations/ByEntityCondition_RelativeLane/slaveConfig.xml b/sim/contrib/examples/Configurations/ByEntityCondition_RelativeLane/slaveConfig.xml old mode 100755 new mode 100644 index ff7158856a4c4203167e876ee54f9b895fc27e25..a4bb39976117e2b8aa95a8985f873aab79fc2511 --- a/sim/contrib/examples/Configurations/ByEntityCondition_RelativeLane/slaveConfig.xml +++ b/sim/contrib/examples/Configurations/ByEntityCondition_RelativeLane/slaveConfig.xml @@ -24,6 +24,7 @@ + Germany diff --git a/sim/contrib/examples/Configurations/ByEntityCondition_RelativeSpeed/ProfilesCatalog.xml b/sim/contrib/examples/Configurations/ByEntityCondition_RelativeSpeed/ProfilesCatalog.xml old mode 100755 new mode 100644 index 90ac80ad858f906da3a5b648021bebd346926ac6..34c39d68c168b802919f47e48f8492b4dbeda01f --- a/sim/contrib/examples/Configurations/ByEntityCondition_RelativeSpeed/ProfilesCatalog.xml +++ b/sim/contrib/examples/Configurations/ByEntityCondition_RelativeSpeed/ProfilesCatalog.xml @@ -65,4 +65,27 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sim/contrib/examples/Configurations/ByEntityCondition_RelativeSpeed/slaveConfig.xml b/sim/contrib/examples/Configurations/ByEntityCondition_RelativeSpeed/slaveConfig.xml old mode 100755 new mode 100644 index ff7158856a4c4203167e876ee54f9b895fc27e25..a4bb39976117e2b8aa95a8985f873aab79fc2511 --- a/sim/contrib/examples/Configurations/ByEntityCondition_RelativeSpeed/slaveConfig.xml +++ b/sim/contrib/examples/Configurations/ByEntityCondition_RelativeSpeed/slaveConfig.xml @@ -24,6 +24,7 @@ + Germany diff --git a/sim/contrib/examples/Configurations/ByEntityCondition_RoadPosition/ProfilesCatalog.xml b/sim/contrib/examples/Configurations/ByEntityCondition_RoadPosition/ProfilesCatalog.xml old mode 100755 new mode 100644 index 8b96f656b690624895bb72fb2fa196a521a9bbd2..5e61c8c7ba3eda35e94dc9aaa19c39735ecf5b7b --- a/sim/contrib/examples/Configurations/ByEntityCondition_RoadPosition/ProfilesCatalog.xml +++ b/sim/contrib/examples/Configurations/ByEntityCondition_RoadPosition/ProfilesCatalog.xml @@ -41,4 +41,27 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sim/contrib/examples/Configurations/ByEntityCondition_RoadPosition/slaveConfig.xml b/sim/contrib/examples/Configurations/ByEntityCondition_RoadPosition/slaveConfig.xml old mode 100755 new mode 100644 index ff7158856a4c4203167e876ee54f9b895fc27e25..a4bb39976117e2b8aa95a8985f873aab79fc2511 --- a/sim/contrib/examples/Configurations/ByEntityCondition_RoadPosition/slaveConfig.xml +++ b/sim/contrib/examples/Configurations/ByEntityCondition_RoadPosition/slaveConfig.xml @@ -24,6 +24,7 @@ + Germany diff --git a/sim/contrib/examples/Configurations/ByEntityCondition_TimeHeadway/ProfilesCatalog.xml b/sim/contrib/examples/Configurations/ByEntityCondition_TimeHeadway/ProfilesCatalog.xml old mode 100755 new mode 100644 index 61f960d7cf3b7dab7f8b00f1d585d4152c2f5121..dafb879ad94b3e6f1754009b2dc4822868c143d5 --- a/sim/contrib/examples/Configurations/ByEntityCondition_TimeHeadway/ProfilesCatalog.xml +++ b/sim/contrib/examples/Configurations/ByEntityCondition_TimeHeadway/ProfilesCatalog.xml @@ -65,4 +65,27 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sim/contrib/examples/Configurations/ByEntityCondition_TimeHeadway/slaveConfig.xml b/sim/contrib/examples/Configurations/ByEntityCondition_TimeHeadway/slaveConfig.xml old mode 100755 new mode 100644 index ff7158856a4c4203167e876ee54f9b895fc27e25..a4bb39976117e2b8aa95a8985f873aab79fc2511 --- a/sim/contrib/examples/Configurations/ByEntityCondition_TimeHeadway/slaveConfig.xml +++ b/sim/contrib/examples/Configurations/ByEntityCondition_TimeHeadway/slaveConfig.xml @@ -24,6 +24,7 @@ + Germany diff --git a/sim/contrib/examples/Configurations/ByEntityCondition_TimeToCollision/ProfilesCatalog.xml b/sim/contrib/examples/Configurations/ByEntityCondition_TimeToCollision/ProfilesCatalog.xml old mode 100755 new mode 100644 index 61f960d7cf3b7dab7f8b00f1d585d4152c2f5121..dafb879ad94b3e6f1754009b2dc4822868c143d5 --- a/sim/contrib/examples/Configurations/ByEntityCondition_TimeToCollision/ProfilesCatalog.xml +++ b/sim/contrib/examples/Configurations/ByEntityCondition_TimeToCollision/ProfilesCatalog.xml @@ -65,4 +65,27 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sim/contrib/examples/Configurations/ByEntityCondition_TimeToCollision/slaveConfig.xml b/sim/contrib/examples/Configurations/ByEntityCondition_TimeToCollision/slaveConfig.xml old mode 100755 new mode 100644 index ff7158856a4c4203167e876ee54f9b895fc27e25..a4bb39976117e2b8aa95a8985f873aab79fc2511 --- a/sim/contrib/examples/Configurations/ByEntityCondition_TimeToCollision/slaveConfig.xml +++ b/sim/contrib/examples/Configurations/ByEntityCondition_TimeToCollision/slaveConfig.xml @@ -24,6 +24,7 @@ + Germany diff --git a/sim/contrib/examples/Configurations/LocalizationOnJunction/slaveConfig.xml b/sim/contrib/examples/Configurations/LocalizationOnJunction/slaveConfig.xml index feb2a907eee5a89571b896a20b2d3ff450da45d4..fcc206ad3bf4bba5ba73a6caea5839411d42460d 100644 --- a/sim/contrib/examples/Configurations/LocalizationOnJunction/slaveConfig.xml +++ b/sim/contrib/examples/Configurations/LocalizationOnJunction/slaveConfig.xml @@ -24,6 +24,7 @@ + Germany diff --git a/sim/contrib/examples/Configurations/OSCAction_DoubleSinusoidalLaneChangeLeft_Absolute/ProfilesCatalog.xml b/sim/contrib/examples/Configurations/OSCAction_DoubleSinusoidalLaneChangeLeft_Absolute/ProfilesCatalog.xml old mode 100755 new mode 100644 index 8b96f656b690624895bb72fb2fa196a521a9bbd2..5e61c8c7ba3eda35e94dc9aaa19c39735ecf5b7b --- a/sim/contrib/examples/Configurations/OSCAction_DoubleSinusoidalLaneChangeLeft_Absolute/ProfilesCatalog.xml +++ b/sim/contrib/examples/Configurations/OSCAction_DoubleSinusoidalLaneChangeLeft_Absolute/ProfilesCatalog.xml @@ -41,4 +41,27 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sim/contrib/examples/Configurations/OSCAction_DoubleSinusoidalLaneChangeLeft_Absolute/slaveConfig.xml b/sim/contrib/examples/Configurations/OSCAction_DoubleSinusoidalLaneChangeLeft_Absolute/slaveConfig.xml old mode 100755 new mode 100644 index ff7158856a4c4203167e876ee54f9b895fc27e25..a4bb39976117e2b8aa95a8985f873aab79fc2511 --- a/sim/contrib/examples/Configurations/OSCAction_DoubleSinusoidalLaneChangeLeft_Absolute/slaveConfig.xml +++ b/sim/contrib/examples/Configurations/OSCAction_DoubleSinusoidalLaneChangeLeft_Absolute/slaveConfig.xml @@ -24,6 +24,7 @@ + Germany diff --git a/sim/contrib/examples/Configurations/OSCAction_DoubleSinusoidalLaneChangeLeft_Relative/ProfilesCatalog.xml b/sim/contrib/examples/Configurations/OSCAction_DoubleSinusoidalLaneChangeLeft_Relative/ProfilesCatalog.xml old mode 100755 new mode 100644 index 8b96f656b690624895bb72fb2fa196a521a9bbd2..5e61c8c7ba3eda35e94dc9aaa19c39735ecf5b7b --- a/sim/contrib/examples/Configurations/OSCAction_DoubleSinusoidalLaneChangeLeft_Relative/ProfilesCatalog.xml +++ b/sim/contrib/examples/Configurations/OSCAction_DoubleSinusoidalLaneChangeLeft_Relative/ProfilesCatalog.xml @@ -41,4 +41,27 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sim/contrib/examples/Configurations/OSCAction_DoubleSinusoidalLaneChangeLeft_Relative/slaveConfig.xml b/sim/contrib/examples/Configurations/OSCAction_DoubleSinusoidalLaneChangeLeft_Relative/slaveConfig.xml old mode 100755 new mode 100644 index ff7158856a4c4203167e876ee54f9b895fc27e25..a4bb39976117e2b8aa95a8985f873aab79fc2511 --- a/sim/contrib/examples/Configurations/OSCAction_DoubleSinusoidalLaneChangeLeft_Relative/slaveConfig.xml +++ b/sim/contrib/examples/Configurations/OSCAction_DoubleSinusoidalLaneChangeLeft_Relative/slaveConfig.xml @@ -24,6 +24,7 @@ + Germany diff --git a/sim/contrib/examples/Configurations/OSCAction_DoubleSinusoidalLaneChangeRight_Absolute/ProfilesCatalog.xml b/sim/contrib/examples/Configurations/OSCAction_DoubleSinusoidalLaneChangeRight_Absolute/ProfilesCatalog.xml old mode 100755 new mode 100644 index 8b96f656b690624895bb72fb2fa196a521a9bbd2..5e61c8c7ba3eda35e94dc9aaa19c39735ecf5b7b --- a/sim/contrib/examples/Configurations/OSCAction_DoubleSinusoidalLaneChangeRight_Absolute/ProfilesCatalog.xml +++ b/sim/contrib/examples/Configurations/OSCAction_DoubleSinusoidalLaneChangeRight_Absolute/ProfilesCatalog.xml @@ -41,4 +41,27 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sim/contrib/examples/Configurations/OSCAction_DoubleSinusoidalLaneChangeRight_Absolute/slaveConfig.xml b/sim/contrib/examples/Configurations/OSCAction_DoubleSinusoidalLaneChangeRight_Absolute/slaveConfig.xml old mode 100755 new mode 100644 index ff7158856a4c4203167e876ee54f9b895fc27e25..a4bb39976117e2b8aa95a8985f873aab79fc2511 --- a/sim/contrib/examples/Configurations/OSCAction_DoubleSinusoidalLaneChangeRight_Absolute/slaveConfig.xml +++ b/sim/contrib/examples/Configurations/OSCAction_DoubleSinusoidalLaneChangeRight_Absolute/slaveConfig.xml @@ -24,6 +24,7 @@ + Germany diff --git a/sim/contrib/examples/Configurations/OSCAction_DoubleSinusoidalLaneChangeRight_Relative/ProfilesCatalog.xml b/sim/contrib/examples/Configurations/OSCAction_DoubleSinusoidalLaneChangeRight_Relative/ProfilesCatalog.xml old mode 100755 new mode 100644 index 8b96f656b690624895bb72fb2fa196a521a9bbd2..5e61c8c7ba3eda35e94dc9aaa19c39735ecf5b7b --- a/sim/contrib/examples/Configurations/OSCAction_DoubleSinusoidalLaneChangeRight_Relative/ProfilesCatalog.xml +++ b/sim/contrib/examples/Configurations/OSCAction_DoubleSinusoidalLaneChangeRight_Relative/ProfilesCatalog.xml @@ -41,4 +41,27 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sim/contrib/examples/Configurations/OSCAction_DoubleSinusoidalLaneChangeRight_Relative/slaveConfig.xml b/sim/contrib/examples/Configurations/OSCAction_DoubleSinusoidalLaneChangeRight_Relative/slaveConfig.xml old mode 100755 new mode 100644 index ff7158856a4c4203167e876ee54f9b895fc27e25..a4bb39976117e2b8aa95a8985f873aab79fc2511 --- a/sim/contrib/examples/Configurations/OSCAction_DoubleSinusoidalLaneChangeRight_Relative/slaveConfig.xml +++ b/sim/contrib/examples/Configurations/OSCAction_DoubleSinusoidalLaneChangeRight_Relative/slaveConfig.xml @@ -24,6 +24,7 @@ + Germany diff --git a/sim/contrib/examples/Configurations/OSCAction_RemoveAgent/ProfilesCatalog.xml b/sim/contrib/examples/Configurations/OSCAction_RemoveAgent/ProfilesCatalog.xml index 27d5d14c4c9543ceda596bf77b4d3eae1b2355f4..1a9b50c6fe203aaeba34c4c91c8ed160da8364f0 100644 --- a/sim/contrib/examples/Configurations/OSCAction_RemoveAgent/ProfilesCatalog.xml +++ b/sim/contrib/examples/Configurations/OSCAction_RemoveAgent/ProfilesCatalog.xml @@ -23,4 +23,27 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sim/contrib/examples/Configurations/OSCAction_RemoveAgent/slaveConfig.xml b/sim/contrib/examples/Configurations/OSCAction_RemoveAgent/slaveConfig.xml old mode 100755 new mode 100644 index ff7158856a4c4203167e876ee54f9b895fc27e25..a4bb39976117e2b8aa95a8985f873aab79fc2511 --- a/sim/contrib/examples/Configurations/OSCAction_RemoveAgent/slaveConfig.xml +++ b/sim/contrib/examples/Configurations/OSCAction_RemoveAgent/slaveConfig.xml @@ -24,6 +24,7 @@ + Germany diff --git a/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeLeft_Absolute/ProfilesCatalog.xml b/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeLeft_Absolute/ProfilesCatalog.xml old mode 100755 new mode 100644 index 8b96f656b690624895bb72fb2fa196a521a9bbd2..5e61c8c7ba3eda35e94dc9aaa19c39735ecf5b7b --- a/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeLeft_Absolute/ProfilesCatalog.xml +++ b/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeLeft_Absolute/ProfilesCatalog.xml @@ -41,4 +41,27 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeLeft_Absolute/slaveConfig.xml b/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeLeft_Absolute/slaveConfig.xml old mode 100755 new mode 100644 index ff7158856a4c4203167e876ee54f9b895fc27e25..a4bb39976117e2b8aa95a8985f873aab79fc2511 --- a/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeLeft_Absolute/slaveConfig.xml +++ b/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeLeft_Absolute/slaveConfig.xml @@ -24,6 +24,7 @@ + Germany diff --git a/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeLeft_Relative/ProfilesCatalog.xml b/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeLeft_Relative/ProfilesCatalog.xml old mode 100755 new mode 100644 index 8b96f656b690624895bb72fb2fa196a521a9bbd2..5e61c8c7ba3eda35e94dc9aaa19c39735ecf5b7b --- a/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeLeft_Relative/ProfilesCatalog.xml +++ b/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeLeft_Relative/ProfilesCatalog.xml @@ -41,4 +41,27 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeLeft_Relative/slaveConfig.xml b/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeLeft_Relative/slaveConfig.xml old mode 100755 new mode 100644 index ff7158856a4c4203167e876ee54f9b895fc27e25..a4bb39976117e2b8aa95a8985f873aab79fc2511 --- a/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeLeft_Relative/slaveConfig.xml +++ b/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeLeft_Relative/slaveConfig.xml @@ -24,6 +24,7 @@ + Germany diff --git a/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeRight_Absolute/ProfilesCatalog.xml b/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeRight_Absolute/ProfilesCatalog.xml old mode 100755 new mode 100644 index 8b96f656b690624895bb72fb2fa196a521a9bbd2..5e61c8c7ba3eda35e94dc9aaa19c39735ecf5b7b --- a/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeRight_Absolute/ProfilesCatalog.xml +++ b/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeRight_Absolute/ProfilesCatalog.xml @@ -41,4 +41,27 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeRight_Absolute/slaveConfig.xml b/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeRight_Absolute/slaveConfig.xml old mode 100755 new mode 100644 index ff7158856a4c4203167e876ee54f9b895fc27e25..a4bb39976117e2b8aa95a8985f873aab79fc2511 --- a/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeRight_Absolute/slaveConfig.xml +++ b/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeRight_Absolute/slaveConfig.xml @@ -24,6 +24,7 @@ + Germany diff --git a/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeRight_Relative/ProfilesCatalog.xml b/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeRight_Relative/ProfilesCatalog.xml old mode 100755 new mode 100644 index 8b96f656b690624895bb72fb2fa196a521a9bbd2..5e61c8c7ba3eda35e94dc9aaa19c39735ecf5b7b --- a/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeRight_Relative/ProfilesCatalog.xml +++ b/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeRight_Relative/ProfilesCatalog.xml @@ -41,4 +41,27 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeRight_Relative/slaveConfig.xml b/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeRight_Relative/slaveConfig.xml old mode 100755 new mode 100644 index ff7158856a4c4203167e876ee54f9b895fc27e25..a4bb39976117e2b8aa95a8985f873aab79fc2511 --- a/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeRight_Relative/slaveConfig.xml +++ b/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeRight_Relative/slaveConfig.xml @@ -24,6 +24,7 @@ + Germany diff --git a/sim/contrib/examples/Configurations/PCM/ProfilesCatalog.xml b/sim/contrib/examples/Configurations/PCM/ProfilesCatalog.xml index 7f003155d3637219eab4c8cd3e0aba8c0d75cccf..c99e3c64d6dee560333fce8e37945a640fa56401 100644 --- a/sim/contrib/examples/Configurations/PCM/ProfilesCatalog.xml +++ b/sim/contrib/examples/Configurations/PCM/ProfilesCatalog.xml @@ -18,6 +18,14 @@ - + + + + + + + + + diff --git a/sim/contrib/examples/Configurations/PCM/slaveConfig.xml b/sim/contrib/examples/Configurations/PCM/slaveConfig.xml index c3b4efd8bbc25eddb8296c52f3b5681a2a0b18c3..c158c7bce5cc5ba5de10e3b5e33d6161564f9cd4 100644 --- a/sim/contrib/examples/Configurations/PCM/slaveConfig.xml +++ b/sim/contrib/examples/Configurations/PCM/slaveConfig.xml @@ -25,6 +25,7 @@ + Germany diff --git a/sim/contrib/examples/Configurations/Pedestrian_Trajectory/ProfilesCatalog.xml b/sim/contrib/examples/Configurations/Pedestrian_Trajectory/ProfilesCatalog.xml index 11b1c08acfdf38288ec368a88c5badbd4103cf08..21b3d592d78c194c7fba188b9c9e1ba7ac564122 100644 --- a/sim/contrib/examples/Configurations/Pedestrian_Trajectory/ProfilesCatalog.xml +++ b/sim/contrib/examples/Configurations/Pedestrian_Trajectory/ProfilesCatalog.xml @@ -194,4 +194,27 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sim/contrib/examples/Configurations/Sensor_Latency/ProfilesCatalog.xml b/sim/contrib/examples/Configurations/Sensor_Latency/ProfilesCatalog.xml index 104eb9655b43f654478cb6a4e7909d74485cec87..9b9ad1b07904ef966daa26c437f1aa28834931ec 100644 --- a/sim/contrib/examples/Configurations/Sensor_Latency/ProfilesCatalog.xml +++ b/sim/contrib/examples/Configurations/Sensor_Latency/ProfilesCatalog.xml @@ -57,4 +57,27 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sim/contrib/examples/Configurations/Sensor_Latency/slaveConfig.xml b/sim/contrib/examples/Configurations/Sensor_Latency/slaveConfig.xml index 99c763983fd9f4f807f19dd859ec3852c684ef1b..cc2ee1bfddc9944ecbedad5c36c019b0f61fb556 100644 --- a/sim/contrib/examples/Configurations/Sensor_Latency/slaveConfig.xml +++ b/sim/contrib/examples/Configurations/Sensor_Latency/slaveConfig.xml @@ -27,6 +27,7 @@ + Germany diff --git a/sim/contrib/examples/Configurations/StaticAgentCollision/ProfilesCatalog.xml b/sim/contrib/examples/Configurations/StaticAgentCollision/ProfilesCatalog.xml index 642042c27c6c30b18e1c912aeff0fcbb90f586d2..4ba31f05cdda1c1e31b39b6365293ec1d8ae2b23 100644 --- a/sim/contrib/examples/Configurations/StaticAgentCollision/ProfilesCatalog.xml +++ b/sim/contrib/examples/Configurations/StaticAgentCollision/ProfilesCatalog.xml @@ -157,4 +157,27 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sim/contrib/examples/Configurations/TrafficJam/slaveConfig.xml b/sim/contrib/examples/Configurations/TrafficJam/slaveConfig.xml index 5f8866ae989ef29226fae84220834581a5522ea3..af8cc8a6306717dbf0d35904904c97cd7f1b72b9 100644 --- a/sim/contrib/examples/Configurations/TrafficJam/slaveConfig.xml +++ b/sim/contrib/examples/Configurations/TrafficJam/slaveConfig.xml @@ -24,6 +24,7 @@ + Germany diff --git a/sim/include/slaveConfigInterface.h b/sim/include/slaveConfigInterface.h index 062b90a1898dee8f9dfcefd0ac8c5ac08ec79673..04bfefb154efb8b3d438e7b194b7aca4f82ac418 100644 --- a/sim/include/slaveConfigInterface.h +++ b/sim/include/slaveConfigInterface.h @@ -50,6 +50,7 @@ struct EnvironmentConfig IntProbabilities visibilityDistances {}; DoubleProbabilities frictions {}; StringProbabilities weathers {}; + std::string trafficRules {}; }; //----------------------------------------------------------------------------- diff --git a/sim/include/worldInterface.h b/sim/include/worldInterface.h index 74057150d38c8e54889579a0288e917c2e248d2a..b600d59fda20d0fdbc44e7e854cef2fc76989d55 100644 --- a/sim/include/worldInterface.h +++ b/sim/include/worldInterface.h @@ -120,12 +120,11 @@ public: virtual double GetVisibilityDistance() const = 0; //----------------------------------------------------------------------------- - //! Sets the world parameters like weekday, library - //! @param[in] worldParamter parameter to setup world + //! Retrieves traffic rules //! - //! @return + //! @return traffic rules //----------------------------------------------------------------------------- - virtual void SetParameter(WorldParameter *worldParameter) = 0; + virtual const TrafficRules& GetTrafficRules() const = 0; //----------------------------------------------------------------------------- //! Sets the world parameters like weekday, library diff --git a/sim/src/common/globalDefinitions.h b/sim/src/common/globalDefinitions.h index 60b1b7ab094e5dd50be2eaaf1bd255aec956c3b3..4592e88be20668ff67a1061e431f11ba8560d33f 100644 --- a/sim/src/common/globalDefinitions.h +++ b/sim/src/common/globalDefinitions.h @@ -368,42 +368,14 @@ enum class LaneCategory RightMostLane }; -class WorldParameter +//! Defines which traffic rules are in effect +struct TrafficRules { -public: - WorldParameter(Weekday weekday, - int timeOfDay, - const std::string &libraryName) : - weekday(weekday), - timeOfDay(timeOfDay), - libraryName(libraryName) - { - } - WorldParameter(const WorldParameter &) = delete; - WorldParameter(WorldParameter &&) = delete; - WorldParameter &operator=(const WorldParameter &) = delete; - WorldParameter &operator=(WorldParameter &&) = delete; - virtual ~WorldParameter() = default; - - Weekday GetWeekday() - { - return weekday; - } - - int GetTimeOfDay() - { - return timeOfDay; - } - - const std::string &GetLibraryName() const - { - return libraryName; - } - -private: - Weekday weekday; - int timeOfDay; - const std::string libraryName; + double openSpeedLimit; //!< maximum allowed speed if not restricted by signs + bool keepToOuterLanes; //!< if true, vehicles must use the outermost free lane for driving + bool dontOvertakeOnOuterLanes; //!< if true, it is prohibited to overtake another vehicle, that is driving further left (or right for lefthand traffic) + bool formRescueLane; //!< if true, vehicles driving in a traffic jam must form a corridor for emergency vehicles + bool zipperMerge; //!< if true all merging shall be performed using zipper merge }; //----------------------------------------------------------------------------- diff --git a/sim/src/core/slave/bindings/world.h b/sim/src/core/slave/bindings/world.h index 49e243e5c46f16f0907c288b61b78666768d5e37..2cdf41d143184811ed3aeeb0a64ebd5d5de90af5 100644 --- a/sim/src/core/slave/bindings/world.h +++ b/sim/src/core/slave/bindings/world.h @@ -107,6 +107,11 @@ public: return implementation->GetVisibilityDistance(); } + const TrafficRules& GetTrafficRules() const override + { + return implementation->GetTrafficRules(); + } + double GetFriction() const override { return implementation->GetFriction(); @@ -278,8 +283,6 @@ public: //----------------------------------------------------------------------------- //! Instantiate the world by creating a WorldInterface out of a world library - //! with given world parameters - //! @param[in] worldParameter parameters of world inclusive library path //! //! @return true if successful //----------------------------------------------------------------------------- @@ -416,10 +419,6 @@ public: { return implementation->GetWeekday(); } - virtual void SetParameter(WorldParameter *worldParameter) override - { - return implementation->SetParameter(worldParameter); - } virtual bool CreateGlobalDrivingView() override { return implementation->CreateGlobalDrivingView(); diff --git a/sim/src/core/slave/framework/runInstantiator.cpp b/sim/src/core/slave/framework/runInstantiator.cpp index ba8f5c72e144928acc7411328158d89059ccc705..8a793de8aca128f45d5869cf2418ecb49bbc0df2 100644 --- a/sim/src/core/slave/framework/runInstantiator.cpp +++ b/sim/src/core/slave/framework/runInstantiator.cpp @@ -49,6 +49,7 @@ bool RunInstantiator::ExecuteRun() auto &scenario = *configurationContainer.GetScenario(); auto &scenery = *configurationContainer.GetScenery(); auto &slaveConfig = *configurationContainer.GetSlaveConfig(); + auto &profiles = *configurationContainer.GetProfiles(); auto &experimentConfig = slaveConfig.GetExperimentConfig(); auto &environmentConfig = slaveConfig.GetEnvironmentConfig(); @@ -72,7 +73,7 @@ bool RunInstantiator::ExecuteRun() LOG_INTERN(LogLevel::DebugCore) << std::endl << "### run number: " << invocation << " ###"; auto seed = static_cast(experimentConfig.randomSeed + invocation); - if (!InitRun(seed, environmentConfig, runResult)) + if (!InitRun(seed, environmentConfig, profiles, runResult)) { LOG_INTERN(LogLevel::DebugCore) << std::endl << "### run initialization failed ###"; @@ -152,23 +153,27 @@ void RunInstantiator::InitializeSpawnPointNetwork() "Failed to instantiate SpawnPointNetwork"); } -std::unique_ptr RunInstantiator::SampleWorldParameters(const EnvironmentConfig& environmentConfig, StochasticsInterface* stochastics, const openpass::common::RuntimeInformation& runtimeInformation) +std::unique_ptr RunInstantiator::SampleWorldParameters(const EnvironmentConfig& environmentConfig, const ProfileGroup& trafficRules, StochasticsInterface* stochastics, const openpass::common::RuntimeInformation& runtimeInformation) { - return openpass::parameter::make( - runtimeInformation, openpass::parameter::ParameterSetLevel1 { - { "TimeOfDay", Sampler::Sample(environmentConfig.timeOfDays, stochastics) }, - { "VisibilityDistance", Sampler::Sample(environmentConfig.visibilityDistances, stochastics) }, - { "Friction", Sampler::Sample(environmentConfig.frictions, stochastics) }, - { "Weather", Sampler::Sample(environmentConfig.weathers, stochastics) }} - ); + auto trafficRule = helper::map::query(trafficRules, environmentConfig.trafficRules); + ThrowIfFalse(trafficRule.has_value(), "No traffic rule set with name " + environmentConfig.trafficRules + " defined in ProfilesCatalog"); + auto parameters = trafficRule.value(); + parameters.emplace_back("TimeOfDay", Sampler::Sample(environmentConfig.timeOfDays, stochastics)); + parameters.emplace_back("VisibilityDistance", Sampler::Sample(environmentConfig.visibilityDistances, stochastics)); + parameters.emplace_back("Friction", Sampler::Sample(environmentConfig.frictions, stochastics)); + parameters.emplace_back("Weather", Sampler::Sample(environmentConfig.weathers, stochastics)); + + return openpass::parameter::make(runtimeInformation, parameters); } -bool RunInstantiator::InitRun(std::uint32_t seed, const EnvironmentConfig &environmentConfig, RunResult &runResult) +bool RunInstantiator::InitRun(std::uint32_t seed, const EnvironmentConfig &environmentConfig, ProfilesInterface& profiles, RunResult &runResult) { try { stochastics.InitGenerator(seed); - worldParameter = SampleWorldParameters(environmentConfig, &stochastics, configurationContainer.GetRuntimeInformation()); + auto trafficRules = helper::map::query(profiles.GetProfileGroups(), "TrafficRules"); + ThrowIfFalse(trafficRules.has_value(), "No traffic rules defined in ProfilesCatalog"); + worldParameter = SampleWorldParameters(environmentConfig, trafficRules.value(), &stochastics, configurationContainer.GetRuntimeInformation()); world.ExtractParameter(worldParameter.get()); observationNetwork.InitRun(); diff --git a/sim/src/core/slave/framework/runInstantiator.h b/sim/src/core/slave/framework/runInstantiator.h index 8416aed6fb5d3b3d1256b15e9b245b6f7361178c..6aeea0eb24f9d9945a48be24e6c5cbe2278c43c8 100644 --- a/sim/src/core/slave/framework/runInstantiator.h +++ b/sim/src/core/slave/framework/runInstantiator.h @@ -87,10 +87,10 @@ public: private: bool InitPreRun(ScenarioInterface& scenario, SceneryInterface& scenery); - bool InitRun(std::uint32_t seed, const EnvironmentConfig& environmentConfig, RunResult& runResult); + bool InitRun(std::uint32_t seed, const EnvironmentConfig& environmentConfig, ProfilesInterface &profiles, RunResult& runResult); void InitializeFrameworkModules(ScenarioInterface &scenario); void InitializeSpawnPointNetwork(); - std::unique_ptr SampleWorldParameters(const EnvironmentConfig& environmentConfig, StochasticsInterface* stochastics, const openpass::common::RuntimeInformation& runtimeInformation); + std::unique_ptr SampleWorldParameters(const EnvironmentConfig& environmentConfig, const ProfileGroup& trafficRules, StochasticsInterface* stochastics, const openpass::common::RuntimeInformation& runtimeInformation); void ClearRun(); diff --git a/sim/src/core/slave/importer/importerLoggingHelper.h b/sim/src/core/slave/importer/importerLoggingHelper.h index 6e8cd6725769a63538030aaf580b4dddd1ecccca..e3775ec014e7e68bcea8d7a3ab091ce4f285b2df 100644 --- a/sim/src/core/slave/importer/importerLoggingHelper.h +++ b/sim/src/core/slave/importer/importerLoggingHelper.h @@ -446,6 +446,7 @@ namespace openpass::importer::xml::slaveConfigImporter::tag constexpr char spawners[] {"Spawners"}; constexpr char timeOfDay[] {"TimeOfDay"}; constexpr char timeOfDays[] {"TimeOfDays"}; + constexpr char trafficRules[] {"TrafficRules"}; constexpr char type[] {"Type"}; constexpr char visibilityDistance[] {"VisibilityDistance"}; constexpr char visibilityDistances[] {"VisibilityDistances"}; diff --git a/sim/src/core/slave/importer/slaveConfigImporter.cpp b/sim/src/core/slave/importer/slaveConfigImporter.cpp index 8ae5b2f9e31c4097f8c10271deaebdd8e0543e27..6fb4ae0779fcc33efdeff600c0852dc706e0ccae 100644 --- a/sim/src/core/slave/importer/slaveConfigImporter.cpp +++ b/sim/src/core/slave/importer/slaveConfigImporter.cpp @@ -114,6 +114,10 @@ void SlaveConfigImporter::ImportEnvironment(QDomElement environmentElement, environmentElement, "Tag " + std::string(TAG::weathers) + " is missing."); ThrowIfFalse(ImportProbabilityMap(weathersElement, "Value", TAG::weather, environmentConfig.weathers, LogErrorAndThrow), weathersElement, "Could not import Probabilities."); + + //Parse traffic rules + ThrowIfFalse(ParseString(environmentElement, TAG::trafficRules, environmentConfig.trafficRules), + environmentElement, "Tag " + std::string(TAG::trafficRules) + " is missing."); } void SlaveConfigImporter::ImportSpawners(const QDomElement &spawnersElement, diff --git a/sim/src/core/slave/modules/World_OSI/WorldImplementation.cpp b/sim/src/core/slave/modules/World_OSI/WorldImplementation.cpp index db7f3313f0e0c4d027b5e07c7905b6930556af43..299a3952ad4f2d3f8b6debca2dd5060a1be72cdb 100644 --- a/sim/src/core/slave/modules/World_OSI/WorldImplementation.cpp +++ b/sim/src/core/slave/modules/World_OSI/WorldImplementation.cpp @@ -79,16 +79,42 @@ const std::vector& WorldImplementation::GetTraffi return trafficObjects; } +const TrafficRules& WorldImplementation::GetTrafficRules() const +{ + return worldParameter.trafficRules; +} + void WorldImplementation::ExtractParameter(ParameterInterface* parameters) { auto intParameter = parameters->GetParametersInt(); auto doubleParameter = parameters->GetParametersDouble(); auto stringParameter = parameters->GetParametersString(); + auto boolParameter = parameters->GetParametersBool(); worldParameter.timeOfDay = stringParameter.at("TimeOfDay"); worldParameter.visibilityDistance = intParameter.at("VisibilityDistance"); worldParameter.friction = doubleParameter.at("Friction"); worldParameter.weather = stringParameter.at("Weather"); + + auto openSpeedLimit = helper::map::query(doubleParameter, "OpenSpeedLimit"); + THROWIFFALSE(openSpeedLimit.has_value(), "Missing traffic rule OpenSpeedLimit") + worldParameter.trafficRules.openSpeedLimit = openSpeedLimit.value(); + + auto keepToOuterLanes = helper::map::query(boolParameter, "KeepToOuterLanes"); + THROWIFFALSE(keepToOuterLanes.has_value(), "Missing traffic rule KeepToOuterLanes") + worldParameter.trafficRules.keepToOuterLanes = keepToOuterLanes.value(); + + auto dontOvertakeOnOuterLanes = helper::map::query(boolParameter, "DontOvertakeOnOuterLanes"); + THROWIFFALSE(dontOvertakeOnOuterLanes.has_value(), "Missing traffic rule DontOvertakeOnOuterLanes") + worldParameter.trafficRules.dontOvertakeOnOuterLanes = dontOvertakeOnOuterLanes.value(); + + auto formRescueLane = helper::map::query(boolParameter, "FormRescueLane"); + THROWIFFALSE(formRescueLane.has_value(), "Missing traffic rule FormRescueLane") + worldParameter.trafficRules.formRescueLane = formRescueLane.value(); + + auto zipperMerge = helper::map::query(boolParameter, "ZipperMerge"); + THROWIFFALSE(zipperMerge.has_value(), "Missing traffic rule ZipperMerge") + worldParameter.trafficRules.zipperMerge = zipperMerge.value(); } void WorldImplementation::Reset() diff --git a/sim/src/core/slave/modules/World_OSI/WorldImplementation.h b/sim/src/core/slave/modules/World_OSI/WorldImplementation.h index c7ea4a4a1502ec9b1293c0919a13dfa3021e03c7..af9b0249e2c84a371d5033d03a76910391f580a2 100644 --- a/sim/src/core/slave/modules/World_OSI/WorldImplementation.h +++ b/sim/src/core/slave/modules/World_OSI/WorldImplementation.h @@ -44,6 +44,7 @@ struct WorldParameterOSI int visibilityDistance {0}; double friction {0.0}; std::string weather {""}; + TrafficRules trafficRules{}; }; #include "osi3/osi_groundtruth.pb.h" @@ -113,6 +114,7 @@ public: const std::list GetRemovedAgentsInPreviousTimestep() override; const std::vector& GetTrafficObjects() const override; + const TrafficRules& GetTrafficRules() const override; // framework internal methods to access members without restrictions void ExtractParameter(ParameterInterface* parameters) override; @@ -253,10 +255,6 @@ public: { throw std::runtime_error("WorldImplementation::GetWeekday not implemented"); } - virtual void SetParameter([[maybe_unused]]WorldParameter *worldParameter) override - { - throw std::runtime_error("WorldImplementation::SetParameter not implemented"); - } virtual bool CreateGlobalDrivingView() override { throw std::runtime_error("WorldImplementation::CreateGlobalDrivingView not implemented"); diff --git a/sim/tests/fakes/gmock/fakeWorld.h b/sim/tests/fakes/gmock/fakeWorld.h index e5782b764b90f0d0a3947bf15d87d673e5171272..b3f1f47488a56677528b8a6f4290b9f287c96ce1 100644 --- a/sim/tests/fakes/gmock/fakeWorld.h +++ b/sim/tests/fakes/gmock/fakeWorld.h @@ -67,6 +67,7 @@ class FakeWorld : public WorldInterface MOCK_CONST_METHOD6(GetObstruction, RouteQueryResult (const RoadGraph& roadGraph, RoadGraphVertex startNode, const GlobalRoadPosition& ownPosition, const ObjectPosition& otherPosition, const std::vector& objectCorner, const Common::Vector2d& mainLaneLocator)); MOCK_CONST_METHOD0(GetTimeOfDay, std::string()); + MOCK_CONST_METHOD0(GetTrafficRules, const TrafficRules& ()); MOCK_CONST_METHOD5(GetTrafficSignsInRange, RouteQueryResult>(const RoadGraph& roadGraph, RoadGraphVertex startNode, int laneId, double startDistance, double searchRange)); MOCK_CONST_METHOD5(GetRoadMarkingsInRange, RouteQueryResult>(const RoadGraph& roadGraph, RoadGraphVertex startNode, int laneId, double startDistance, double searchRange)); MOCK_CONST_METHOD5(GetTrafficLightsInRange, RouteQueryResult>(const RoadGraph& roadGraph, RoadGraphVertex startNode, int laneId, double startDistance, double searchRange)); @@ -85,7 +86,6 @@ class FakeWorld : public WorldInterface MOCK_METHOD1(QueueAgentUpdate, void(std::function func)); MOCK_METHOD2(QueueAgentUpdate, void(std::function func, double val)); MOCK_METHOD0(Reset, void()); - MOCK_METHOD1(SetParameter, void(WorldParameter *worldParameter)); MOCK_METHOD1(SetTimeOfDay, void(int timeOfDay)); MOCK_METHOD1(SetWeekday, void(Weekday weekday)); MOCK_METHOD1(SyncGlobalData, void(int timestamp)); diff --git a/sim/tests/integrationTests/OpenPassSlave_IntegrationTests/Resources/ImporterTest/invalidSpawnPointSlaveConfig.xml b/sim/tests/integrationTests/OpenPassSlave_IntegrationTests/Resources/ImporterTest/invalidSpawnPointSlaveConfig.xml index d1563ecea51c201a5c644b561b69ba8f9062cc39..21f80cd1559773ae650472d7b56627318d6bc31e 100644 --- a/sim/tests/integrationTests/OpenPassSlave_IntegrationTests/Resources/ImporterTest/invalidSpawnPointSlaveConfig.xml +++ b/sim/tests/integrationTests/OpenPassSlave_IntegrationTests/Resources/ImporterTest/invalidSpawnPointSlaveConfig.xml @@ -28,6 +28,7 @@ + Germany diff --git a/sim/tests/integrationTests/OpenPassSlave_IntegrationTests/Resources/ImporterTest/validSpawnPointSlaveConfig.xml b/sim/tests/integrationTests/OpenPassSlave_IntegrationTests/Resources/ImporterTest/validSpawnPointSlaveConfig.xml index 11fa0ea9bc3082ca899c0bb2b2c14797708cf91f..277949e6aa2817ea47ec0c4585f0b0ed84d05fbb 100644 --- a/sim/tests/integrationTests/OpenPassSlave_IntegrationTests/Resources/ImporterTest/validSpawnPointSlaveConfig.xml +++ b/sim/tests/integrationTests/OpenPassSlave_IntegrationTests/Resources/ImporterTest/validSpawnPointSlaveConfig.xml @@ -27,6 +27,7 @@ + Germany diff --git a/sim/tests/unitTests/core/slave/slaveConfigImporter_Tests.cpp b/sim/tests/unitTests/core/slave/slaveConfigImporter_Tests.cpp index c04c1e500f50e7e211e929c1e98de3c505e2bcc6..4d61c750ca74cb4d83fb4b2e61c95f3f21e521b8 100644 --- a/sim/tests/unitTests/core/slave/slaveConfigImporter_Tests.cpp +++ b/sim/tests/unitTests/core/slave/slaveConfigImporter_Tests.cpp @@ -292,6 +292,7 @@ TEST(SlaveConfigImporter_UnitTests, ImportEnvironmentConfigSuccessfully) "" "" "" + "Country" "" ); @@ -308,6 +309,7 @@ TEST(SlaveConfigImporter_UnitTests, ImportEnvironmentConfigSuccessfully) Pair(0.7, 0.5))); ASSERT_THAT(environmentConfig.weathers, ElementsAre(Pair("Rainy", 0.5), Pair("Snowy", 0.5))); + ASSERT_THAT(environmentConfig.trafficRules, Eq("Country")); } TEST(SlaveConfigImporter_UnitTests, ImportEnvironmentConfigUnsuccessfully)