scenario_simulator_v2 C++ API
vehicle_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__VEHICLE_ENTITY_HPP_
16 #define TRAFFIC_SIMULATOR__ENTITY__VEHICLE_ENTITY_HPP_
17 
18 #include <memory>
19 #include <optional>
20 #include <pluginlib/class_loader.hpp>
21 #include <pugixml.hpp>
22 #include <rclcpp/rclcpp.hpp>
23 #include <string>
27 #include <traffic_simulator_msgs/msg/behavior_parameter.hpp>
28 #include <traffic_simulator_msgs/msg/vehicle_parameters.hpp>
29 #include <traffic_simulator_msgs/msg/waypoints_array.hpp>
30 #include <vector>
31 
32 namespace traffic_simulator
33 {
34 namespace entity
35 {
36 class VehicleEntity : public EntityBase
37 {
38 public:
40  {
41  static auto behaviorTree() -> const std::string &
42  {
43  static const std::string name = "behavior_tree_plugin/VehicleBehaviorTree";
44  return name;
45  }
46 
47  static auto contextGamma() -> const std::string &
48  {
49  static const std::string name = "context_gamma_planner/VehiclePlugin";
50  return name;
51  }
52 
53  static auto doNothing() noexcept -> const std::string &
54  {
55  static const std::string name = "do_nothing_plugin/DoNothingPlugin";
56  return name;
57  }
58 
59  static auto defaultBehavior() -> const std::string & { return behaviorTree(); }
60  };
61 
62  explicit VehicleEntity(
64  const traffic_simulator_msgs::msg::VehicleParameters &,
65  const std::string & plugin_name = BuiltinBehavior::defaultBehavior());
66 
67  ~VehicleEntity() override = default;
68 
69  void appendDebugMarker(visualization_msgs::msg::MarkerArray & marker_array) override;
70 
71  void cancelRequest() override;
72 
73  auto getCurrentAction() const -> std::string override;
74 
75  auto getDefaultDynamicConstraints() const
76  -> const traffic_simulator_msgs::msg::DynamicConstraints & override;
77 
78  auto getDefaultMatchingDistanceForLaneletPoseCalculation() const -> double override;
79 
80  auto getBehaviorParameter() const -> traffic_simulator_msgs::msg::BehaviorParameter override;
81 
82  auto getMaxAcceleration() const -> double override;
83 
84  auto getMaxDeceleration() const -> double override;
85 
86  auto getEntityTypename() const -> const std::string & override;
87 
88  auto getGoalPoses() -> std::vector<geometry_msgs::msg::Pose> override;
89 
90  auto getParameters() const -> const traffic_simulator_msgs::msg::VehicleParameters &;
91 
92  auto getObstacle() -> std::optional<traffic_simulator_msgs::msg::Obstacle> override;
93 
94  auto getRouteLanelets(double horizon = 100) -> lanelet::Ids override;
95 
96  auto getWaypoints() -> const traffic_simulator_msgs::msg::WaypointsArray override;
97 
98  auto onUpdate(const double current_time, const double step_time) -> void override;
99 
100  void requestAcquirePosition(const CanonicalizedLaneletPose &, const RouteOption &) override;
101 
103  const geometry_msgs::msg::Pose & map_pose, const RouteOption &) override;
104 
105  void requestAssignRoute(
106  const std::vector<geometry_msgs::msg::Pose> &, const RouteOption &) override;
107 
108  void requestAssignRoute(
109  const std::vector<CanonicalizedLaneletPose> &, const RouteOption &) override;
110 
112  const std::shared_ptr<traffic_simulator_msgs::msg::PolylineTrajectory> &) -> void override;
113 
114  auto requestLaneChange(const lanelet::Id to_lanelet_id) -> void override;
115 
116  auto requestLaneChange(const traffic_simulator::lane_change::Parameter &) -> void override;
117 
118  void setVelocityLimit(double linear_velocity) override;
119 
120  void setAccelerationLimit(double acceleration) override;
121 
122  void setAccelerationRateLimit(double acceleration_rate) override;
123 
124  void setDecelerationLimit(double deceleration) override;
125 
126  void setDecelerationRateLimit(double deceleration_rate) override;
127 
128  void setBehaviorParameter(const traffic_simulator_msgs::msg::BehaviorParameter &) override;
129 
130  void setTrafficLights(const std::shared_ptr<traffic_simulator::TrafficLightsBase> &) override;
131 
132  // Per-entity lateral collision margin (meters)
133  void setLateralCollisionThreshold(const std::optional<double> & value)
134  {
135  behavior_plugin_ptr_->setLateralCollisionThreshold(value);
136  }
137 
138  const traffic_simulator_msgs::msg::VehicleParameters vehicle_parameters;
139 
140 private:
141  pluginlib::ClassLoader<entity_behavior::BehaviorPluginBase> loader_;
142 
143  const std::shared_ptr<entity_behavior::BehaviorPluginBase> behavior_plugin_ptr_;
144 
145  traffic_simulator::RoutePlanner route_planner_{
146  traffic_simulator::RoutingGraphType::VEHICLE_WITH_ROAD_SHOULDER};
147 
148  std::shared_ptr<math::geometry::CatmullRomSpline> spline_;
149 
150  lanelet::Ids previous_route_lanelets_;
151 };
152 } // namespace entity
153 } // namespace traffic_simulator
154 
155 #endif // TRAFFIC_SIMULATOR__ENTITY__VEHICLE_ENTITY_HPP_
Definition: route_planner.hpp:26
Definition: traffic_lights_base.hpp:44
Definition: entity_base.hpp:52
const std::string name
Definition: entity_base.hpp:348
Definition: vehicle_entity.hpp:37
void setDecelerationLimit(double deceleration) override
Definition: vehicle_entity.cpp:324
auto getEntityTypename() const -> const std::string &override
Definition: vehicle_entity.cpp:93
void requestAssignRoute(const std::vector< geometry_msgs::msg::Pose > &, const RouteOption &) override
Definition: vehicle_entity.cpp:217
auto requestLaneChange(const lanelet::Id to_lanelet_id) -> void override
Definition: vehicle_entity.cpp:264
auto getWaypoints() -> const traffic_simulator_msgs::msg::WaypointsArray override
Definition: vehicle_entity.cpp:128
void setVelocityLimit(double linear_velocity) override
Definition: vehicle_entity.cpp:294
void setAccelerationLimit(double acceleration) override
Definition: vehicle_entity.cpp:304
void setBehaviorParameter(const traffic_simulator_msgs::msg::BehaviorParameter &) override
Definition: vehicle_entity.cpp:344
void setLateralCollisionThreshold(const std::optional< double > &value)
Definition: vehicle_entity.hpp:133
auto getCurrentAction() const -> std::string override
Definition: vehicle_entity.cpp:59
auto getDefaultMatchingDistanceForLaneletPoseCalculation() const -> double override
Definition: vehicle_entity.cpp:71
auto requestFollowTrajectory(const std::shared_ptr< traffic_simulator_msgs::msg::PolylineTrajectory > &) -> void override
Definition: vehicle_entity.cpp:234
auto getDefaultDynamicConstraints() const -> const traffic_simulator_msgs::msg::DynamicConstraints &override
Definition: vehicle_entity.cpp:64
void appendDebugMarker(visualization_msgs::msg::MarkerArray &marker_array) override
Definition: vehicle_entity.cpp:47
auto getBehaviorParameter() const -> traffic_simulator_msgs::msg::BehaviorParameter override
Definition: vehicle_entity.cpp:88
auto getGoalPoses() -> std::vector< geometry_msgs::msg::Pose > override
Definition: vehicle_entity.cpp:99
auto onUpdate(const double current_time, const double step_time) -> void override
Definition: vehicle_entity.cpp:143
void requestAcquirePosition(const CanonicalizedLaneletPose &, const RouteOption &) override
Definition: vehicle_entity.cpp:178
void setAccelerationRateLimit(double acceleration_rate) override
Definition: vehicle_entity.cpp:314
const traffic_simulator_msgs::msg::VehicleParameters vehicle_parameters
Definition: vehicle_entity.hpp:138
void setDecelerationRateLimit(double deceleration_rate) override
Definition: vehicle_entity.cpp:334
auto getMaxAcceleration() const -> double override
Definition: vehicle_entity.cpp:280
auto getMaxDeceleration() const -> double override
Definition: vehicle_entity.cpp:287
auto getRouteLanelets(double horizon=100) -> lanelet::Ids override
Definition: vehicle_entity.cpp:113
void cancelRequest() override
Definition: vehicle_entity.cpp:53
void setTrafficLights(const std::shared_ptr< traffic_simulator::TrafficLightsBase > &) override
Definition: vehicle_entity.cpp:350
auto getParameters() const -> const traffic_simulator_msgs::msg::VehicleParameters &
Definition: vehicle_entity.cpp:83
auto getObstacle() -> std::optional< traffic_simulator_msgs::msg::Obstacle > override
Definition: vehicle_entity.cpp:108
VehicleEntity(const std::string &name, const CanonicalizedEntityStatus &, const traffic_simulator_msgs::msg::VehicleParameters &, const std::string &plugin_name=BuiltinBehavior::defaultBehavior())
Definition: vehicle_entity.cpp:29
Definition: entity_status.hpp:31
Definition: lanelet_pose.hpp:35
Definition: lanelet_wrapper.hpp:43
geometry_msgs::msg::Pose Pose
Definition: lanelet_map.hpp:30
traffic_simulator::lane_change::Parameter Parameter
Definition: lane_change.hpp:27
Definition: operators.hpp:25
Definition: api.hpp:33
std::string string
Definition: junit5.hpp:26
static auto defaultBehavior() -> const std::string &
Definition: vehicle_entity.hpp:59
static auto doNothing() noexcept -> const std::string &
Definition: vehicle_entity.hpp:53
static auto behaviorTree() -> const std::string &
Definition: vehicle_entity.hpp:41
static auto contextGamma() -> const std::string &
Definition: vehicle_entity.hpp:47
Definition: route_option.hpp:25