Skip to content
Snippets Groups Projects
Commit 84ee2634 authored by Etienne Pellan's avatar Etienne Pellan Committed by Andreas Rauschert
Browse files

feat: Implement new objects for XOSC TrafficSwarmAction

parent 8f47d2e9
No related branches found
No related tags found
1 merge request!101Implement new objects for XOSC TrafficSwarmAction
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include <MantleAPI/Traffic/default_routing_behavior.h> #include <MantleAPI/Traffic/default_routing_behavior.h>
#include <MantleAPI/Traffic/i_controller_repository.h> #include <MantleAPI/Traffic/i_controller_repository.h>
#include <MantleAPI/Traffic/i_entity_repository.h> #include <MantleAPI/Traffic/i_entity_repository.h>
#include <MantleAPI/Traffic/i_traffic_swarm_service.h>
#include <optional> #include <optional>
#include <string> #include <string>
...@@ -119,6 +120,14 @@ public: ...@@ -119,6 +120,14 @@ public:
/// @param entity_id specifies the entity /// @param entity_id specifies the entity
/// @param route_definition specifies how the route shall be constructed /// @param route_definition specifies how the route shall be constructed
virtual void AssignRoute(mantle_api::UniqueId entity_id, mantle_api::RouteDefinition route_definition) = 0; virtual void AssignRoute(mantle_api::UniqueId entity_id, mantle_api::RouteDefinition route_definition) = 0;
/// @brief Initializes the traffic swarm service with the scenario parameters
///
/// @param parameters The traffic swarm parameters
virtual void InitTrafficSwarmService(const TrafficSwarmParameters& parameters) = 0;
/// @brief Returns the traffic swarm service
[[nodiscard]] virtual ITrafficSwarmService& GetTrafficSwarmService() = 0;
}; };
} // namespace mantle_api } // namespace mantle_api
......
/*******************************************************************************
* Copyright (c) 2023, 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 https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/
//-----------------------------------------------------------------------------
/** @file i_traffic_swarm_service.h */
//-----------------------------------------------------------------------------
#ifndef MANTLEAPI_TRAFFIC_I_TRAFFIC_SWARM_CONTROLLER_H
#define MANTLEAPI_TRAFFIC_I_TRAFFIC_SWARM_CONTROLLER_H
#include <vector>
#include <MantleAPI/Common/vector.h>
#include <MantleAPI/Common/pose.h>
#include <units.h>
namespace mantle_api
{
struct TrafficSwarmParameters
{
std::string central_entity_name;
size_t maximum_number_of_vehicles;
units::velocity::meters_per_second_t vehicle_velocity;
units::length::meter_t exclusion_radius;
units::length::meter_t semi_minor_spawning_radius;
units::length::meter_t semi_major_spawning_radius;
units::length::meter_t spawning_area_longitudinal_offset;
};
class ITrafficSwarmService
{
public:
virtual std::vector<mantle_api::Pose> GetAvailableSpawningPoses() const = 0;
virtual mantle_api::VehicleProperties GetVehicleProperties(mantle_api::VehicleClass vehicle_class) const = 0;
virtual void UpdateControllerParameters(std::unique_ptr<mantle_api::ExternalControllerConfig>& config) = 0;
virtual void SetSwarmEntitiesCount(size_t count) = 0;
};
} // namespace mantle_api
#endif // MANTLEAPI_TRAFFIC_I_TRAFFIC_SWARM_CONTROLLER_H
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include <MantleAPI/Traffic/i_controller_repository.h> #include <MantleAPI/Traffic/i_controller_repository.h>
#include <MantleAPI/Traffic/i_entity.h> #include <MantleAPI/Traffic/i_entity.h>
#include <MantleAPI/Traffic/i_entity_repository.h> #include <MantleAPI/Traffic/i_entity_repository.h>
#include <MantleAPI/Traffic/i_traffic_swarm_service.h>
#include <gmock/gmock.h> #include <gmock/gmock.h>
#include <gtest/gtest.h> #include <gtest/gtest.h>
...@@ -384,7 +385,10 @@ public: ...@@ -384,7 +385,10 @@ public:
mantle_api::IVehicle& GetHost() override { return test_vehicle_; } mantle_api::IVehicle& GetHost() override { return test_vehicle_; }
const std::vector<std::unique_ptr<mantle_api::IEntity>>& GetEntities() const override { return entities_; } MOCK_METHOD(std::vector<std::unique_ptr<mantle_api::IEntity>>&,
GetEntities,
(),
(const, override));
bool Contains(UniqueId id) const override bool Contains(UniqueId id) const override
{ {
...@@ -474,6 +478,30 @@ public: ...@@ -474,6 +478,30 @@ public:
(override)); (override));
}; };
class MockTrafficSwarmService : public mantle_api::ITrafficSwarmService
{
public:
MOCK_METHOD(std::vector<mantle_api::Pose>,
GetAvailableSpawningPoses,
(),
(const, override));
MOCK_METHOD(mantle_api::VehicleProperties,
GetVehicleProperties,
(mantle_api::VehicleClass),
(const, override));
MOCK_METHOD(void,
UpdateControllerParameters,
(std::unique_ptr<mantle_api::ExternalControllerConfig>&),
(override));
MOCK_METHOD(void,
SetSwarmEntitiesCount,
(size_t),
(override));
};
class MockEnvironment : public mantle_api::IEnvironment class MockEnvironment : public mantle_api::IEnvironment
{ {
public: public:
...@@ -561,12 +589,20 @@ public: ...@@ -561,12 +589,20 @@ public:
(mantle_api::UniqueId entity_id, mantle_api::RouteDefinition route_definition), (mantle_api::UniqueId entity_id, mantle_api::RouteDefinition route_definition),
(override)); (override));
MOCK_METHOD(void,
InitTrafficSwarmService,
(const mantle_api::TrafficSwarmParameters& parameters),
(override));
MockTrafficSwarmService& GetTrafficSwarmService() override { return traffic_swarm_service_; }
private: private:
MockQueryService query_service_{}; MockQueryService query_service_{};
MockEntityRepository entity_repository_{}; MockEntityRepository entity_repository_{};
MockControllerRepository controller_repository_{}; MockControllerRepository controller_repository_{};
MockConverter converter_{}; MockConverter converter_{};
MockGeometryHelper geometry_helper_{}; MockGeometryHelper geometry_helper_{};
MockTrafficSwarmService traffic_swarm_service_{};
}; };
} // namespace mantle_api } // namespace mantle_api
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment