scenario_simulator_v2 C++ API
ego_entity.hpp
Go to the documentation of this file.
1 // Copyright 2015 TIER IV, Inc. All rights reserved.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #ifndef TRAFFIC_SIMULATOR__ENTITY__EGO_ENTITY_HPP_
16 #define TRAFFIC_SIMULATOR__ENTITY__EGO_ENTITY_HPP_
17 
18 #include <algorithm>
20 #include <filesystem>
21 #include <get_parameter/get_parameter.hpp>
22 #include <memory>
23 #include <optional>
24 #include <string>
27 #include <traffic_simulator_msgs/msg/entity_type.hpp>
28 #include <vector>
29 
30 namespace traffic_simulator
31 {
32 namespace entity
33 {
35 {
36  bool is_controlled_by_simulator_{false};
37  std::optional<double> target_speed_;
38  traffic_simulator_msgs::msg::BehaviorParameter behavior_parameter_;
39  std::shared_ptr<traffic_simulator_msgs::msg::PolylineTrajectory> polyline_trajectory_;
40 
41 public:
42  explicit EgoEntity() = delete;
43 
44  explicit EgoEntity(
46  const traffic_simulator_msgs::msg::VehicleParameters &, const Configuration &,
47  const rclcpp::node_interfaces::NodeParametersInterface::SharedPtr &);
48 
49  explicit EgoEntity(EgoEntity &&) = delete;
50 
51  explicit EgoEntity(const EgoEntity &) = delete;
52 
53  ~EgoEntity() override = default;
54 
55  auto operator=(EgoEntity &&) -> EgoEntity & = delete;
56 
57  auto operator=(const EgoEntity &) -> EgoEntity & = delete;
58 
59  auto getCurrentAction() const -> std::string override;
60 
61  auto getCurrentPose() const -> const geometry_msgs::msg::Pose &;
62 
63  auto getDefaultDynamicConstraints() const
64  -> const traffic_simulator_msgs::msg::DynamicConstraints & override;
65 
66  auto getBehaviorParameter() const -> traffic_simulator_msgs::msg::BehaviorParameter override;
67 
68  auto getEntityStatus(const double, const double) const -> const CanonicalizedEntityStatus;
69 
70  auto getEntityTypename() const -> const std::string & override;
71 
72  auto getObstacle() -> std::optional<traffic_simulator_msgs::msg::Obstacle> override;
73 
74  auto getRouteLanelets(double horizon = 100) -> lanelet::Ids override;
75 
76  auto getWaypoints() -> const traffic_simulator_msgs::msg::WaypointsArray override;
77 
78  auto updateFieldOperatorApplication() -> void;
79 
80  void onUpdate(double current_time, double step_time) override;
81 
82  void requestAcquirePosition(const CanonicalizedLaneletPose &) override;
83 
85  const CanonicalizedLaneletPose &, const traffic_simulator::RouteOption &) override;
86 
87  void requestAcquirePosition(const geometry_msgs::msg::Pose &) override;
88 
90  const geometry_msgs::msg::Pose &, const traffic_simulator::RouteOption &) override;
91 
92  void requestAssignRoute(const std::vector<CanonicalizedLaneletPose> &) override;
93 
94  void requestAssignRoute(
95  const std::vector<CanonicalizedLaneletPose> &, const traffic_simulator::RouteOption &) override;
96 
97  void requestAssignRoute(const std::vector<geometry_msgs::msg::Pose> &) override;
98 
99  void requestAssignRoute(
100  const std::vector<geometry_msgs::msg::Pose> &, const traffic_simulator::RouteOption &) override;
101 
103  const std::shared_ptr<traffic_simulator_msgs::msg::PolylineTrajectory> &) -> void override;
104 
105  auto requestLaneChange(const lanelet::Id) -> void override;
106 
107  auto requestLaneChange(const lane_change::Parameter &) -> void override;
108 
109  auto requestSpeedChange(
110  const double, const speed_change::Transition, const speed_change::Constraint,
111  const bool continuous) -> void override;
112 
113  auto requestSpeedChange(
114  const speed_change::RelativeTargetSpeed &, const speed_change::Transition,
115  const speed_change::Constraint, const bool continuous) -> void override;
116 
117  auto requestClearRoute() -> void;
118 
119  auto requestReplanRoute(
120  const std::vector<geometry_msgs::msg::PoseStamped> & route,
121  const bool allow_goal_modification = false) -> void;
122 
123  auto requestAutoModeForCooperation(const std::string & module_name, bool enable) -> void;
124 
125  auto isControlledBySimulator() const -> bool override;
126 
127  auto setControlledBySimulator(bool state) -> void override
128  {
129  is_controlled_by_simulator_ = state;
130  }
131 
132  auto setBehaviorParameter(const traffic_simulator_msgs::msg::BehaviorParameter &)
133  -> void override;
134 
135  void requestSpeedChange(double, bool continuous) override;
136 
137  void requestSpeedChange(
138  const speed_change::RelativeTargetSpeed & target_speed, bool continuous) override;
139 
140  auto setVelocityLimit(double) -> void override;
141 
142  auto setMapPose(const geometry_msgs::msg::Pose & map_pose) -> void override;
143 
144  template <typename ParameterType>
145  auto setParameter(const std::string & name, const ParameterType & default_value = {})
146  -> ParameterType
147  {
148  return declare_parameter<ParameterType>(name, default_value);
149  }
150 
151  template <typename... Ts>
152  auto setStatus(Ts &&... xs) -> void
153  {
154  if (status_->getTime() > 0 && not isControlledBySimulator()) {
156  "You cannot set entity status to the ego vehicle named ", std::quoted(status_->getName()),
157  " after starting scenario.");
158  } else {
159  EntityBase::setStatus(std::forward<decltype(xs)>(xs)...);
160  }
161  }
162 
163  auto engage() -> void;
164  auto isEngaged() const -> bool;
165  auto isEngageable() const -> bool;
166  auto sendCooperateCommand(const std::string & module_name, const std::string & command) -> void;
167  auto getMinimumRiskManeuverBehaviorName() const -> std::string;
168  auto getMinimumRiskManeuverStateName() const -> std::string;
169  auto getEmergencyStateName() const -> std::string;
170  auto getTurnIndicatorsCommandName() const -> std::string;
171 };
172 } // namespace entity
173 } // namespace traffic_simulator
174 #endif // TRAFFIC_SIMULATOR__ENTITY__EGO_ENTITY_HPP_
Definition: ego_entity.hpp:35
auto isEngageable() const -> bool
Definition: ego_entity.cpp:90
auto requestReplanRoute(const std::vector< geometry_msgs::msg::PoseStamped > &route, const bool allow_goal_modification=false) -> void
Definition: ego_entity.cpp:399
auto getObstacle() -> std::optional< traffic_simulator_msgs::msg::Obstacle > override
Definition: ego_entity.cpp:147
auto setMapPose(const geometry_msgs::msg::Pose &map_pose) -> void override
Definition: ego_entity.cpp:460
void requestAssignRoute(const std::vector< CanonicalizedLaneletPose > &) override
Definition: ego_entity.cpp:232
auto isEngaged() const -> bool
Definition: ego_entity.cpp:88
void requestAcquirePosition(const CanonicalizedLaneletPose &) override
Definition: ego_entity.cpp:206
auto getWaypoints() -> const traffic_simulator_msgs::msg::WaypointsArray override
Definition: ego_entity.cpp:168
auto getEntityStatus(const double, const double) const -> const CanonicalizedEntityStatus
auto getCurrentPose() const -> const geometry_msgs::msg::Pose &
Definition: ego_entity.cpp:163
auto getDefaultDynamicConstraints() const -> const traffic_simulator_msgs::msg::DynamicConstraints &override
Definition: ego_entity.cpp:425
auto requestClearRoute() -> void
Definition: ego_entity.cpp:397
auto setParameter(const std::string &name, const ParameterType &default_value={}) -> ParameterType
Definition: ego_entity.hpp:145
void onUpdate(double current_time, double step_time) override
Definition: ego_entity.cpp:180
auto setControlledBySimulator(bool state) -> void override
Definition: ego_entity.hpp:127
auto engage() -> void
Definition: ego_entity.cpp:86
auto getEntityTypename() const -> const std::string &override
Definition: ego_entity.cpp:141
auto requestFollowTrajectory(const std::shared_ptr< traffic_simulator_msgs::msg::PolylineTrajectory > &) -> void override
Definition: ego_entity.cpp:357
auto setVelocityLimit(double) -> void override
Definition: ego_entity.cpp:454
auto operator=(EgoEntity &&) -> EgoEntity &=delete
auto requestLaneChange(const lanelet::Id) -> void override
Definition: ego_entity.cpp:365
auto getCurrentAction() const -> std::string override
Definition: ego_entity.cpp:131
auto sendCooperateCommand(const std::string &module_name, const std::string &command) -> void
Definition: ego_entity.cpp:92
auto operator=(const EgoEntity &) -> EgoEntity &=delete
auto getRouteLanelets(double horizon=100) -> lanelet::Ids override
Definition: ego_entity.cpp:152
auto updateFieldOperatorApplication() -> void
Definition: ego_entity.cpp:178
EgoEntity(const EgoEntity &)=delete
auto requestAutoModeForCooperation(const std::string &module_name, bool enable) -> void
Definition: ego_entity.cpp:98
auto setStatus(Ts &&... xs) -> void
Definition: ego_entity.hpp:152
auto getTurnIndicatorsCommandName() const -> std::string
Definition: ego_entity.cpp:115
auto setBehaviorParameter(const traffic_simulator_msgs::msg::BehaviorParameter &) -> void override
Definition: ego_entity.cpp:431
auto getMinimumRiskManeuverStateName() const -> std::string
Definition: ego_entity.cpp:108
auto getBehaviorParameter() const -> traffic_simulator_msgs::msg::BehaviorParameter override
Definition: ego_entity.cpp:133
auto requestSpeedChange(const double, const speed_change::Transition, const speed_change::Constraint, const bool continuous) -> void override
Definition: ego_entity.cpp:381
auto getEmergencyStateName() const -> std::string
Definition: ego_entity.cpp:113
auto isControlledBySimulator() const -> bool override
Definition: ego_entity.cpp:355
auto getMinimumRiskManeuverBehaviorName() const -> std::string
Definition: ego_entity.cpp:103
const std::string name
Definition: entity_base.hpp:348
std::shared_ptr< CanonicalizedEntityStatus > status_
Definition: entity_base.hpp:355
virtual auto setStatus(const EntityStatus &status) -> void
Definition: entity_base.cpp:586
Definition: vehicle_entity.hpp:37
Definition: entity_status.hpp:31
Definition: lanelet_pose.hpp:35
#define THROW_SEMANTIC_ERROR(...)
Definition: exception.hpp:59
Definition: lanelet_wrapper.hpp:43
geometry_msgs::msg::Pose Pose
Definition: lanelet_map.hpp:30
traffic_simulator::lane_change::Constraint Constraint
Definition: lane_change.hpp:29
traffic_simulator::lane_change::Parameter Parameter
Definition: lane_change.hpp:27
geometry_msgs::msg::Pose Pose
Definition: lanelet_wrapper.hpp:70
geometry_msgs::msg::PoseStamped PoseStamped
Definition: lanelet_wrapper.hpp:71
Transition
Definition: speed_change.hpp:26
Definition: operators.hpp:25
Definition: api.hpp:33
Definition: junit5.hpp:25
std::string string
Definition: junit5.hpp:26
Definition: field_operator_application.hpp:53
void RouteOption
Definition: field_operator_application.hpp:176
Definition: configuration.hpp:30