Skip to content
Snippets Groups Projects

Compare revisions

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

Source

Select target project
No results found

Target

Select target project
  • eclipse/openpass/openscenario1_engine
  • xiaopan/openscenario1_engine
  • AndreasB/openscenario1_engine
  • kcantero/openscenario1_engine
  • iabed/openscenario1_engine
  • stephenryan/openscenario1_engine
  • nmraghu/openscenario1_engine
  • dweiwg6/openscenario1_engine
  • shankarpatali/openscenario1_engine
  • etiennep/openscenario1_engine
  • fpruefer/openscenario1_engine
  • elnagdy/openscenario1_engine
  • rparisha2/ose
  • naidagoro/openscenario1engine
  • kilyas/openscenario1_engine
  • djantschar/openscenario1_engine
  • anastasiiavolkova/openscenario1_engine
  • ziqi/openscenario1_engine
  • daniilnikulin/openscenario1_engine
  • maxhei/openscenario1_engine
  • ansssardesa/openscenario1_engine
  • mkellerer/openscenario1_engine
22 results
Show changes
Commits on Source (31)
Showing
with 295 additions and 76 deletions
__pycache__
.devcontainer
.dll
.env
.pytest_cache
.so
.venv
.vscode
.pytest_cache
__pycache__
generator.log
*.orig
*.bkp
.devcontainer
\ No newline at end of file
*.orig
build
deps
generator.log
MODULE.*
......@@ -78,6 +78,12 @@ Yase
units_nhh
* License: MIT
nlohmann (JSON for Modern C++)
* License: MIT License
* Homepage: https://nlohmann.github.io/json/
* Repository: https://github.com/nlohmann/json
* Version: 3.9.1
MantleAPI
* License: EPL 2.0
......
......@@ -113,8 +113,9 @@ The following Actions and Conditions of [ASAM OpenSCENARIO XML](https://publicat
| ByEntityCondition | [RelativeDistanceCondition](https://publications.pages.asam.net/standards/ASAM_OpenSCENARIO/ASAM_OpenSCENARIO_XML/latest/generated/content/RelativeDistanceCondition.html) | Supports only `RelativeDistanceType::kLongitudinal && CoordinateSystem::kEntity` |
| ByEntityCondition | [RelativeSpeedCondition](https://publications.pages.asam.net/standards/ASAM_OpenSCENARIO/ASAM_OpenSCENARIO_XML/latest/generated/content/RelativeSpeedCondition.html) | ✔️ Complete |
| ByEntityCondition | [SpeedCondition](https://publications.pages.asam.net/standards/ASAM_OpenSCENARIO/ASAM_OpenSCENARIO_XML/latest/generated/content/SpeedCondition.html) | ✔️ Without direction |
| ByEntityCondition | [TimeHeadwayCondition](https://publications.pages.asam.net/standards/ASAM_OpenSCENARIO/ASAM_OpenSCENARIO_XML/latest/generated/content/TimeHeadwayCondition.html) | Supports only `DistanceType::kEuclidean` and `CoordinateSystem::kEntity` or `CoordinateSystem::kLane` |
| ByEntityCondition | [TimeHeadwayCondition](https://publications.pages.asam.net/standards/ASAM_OpenSCENARIO/ASAM_OpenSCENARIO_XML/latest/generated/content/TimeHeadwayCondition.html) | Supports only `DistanceType::kEuclidean` and `CoordinateSystem::kEntity` or `CoordinateSystem::kLane` or `CoordinateSystem::kRoad(freespace=false)` |
| ByEntityCondition | [TimeToCollisionCondition](https://publications.pages.asam.net/standards/ASAM_OpenSCENARIO/ASAM_OpenSCENARIO_XML/latest/generated/content/TimeToCollisionCondition.html) | In clarification: [Issue #7](https://gitlab.eclipse.org/eclipse/openopass/openscenario1_engine/-/issues/7) |
| ByEntityCondition | [TraveledDistanceCondition](https://publications.pages.asam.net/standards/ASAM_OpenSCENARIO/ASAM_OpenSCENARIO_XML/latest/generated/content/TraveledDistanceCondition.html) | ✔️ Complete |
| ByValueCondition | [SimulationTimeCondition](https://publications.pages.asam.net/standards/ASAM_OpenSCENARIO/ASAM_OpenSCENARIO_XML/latest/generated/content/SimulationTimeCondition.html) | ✔️ Complete |
| ByValueCondition | [UserDefinedValueCondition](https://publications.pages.asam.net/standards/ASAM_OpenSCENARIO/ASAM_OpenSCENARIO_XML/latest/generated/content/UserDefinedValueCondition.html) | ✔️ Complete |
......@@ -135,7 +136,7 @@ The following Actions and Conditions of [ASAM OpenSCENARIO XML](https://publicat
| _none_ | [VisibilityAction](https://publications.pages.asam.net/standards/ASAM_OpenSCENARIO/ASAM_OpenSCENARIO_XML/latest/generated/content/VisibilityAction.html) | ✔️ Complete |
| MotionControlAction | [FollowTrajectoryAction](https://publications.pages.asam.net/standards/ASAM_OpenSCENARIO/ASAM_OpenSCENARIO_XML/latest/generated/content/FollowTrajectoryAction.html) | 🚧 Supports trajectory shapes polyline and clothoid spline + (Possibility for optimization in the base class) |
| MotionControlAction | [LaneChangeAction](https://publications.pages.asam.net/standards/ASAM_OpenSCENARIO/ASAM_OpenSCENARIO_XML/latest/generated/content/LaneChangeAction.html) | ✔️ Complete |
| MotionControlAction | [LaneOffsetAction](https://publications.pages.asam.net/standards/ASAM_OpenSCENARIO/ASAM_OpenSCENARIO_XML/latest/generated/content/LaneOffsetAction.html) | 🚧 Supports only AbsoluteTargetLaneOffset. In addition, LaneOffsetActionDynamics and continuous are ignored at the moment |
| MotionControlAction | [LaneOffsetAction](https://publications.pages.asam.net/standards/ASAM_OpenSCENARIO/ASAM_OpenSCENARIO_XML/latest/generated/content/LaneOffsetAction.html) | ✔️ Complete |
| MotionControlAction | [LateralDistanceAction](https://www.asam.net/static_downloads/ASAM_OpenSCENARIO_V1.1.1_Model_Documentation/modelDocumentation/content/LateralDistanceAction.html) | ✔️ Does not interpret `DynamicConstraints` and restricted by conversion: see [Conversions::Coordinate System](#coordinate-system) and [Conversions::Continuous](#continuous) |
| MotionControlAction | [LongitudinalDistanceAction](https://publications.pages.asam.net/standards/ASAM_OpenSCENARIO/ASAM_OpenSCENARIO_XML/latest/generated/content/LongitudinalDistanceAction.html) | ❌ Not yet implemented |
| MotionControlAction | [SpeedAction](https://publications.pages.asam.net/standards/ASAM_OpenSCENARIO/ASAM_OpenSCENARIO_XML/latest/generated/content/SpeedAction.html) | 🚧 Supports shapes linear and cubic, latter using linear shape coefficients (see [MR74](https://gitlab.eclipse.org/eclipse/openopass/openscenario1_engine/-/merge_requests/74)) |
......@@ -250,17 +251,29 @@ Converts `NET_ASAM_OPENSCENARIO::v1_3::ITrajectoryRef` object type to [mantle_ap
Converts `NET_ASAM_OPENSCENARIO::v1_3::ITransitionDynamics` object type to [mantle_api::TransitionDynamics](https://gitlab.eclipse.org/eclipse/openpass/mantle-api/-/blob/master/include/MantleAPI/Traffic/control_strategy.h)
**Note**: Right now the property `followingMode` is not considered.
# Customizations w.r.t ASAM OpenSCENARIO Standard
## Property Parsing
The OpenSCENARIO standard does not impose strict requirements on the format of custom properties, allowing for flexibility in their definition.
To facilitate this, the OpenScenarioEngine uses JSON to parse string-type properties into an internal object format.
This approach enables the definition of complex properties, such as distributions, which can be used within actions.
For example, a velocity distribution might be defined and used in a `TrafficAreaAction`.
For more information on how to define these properties, refer to the documentation an provided schemas in [doc/json_properties](./doc/json_properties).
# Dependencies
| Dependency | Commit | Version | License |
| ---------- | ------ | ------- | ------- |
| [MantleAPI](https://gitlab.eclipse.org/eclipse/openpass/mantle-api) | ce2a378d | 11.0.0 | EPL 2.0 |
| [OpenSCENARIO API](https://github.com/RA-Consulting-GmbH/openscenario.api.test/) | 5980e88 | 1.4.0 | Apache 2.0 |
| [YASE](https://gitlab.eclipse.org/eclipse/openpass/yase) | d0c0e58d | | EPL 2.0 |
| [Units](https://github.com/nholthaus/units) | e27eed9 | 2.3.4 | MIT License |
| [googletest](https://github.com/google/googletest) | f8d7d77 | 1.14.0 | BSD-3-Clause License |
| [CPM](https://github.com/cpm-cmake/CPM.cmake) | 03705fc | 0.36.0 | MIT License |
| [googletest](https://github.com/google/googletest) | f8d7d77 | 1.14.0 | BSD-3-Clause License |
| [JSON for Modern C++](https://github.com/nlohmann/json) | db78ac1 | 3.9.1 | MIT License |
| [MantleAPI](https://gitlab.eclipse.org/eclipse/openpass/mantle-api) | 7d2ed281 | 18.0.0 | EPL 2.0 |
| [openpass/stochastics-library](https://gitlab.eclipse.org/eclipse/openpass/stochastics-library) | 6c9dde71 | 0.11.0 | EPL 2.0 |
| [OpenSCENARIO API](https://github.com/RA-Consulting-GmbH/openscenario.api.test/) | 5980e88 | 1.4.0 | Apache 2.0 |
| [Units](https://github.com/nholthaus/units) | e27eed9 | 2.3.4 | MIT License |
| [YASE](https://gitlab.eclipse.org/eclipse/openpass/yase) | d0c0e58d | | EPL 2.0 |
# Issues
......
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "ExponentialDistribution",
"type": "object",
"properties": {
"lowerLimit": {
"type": "number",
"description": "Lower limit"
},
"upperLimit": {
"type": "number",
"description": "Upper limit"
},
"expectedValue": {
"type": "number",
"description": "Reciprocal of the rate parameter lambda"
}
},
"required": ["lowerLimit", "upperLimit", "expectedValue"]
}
\ No newline at end of file
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "GammaDistribution",
"type": "object",
"properties": {
"lowerLimit": {
"type": "number",
"description": "Lower limit",
"minimum": 0.0
},
"upperLimit": {
"type": "number",
"description": "Upper limit",
"minimum": 0.0
},
"expectedValue": {
"type": "number",
"description": "Expected value (mean) of the distribution, calculated as alpha / beta",
"minimum": 0.0
},
"variance": {
"type": "number",
"description": "Variance of the distribution, calculated as alpha / beta^2",
"minimum": 0.0
}
},
"required": ["lowerLimit", "upperLimit", "expectedValue", "variance"]
}
\ No newline at end of file
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "ExponentialDistribution",
"type": "object",
"properties": {
"lowerLimit": {
"type": "number",
"description": "Lower limit"
},
"upperLimit": {
"type": "number",
"description": "Upper limit"
},
"expectedValue": {
"type": "number",
"description": "Reciprocal of the rate parameter lambda"
}
},
"required": ["lowerLimit", "upperLimit", "expectedValue"]
}
\ No newline at end of file
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "NormalDistribution",
"type": "object",
"properties": {
"lowerLimit": {
"type": "number",
"description": "Lower limit",
"minimum": 0.0
},
"upperLimit": {
"type": "number",
"description": "Upper limit",
"minimum": 0.0
},
"expectedValue": {
"type": "number",
"description": "Expected value",
"minimum": 0.0
},
"variance": {
"type": "number",
"description": "Variance (square of standard deviation)",
"minimum": 0.0
}
},
"required": ["lowerLimit", "upperLimit", "expectedValue", "variance"]
}
\ No newline at end of file
# JSON Property Strings
The OpenSCENARIO standard does not impose strict requirements on the format of custom properties, allowing for flexibility in their definition.
To facilitate this, the OpenScenarioEngine uses JSON to parse string-type properties into an internal object format.
This approach enables the definition of complex properties, such as distributions, which can be used within actions.
For example, a velocity distribution might be defined and used in a `TrafficAreaAction`.
This folder contains JSON schemas for property strings used by the **OpenScenarioEngine**.
While these schemas are not enforced, they serve as a reference for how to properly define properties, such as distributions, in a way that they are correctly parsed.
## General Usage
```xml
<Property name="SomeProp" value="{ 'type': 'InterpretableType', 'value': 'InterpretableString'" />
```
## Available Distribution Types
- [ExponentialDistribution](./exponential_distribution.json)
- [ǸormalDistribution](./normal_distribution.json)
- [GammaDistribution](./gamma_distribution.json)
- [LogNormalDistribution](./lognormal_distribution.json)
- [UniformDistribution](./uniform_distribution.json)
**Example**
```xml
<Property
name="velocity"
value="{
'type': 'NormalDistribution',
'value':
{
'lowerLimit': 19.265,
'upperLimit': 43.685,
'expectedValue': 31.475,
'variance': 37.271025
}
}" />
```
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "UniformDistribution",
"type": "object",
"properties": {
"lowerLimit": {
"type": "number",
"description": "Lower limit",
"minimum": 0.0
},
"upperLimit": {
"type": "number",
"description": "Upper limit",
"minimum": 0.0
}
},
"required": ["lowerLimit", "upperLimit"]
}
\ No newline at end of file
6.2.1
\ No newline at end of file
7.5.0
......@@ -4,3 +4,4 @@
build
bin
bazel-*
external
......@@ -28,6 +28,7 @@ cc_library(
],
visibility = ["//visibility:public"],
deps = [
"@@//third_party/nlohmann_json",
"@mantle_api",
"@open_scenario_parser",
"@stochastics_library",
......@@ -36,6 +37,18 @@ cc_library(
],
)
cc_binary(
name = "demo",
srcs = glob([
"demo/main.cpp",
]),
deps = [
":open_scenario_engine",
":open_scenario_engine_test_utils",
"@googletest//:gtest_main",
],
)
filegroup(
name = "scenario_environment_test_data",
srcs = [
......@@ -108,6 +121,7 @@ cc_test(
tags = ["test"],
deps = [
":open_scenario_engine",
":open_scenario_engine_test_utils",
":test_utils",
"@googletest//:gtest_main",
"@mantle_api//:test_utils",
......@@ -122,6 +136,7 @@ cc_test(
tags = ["test"],
deps = [
":open_scenario_engine",
":open_scenario_engine_test_utils",
"@googletest//:gtest_main",
"@mantle_api//:test_utils",
],
......@@ -178,9 +193,10 @@ cc_test(
data = [":open_scenario_engine_test_data"],
tags = ["test"],
deps = [
":test_utils",
":open_scenario_engine",
":open_scenario_engine_test_utils",
":test_utils",
"@@//third_party/nlohmann_json",
"@googletest//:gtest_main",
"@mantle_api//:test_utils",
],
......
......@@ -23,11 +23,11 @@ if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()
# YASE
find_package(Yase REQUIRED)
# units https://github.com/nholthaus/units (dependency of MantleAPI)
find_package(MantleAPI REQUIRED)
find_package(nlohmann_json REQUIRED)
find_package(Stochastics REQUIRED)
find_package(units REQUIRED)
find_package(Yase REQUIRED)
# googlemock
include(CPM)
......@@ -39,12 +39,6 @@ CPMAddPackage(
OPTIONS "INSTALL_GTEST OFF" "gtest_force_shared_crt ON"
)
# MantleAPI https://gitlab.eclipse.org/eclipse/simopenpass/scenario_api
find_package(MantleAPI REQUIRED)
find_package(Stochastics REQUIRED)
# see https://stackoverflow.com/a/58495612
set(CMAKE_INSTALL_RPATH $ORIGIN)
......@@ -70,12 +64,17 @@ target_include_directories(
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>
)
target_link_libraries(${PROJECT_NAME} PUBLIC openscenario_api::shared
antlr4_runtime::shared
Yase::agnostic_behavior_tree
units::units
MantleAPI::MantleAPI
PRIVATE Stochastics::Stochastics)
target_link_libraries(${PROJECT_NAME}
PUBLIC
antlr4_runtime::shared
MantleAPI::MantleAPI
units::units
openscenario_api::shared
PRIVATE
nlohmann_json::nlohmann_json
Stochastics::Stochastics
Yase::agnostic_behavior_tree
)
if(USE_CCACHE)
find_program(CCACHE_FOUND ccache)
......@@ -177,6 +176,9 @@ target_sources(
${CMAKE_CURRENT_LIST_DIR}/tests/Conversion/OscToMantle/ConvertScenarioTimeToCollisionConditionTargetTest.cpp
${CMAKE_CURRENT_LIST_DIR}/tests/Conversion/OscToMantle/ConvertScenarioTrafficDefinitionTest.cpp
${CMAKE_CURRENT_LIST_DIR}/tests/Conversion/OscToMantle/ConvertScenarioTrajectoryRefTest.cpp
${CMAKE_CURRENT_LIST_DIR}/tests/Conversion/OscToMantle/ConvertScenarioLaneOffsetActionDynamicsTest.cpp
${CMAKE_CURRENT_LIST_DIR}/tests/Conversion/OscToMantle/ConvertScenarioLaneOffsetTargetTest.cpp
${CMAKE_CURRENT_LIST_DIR}/tests/Conversion/OscToMantle/ConvertScenarioShapeTest.cpp
${CMAKE_CURRENT_LIST_DIR}/tests/Node/AnyTriggeringEntityNodeTest.cpp
${CMAKE_CURRENT_LIST_DIR}/tests/Node/ByEntityConditionNodeTest.cpp
${CMAKE_CURRENT_LIST_DIR}/tests/Node/ConditionGroupsNodeTest.cpp
......@@ -195,6 +197,7 @@ target_sources(
${CMAKE_CURRENT_LIST_DIR}/tests/Storyboard/ByEntityCondition/SpeedConditionTest.cpp
${CMAKE_CURRENT_LIST_DIR}/tests/Storyboard/ByEntityCondition/TimeHeadwayConditionTest.cpp
${CMAKE_CURRENT_LIST_DIR}/tests/Storyboard/ByEntityCondition/TimeToCollisionConditionTest.cpp
${CMAKE_CURRENT_LIST_DIR}/tests/Storyboard/ByEntityCondition/TraveledDistanceConditionTest.cpp
${CMAKE_CURRENT_LIST_DIR}/tests/Storyboard/ByValueCondition/SimulationTimeConditionTest.cpp
${CMAKE_CURRENT_LIST_DIR}/tests/Storyboard/ByValueCondition/UserDefinedValueConditionTest.cpp
${CMAKE_CURRENT_LIST_DIR}/tests/Storyboard/GenericAction/AcquirePositionActionTest.cpp
......@@ -220,9 +223,12 @@ target_sources(
${CMAKE_CURRENT_LIST_DIR}/tests/TrafficSignalParsing/TreeGenerationTest.cpp
${CMAKE_CURRENT_LIST_DIR}/tests/Utils/ConstantsTest.cpp
${CMAKE_CURRENT_LIST_DIR}/tests/Utils/ControllerCreatorTest.cpp
${CMAKE_CURRENT_LIST_DIR}/tests/Utils/DistributionTest.cpp
${CMAKE_CURRENT_LIST_DIR}/tests/Utils/EllipseTest.cpp
${CMAKE_CURRENT_LIST_DIR}/tests/Utils/EntityCreatorTest.cpp
${CMAKE_CURRENT_LIST_DIR}/tests/Utils/EntityUtilsTest.cpp
${CMAKE_CURRENT_LIST_DIR}/tests/Utils/JsonParsingTest.cpp
${CMAKE_CURRENT_LIST_DIR}/tests/Utils/PropertyInterpreterTest.cpp
)
add_custom_command(TARGET ${PROJECT_NAME}Test
......@@ -246,11 +252,14 @@ target_include_directories(
target_link_libraries(
${PROJECT_NAME}Test
PRIVATE ${PROJECT_NAME}
Stochastics::Stochastics
antlr4_runtime::shared
GTest::gmock_main
pthread
PRIVATE
${PROJECT_NAME}
antlr4_runtime::shared
GTest::gmock_main
nlohmann_json::nlohmann_json
pthread
Stochastics::Stochastics
Yase::agnostic_behavior_tree
)
add_test(NAME ${PROJECT_NAME}Test COMMAND ${PROJECT_NAME}Test)
......
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
load("//third_party:deps.bzl", "osc_engine_deps")
workspace(name = "open_scenario_engine")
http_archive(
name = "googletest",
sha256 = "81964fe578e9bd7c94dfdb09c8e4d6e6759e19967e397dbea48d1c10e45d0df2",
strip_prefix = "googletest-release-1.12.1",
url = "https://github.com/google/googletest/archive/refs/tags/release-1.12.1.tar.gz",
)
load("//third_party:dependencies.bzl", "third_party_deps")
osc_engine_deps()
third_party_deps()
......@@ -111,7 +111,6 @@ list(APPEND ${PROJECT_NAME}_SOURCES
gen/Storyboard/ByEntityCondition/RelativeAngleCondition_impl.cpp
gen/Storyboard/ByEntityCondition/RelativeClearanceCondition_impl.cpp
gen/Storyboard/ByEntityCondition/StandStillCondition_impl.cpp
gen/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.cpp
gen/Storyboard/ByValueCondition/ParameterCondition_impl.cpp
gen/Storyboard/ByValueCondition/StoryboardElementStateCondition_impl.cpp
gen/Storyboard/ByValueCondition/TimeOfDayCondition_impl.cpp
......@@ -168,6 +167,9 @@ list(APPEND ${PROJECT_NAME}_SOURCES
src/Conversion/OscToMantle/ConvertScenarioTrafficSignalController.cpp
src/Conversion/OscToMantle/ConvertScenarioTrajectoryRef.cpp
src/Conversion/OscToMantle/ConvertScenarioTransitionDynamics.cpp
src/Conversion/OscToMantle/ConvertScenarioLaneOffsetActionDynamics.cpp
src/Conversion/OscToMantle/ConvertScenarioLaneOffsetTarget.cpp
src/Conversion/OscToMantle/ConvertScenarioShape.cpp
src/Conversion/OscToNode/ParseAct.cpp
src/Conversion/OscToNode/ParseAction.cpp
src/Conversion/OscToNode/ParseByEntityCondition.cpp
......@@ -207,6 +209,7 @@ list(APPEND ${PROJECT_NAME}_SOURCES
src/Storyboard/ByEntityCondition/SpeedCondition_impl.cpp
src/Storyboard/ByEntityCondition/TimeHeadwayCondition_impl.cpp
src/Storyboard/ByEntityCondition/TimeToCollisionCondition_impl.cpp
src/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.cpp
src/Storyboard/ByValueCondition/SimulationTimeCondition_impl.cpp
src/Storyboard/ByValueCondition/UserDefinedValueCondition_impl.cpp
src/Storyboard/GenericAction/AcquirePositionAction_impl.cpp
......@@ -239,6 +242,9 @@ list(APPEND ${PROJECT_NAME}_SOURCES
src/Utils/EntityUtils.cpp
src/Utils/EventPrioritizer.cpp
src/Utils/Logger.cpp
src/Utils/PropertyInterpretation/DistributionInterpreter.cpp
src/Utils/PropertyInterpreter.cpp
src/Utils/JsonParsing.cpp
src/Utils/TrafficSignalBuilder.cpp
)
......@@ -378,7 +384,6 @@ list(APPEND ${PROJECT_NAME}_HEADERS
gen/Storyboard/ByEntityCondition/TimeHeadwayCondition_impl.h
gen/Storyboard/ByEntityCondition/TimeToCollisionCondition.h
gen/Storyboard/ByEntityCondition/TraveledDistanceCondition.h
gen/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.h
gen/Storyboard/ByValueCondition/ParameterCondition.h
gen/Storyboard/ByValueCondition/ParameterCondition_impl.h
gen/Storyboard/ByValueCondition/SimulationTimeCondition.h
......@@ -545,6 +550,7 @@ list(APPEND ${PROJECT_NAME}_HEADERS
src/Conversion/OscToMantle/ConvertScenarioTrajectoryFollowingMode.h
src/Conversion/OscToMantle/ConvertScenarioTrajectoryRef.h
src/Conversion/OscToMantle/ConvertScenarioTransitionDynamics.h
src/Conversion/OscToMantle/ConvertScenarioShape.h
src/Conversion/OscToNode/ParseAction.h
src/Conversion/OscToNode/ParseByEntityCondition.h
src/Conversion/OscToNode/ParseEntityRefs.h
......@@ -571,6 +577,7 @@ list(APPEND ${PROJECT_NAME}_HEADERS
src/Node/TrafficSignalPhaseNode.h
src/Node/TriggerableCompositeNode.h
src/Storyboard/ByEntityCondition/TimeToCollisionCondition_impl.h
src/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.h
src/Storyboard/ByValueCondition/UserDefinedValueCondition_impl.h
src/Storyboard/GenericAction/ActivateControllerAction.h
src/Storyboard/GenericAction/ActivateControllerAction_base.h
......@@ -606,5 +613,17 @@ list(APPEND ${PROJECT_NAME}_HEADERS
src/Utils/IControllerService.h
src/Utils/IEventPrioritizer.h
src/Utils/Logger.h
src/Utils/PropertyInterpretation/DistributionInterpreter.h
src/Utils/PropertyInterpretation/Distributions.h
src/Utils/PropertyInterpretation/Distributions/ExponentialDistribution.h
src/Utils/PropertyInterpretation/Distributions/GammaDistribution.h
src/Utils/PropertyInterpretation/Distributions/LogNormalDistribution.h
src/Utils/PropertyInterpretation/Distributions/NormalDistribution.h
src/Utils/PropertyInterpretation/Distributions/UniformDistribution.h
src/Utils/PropertyInterpretation/Interpreter.h
src/Utils/PropertyInterpretation/JsonInterpreter.h
src/Utils/PropertyInterpretation/RawValueRelay.h
src/Utils/PropertyInterpreter.h
src/Utils/JsonParsing.h
src/Utils/TrafficSignalBuilder.h
)
/********************************************************************************
* Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
* Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
......@@ -9,8 +9,6 @@
********************************************************************************/
#include <MantleAPI/Common/i_logger.h>
#include <MantleAPI/Common/log_utils.h>
#include <MantleAPI/Test/test_utils.h>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
......@@ -19,6 +17,7 @@
#include <string>
#include "OpenScenarioEngine/OpenScenarioEngine.h"
#include "tests/TestUtils.h"
using namespace units::literals;
......@@ -62,42 +61,45 @@ int main(int argc, char* argv[])
return -1;
}
auto mockEnvironment = std::make_shared<mantle_api::MockEnvironment>();
auto fake_environment = std::make_shared<testing::OpenScenarioEngine::v1_3::FakeEnvironment>();
auto& mockEntityRepository = static_cast<mantle_api::MockEntityRepository&>(mockEnvironment->GetEntityRepository());
auto& mockEntityRepository = static_cast<mantle_api::MockEntityRepository&>(fake_environment->GetEntityRepository());
mantle_api::MockVehicle mockVehicle1;
ON_CALL(mockEntityRepository, Create("Vehicle1", A<const mantle_api::VehicleProperties&>())).WillByDefault(ReturnRef(mockVehicle1));
auto mock_vehicle_1 = std::make_shared<mantle_api::MockVehicle>();
ON_CALL(mockEntityRepository, Create("Vehicle1", A<const mantle_api::VehicleProperties&>())).WillByDefault(Return(mock_vehicle_1));
mantle_api::MockVehicle mockVehicle2;
ON_CALL(mockEntityRepository, Create("Vehicle2", A<const mantle_api::VehicleProperties&>())).WillByDefault(ReturnRef(mockVehicle2));
auto mock_vehicle_2 = std::make_shared<mantle_api::MockVehicle>();
ON_CALL(mockEntityRepository, Create("Vehicle2", A<const mantle_api::VehicleProperties&>())).WillByDefault(Return(mock_vehicle_2));
auto& mockControllerRepository = mockEnvironment->GetControllerRepository();
auto& mockControllerRepository = fake_environment->GetControllerRepository();
mantle_api::MockController mockController;
auto mockController = std::make_shared<mantle_api::MockController>();
auto controller_name("demo_controller"s);
ON_CALL(mockControllerRepository, Create(_)).WillByDefault(ReturnRef(mockController));
ON_CALL(mockController, GetName()).WillByDefault(ReturnRef(controller_name));
ON_CALL(mockController, GetUniqueId()).WillByDefault(Return(1234));
ON_CALL(mockControllerRepository, Create(_)).WillByDefault(Return(mockController));
ON_CALL(*mockController, GetName()).WillByDefault(ReturnRef(controller_name));
ON_CALL(*mockController, GetUniqueId()).WillByDefault(Return(mantle_api::UniqueId(1234)));
OpenScenarioEngine::v1_3::OpenScenarioEngine openScenarioEngine(scenario_file.string(), mockEnvironment, consoleLogger);
OpenScenarioEngine::v1_3::OpenScenarioEngine openScenarioEngine(scenario_file.string(), fake_environment, consoleLogger);
mantle_api::Time current_time{0_s};
ON_CALL(*mockEnvironment, GetSimulationTime())
.WillByDefault(Invoke([&current_time]() { return current_time; }));
ON_CALL(*mockEnvironment, HasControlStrategyGoalBeenReached(_, mantle_api::ControlStrategyType::kFollowVelocitySpline))
.WillByDefault(Invoke([&current_time]() -> bool { return current_time > 5.5_s; }));
ON_CALL(*fake_environment, GetSimulationTime())
.WillByDefault(Invoke([&current_time]()
{ return current_time; }));
ON_CALL(*fake_environment, HasControlStrategyGoalBeenReached(_, mantle_api::ControlStrategyType::kFollowVelocitySpline))
.WillByDefault(Invoke([&current_time]() -> bool
{ return current_time > 5.5_s; }));
try
{
openScenarioEngine.Init();
openScenarioEngine.Step(0_ms);
while (!openScenarioEngine.IsFinished())
{
openScenarioEngine.Step();
openScenarioEngine.Step(500_ms);
current_time += 500_ms;
}
}
catch(const std::runtime_error& e)
catch (const std::runtime_error& e)
{
consoleLogger->Log(mantle_api::LogLevel::kError, e.what());
}
......
/********************************************************************************
* Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
* Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
......@@ -27,7 +27,7 @@ public:
Entities entities;
double targetLaneOffset;
TransitionDynamics laneChangeActionDynamics;
std::function<mantle_api::UniqueId()> GetLaneChangeTarget;
std::function<mantle_api::LaneId()> GetLaneChangeTarget;
};
struct Interfaces
{
......@@ -48,4 +48,4 @@ protected:
Interfaces mantle;
};
} // namespace OpenScenarioEngine::v1_3
\ No newline at end of file
} // namespace OpenScenarioEngine::v1_3
/********************************************************************************
* Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
*
* Copyright (c) 2025 Ansys, Inc.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
......@@ -14,7 +14,6 @@
#include <agnostic_behavior_tree/action_node.h>
#include <cassert>
#include <utility>
#include "Storyboard/MotionControlAction/LaneOffsetAction_impl.h"
#include "Storyboard/MotionControlAction/MotionControlAction.h"
......@@ -51,8 +50,7 @@ private:
entityBroker->GetEntities(),
laneOffsetAction_->GetContinuous(),
ConvertScenarioLaneOffsetActionDynamics(laneOffsetAction_->GetLaneOffsetActionDynamics()),
[=]()
{ return ConvertScenarioLaneOffsetTarget(laneOffsetAction_->GetLaneOffsetTarget()); }},
[=](const Entity& actor) { return ConvertScenarioLaneOffsetTarget(environment, laneOffsetAction_->GetLaneOffsetTarget(), actor); }},
OpenScenarioEngine::v1_3::LaneOffsetAction::Interfaces{
environment});
}
......
......@@ -18,7 +18,6 @@
namespace OpenScenarioEngine::v1_3
{
class LaneOffsetActionBase
{
public:
......@@ -27,7 +26,7 @@ public:
Entities entities;
bool continuous;
LaneOffsetActionDynamics laneOffsetActionDynamics;
std::function<LaneOffsetTarget()> GetLaneOffsetTarget;
std::function<LaneOffsetTarget(const Entity&)> GetLaneOffsetTarget;
};
struct Interfaces
{
......
......@@ -155,6 +155,9 @@ private:
/// be used instead
void ResetStochastics();
/// Reset all routes in route repository
void ResetRoutes();
/// Reset all entities and create new according to scenario description
void ResetAndCreateEntities();
......