Autoware.Auto
behavior_planner_node.hpp
Go to the documentation of this file.
1 // Copyright 2020 The Autoware Foundation
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 
18 
19 #ifndef BEHAVIOR_PLANNER_NODES__BEHAVIOR_PLANNER_NODE_HPP_
20 #define BEHAVIOR_PLANNER_NODES__BEHAVIOR_PLANNER_NODE_HPP_
21 
24 
25 // rclcpp headers
26 #include <rclcpp/rclcpp.hpp>
27 #include <rclcpp_action/rclcpp_action.hpp>
28 
29 // autoware packages
30 #include <common/types.hpp>
31 #include <autoware_auto_msgs/action/plan_trajectory.hpp>
32 #include <autoware_auto_msgs/msg/trajectory.hpp>
33 #include <autoware_auto_msgs/msg/trajectory_point.hpp>
34 #include <autoware_auto_msgs/msg/vehicle_kinematic_state.hpp>
35 #include <autoware_auto_msgs/msg/vehicle_state_report.hpp>
36 #include <autoware_auto_msgs/msg/vehicle_state_command.hpp>
37 #include <autoware_auto_msgs/srv/had_map_service.hpp>
38 #include <autoware_auto_msgs/srv/modify_trajectory.hpp>
40 
41 // Other ROS packages
42 #include <lanelet2_core/LaneletMap.h>
43 #include <tf2_ros/transform_listener.h>
44 #include <tf2_ros/buffer.h>
45 
46 // others
47 #include <string>
48 #include <memory>
49 
50 namespace autoware
51 {
52 namespace behavior_planner_nodes
53 {
54 using PlanTrajectoryAction = autoware_auto_msgs::action::PlanTrajectory;
55 using PlanTrajectoryGoalHandle = rclcpp_action::ClientGoalHandle<PlanTrajectoryAction>;
57 using autoware_auto_msgs::srv::ModifyTrajectory;
61 using autoware_auto_msgs::msg::VehicleStateCommand;
62 using autoware_auto_msgs::msg::VehicleStateReport;
66 
71 
74 class BEHAVIOR_PLANNER_NODES_PUBLIC BehaviorPlannerNode : public rclcpp::Node
75 {
76 public:
79  explicit BehaviorPlannerNode(const rclcpp::NodeOptions & options);
80 
81 private:
82  // ROS Interface
83  rclcpp_action::Client<PlanTrajectoryAction>::SharedPtr m_lane_planner_client;
84  rclcpp_action::Client<PlanTrajectoryAction>::SharedPtr m_parking_planner_client;
85  rclcpp::Client<HADMapService>::SharedPtr m_map_client;
86  // May be nullptr if disabled
87  rclcpp::Client<ModifyTrajectory>::SharedPtr m_modify_trajectory_client;
88  rclcpp::Subscription<State>::SharedPtr m_ego_state_sub{};
89  rclcpp::Subscription<Route>::SharedPtr m_route_sub{};
90  rclcpp::Subscription<Trajectory>::SharedPtr m_lane_trajectory_sub{};
91  rclcpp::Subscription<Trajectory>::SharedPtr m_parking_trajectory_sub{};
92  rclcpp::Subscription<VehicleStateReport>::SharedPtr m_vehicle_state_report_sub{};
93  rclcpp::Publisher<Trajectory>::SharedPtr m_trajectory_pub{};
94  rclcpp::Publisher<Trajectory>::SharedPtr m_debug_trajectory_pub{};
95  rclcpp::Publisher<Trajectory>::SharedPtr m_debug_checkpoints_pub{};
96  rclcpp::Publisher<Route>::SharedPtr m_debug_subroute_pub{};
97  rclcpp::Publisher<VehicleStateCommand>::SharedPtr m_vehicle_state_command_pub{};
98 
99  // planner
100  std::unique_ptr<behavior_planner::BehaviorPlanner> m_planner;
101 
102  // msg cache
103  lanelet::LaneletMapPtr m_lanelet_map_ptr;
104  Route::SharedPtr m_route;
105  State m_ego_state;
106  uchar8_t m_current_gear;
107 
108  // bools to manage states
109  bool8_t m_requesting_trajectory;
110 
111  // transforms
112  std::shared_ptr<tf2_ros::Buffer> m_tf_buffer;
113  std::shared_ptr<tf2_ros::TransformListener> m_tf_listener;
114 
115  // callbacks
116  void on_ego_state(const State::SharedPtr & msg);
117  void on_route(const Route::SharedPtr & msg);
118  void on_lane_trajectory(const Trajectory::SharedPtr & msg);
119  void on_parking_trajectory(const Trajectory::SharedPtr & msg);
120  void on_vehicle_state_report(const VehicleStateReport::SharedPtr & msg);
121  void map_response(rclcpp::Client<HADMapService>::SharedFuture future);
122  void modify_trajectory_response(rclcpp::Client<ModifyTrajectory>::SharedFuture future);
123  void clear_trajectory_cache();
124 
125  void goal_response_callback(std::shared_future<PlanTrajectoryGoalHandle::SharedPtr> future);
126  void feedback_callback(
127  PlanTrajectoryGoalHandle::SharedPtr goal_handle,
128  const std::shared_ptr<const PlanTrajectoryAction::Feedback> feedback);
129  void result_callback(const PlanTrajectoryGoalHandle::WrappedResult & result);
130 
131  // other functions
132  void init();
133  Trajectory refine_trajectory(const State & ego_state, const Trajectory & input);
134  State transform_to_map(const State & state);
135  void request_trajectory(const RouteWithType & route_with_type);
136 };
137 } // namespace behavior_planner_nodes
138 } // namespace autoware
139 
140 #endif // BEHAVIOR_PLANNER_NODES__BEHAVIOR_PLANNER_NODE_HPP_
double float64_t
Definition: types.hpp:37
autoware_auto_msgs::msg::VehicleKinematicState VehicleKinematicState
Definition: trajectory_spoofer.hpp:44
autoware_auto_msgs::msg::TrajectoryPoint TrajectoryPoint
Definition: motion_testing_publisher.hpp:36
float float32_t
Definition: types.hpp:36
autoware_auto_msgs::msg::Trajectory Trajectory
Definition: motion_common.hpp:37
bool bool8_t
Definition: types.hpp:33
This file includes common type definition.
PlannerType
Definition: behavior_planner.hpp:65
autoware_auto_msgs::action::PlanTrajectory PlanTrajectoryAction
Definition: behavior_planner_node.hpp:54
autoware_auto_msgs::msg::VehicleKinematicState State
Definition: behavior_planner_node.hpp:63
This file defines the behavior_planner class.
autoware_auto_msgs::srv::HADMapService HADMapService
Definition: behavior_planner_node.hpp:56
This file defines the behavior_planner_nodes_node class.
ROS 2 Node for wrapping behavior planner.
Definition: behavior_planner_node.hpp:74
autoware_auto_msgs::msg::Route Route
Definition: parking_planner_node.hpp:60
Definition: behavior_planner.hpp:80
rclcpp_action::ClientGoalHandle< PlanTrajectoryAction > PlanTrajectoryGoalHandle
Definition: behavior_planner_node.hpp:55
unsigned char uchar8_t
Definition: types.hpp:35
This file defines the lanelet2_map_provider_node class.
Definition: quick_sort.hpp:24