diff --git a/README.md b/README.md index 15946611099539e670c42a9862a9538ded90aaae..0484affebcb0b7c09ccdf42fe131ca6e6ec77128 100644 --- a/README.md +++ b/README.md @@ -254,7 +254,7 @@ Converts `NET_ASAM_OPENSCENARIO::v1_3::ITransitionDynamics` object type to [mant | Dependency | Commit | Version | License | | ---------- | ------ | ------- | ------- | -| [MantleAPI](https://gitlab.eclipse.org/eclipse/openpass/mantle-api) | 86cedf7d | 9.0.0 | EPL 2.0 | +| [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 | diff --git a/engine/src/Conversion/OscToMantle/ConvertScenarioPosition.cpp b/engine/src/Conversion/OscToMantle/ConvertScenarioPosition.cpp index 794a0cde73c966c28db2f1de3e21d75b4433ecb4..aa7678b008133a4d17858b7579717f18c4287193 100644 --- a/engine/src/Conversion/OscToMantle/ConvertScenarioPosition.cpp +++ b/engine/src/Conversion/OscToMantle/ConvertScenarioPosition.cpp @@ -1,5 +1,5 @@ /******************************************************************************** - * 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 @@ -98,6 +98,11 @@ mantle_api::Pose ConvertGeoPosition(mantle_api::IEnvironment& environment, mantle_api::Pose pose{}; pose.position = environment.GetConverter()->Convert(lat_lon_position); + if (environment.GetQueryService().IsPositionOnLane(pose.position)) // 2D check + { + // Change z position to be on road surface of top-most road + pose.position.z = environment.GetQueryService().GetLaneHeightAtPosition(pose.position); + } detail::FillOrientation(environment, geo_position.GetOrientation(), lat_lon_position, pose); return pose; } diff --git a/engine/tests/Conversion/OscToMantle/ConvertScenarioPositionTest.cpp b/engine/tests/Conversion/OscToMantle/ConvertScenarioPositionTest.cpp index b2f6564b00cfc6b84b394b87e75235fe59ecbc05..1629ea0cbc895489fd0e0cbab89d92c4cb0d6b52 100644 --- a/engine/tests/Conversion/OscToMantle/ConvertScenarioPositionTest.cpp +++ b/engine/tests/Conversion/OscToMantle/ConvertScenarioPositionTest.cpp @@ -256,6 +256,41 @@ TEST_F(ConvertScenarioPositionTest, ASSERT_EQ(expected_orientation + lane_orientation, pose->orientation); } +TEST_F(ConvertScenarioPositionTest, + GivenGeoPositionOnRoad_WhenConverting_ThenAltitudeOnRoadSurface) +{ + auto pos = GetGeoPosition(); + EXPECT_CALL(dynamic_cast<const mantle_api::MockQueryService&>(mockEnvironment->GetQueryService()), + IsPositionOnLane(expected_position_)) + .Times(1) + .WillRepeatedly(testing::Return(true)); + EXPECT_CALL(dynamic_cast<const mantle_api::MockQueryService&>(mockEnvironment->GetQueryService()), + GetLaneHeightAtPosition(expected_position_)) + .Times(1) + .WillRepeatedly(testing::Return(5_m)); + + const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(mockEnvironment, pos); + + EXPECT_EQ(mantle_api::Vec3<units::length::meter_t>(1_m, 2_m, 5_m), pose->position); +} + +TEST_F(ConvertScenarioPositionTest, + GivenGeoPositionNotOnRoad_WhenConverting_ThenDefaultAltitude) +{ + auto pos = GetGeoPosition(); + EXPECT_CALL(dynamic_cast<const mantle_api::MockQueryService&>(mockEnvironment->GetQueryService()), + IsPositionOnLane(expected_position_)) + .Times(1) + .WillRepeatedly(testing::Return(false)); + EXPECT_CALL(dynamic_cast<const mantle_api::MockQueryService&>(mockEnvironment->GetQueryService()), + GetLaneHeightAtPosition(expected_position_)) + .Times(0); + + const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(mockEnvironment, pos); + + EXPECT_EQ(expected_position_, pose->position); +} + TEST_F(ConvertScenarioPositionTest, GivenRelativeLanePositionWithNoOrientation_WhenConverting_ThenPositionConvertedAndOrientationZero) { diff --git a/engine/third_party/mantle_api/mantle_api.bzl b/engine/third_party/mantle_api/mantle_api.bzl index d8c5afc9469b60463e93cb5b93a873ef8f1fdf48..2b2ce2d6ba6fee5bc180cf33c74a4d64f603fca2 100644 --- a/engine/third_party/mantle_api/mantle_api.bzl +++ b/engine/third_party/mantle_api/mantle_api.bzl @@ -1,14 +1,14 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe") -_TAG = "v9.0.0" +_TAG = "v11.0.0" def mantle_api(): maybe( http_archive, name = "mantle_api", url = "https://gitlab.eclipse.org/eclipse/openpass/mantle-api/-/archive/{tag}/mantle-api-{tag}.tar.gz".format(tag = _TAG), - sha256 = "c1729af0b937fc836922ae8b17f3de5fb18dca566077d52ee6c6f2a3255a3f43", + sha256 = "a723c0815fd524fa932bedcf8e9132cbcde8e4788c1ab8b59bfb7abcfbd4799f", strip_prefix = "mantle-api-{tag}".format(tag = _TAG), type = "tar.gz", ) diff --git a/utils/ci/conan/conanfile.txt b/utils/ci/conan/conanfile.txt index dc6a61a8375f21c547965a653fa264b20317e8ed..849dff888b3b01f202330e1ca15a313e30145083 100644 --- a/utils/ci/conan/conanfile.txt +++ b/utils/ci/conan/conanfile.txt @@ -1,6 +1,6 @@ [requires] units/2.3.4@openscenarioengine/testing -mantleapi/v9.0.0@openscenarioengine/testing +mantleapi/v11.0.0@openscenarioengine/testing yase/d0c0e58d17358044cc9018c74308b45f6097ecfb@openscenarioengine/testing openscenario_api/v1.4.0@openscenarioengine/testing stochastics/0.11.0@openscenarioengine/testing diff --git a/utils/ci/conan/recipe/mantleapi/all/conandata.yml b/utils/ci/conan/recipe/mantleapi/all/conandata.yml index 33e3f24304264cd774dc317d4096f588abf18281..30e9ad2a81efc15e4c350430aec7dfff64bfe3a3 100644 --- a/utils/ci/conan/recipe/mantleapi/all/conandata.yml +++ b/utils/ci/conan/recipe/mantleapi/all/conandata.yml @@ -49,5 +49,9 @@ sources: url: https://gitlab.eclipse.org/eclipse/openpass/mantle-api.git sha256: "ac2e9d33f00d034c6522dba3224a3dffdece9742" + "11.0.0": + url: https://gitlab.eclipse.org/eclipse/openpass/mantle-api.git + sha256: "ce2a378d48bd1526ccb5facce6f0388641ea295c" + "default": url: https://gitlab.eclipse.org/eclipse/openpass/mantle-api.git