Autoware.Auto
freespace_planner_node.hpp
Go to the documentation of this file.
1 // Copyright 2021 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 //
15 // Co-developed by Tier IV, Inc. and Robotec.AI sp. z o.o.
16 
17 #ifndef FREESPACE_PLANNER_NODES__FREESPACE_PLANNER_NODE_HPP_
18 #define FREESPACE_PLANNER_NODES__FREESPACE_PLANNER_NODE_HPP_
19 
20 #include <tf2_geometry_msgs/tf2_geometry_msgs.h>
21 #include <tf2_ros/buffer.h>
22 #include <tf2_ros/transform_listener.h>
23 
27 #include <rclcpp/rclcpp.hpp>
28 #include <rclcpp_action/rclcpp_action.hpp>
30 
31 #include <autoware_auto_planning_msgs/action/plan_trajectory.hpp>
32 #include <autoware_auto_planning_msgs/action/planner_costmap.hpp>
33 #include <autoware_auto_planning_msgs/msg/trajectory.hpp>
34 #include <geometry_msgs/msg/pose_array.hpp>
35 #include <geometry_msgs/msg/pose_stamped.hpp>
36 #include <nav_msgs/msg/occupancy_grid.hpp>
37 
38 #include <deque>
39 #include <memory>
40 #include <string>
41 #include <vector>
42 
43 namespace autoware
44 {
45 namespace planning
46 {
47 namespace freespace_planner
48 {
50 
51 
52 struct NodeParam
53 {
54  std::string planning_algorithm;
55  double waypoints_velocity; // constant velocity on planned waypoints [km/h]
56 };
57 
60 class FreespacePlannerNode : public rclcpp::Node
61 {
62 public:
65  explicit FreespacePlannerNode(const rclcpp::NodeOptions & node_options);
66 
67 private:
68  using PlanTrajectoryAction = autoware_auto_planning_msgs::action::PlanTrajectory;
69  using GoalHandle = rclcpp_action::ServerGoalHandle<PlanTrajectoryAction>;
70  using PlannerCostmapAction = autoware_auto_planning_msgs::action::PlannerCostmap;
71  using PlannerCostmapGoalHandle = rclcpp_action::ClientGoalHandle<PlannerCostmapAction>;
72 
73  // ros communication
74  rclcpp_action::Client<PlannerCostmapAction>::SharedPtr map_client_;
75  rclcpp_action::Server<PlanTrajectoryAction>::SharedPtr plan_trajectory_srv_;
76  rclcpp::Publisher<autoware_auto_planning_msgs::msg::Trajectory>::SharedPtr trajectory_debug_pub_;
77  rclcpp::Publisher<geometry_msgs::msg::PoseArray>::SharedPtr pose_array_trajectory_debug_pub_;
78 
79  std::shared_ptr<tf2_ros::Buffer> tf_buffer_;
80  std::shared_ptr<tf2_ros::TransformListener> tf_listener_;
81 
82  // params
83  NodeParam node_param_;
84  PlannerCommonParam planner_common_param_;
85  FreespacePlannerState state_;
86 
87  // variables
88  std::unique_ptr<BasePlanningAlgorithm> algo_;
89  std::shared_ptr<GoalHandle> planning_goal_handle_{nullptr};
90  geometry_msgs::msg::PoseStamped start_pose_;
91  geometry_msgs::msg::PoseStamped goal_pose_;
93  nav_msgs::msg::OccupancyGrid::SharedPtr occupancy_grid_;
94 
95  // callbacks
96  rclcpp_action::GoalResponse handleGoal(
97  const rclcpp_action::GoalUUID &, const std::shared_ptr<const PlanTrajectoryAction::Goal>);
98  rclcpp_action::CancelResponse handleCancel(const std::shared_ptr<GoalHandle> goal_handle);
99  void handleAccepted(const std::shared_ptr<GoalHandle> goal_handle);
100 
101  void goalResponseCallback(std::shared_future<PlannerCostmapGoalHandle::SharedPtr> future);
102  void feedbackCallback(
103  PlannerCostmapGoalHandle::SharedPtr,
104  const std::shared_ptr<const PlannerCostmapAction::Feedback>)
105  {
106  }
107  void resultCallback(const PlannerCostmapGoalHandle::WrappedResult & result);
108 
109  // functions
110  void reset();
111  bool isPlanning() const;
112  void startPlanning();
113  void stopPlanning();
114  bool planTrajectory();
116  const std::string & from, const std::string & to);
117 
118  void visualizeTrajectory();
119  void initializePlanningAlgorithm();
120  AstarParam getAstarParam();
121 };
122 
123 } // namespace freespace_planner
124 } // namespace planning
125 } // namespace autoware
126 
127 #endif // FREESPACE_PLANNER_NODES__FREESPACE_PLANNER_NODE_HPP_
autoware::planning::freespace_planner::PlannerCommonParam
Parameters defining common algorithm configuration.
Definition: base_planning_algorithm.hpp:94
autoware::planning::freespace_planner::FreespacePlannerState::PLANNING
@ PLANNING
autoware::planning::freespace_planner::FreespacePlannerState
FreespacePlannerState
Definition: freespace_planner_node.hpp:49
freespace_planner
Definition: freespace_planner.launch.py:1
autoware::planning::freespace_planner::NodeParam
Definition: freespace_planner_node.hpp:52
autoware::planning::freespace_planner::AstarParam
Definition: astar_search.hpp:40
autoware::planning::freespace_planner::FreespacePlannerState::IDLE
@ IDLE
autoware
This file defines the lanelet2_map_provider_node class.
Definition: quick_sort.hpp:24
autoware::planning::freespace_planner::FreespacePlannerNode::FreespacePlannerNode
FreespacePlannerNode(const rclcpp::NodeOptions &node_options)
Default constructor for FreespacePlannerNode class.
Definition: freespace_planner_node.cpp:106
motion::motion_testing_nodes::TransformStamped
geometry_msgs::msg::TransformStamped TransformStamped
Definition: motion_testing_publisher.hpp:37
vehicle_constants_manager.hpp
This file defines the vehicle_constants_manager class.
motion_common.hpp
astar_search.hpp
autoware::planning::freespace_planner::NodeParam::waypoints_velocity
double waypoints_velocity
Definition: freespace_planner_node.hpp:55
autoware::planning::freespace_planner::FreespacePlannerNode
Creates Hybrid A* planning algorithm node.
Definition: freespace_planner_node.hpp:60
motion::motion_common::Trajectory
autoware_auto_planning_msgs::msg::Trajectory Trajectory
Definition: motion_common.hpp:41
autoware::planning::freespace_planner::NodeParam::planning_algorithm
std::string planning_algorithm
Definition: freespace_planner_node.hpp:54
visibility_control.hpp