17#include <geometry_msgs/msg/pose_stamped.hpp>
18#include <nav2_msgs/action/navigate_to_pose.hpp>
37 using Goal = ActionType::Goal;
40 using GoalHandle = rclcpp_action::ClientGoalHandle<ActionType>;
61 const geometry_msgs::msg::PoseStamped & target)
65 RCLCPP_ERROR(
getLogger(),
"[CpNav2ActionInterface] Action client not available!");
66 throw std::runtime_error(
"Action client not initialized");
73 if (goal.behavior_tree.empty())
75 goal.behavior_tree =
"";
79 getLogger(),
"[CpNav2ActionInterface] Sending navigation goal to: "
80 <<
"x=" << target.pose.position.x <<
", y=" << target.pose.position.y
81 <<
", frame=" << target.header.frame_id);
86 std::shared_future<typename GoalHandle::SharedPtr>
sendGoal(
Goal & goal)
90 RCLCPP_ERROR(
getLogger(),
"[CpNav2ActionInterface] Action client not available!");
91 throw std::runtime_error(
"Action client not initialized");
101 RCLCPP_WARN(
getLogger(),
"[CpNav2ActionInterface] Action client not available for cancel!");
105 RCLCPP_INFO(
getLogger(),
"[CpNav2ActionInterface] Cancelling navigation goal");
120 template <
typename TOrthogonal,
typename TClient>
149 RCLCPP_INFO(
getLogger(),
"[CpNav2ActionInterface] Component initialized");
154 RCLCPP_INFO(
getLogger(),
"[CpNav2ActionInterface] Component initializing");
170 RCLCPP_INFO(
getLogger(),
"[CpNav2ActionInterface] Signal connections established");
175 getLogger(),
"[CpNav2ActionInterface] Action client not found during initialization!");
183 template <
typename T>
188 onNavigationSucceeded_, callback,
object);
191 template <
typename T>
198 template <
typename T>
203 onNavigationCancelled_, callback,
object);
206 template <
typename T>
208 void (T::*callback)(
const Feedback &), T *
object)
219 RCLCPP_INFO(
getLogger(),
"[CpNav2ActionInterface] Navigation succeeded");
229 RCLCPP_WARN(
getLogger(),
"[CpNav2ActionInterface] Navigation aborted");
239 RCLCPP_INFO(
getLogger(),
"[CpNav2ActionInterface] Navigation cancelled");
249 RCLCPP_DEBUG(
getLogger(),
"[CpNav2ActionInterface] Navigation feedback received");
bool isNavigationServerReady() const
std::function< void(const Feedback &)> postNavigationFeedbackEvent
smacc2::SmaccSignal< void(const WrappedResult &)> onNavigationCancelled_
std::function< void(const WrappedResult &)> postNavigationSuccessEvent
smacc2::SmaccSignal< void(const WrappedResult &)> onNavigationSucceeded_
smacc2::SmaccSignal< void(const WrappedResult &)> onNavigationAborted_
virtual ~CpNav2ActionInterface()=default
boost::signals2::connection onNavigationCancelled(void(T::*callback)(const WrappedResult &), T *object)
CpNav2ActionInterface()=default
smacc2::SmaccSignal< void(const Feedback &)> onNavigationFeedback_
void onComponentInitialization()
boost::signals2::connection onNavigationSucceeded(void(T::*callback)(const WrappedResult &), T *object)
void waitForNavigationServer()
std::shared_future< typename GoalHandle::SharedPtr > sendGoal(Goal &goal)
ActionType::Result Result
std::shared_future< typename GoalHandle::SharedPtr > sendNavigationGoal(const geometry_msgs::msg::PoseStamped &target)
typename GoalHandle::WrappedResult WrappedResult
ActionType::Feedback Feedback
std::function< void(const WrappedResult &)> postNavigationCancelledEvent
rclcpp_action::ClientGoalHandle< ActionType > GoalHandle
void onNavigationCancelledCallback(const WrappedResult &result)
boost::signals2::connection onNavigationFeedback(void(T::*callback)(const Feedback &), T *object)
ActionClient * getActionClient() const
void onNavigationSuccessCallback(const WrappedResult &result)
smacc2::client_core_components::CpActionClient< ActionType > * actionClient_
void onInitialize() override
void onNavigationAbortedCallback(const WrappedResult &result)
std::function< void(const WrappedResult &)> postNavigationAbortedEvent
nav2_msgs::action::NavigateToPose ActionType
void onNavigationFeedbackCallback(const Feedback &feedback)
boost::signals2::connection onNavigationAborted(void(T::*callback)(const WrappedResult &), T *object)
ISmaccStateMachine * getStateMachine()
rclcpp::Logger getLogger() const
void requiresComponent(TComponent *&requiredComponentStorage, bool throwExceptionIfNotExist)
boost::signals2::connection createSignalConnection(TSmaccSignal &signal, TMemberFunctionPrototype callback, TSmaccObjectType *object)