16 #ifndef OPENNAV_FOLLOWING__FOLLOWING_SERVER_HPP_
17 #define OPENNAV_FOLLOWING__FOLLOWING_SERVER_HPP_
25 #include "geometry_msgs/msg/pose_stamped.hpp"
26 #include "rclcpp/rclcpp.hpp"
27 #include "rclcpp_lifecycle/lifecycle_publisher.hpp"
28 #include "nav2_msgs/action/follow_object.hpp"
29 #include "nav2_ros_common/lifecycle_node.hpp"
30 #include "nav2_ros_common/node_utils.hpp"
31 #include "nav2_ros_common/simple_action_server.hpp"
32 #include "nav2_util/twist_publisher.hpp"
33 #include "nav2_util/odometry_utils.hpp"
34 #include "opennav_docking/controller.hpp"
35 #include "opennav_docking/pose_filter.hpp"
36 #include "tf2_ros/buffer.hpp"
37 #include "tf2_ros/transform_listener.hpp"
39 namespace opennav_following
48 using FollowObject = nav2_msgs::action::FollowObject;
55 explicit FollowingServer(
const rclcpp::NodeOptions & options = rclcpp::NodeOptions());
76 geometry_msgs::msg::PoseStamped & object_pose,
77 const std::string & target_frame = std::string(
""));
86 geometry_msgs::msg::PoseStamped & object_pose,
87 const std::string & target_frame = std::string(
""));
95 template<
typename ActionT>
97 typename std::shared_ptr<const typename ActionT::Goal> goal,
98 const typename nav2::SimpleActionServer<ActionT>::SharedPtr & action_server);
106 template<
typename ActionT>
108 typename nav2::SimpleActionServer<ActionT>::SharedPtr & action_server,
109 const std::string & name);
117 template<
typename ActionT>
119 typename nav2::SimpleActionServer<ActionT>::SharedPtr & action_server,
120 const std::string & name);
127 nav2::CallbackReturn
on_configure(
const rclcpp_lifecycle::State & state)
override;
134 nav2::CallbackReturn
on_activate(
const rclcpp_lifecycle::State & state)
override;
141 nav2::CallbackReturn
on_deactivate(
const rclcpp_lifecycle::State & state)
override;
148 nav2::CallbackReturn
on_cleanup(
const rclcpp_lifecycle::State & state)
override;
155 nav2::CallbackReturn
on_shutdown(
const rclcpp_lifecycle::State & state)
override;
174 virtual bool getRefinedPose(geometry_msgs::msg::PoseStamped & pose);
182 virtual bool getFramePose(geometry_msgs::msg::PoseStamped & pose,
const std::string & frame_id);
191 geometry_msgs::msg::PoseStamped & pose,
const std::string & frame_id);
201 const geometry_msgs::msg::PoseStamped & pose,
double distance);
209 bool isGoalReached(
const geometry_msgs::msg::PoseStamped & goal_pose);
215 rcl_interfaces::msg::SetParametersResult
219 rclcpp::node_interfaces::OnSetParametersCallbackHandle::SharedPtr dyn_params_handler_;
222 std::mutex dynamic_params_lock_;
225 double controller_frequency_;
227 double rotate_to_object_timeout_;
229 double static_object_timeout_;
231 rclcpp::Time static_object_start_time_;
233 bool static_timer_initialized_;
235 double transform_tolerance_;
237 double linear_tolerance_, angular_tolerance_;
239 int max_retries_, num_retries_;
241 std::string base_frame_;
243 std::string fixed_frame_;
245 double desired_distance_;
247 bool skip_orientation_;
249 bool search_by_rotating_;
251 double search_angle_;
254 rclcpp::Time iteration_start_time_;
257 rclcpp::Time action_start_time_;
260 nav2::Subscription<geometry_msgs::msg::PoseStamped>::SharedPtr dynamic_pose_sub_;
263 nav2::Publisher<geometry_msgs::msg::PoseStamped>::SharedPtr
264 filtered_dynamic_pose_pub_;
267 geometry_msgs::msg::PoseStamped detected_dynamic_pose_;
270 std::unique_ptr<opennav_docking::PoseFilter> filter_;
271 double detection_timeout_;
273 std::unique_ptr<nav2_util::TwistPublisher> vel_publisher_;
274 std::unique_ptr<nav2_util::OdomSmoother> odom_sub_;
275 typename FollowingActionServer::SharedPtr following_action_server_;
277 std::unique_ptr<opennav_docking::Controller> controller_;
279 std::shared_ptr<tf2_ros::Buffer> tf2_buffer_;
280 std::unique_ptr<tf2_ros::TransformListener> tf2_listener_;
A lifecycle node wrapper to enable common Nav2 needs such as manipulating parameters.
An action server wrapper to make applications simpler using Actions.
An action server which implements a dynamic following behavior.
bool checkAndWarnIfCancelled(typename nav2::SimpleActionServer< ActionT >::SharedPtr &action_server, const std::string &name)
Checks and logs warning if action canceled.
nav2::CallbackReturn on_shutdown(const rclcpp_lifecycle::State &state) override
Called when in shutdown state.
void followObject()
Main action callback method to complete following request.
virtual bool getFramePose(geometry_msgs::msg::PoseStamped &pose, const std::string &frame_id)
Get the pose of a specific frame in the fixed frame.
virtual bool approachObject(geometry_msgs::msg::PoseStamped &object_pose, const std::string &target_frame=std::string(""))
Use control law and perception to approach the object.
virtual bool getTrackingPose(geometry_msgs::msg::PoseStamped &pose, const std::string &frame_id)
Get the tracking pose based on the current tracking mode.
void publishFollowingFeedback(uint16_t state)
Publish feedback from a following action.
geometry_msgs::msg::PoseStamped getPoseAtDistance(const geometry_msgs::msg::PoseStamped &pose, double distance)
Get the pose at a distance in front of the input pose.
virtual bool getRefinedPose(geometry_msgs::msg::PoseStamped &pose)
Method to obtain the refined dynamic pose.
nav2::CallbackReturn on_deactivate(const rclcpp_lifecycle::State &state) override
Deactivate member variables.
void publishZeroVelocity()
Publish zero velocity at terminal condition.
void getPreemptedGoalIfRequested(typename std::shared_ptr< const typename ActionT::Goal > goal, const typename nav2::SimpleActionServer< ActionT >::SharedPtr &action_server)
Gets a preempted goal if immediately requested.
bool isGoalReached(const geometry_msgs::msg::PoseStamped &goal_pose)
Check if the goal has been reached.
rcl_interfaces::msg::SetParametersResult dynamicParametersCallback(std::vector< rclcpp::Parameter > parameters)
Callback executed when a parameter change is detected.
virtual bool rotateToObject(geometry_msgs::msg::PoseStamped &object_pose, const std::string &target_frame=std::string(""))
Rotate the robot to find the object again.
bool checkAndWarnIfPreempted(typename nav2::SimpleActionServer< ActionT >::SharedPtr &action_server, const std::string &name)
Checks and logs warning if action preempted.
nav2::CallbackReturn on_activate(const rclcpp_lifecycle::State &state) override
Activate member variables.
nav2::CallbackReturn on_configure(const rclcpp_lifecycle::State &state) override
Configure member variables.
nav2::CallbackReturn on_cleanup(const rclcpp_lifecycle::State &state) override
Reset member variables.
~FollowingServer()=default
A destructor for opennav_following::FollowingServer.
FollowingServer(const rclcpp::NodeOptions &options=rclcpp::NodeOptions())
A constructor for opennav_following::FollowingServer.