15 #ifndef NAV2_GRACEFUL_CONTROLLER__GRACEFUL_CONTROLLER_HPP_
16 #define NAV2_GRACEFUL_CONTROLLER__GRACEFUL_CONTROLLER_HPP_
25 #include "nav2_core/controller.hpp"
26 #include "nav2_costmap_2d/footprint_collision_checker.hpp"
27 #include "rclcpp/rclcpp.hpp"
28 #include "pluginlib/class_loader.hpp"
29 #include "pluginlib/class_list_macros.hpp"
30 #include "nav2_graceful_controller/path_handler.hpp"
31 #include "nav2_graceful_controller/parameter_handler.hpp"
32 #include "nav2_graceful_controller/smooth_control_law.hpp"
33 #include "nav2_graceful_controller/utils.hpp"
35 namespace nav2_graceful_controller
63 const rclcpp_lifecycle::LifecycleNode::WeakPtr & parent,
64 std::string name, std::shared_ptr<tf2_ros::Buffer> tf,
65 std::shared_ptr<nav2_costmap_2d::Costmap2DROS> costmap_ros)
override;
90 const geometry_msgs::msg::PoseStamped & pose,
91 const geometry_msgs::msg::Twist & velocity,
98 void setPlan(
const nav_msgs::msg::Path & path)
override;
107 void setSpeedLimit(
const double & speed_limit,
const bool & percentage)
override;
117 const double & motion_target_dist,
118 const nav_msgs::msg::Path & path);
132 const geometry_msgs::msg::PoseStamped & robot_pose,
133 const geometry_msgs::msg::PoseStamped & motion_target,
134 const geometry_msgs::msg::TransformStamped & costmap_transform,
135 nav_msgs::msg::Path & trajectory,
136 const bool & backward);
145 const double & angle_to_target);
154 bool inCollision(
const double & x,
const double & y,
const double & theta);
156 std::shared_ptr<tf2_ros::Buffer> tf_buffer_;
157 std::string plugin_name_;
158 std::shared_ptr<nav2_costmap_2d::Costmap2DROS> costmap_ros_;
159 std::unique_ptr<nav2_costmap_2d::FootprintCollisionChecker<nav2_costmap_2d::Costmap2D *>>
161 rclcpp::Logger logger_{rclcpp::get_logger(
"GracefulController")};
164 double goal_dist_tolerance_;
167 std::shared_ptr<rclcpp_lifecycle::LifecyclePublisher<nav_msgs::msg::Path>> transformed_plan_pub_;
168 std::shared_ptr<rclcpp_lifecycle::LifecyclePublisher<nav_msgs::msg::Path>> local_plan_pub_;
169 std::shared_ptr<rclcpp_lifecycle::LifecyclePublisher<geometry_msgs::msg::PointStamped>>
171 std::shared_ptr<rclcpp_lifecycle::LifecyclePublisher<visualization_msgs::msg::Marker>>
173 std::unique_ptr<nav2_graceful_controller::PathHandler> path_handler_;
174 std::unique_ptr<nav2_graceful_controller::ParameterHandler> param_handler_;
175 std::unique_ptr<nav2_graceful_controller::SmoothControlLaw> control_law_;
controller interface that acts as a virtual base class for all controller plugins
Function-object for checking whether a goal has been reached.
Graceful controller plugin.
void activate() override
Activate controller state machine.
~GracefulController() override=default
Destructor for nav2_graceful_controller::GracefulController.
void setPlan(const nav_msgs::msg::Path &path) override
nav2_core setPlan - Sets the global plan.
bool simulateTrajectory(const geometry_msgs::msg::PoseStamped &robot_pose, const geometry_msgs::msg::PoseStamped &motion_target, const geometry_msgs::msg::TransformStamped &costmap_transform, nav_msgs::msg::Path &trajectory, const bool &backward)
Simulate trajectory calculating in every step the new velocity command based on a new curvature value...
void deactivate() override
Deactivate controller state machine.
geometry_msgs::msg::PoseStamped getMotionTarget(const double &motion_target_dist, const nav_msgs::msg::Path &path)
Get motion target point.
void configure(const rclcpp_lifecycle::LifecycleNode::WeakPtr &parent, std::string name, std::shared_ptr< tf2_ros::Buffer > tf, std::shared_ptr< nav2_costmap_2d::Costmap2DROS > costmap_ros) override
Configure controller state machine.
GracefulController()=default
Constructor for nav2_graceful_controller::GracefulController.
geometry_msgs::msg::Twist rotateToTarget(const double &angle_to_target)
Rotate the robot to face the motion target with maximum angular velocity.
void cleanup() override
Cleanup controller state machine.
void setSpeedLimit(const double &speed_limit, const bool &percentage) override
Limits the maximum linear speed of the robot.
geometry_msgs::msg::TwistStamped computeVelocityCommands(const geometry_msgs::msg::PoseStamped &pose, const geometry_msgs::msg::Twist &velocity, nav2_core::GoalChecker *goal_checker) override
Compute the best command given the current pose and velocity.
bool inCollision(const double &x, const double &y, const double &theta)
Checks if the robot is in collision.