scenario_simulator_v2 C++ API
entity_base.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__ENTITY_BASE_HPP_
16 #define TRAFFIC_SIMULATOR__ENTITY__ENTITY_BASE_HPP_
17 
18 #include <autoware_auto_control_msgs/msg/ackermann_control_command.hpp>
19 #include <autoware_auto_vehicle_msgs/msg/gear_command.hpp>
21 #include <memory>
22 #include <optional>
23 #include <queue>
24 #include <string>
35 #include <traffic_simulator_msgs/msg/behavior_parameter.hpp>
36 #include <traffic_simulator_msgs/msg/bounding_box.hpp>
37 #include <traffic_simulator_msgs/msg/entity_status.hpp>
38 #include <traffic_simulator_msgs/msg/entity_type.hpp>
39 #include <traffic_simulator_msgs/msg/obstacle.hpp>
40 #include <traffic_simulator_msgs/msg/vehicle_parameters.hpp>
41 #include <traffic_simulator_msgs/msg/waypoints_array.hpp>
42 #include <unordered_map>
43 #include <vector>
44 #include <visualization_msgs/msg/marker_array.hpp>
45 
46 namespace traffic_simulator
47 {
48 namespace entity
49 {
51 {
52 public:
53  explicit EntityBase(
55  const std::shared_ptr<hdmap_utils::HdMapUtils> &);
56 
57  virtual ~EntityBase() = default;
58 
59  virtual void appendDebugMarker(visualization_msgs::msg::MarkerArray &);
60 
61  virtual auto asFieldOperatorApplication() const -> concealer::FieldOperatorApplication &;
62 
63  virtual void cancelRequest();
64 
65  // clang-format off
66 #define DEFINE_GETTER(NAME, TYPE, RETURN_VARIABLE) \
67  \
72  /* */ auto get##NAME() const noexcept->TYPE { return RETURN_VARIABLE; }
73 
74  DEFINE_GETTER(BoundingBox, traffic_simulator_msgs::msg::BoundingBox, static_cast<EntityStatus>(getStatus()).bounding_box)
75  DEFINE_GETTER(CurrentAccel, geometry_msgs::msg::Accel, static_cast<EntityStatus>(getStatus()).action_status.accel)
76  DEFINE_GETTER(CurrentTwist, geometry_msgs::msg::Twist, static_cast<EntityStatus>(getStatus()).action_status.twist)
77  DEFINE_GETTER(DynamicConstraints, traffic_simulator_msgs::msg::DynamicConstraints, getBehaviorParameter().dynamic_constraints)
79  DEFINE_GETTER(EntitySubtype, traffic_simulator_msgs::msg::EntitySubtype, static_cast<EntityStatus>(getStatus()).subtype)
80  DEFINE_GETTER(LinearJerk, double, static_cast<EntityStatus>(getStatus()).action_status.linear_jerk)
81  DEFINE_GETTER(MapPose, geometry_msgs::msg::Pose, static_cast<EntityStatus>(getStatus()).pose)
82  DEFINE_GETTER(StandStillDuration, double, stand_still_duration_)
84  DEFINE_GETTER(TraveledDistance, double, traveled_distance_)
85  // clang-format on
86 #undef DEFINE_GETTER
87 
88  // clang-format off
89 #define DEFINE_CHECK_FUNCTION(FUNCTION_NAME, BOOL_VARIABLE) \
90  \
93  /* */ auto FUNCTION_NAME() const->bool { return BOOL_VARIABLE; }
94 
97  // clang-format on
98 #undef DEFINE_CHECK_FUNCTION
99 
100  /* */ auto get2DPolygon() const -> std::vector<geometry_msgs::msg::Point>;
101 
102  virtual auto getCurrentAction() const -> std::string = 0;
103 
104  virtual auto getBehaviorParameter() const -> traffic_simulator_msgs::msg::BehaviorParameter = 0;
105 
106  virtual auto getDefaultDynamicConstraints() const
107  -> const traffic_simulator_msgs::msg::DynamicConstraints & = 0;
108 
109  virtual auto getEntityType() const -> const traffic_simulator_msgs::msg::EntityType & = 0;
110 
111  virtual auto getEntityTypename() const -> const std::string & = 0;
112 
113  virtual auto getGoalPoses() -> std::vector<CanonicalizedLaneletPose> = 0;
114 
115  /* */ auto getLaneletPose() const -> std::optional<CanonicalizedLaneletPose>;
116 
117  /* */ auto getLaneletPose(double matching_distance) const
118  -> std::optional<CanonicalizedLaneletPose>;
119 
120  /* */ auto getMapPoseFromRelativePose(const geometry_msgs::msg::Pose &) const
121  -> geometry_msgs::msg::Pose;
122 
123  virtual auto getMaxAcceleration() const -> double = 0;
124 
125  virtual auto getMaxDeceleration() const -> double = 0;
126 
128 
129  virtual auto getObstacle() -> std::optional<traffic_simulator_msgs::msg::Obstacle> = 0;
130 
131  virtual auto getRouteLanelets(double horizon = 100) -> lanelet::Ids = 0;
132 
133  virtual auto fillLaneletPose(CanonicalizedEntityStatus & status) -> void = 0;
134 
135  virtual auto getWaypoints() -> const traffic_simulator_msgs::msg::WaypointsArray = 0;
136 
137  virtual void onUpdate(double current_time, double step_time);
138 
139  virtual void onPostUpdate(double current_time, double step_time);
140 
142 
144 
145  virtual void requestAcquirePosition(const geometry_msgs::msg::Pose &) = 0;
146 
147  virtual void requestAssignRoute(const std::vector<CanonicalizedLaneletPose> &) = 0;
148 
149  virtual void requestAssignRoute(const std::vector<geometry_msgs::msg::Pose> &) = 0;
150 
151  virtual void requestLaneChange(const lanelet::Id){};
152 
154 
155  /* */ void requestLaneChange(
157  const lane_change::Constraint &);
158 
159  /* */ void requestLaneChange(
161  const lane_change::Constraint &);
162 
163  virtual void requestSpeedChange(
164  const double, const speed_change::Transition, const speed_change::Constraint, const bool);
165 
166  virtual void requestSpeedChange(
168  const speed_change::Constraint, const bool);
169 
170  virtual void requestSpeedChange(double, bool);
171 
172  virtual void requestSpeedChange(const speed_change::RelativeTargetSpeed &, bool);
173 
174  virtual void requestClearRoute();
175 
176  virtual auto isControlledBySimulator() const -> bool;
177 
178  virtual auto setControlledBySimulator(bool) -> void;
179 
180  virtual auto requestFollowTrajectory(
181  const std::shared_ptr<traffic_simulator_msgs::msg::PolylineTrajectory> &) -> void;
182 
183  virtual void requestWalkStraight();
184 
185  virtual void setAccelerationLimit(double acceleration) = 0;
186 
187  virtual void setAccelerationRateLimit(double acceleration_rate) = 0;
188 
189  virtual void setDecelerationLimit(double deceleration) = 0;
190 
191  virtual void setDecelerationRateLimit(double deceleration_rate) = 0;
192 
193  /* */ void setDynamicConstraints(const traffic_simulator_msgs::msg::DynamicConstraints &);
194 
195  virtual void setBehaviorParameter(const traffic_simulator_msgs::msg::BehaviorParameter &) = 0;
196 
197  /* */ void setOtherStatus(const std::unordered_map<std::string, CanonicalizedEntityStatus> &);
198 
199  virtual auto setStatus(const CanonicalizedEntityStatus &) -> void;
200 
201  virtual auto setLinearAcceleration(const double linear_acceleration) -> void;
202 
203  virtual auto setLinearVelocity(const double linear_velocity) -> void;
204 
205  virtual void setTrafficLightManager(
206  const std::shared_ptr<traffic_simulator::TrafficLightManager> &);
207 
208  virtual auto activateOutOfRangeJob(
209  double min_velocity, double max_velocity, double min_acceleration, double max_acceleration,
210  double min_jerk, double max_jerk) -> void;
211 
212  virtual auto setVelocityLimit(double) -> void = 0;
213 
214  virtual auto setMapPose(const geometry_msgs::msg::Pose & map_pose) -> void;
215 
216  /* */ auto setTwist(const geometry_msgs::msg::Twist & twist) -> void;
217 
218  /* */ auto setAcceleration(const geometry_msgs::msg::Accel & accel) -> void;
219 
220  /* */ auto setLinearJerk(const double liner_jerk) -> void;
221 
222  virtual void startNpcLogic(const double current_time);
223 
224  /* */ void stopAtCurrentPosition();
225 
226  /* */ void updateEntityStatusTimestamp(const double current_time);
227 
228  /* */ auto updateStandStillDuration(const double step_time) -> double;
229 
230  /* */ auto updateTraveledDistance(const double step_time) -> double;
231 
232  /* */ bool reachPosition(
233  const geometry_msgs::msg::Pose & target_pose, const double tolerance) const;
234 
235  /* */ bool reachPosition(
236  const CanonicalizedLaneletPose & lanelet_pose, const double tolerance) const;
237 
238  /* */ bool reachPosition(const std::string & target_name, const double tolerance) const;
239 
240  /* */ auto requestSynchronize(
241  const std::string & target_name, const CanonicalizedLaneletPose & target_sync_pose,
242  const CanonicalizedLaneletPose & entity_target, const double target_speed,
243  const double tolerance) -> bool;
244 
245  virtual auto fillLaneletPose(CanonicalizedEntityStatus & status, bool include_crosswalk)
246  -> void final;
247 
248  const std::string name;
249 
250  bool verbose;
251 
252 protected:
254 
256 
257  std::shared_ptr<hdmap_utils::HdMapUtils> hdmap_utils_ptr_;
259 
260  bool npc_logic_started_ = false;
261  double stand_still_duration_ = 0.0;
262  double traveled_distance_ = 0.0;
263  double prev_job_duration_ = 0.0;
264  double step_time_ = 0.0;
265 
266  std::unordered_map<std::string, CanonicalizedEntityStatus> other_status_;
267 
268  std::optional<double> target_speed_;
269  traffic_simulator::job::JobList job_list_;
270 
271  std::unique_ptr<traffic_simulator::longitudinal_speed_planning::LongitudinalSpeedPlanner>
273 
274 private:
275  virtual auto requestSpeedChangeWithConstantAcceleration(
276  const double target_speed, const speed_change::Transition, double acceleration,
277  const bool continuous) -> void;
278  virtual auto requestSpeedChangeWithConstantAcceleration(
279  const speed_change::RelativeTargetSpeed & target_speed,
280  const speed_change::Transition transition, double acceleration, const bool continuous) -> void;
281  virtual auto requestSpeedChangeWithTimeConstraint(
282  const double target_speed, const speed_change::Transition, double acceleration_time) -> void;
283  virtual auto requestSpeedChangeWithTimeConstraint(
284  const speed_change::RelativeTargetSpeed & target_speed,
285  const speed_change::Transition transition, double time) -> void;
286  /* */ auto isTargetSpeedReached(double target_speed) const -> bool;
287  /* */ auto isTargetSpeedReached(const speed_change::RelativeTargetSpeed & target_speed) const
288  -> bool;
289 };
290 } // namespace entity
291 } // namespace traffic_simulator
292 
293 #endif // TRAFFIC_SIMULATOR__ENTITY__ENTITY_BASE_HPP_
Definition: traffic_light_manager.hpp:34
Definition: entity_base.hpp:51
auto isNpcLogicStarted() const -> bool
Definition: entity_base.hpp:89
auto setTwist(const geometry_msgs::msg::Twist &twist) -> void
Definition: entity_base.cpp:623
virtual auto setLinearAcceleration(const double linear_acceleration) -> void
Definition: entity_base.cpp:610
virtual void onPostUpdate(double current_time, double step_time)
Definition: entity_base.cpp:167
CanonicalizedEntityStatus status_before_update_
Definition: entity_base.hpp:249
auto setLinearJerk(const double liner_jerk) -> void
Definition: entity_base.cpp:637
virtual auto requestFollowTrajectory(const std::shared_ptr< traffic_simulator_msgs::msg::PolylineTrajectory > &) -> void
Definition: entity_base.cpp:557
double stand_still_duration_
Definition: entity_base.hpp:255
virtual auto getEntityType() const -> const traffic_simulator_msgs::msg::EntityType &=0
std::shared_ptr< traffic_simulator::TrafficLightManager > traffic_light_manager_
Definition: entity_base.hpp:252
virtual void setBehaviorParameter(const traffic_simulator_msgs::msg::BehaviorParameter &)=0
void stopAtCurrentPosition()
Definition: entity_base.cpp:698
traffic_simulator::job::JobList job_list_
Definition: entity_base.hpp:263
virtual auto getDefaultDynamicConstraints() const -> const traffic_simulator_msgs::msg::DynamicConstraints &=0
virtual void requestAcquirePosition(const CanonicalizedLaneletPose &)=0
auto requestSynchronize(const std::string &target_name, const CanonicalizedLaneletPose &target_sync_pose, const CanonicalizedLaneletPose &entity_target, const double target_speed, const double tolerance) -> bool
Definition: entity_base.cpp:758
const std::string name
Definition: entity_base.hpp:242
virtual void setAccelerationLimit(double acceleration)=0
virtual auto getGoalPoses() -> std::vector< CanonicalizedLaneletPose >=0
virtual void startNpcLogic(const double current_time)
Definition: entity_base.cpp:692
void resetDynamicConstraints()
Definition: entity_base.cpp:172
bool npc_logic_started_
Definition: entity_base.hpp:254
std::unordered_map< std::string, CanonicalizedEntityStatus > other_status_
Definition: entity_base.hpp:260
virtual auto setControlledBySimulator(bool) -> void
Definition: entity_base.cpp:551
virtual void requestSpeedChange(const double, const speed_change::Transition, const speed_change::Constraint, const bool)
Definition: entity_base.cpp:335
virtual auto getCurrentAction() const -> std::string=0
virtual auto isControlledBySimulator() const -> bool
Definition: entity_base.cpp:549
virtual auto getBehaviorParameter() const -> traffic_simulator_msgs::msg::BehaviorParameter=0
virtual auto getRouteLanelets(double horizon=100) -> lanelet::Ids=0
virtual void setTrafficLightManager(const std::shared_ptr< traffic_simulator::TrafficLightManager > &)
Definition: entity_base.cpp:617
double step_time_
Definition: entity_base.hpp:258
virtual void setAccelerationRateLimit(double acceleration_rate)=0
std::shared_ptr< hdmap_utils::HdMapUtils > hdmap_utils_ptr_
Definition: entity_base.hpp:251
virtual void requestClearRoute()
Definition: entity_base.cpp:276
virtual void appendDebugMarker(visualization_msgs::msg::MarkerArray &)
Definition: entity_base.cpp:50
virtual auto fillLaneletPose(CanonicalizedEntityStatus &status) -> void=0
virtual auto setVelocityLimit(double) -> void=0
virtual auto getWaypoints() -> const traffic_simulator_msgs::msg::WaypointsArray=0
virtual void cancelRequest()
Definition: entity_base.cpp:60
std::unique_ptr< traffic_simulator::longitudinal_speed_planning::LongitudinalSpeedPlanner > speed_planner_
Definition: entity_base.hpp:266
virtual void requestWalkStraight()
Definition: entity_base.cpp:564
void setDynamicConstraints(const traffic_simulator_msgs::msg::DynamicConstraints &)
Definition: entity_base.cpp:569
auto setAcceleration(const geometry_msgs::msg::Accel &accel) -> void
Definition: entity_base.cpp:630
bool reachPosition(const geometry_msgs::msg::Pose &target_pose, const double tolerance) const
Definition: entity_base.cpp:737
virtual void onUpdate(double current_time, double step_time)
Definition: entity_base.cpp:157
virtual auto getEntityTypename() const -> const std::string &=0
void setOtherStatus(const std::unordered_map< std::string, CanonicalizedEntityStatus > &)
Definition: entity_base.cpp:577
auto getLaneletPose() const -> std::optional< CanonicalizedLaneletPose >
Definition: entity_base.cpp:67
virtual auto setStatus(const CanonicalizedEntityStatus &) -> void
Definition: entity_base.cpp:584
auto laneMatchingSucceed() const -> bool
Definition: entity_base.hpp:90
double prev_job_duration_
Definition: entity_base.hpp:257
bool verbose
Definition: entity_base.hpp:244
virtual auto activateOutOfRangeJob(double min_velocity, double max_velocity, double min_acceleration, double max_acceleration, double min_jerk, double max_jerk) -> void
Definition: entity_base.cpp:650
virtual void requestAssignRoute(const std::vector< CanonicalizedLaneletPose > &)=0
double traveled_distance_
Definition: entity_base.hpp:256
void updateEntityStatusTimestamp(const double current_time)
Definition: entity_base.cpp:707
auto updateStandStillDuration(const double step_time) -> double
Definition: entity_base.cpp:714
virtual auto getMaxAcceleration() const -> double=0
auto getMapPoseFromRelativePose(const geometry_msgs::msg::Pose &) const -> geometry_msgs::msg::Pose
Definition: entity_base.cpp:130
virtual void setDecelerationLimit(double deceleration)=0
virtual auto setMapPose(const geometry_msgs::msg::Pose &map_pose) -> void
Definition: entity_base.cpp:644
virtual auto asFieldOperatorApplication() const -> concealer::FieldOperatorApplication &
Definition: entity_base.cpp:52
auto updateTraveledDistance(const double step_time) -> double
Definition: entity_base.cpp:724
virtual void requestLaneChange(const lanelet::Id)
Definition: entity_base.hpp:145
std::optional< double > target_speed_
Definition: entity_base.hpp:262
auto getStatus() const noexcept -> const CanonicalizedEntityStatus &
Get Status of the entity.
Definition: entity_base.hpp:79
virtual auto setLinearVelocity(const double linear_velocity) -> void
Definition: entity_base.cpp:603
auto get2DPolygon() const -> std::vector< geometry_msgs::msg::Point >
Definition: entity_base.cpp:62
virtual auto getMaxDeceleration() const -> double=0
virtual void setDecelerationRateLimit(double deceleration_rate)=0
CanonicalizedEntityStatus status_
Definition: entity_base.hpp:247
virtual auto getObstacle() -> std::optional< traffic_simulator_msgs::msg::Obstacle >=0
virtual auto getDefaultMatchingDistanceForLaneletPoseCalculation() const -> double
Definition: entity_base.cpp:141
EntityBase(const std::string &name, const CanonicalizedEntityStatus &, const std::shared_ptr< hdmap_utils::HdMapUtils > &)
Definition: entity_base.cpp:31
Definition: entity_status.hpp:29
Definition: lanelet_pose.hpp:27
#define DEFINE_GETTER(NAME, TYPE, RETURN_VARIABLE)
Definition: entity_base.hpp:66
#define DEFINE_CHECK_FUNCTION(FUNCTION_NAME, BOOL_VARIABLE)
Definition: entity_base.hpp:85
Definition: autoware.hpp:30
Definition: cache.hpp:46
Definition: cache.hpp:27
Status
Definition: job.hpp:34
TrajectoryShape
Definition: lane_change.hpp:31
Transition
Definition: speed_change.hpp:26
Definition: api.hpp:48
traffic_simulator_msgs::msg::EntityStatus EntityStatus
Definition: entity_status.hpp:24
std::string string
Definition: junit5.hpp:26
Definition: lane_change.hpp:44
parameters for behavior plugin
Definition: lane_change.hpp:75
Definition: speed_change.hpp:35