15 #ifndef OPENNAV_DOCKING__DOCKING_SERVER_HPP_
16 #define OPENNAV_DOCKING__DOCKING_SERVER_HPP_
25 #include "rclcpp/node_options.hpp"
26 #include "rclcpp/time.hpp"
27 #include "nav2_ros_common/lifecycle_node.hpp"
28 #include "nav2_ros_common/node_utils.hpp"
29 #include "nav2_ros_common/simple_action_server.hpp"
30 #include "nav2_util/twist_publisher.hpp"
31 #include "nav2_util/odometry_utils.hpp"
32 #include "opennav_docking/controller.hpp"
33 #include "opennav_docking/utils.hpp"
34 #include "opennav_docking/types.hpp"
35 #include "opennav_docking/dock_database.hpp"
36 #include "opennav_docking/navigator.hpp"
37 #include "opennav_docking/parameter_handler.hpp"
38 #include "opennav_docking_core/charging_dock.hpp"
39 #include "nav2_ros_common/tf2_factories.hpp"
41 namespace opennav_docking
57 explicit DockingServer(
const rclcpp::NodeOptions & options = rclcpp::NodeOptions());
99 bool approachDock(
Dock * dock, geometry_msgs::msg::PoseStamped & dock_pose,
bool backward);
105 void rotateToDock(
const geometry_msgs::msg::PoseStamped & dock_pose);
120 bool resetApproach(
const geometry_msgs::msg::PoseStamped & staging_pose,
bool backward);
133 geometry_msgs::msg::Twist & cmd,
const geometry_msgs::msg::PoseStamped & pose,
134 double linear_tolerance,
double angular_tolerance,
bool is_docking,
bool backward);
149 template<
typename ActionT>
151 typename std::shared_ptr<const typename ActionT::Goal> goal,
152 const typename nav2::SimpleActionServer<ActionT>::SharedPtr & action_server);
160 template<
typename ActionT>
162 typename nav2::SimpleActionServer<ActionT>::SharedPtr & action_server,
163 const std::string & name);
171 template<
typename ActionT>
173 typename nav2::SimpleActionServer<ActionT>::SharedPtr & action_server,
174 const std::string & name);
181 nav2::CallbackReturn
on_configure(
const rclcpp_lifecycle::State & state)
override;
188 nav2::CallbackReturn
on_activate(
const rclcpp_lifecycle::State & state)
override;
195 nav2::CallbackReturn
on_deactivate(
const rclcpp_lifecycle::State & state)
override;
202 nav2::CallbackReturn
on_cleanup(
const rclcpp_lifecycle::State & state)
override;
209 nav2::CallbackReturn
on_shutdown(
const rclcpp_lifecycle::State & state)
override;
228 std::unique_ptr<opennav_docking::ParameterHandler> param_handler_;
235 rclcpp::Time action_start_time_;
237 std::unique_ptr<nav2_util::TwistPublisher> vel_publisher_;
238 std::unique_ptr<nav2_util::OdomSmoother> odom_sub_;
239 typename DockingActionServer::SharedPtr docking_action_server_;
240 typename UndockingActionServer::SharedPtr undocking_action_server_;
242 std::unique_ptr<DockDatabase> dock_db_;
243 std::unique_ptr<Navigator> navigator_;
244 std::unique_ptr<Controller> controller_;
245 std::string curr_dock_type_;
247 nav2::TransformBuffer::SharedPtr tf2_buffer_;
248 nav2::TransformListener::SharedPtr 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 charger docking node for AMRs.
virtual geometry_msgs::msg::PoseStamped getRobotPoseInFrame(const std::string &frame)
Get the robot pose (aka base_frame pose) in another frame.
bool resetApproach(const geometry_msgs::msg::PoseStamped &staging_pose, bool backward)
Reset the robot for another approach by controlling back to staging pose.
void dockRobot()
Main action callback method to complete docking request.
nav2::CallbackReturn on_deactivate(const rclcpp_lifecycle::State &state) override
Deactivate member variables.
nav2::CallbackReturn on_cleanup(const rclcpp_lifecycle::State &state) override
Reset member variables.
bool approachDock(Dock *dock, geometry_msgs::msg::PoseStamped &dock_pose, bool backward)
Use control law and dock perception to approach the charge dock.
void doInitialPerception(Dock *dock, geometry_msgs::msg::PoseStamped &dock_pose)
Do initial perception, up to a timeout.
void publishDockingFeedback(uint16_t state)
Publish feedback from a docking action.
DockingServer(const rclcpp::NodeOptions &options=rclcpp::NodeOptions())
A constructor for opennav_docking::DockingServer.
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.
bool checkAndWarnIfPreempted(typename nav2::SimpleActionServer< ActionT >::SharedPtr &action_server, const std::string &name)
Checks and logs warning if action preempted.
bool getCommandToPose(geometry_msgs::msg::Twist &cmd, const geometry_msgs::msg::PoseStamped &pose, double linear_tolerance, double angular_tolerance, bool is_docking, bool backward)
Run a single iteration of the control loop to approach a pose.
bool waitForCharge(Dock *dock)
Wait for charging to begin.
Dock * generateGoalDock(std::shared_ptr< const DockRobot::Goal > goal)
Generate a dock from action goal.
~DockingServer()=default
A destructor for opennav_docking::DockingServer.
nav2::CallbackReturn on_activate(const rclcpp_lifecycle::State &state) override
Activate member variables.
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.
nav2::CallbackReturn on_configure(const rclcpp_lifecycle::State &state) override
Configure member variables.
void publishZeroVelocity()
Publish zero velocity at terminal condition.
void rotateToDock(const geometry_msgs::msg::PoseStamped &dock_pose)
Perform a pure rotation to dock orientation.
void undockRobot()
Main action callback method to complete undocking request.
void stashDockData(bool use_dock_id, Dock *dock, bool successful)
Called at the conclusion of docking actions. Saves relevant docking data for later undocking action.