15 #ifndef OPENSCENARIO_INTERPRETER__SIMULATOR_CORE_HPP_
16 #define OPENSCENARIO_INTERPRETER__SIMULATOR_CORE_HPP_
41 static inline std::unique_ptr<traffic_simulator::API> core =
nullptr;
44 template <
typename Node,
typename... Ts>
49 core = std::make_unique<traffic_simulator::API>(
50 node, configuration, std::forward<decltype(
xs)>(
xs)...);
52 throw Error(
"The simulator core has already been instantiated.");
56 static auto active() {
return static_cast<bool>(core); }
61 core->despawnEntities();
62 core->closeZMQConnection();
67 static auto update() ->
void { core->updateFrame(); }
78 template <
typename T,
typename std::enable_if_t<std::is_same_v<T, NativeLanePosition>,
int> = 0>
84 return result.value();
87 "The specified WorldPosition = [", pose.position.x,
", ", pose.position.y,
", ",
89 "] could not be approximated to the proper Lane. Perhaps the "
90 "WorldPosition points to a location where multiple lanes overlap, and "
91 "there are at least two or more candidates for a LanePosition that "
92 "can be approximated to that WorldPosition. This issue can be "
93 "resolved by strictly specifying the location using LanePosition "
94 "instead of WorldPosition");
99 typename T,
typename std::enable_if_t<std::is_same_v<T, NativeWorldPosition>,
int> = 0>
108 if (
const auto from_entity = core->getEntity(from_entity_name)) {
109 if (
const auto to_entity = core->getEntity(to_entity_name)) {
112 from_entity->getMapPose(), to_entity->getMapPose()))
113 return relative_pose.value();
122 if (
const auto from_entity = core->getEntity(from_entity_name)) {
124 const auto relative_pose =
126 return relative_pose.value();
135 if (
const auto to_entity = core->getEntity(to_entity_name)) {
137 const auto relative_pose =
139 return relative_pose.value();
147 const RoutingAlgorithm::value_type routing_algorithm = RoutingAlgorithm::undefined)
150 if (
const auto to_entity = core->getEntity(to_entity_name)) {
151 if (
const auto to_lanelet_pose = to_entity->getLaneletPose()) {
153 from_entity_name, to_lanelet_pose.value(), routing_algorithm);
161 const RoutingAlgorithm::value_type routing_algorithm = RoutingAlgorithm::undefined)
164 if (
const auto from_entity = core->getEntity(from_entity_name)) {
165 if (
const auto from_lanelet_pose = from_entity->getLaneletPose()) {
167 from_lanelet_pose.value(), to_lanelet_pose, routing_algorithm);
175 const RoutingAlgorithm::value_type routing_algorithm = RoutingAlgorithm::undefined)
178 const bool allow_lane_change = (routing_algorithm == RoutingAlgorithm::value_type::shortest);
180 from_lanelet_pose, to_lanelet_pose, allow_lane_change, core->getHdmapUtils());
185 const RoutingAlgorithm::value_type routing_algorithm = RoutingAlgorithm::undefined)
187 if (
const auto from_entity = core->getEntity(from_entity_name)) {
188 if (
const auto to_entity = core->getEntity(to_entity_name)) {
189 if (
const auto from_lanelet_pose = from_entity->getLaneletPose()) {
190 if (
const auto to_lanelet_pose = to_entity->getLaneletPose()) {
192 from_lanelet_pose.value(), from_entity->getBoundingBox(), to_lanelet_pose.value(),
193 to_entity->getBoundingBox(), routing_algorithm);
203 const RoutingAlgorithm::value_type routing_algorithm = RoutingAlgorithm::undefined)
205 if (
const auto from_entity = core->getEntity(from_entity_name)) {
206 if (
const auto from_lanelet_pose = from_entity->getLaneletPose()) {
208 from_lanelet_pose.value(), from_entity->getBoundingBox(), to_lanelet_pose,
209 traffic_simulator_msgs::msg::BoundingBox(), routing_algorithm);
217 const traffic_simulator_msgs::msg::BoundingBox & from_bounding_box,
219 const traffic_simulator_msgs::msg::BoundingBox & to_bounding_box,
220 const RoutingAlgorithm::value_type routing_algorithm = RoutingAlgorithm::undefined)
223 const bool allow_lane_change = (routing_algorithm == RoutingAlgorithm::value_type::shortest);
225 from_lanelet_pose, from_bounding_box, to_lanelet_pose, to_bounding_box, allow_lane_change,
226 core->getHdmapUtils());
232 if (
const auto from_entity = core->getEntity(from_entity_name)) {
233 if (
const auto to_entity = core->getEntity(to_entity_name)) {
236 from_entity->getMapPose(), from_entity->getBoundingBox(), to_entity->getMapPose(),
237 to_entity->getBoundingBox())) {
238 return relative_pose.value();
248 if (
const auto from_entity = core->getEntity(from_entity_name)) {
251 from_entity->getMapPose(), from_entity->getBoundingBox(), to_map_pose,
252 traffic_simulator_msgs::msg::BoundingBox())) {
253 return relative_pose.value();
263 template <
typename... Ts>
266 return core->requestAcquirePosition(std::forward<decltype(
xs)>(
xs)...);
269 template <
typename... Ts>
272 return core->spawn(std::forward<decltype(
xs)>(
xs)...);
275 template <
typename EntityRef,
typename DynamicConstra
ints>
279 return core->setBehaviorParameter(entity_ref, [&]() {
280 auto behavior_parameter = core->getBehaviorParameter(entity_ref);
282 if (not std::isinf(dynamic_constraints.max_speed)) {
283 behavior_parameter.dynamic_constraints.max_speed = dynamic_constraints.max_speed;
286 if (not std::isinf(dynamic_constraints.max_acceleration)) {
287 behavior_parameter.dynamic_constraints.max_acceleration =
288 dynamic_constraints.max_acceleration;
291 if (not std::isinf(dynamic_constraints.max_acceleration_rate)) {
292 behavior_parameter.dynamic_constraints.max_acceleration_rate =
293 dynamic_constraints.max_acceleration_rate;
296 if (not std::isinf(dynamic_constraints.max_deceleration)) {
297 behavior_parameter.dynamic_constraints.max_deceleration =
298 dynamic_constraints.max_deceleration;
301 if (not std::isinf(dynamic_constraints.max_deceleration_rate)) {
302 behavior_parameter.dynamic_constraints.max_deceleration_rate =
303 dynamic_constraints.max_deceleration_rate;
306 return behavior_parameter;
310 template <
typename Controller>
314 core->setVelocityLimit(
315 entity_ref, controller.properties.template get<Double>(
316 "maxSpeed", std::numeric_limits<Double::value_type>::max()));
318 core->setBehaviorParameter(entity_ref, [&]() {
319 auto message = core->getBehaviorParameter(entity_ref);
320 message.see_around = not controller.properties.template get<Boolean>(
"isBlind");
322 message.dynamic_constraints.max_acceleration =
323 controller.properties.template get<Double>(
"maxAcceleration", 10.0);
324 message.dynamic_constraints.max_acceleration_rate =
325 controller.properties.template get<Double>(
"maxAccelerationRate", 3.0);
326 message.dynamic_constraints.max_deceleration =
327 controller.properties.template get<Double>(
"maxDeceleration", 10.0);
328 message.dynamic_constraints.max_deceleration_rate =
329 controller.properties.template get<Double>(
"maxDecelerationRate", 3.0);
330 message.dynamic_constraints.max_speed =
331 controller.properties.template get<Double>(
"maxSpeed", 50.0);
335 if (controller.isAutoware()) {
336 core->attachLidarSensor(
337 entity_ref, controller.properties.template get<Double>(
"pointcloudPublishingDelay"));
339 core->attachDetectionSensor([&]() {
340 simulation_api_schema::DetectionSensorConfiguration configuration;
342 configuration.set_architecture_type(core->getROS2Parameter<
std::string>(
"architecture_type",
"awf/universe"));
343 configuration.set_entity(entity_ref);
344 configuration.set_detect_all_objects_in_range(controller.properties.template get<Boolean>(
"isClairvoyant"));
345 configuration.set_object_recognition_delay(controller.properties.template get<Double>(
"detectedObjectPublishingDelay"));
346 configuration.set_pos_noise_stddev(controller.properties.template get<Double>(
"detectedObjectPositionStandardDeviation"));
347 configuration.set_probability_of_lost(controller.properties.template get<Double>(
"detectedObjectMissingProbability"));
348 configuration.set_random_seed(controller.properties.template get<UnsignedInteger>(
"randomSeed"));
349 configuration.set_range(controller.properties.template get<Double>(
"detectionSensorRange",300.0));
350 configuration.set_object_recognition_ground_truth_delay(controller.properties.template get<Double>(
"detectedObjectGroundTruthPublishingDelay"));
351 configuration.set_update_duration(0.1);
353 return configuration;
356 core->attachOccupancyGridSensor([&]() {
357 simulation_api_schema::OccupancyGridSensorConfiguration configuration;
359 configuration.set_architecture_type(core->getROS2Parameter<
std::string>(
"architecture_type",
"awf/universe"));
360 configuration.set_entity(entity_ref);
361 configuration.set_filter_by_range(controller.properties.template get<Boolean>(
"isClairvoyant"));
362 configuration.set_height(200);
363 configuration.set_range(300);
364 configuration.set_resolution(0.5);
365 configuration.set_update_duration(0.1);
366 configuration.set_width(200);
368 return configuration;
371 core->attachPseudoTrafficLightDetector([&]() {
372 simulation_api_schema::PseudoTrafficLightDetectorConfiguration configuration;
373 configuration.set_architecture_type(
374 core->getROS2Parameter<
std::string>(
"architecture_type",
"awf/universe"));
375 return configuration;
378 core->asFieldOperatorApplication(entity_ref)
379 .declare_parameter<
bool>(
380 "allow_goal_modification",
381 controller.properties.template get<Boolean>(
"allowGoalModification"));
383 for (
const auto & module :
385 manual_modules_string.erase(
387 manual_modules_string.begin(), manual_modules_string.end(),
388 [](
const auto & c) { return std::isspace(c); }),
389 manual_modules_string.end());
391 std::vector<std::string> modules;
393 std::istringstream modules_stream(manual_modules_string);
394 while (std::getline(modules_stream, buffer,
',')) {
395 modules.push_back(buffer);
398 }(controller.properties.template get<String>(
399 "featureIdentifiersRequiringExternalPermissionForAutonomousDecisions"))) {
401 core->asFieldOperatorApplication(entity_ref)
402 .requestAutoModeForCooperation(module,
false);
403 }
catch (
const Error & error) {
405 "featureIdentifiersRequiringExternalPermissionForAutonomousDecisions is not "
406 "supported in this environment: ",
413 template <
typename... Ts>
416 return core->requestAssignRoute(std::forward<decltype(
xs)>(
xs)...);
419 template <
typename... Ts>
422 return core->despawn(std::forward<decltype(
xs)>(
xs)...);
425 template <
typename... Ts>
428 return core->requestFollowTrajectory(std::forward<decltype(
xs)>(
xs)...);
431 template <
typename... Ts>
434 return core->requestLaneChange(std::forward<decltype(
xs)>(
xs)...);
437 template <
typename... Ts>
440 return core->requestSpeedChange(std::forward<decltype(
xs)>(
xs)...);
443 template <
typename... Ts>
446 return core->setEntityStatus(std::forward<decltype(
xs)>(
xs)...);
449 template <
typename... Ts>
452 return core->requestWalkStraight(std::forward<decltype(
xs)>(
xs)...);
460 template <
typename... Ts>
463 return core->getCurrentAccel(std::forward<decltype(
xs)>(
xs)...).linear.x;
466 template <
typename... Ts>
469 return core->checkCollision(std::forward<decltype(
xs)>(
xs)...);
472 template <
typename... Ts>
477 if (
const auto from_entity = core->getEntity(from_entity_name)) {
478 if (
const auto to_entity = core->getEntity(to_entity_name)) {
481 from_entity->getMapPose(), from_entity->getBoundingBox(), to_entity->getMapPose(),
482 to_entity->getBoundingBox())) {
487 return std::numeric_limits<double>::quiet_NaN();
490 template <
typename... Ts>
494 return core->getCurrentTime(std::forward<decltype(
xs)>(
xs)...);
496 return std::numeric_limits<double>::quiet_NaN();
500 template <
typename... Ts>
503 return core->getCurrentTwist(std::forward<decltype(
xs)>(
xs)...).linear.x;
506 template <
typename... Ts>
509 return core->getStandStillDuration(std::forward<decltype(
xs)>(
xs)...);
512 template <
typename... Ts>
515 if (
const auto result = core->getTimeHeadway(std::forward<decltype(
xs)>(
xs)...); result) {
516 return result.value();
518 using value_type =
typename std::decay<decltype(result)>::type::value_type;
519 return std::numeric_limits<value_type>::quiet_NaN();
527 template <
typename Performance,
typename Properties>
532 core->activateOutOfRangeJob(
534 +performance.
max_acceleration, properties.template get<Double>(
"minJerk", Double::lowest()),
535 properties.template get<Double>(
"maxJerk", Double::max()));
538 template <
typename... Ts>
541 return core->asFieldOperatorApplication(std::forward<decltype(
xs)>(
xs)...);
546 return core->startNpcLogic();
549 template <
typename... Ts>
552 return core->getCurrentAction(std::forward<decltype(
xs)>(
xs)...);
555 template <
typename EntityRef,
typename OSCLanePosition>
557 const EntityRef & entity_ref,
const OSCLanePosition & osc_lane_position)
559 if (
const auto entity = core->getEntity(entity_ref)) {
560 const auto from_map_pose = entity->getMapPose();
563 const auto relative_pose =
565 return static_cast<Double>(std::abs(
569 return Double::nan();
572 template <
typename EntityRef>
575 if (
auto lanelet_pose = core->getLaneletPose(entity_ref)) {
576 return static_cast<Double>(
579 return Double::nan();
583 template <
typename... Ts>
586 return core->getConventionalTrafficLights(std::forward<decltype(
xs)>(
xs)...);
589 template <
typename... Ts>
592 return core->getV2ITrafficLights(std::forward<decltype(
xs)>(
xs)...);
595 template <
typename... Ts>
598 return core->resetConventionalTrafficLightPublishRate(std::forward<decltype(
xs)>(
xs)...);
601 template <
typename... Ts>
604 return core->resetV2ITrafficLightPublishRate(std::forward<decltype(
xs)>(
xs)...);
607 template <
typename... Ts>
611 .sendCooperateCommand(std::forward<decltype(
xs)>(
xs)...);
614 template <
typename... Ts>
617 return core->setConventionalTrafficLightConfidence(std::forward<decltype(
xs)>(
xs)...);
Definition: simulator_core.hpp:261
static auto applyAcquirePositionAction(Ts &&... xs)
Definition: simulator_core.hpp:264
static auto applyWalkStraightAction(Ts &&... xs)
Definition: simulator_core.hpp:450
static auto applyFollowTrajectoryAction(Ts &&... xs)
Definition: simulator_core.hpp:426
static auto applyAssignRouteAction(Ts &&... xs)
Definition: simulator_core.hpp:414
static auto applySpeedAction(Ts &&... xs)
Definition: simulator_core.hpp:438
static auto applyAssignControllerAction(const std::string &entity_ref, Controller &&controller) -> void
Definition: simulator_core.hpp:311
static auto applyProfileAction(const EntityRef &entity_ref, const DynamicConstraints &dynamic_constraints) -> void
Definition: simulator_core.hpp:276
static auto applyTeleportAction(Ts &&... xs)
Definition: simulator_core.hpp:444
static auto applyDeleteEntityAction(Ts &&... xs)
Definition: simulator_core.hpp:420
static auto applyLaneChangeAction(Ts &&... xs)
Definition: simulator_core.hpp:432
static auto applyAddEntityAction(Ts &&... xs)
Definition: simulator_core.hpp:270
Definition: simulator_core.hpp:458
static auto evaluateBoundingBoxEuclideanDistance(const std::string &from_entity_name, const std::string &to_entity_name)
Definition: simulator_core.hpp:473
static auto evaluateTimeHeadway(Ts &&... xs)
Definition: simulator_core.hpp:513
static auto evaluateCollisionCondition(Ts &&... xs) -> bool
Definition: simulator_core.hpp:467
static auto evaluateSimulationTime(Ts &&... xs) -> double
Definition: simulator_core.hpp:491
static auto evaluateStandStill(Ts &&... xs)
Definition: simulator_core.hpp:507
static auto evaluateSpeed(Ts &&... xs)
Definition: simulator_core.hpp:501
static auto evaluateAcceleration(Ts &&... xs)
Definition: simulator_core.hpp:461
Definition: simulator_core.hpp:70
static auto makeNativeRelativeWorldPosition(const std::string &from_entity_name, const std::string &to_entity_name)
Definition: simulator_core.hpp:105
static auto makeNativeBoundingBoxRelativeWorldPosition(const std::string &from_entity_name, const std::string &to_entity_name)
Definition: simulator_core.hpp:229
static auto makeNativeRelativeLanePosition(const std::string &from_entity_name, const NativeLanePosition &to_lanelet_pose, const RoutingAlgorithm::value_type routing_algorithm=RoutingAlgorithm::undefined) -> traffic_simulator::LaneletPose
Definition: simulator_core.hpp:159
static auto makeNativeBoundingBoxRelativeLanePosition(const std::string &from_entity_name, const std::string &to_entity_name, const RoutingAlgorithm::value_type routing_algorithm=RoutingAlgorithm::undefined)
Definition: simulator_core.hpp:183
static auto makeNativeBoundingBoxRelativeLanePosition(const NativeLanePosition &from_lanelet_pose, const traffic_simulator_msgs::msg::BoundingBox &from_bounding_box, const NativeLanePosition &to_lanelet_pose, const traffic_simulator_msgs::msg::BoundingBox &to_bounding_box, const RoutingAlgorithm::value_type routing_algorithm=RoutingAlgorithm::undefined) -> traffic_simulator::LaneletPose
Definition: simulator_core.hpp:215
static auto convert(const NativeLanePosition &native_lane_position) -> NativeWorldPosition
Definition: simulator_core.hpp:100
static auto convert(const NativeWorldPosition &pose) -> NativeLanePosition
Definition: simulator_core.hpp:79
static auto makeNativeRelativeLanePosition(const NativeLanePosition &from_lanelet_pose, const NativeLanePosition &to_lanelet_pose, const RoutingAlgorithm::value_type routing_algorithm=RoutingAlgorithm::undefined) -> traffic_simulator::LaneletPose
Definition: simulator_core.hpp:173
static auto makeNativeBoundingBoxRelativeWorldPosition(const std::string &from_entity_name, const NativeWorldPosition &to_map_pose)
Definition: simulator_core.hpp:245
static auto makeNativeRelativeLanePosition(const std::string &from_entity_name, const std::string &to_entity_name, const RoutingAlgorithm::value_type routing_algorithm=RoutingAlgorithm::undefined) -> traffic_simulator::LaneletPose
Definition: simulator_core.hpp:145
static auto canonicalize(const traffic_simulator::LaneletPose &non_canonicalized) -> NativeLanePosition
Definition: simulator_core.hpp:72
static auto makeNativeRelativeWorldPosition(const std::string &from_entity_name, const NativeWorldPosition &to_map_pose)
Definition: simulator_core.hpp:119
static auto makeNativeRelativeWorldPosition(const NativeWorldPosition &from_map_pose, const std::string &to_entity_name)
Definition: simulator_core.hpp:132
static auto makeNativeBoundingBoxRelativeLanePosition(const std::string &from_entity_name, const NativeLanePosition &to_lanelet_pose, const RoutingAlgorithm::value_type routing_algorithm=RoutingAlgorithm::undefined)
Definition: simulator_core.hpp:201
Definition: simulator_core.hpp:525
static auto evaluateCurrentState(Ts &&... xs) -> decltype(auto)
Definition: simulator_core.hpp:550
static auto evaluateRelativeHeading(const EntityRef &entity_ref)
Definition: simulator_core.hpp:573
static auto resetV2ITrafficLightPublishRate(Ts &&... xs) -> decltype(auto)
Definition: simulator_core.hpp:602
static auto resetConventionalTrafficLightPublishRate(Ts &&... xs) -> decltype(auto)
Definition: simulator_core.hpp:596
static auto evaluateRelativeHeading(const EntityRef &entity_ref, const OSCLanePosition &osc_lane_position)
Definition: simulator_core.hpp:556
static auto getV2ITrafficLights(Ts &&... xs) -> decltype(auto)
Definition: simulator_core.hpp:590
static auto getConventionalTrafficLights(Ts &&... xs) -> decltype(auto)
Definition: simulator_core.hpp:584
static auto sendCooperateCommand(Ts &&... xs) -> decltype(auto)
Definition: simulator_core.hpp:608
static auto activatePerformanceAssertion(const std::string &entity_ref, const Performance &performance, const Properties &properties)
Definition: simulator_core.hpp:528
static auto asFieldOperatorApplication(Ts &&... xs) -> decltype(auto)
Definition: simulator_core.hpp:539
static auto setConventionalTrafficLightConfidence(Ts &&... xs) -> decltype(auto)
Definition: simulator_core.hpp:615
static auto activateNonUserDefinedControllers() -> decltype(auto)
Definition: simulator_core.hpp:544
Definition: simulator_core.hpp:40
static auto deactivate() -> void
Definition: simulator_core.hpp:58
static auto active()
Definition: simulator_core.hpp:56
static auto activate(const Node &node, const traffic_simulator::Configuration &configuration, Ts &&... xs) -> void
Definition: simulator_core.hpp:45
static auto update() -> void
Definition: simulator_core.hpp:67
Definition: lanelet_pose.hpp:27
auto convertQuaternionToEulerAngle(const T &q)
Definition: quaternion_to_euler.hpp:30
Definition: escape_sequence.hpp:22
geometry_msgs::msg::Pose NativeWorldPosition
Definition: simulator_core.hpp:31
traffic_simulator::LaneletPose NativeRelativeLanePosition
Definition: simulator_core.hpp:37
NativeWorldPosition NativeRelativeWorldPosition
Definition: simulator_core.hpp:33
auto distance(const geometry_msgs::Pose &pose1, const geometry_msgs::Pose &pose2)
Definition: detection_sensor.cpp:34
auto boundingBoxDistance(const geometry_msgs::msg::Pose &from, const traffic_simulator_msgs::msg::BoundingBox &from_bounding_box, const geometry_msgs::msg::Pose &to, const traffic_simulator_msgs::msg::BoundingBox &to_bounding_box) -> std::optional< double >
Definition: distance.cpp:124
auto toMapPose(const CanonicalizedLaneletPose &lanelet_pose) -> const geometry_msgs::msg::Pose
Definition: pose.cpp:53
auto quietNaNPose() -> geometry_msgs::msg::Pose
Definition: pose.cpp:24
auto boundingBoxRelativeLaneletPose(const CanonicalizedLaneletPose &from, const traffic_simulator_msgs::msg::BoundingBox &from_bounding_box, const CanonicalizedLaneletPose &to, const traffic_simulator_msgs::msg::BoundingBox &to_bounding_box, bool allow_lane_change, const std::shared_ptr< hdmap_utils::HdMapUtils > &hdmap_utils_ptr) -> traffic_simulator::LaneletPose
Definition: pose.cpp:136
auto quietNaNLaneletPose() -> traffic_simulator::LaneletPose
Definition: pose.cpp:34
auto boundingBoxRelativePose(const geometry_msgs::msg::Pose &from, const traffic_simulator_msgs::msg::BoundingBox &from_bounding_box, const geometry_msgs::msg::Pose &to, const traffic_simulator_msgs::msg::BoundingBox &to_bounding_box) -> std::optional< geometry_msgs::msg::Pose >
Definition: pose.cpp:93
auto relativePose(const geometry_msgs::msg::Pose &from, const geometry_msgs::msg::Pose &to) -> std::optional< geometry_msgs::msg::Pose >
Definition: pose.cpp:71
auto toLaneletPose(const geometry_msgs::msg::Pose &map_pose, bool include_crosswalk, const std::shared_ptr< hdmap_utils::HdMapUtils > &hdmap_utils_ptr) -> std::optional< CanonicalizedLaneletPose >
Definition: pose.cpp:58
auto canonicalize(const LaneletPose &lanelet_pose, const std::shared_ptr< hdmap_utils::HdMapUtils > &hdmap_utils_ptr) -> CanonicalizedLaneletPose
Definition: pose.cpp:46
auto relativeLaneletPose(const CanonicalizedLaneletPose &from, const CanonicalizedLaneletPose &to, bool allow_lane_change, const std::shared_ptr< hdmap_utils::HdMapUtils > &hdmap_utils_ptr) -> traffic_simulator::LaneletPose
Definition: pose.cpp:113
traffic_simulator_msgs::msg::LaneletPose LaneletPose
Definition: lanelet_pose.hpp:22
Definition: junit5.hpp:25
std::string string
Definition: junit5.hpp:26
Definition: controller.hpp:46
Definition: double.hpp:25
Definition: dynamic_constraints.hpp:44
Definition: entity_ref.hpp:35
Definition: properties.hpp:42
Definition: configuration.hpp:30