17#include <geometry_msgs/msg/pose_stamped.hpp>
18#include <nav2_msgs/action/navigate_to_pose.hpp>
36 using Goal = ActionType::Goal;
39 using GoalHandle = rclcpp_action::ClientGoalHandle<ActionType>;
60 const geometry_msgs::msg::PoseStamped & target)
64 RCLCPP_ERROR(
getLogger(),
"[CpNav2ActionInterface] Action client not available!");
65 throw std::runtime_error(
"Action client not initialized");
71 getLogger(),
"[CpNav2ActionInterface] Sending navigation goal to: "
72 <<
"x=" << target.pose.position.x <<
", y=" << target.pose.position.y
73 <<
", frame=" << target.header.frame_id);
78 std::shared_future<typename GoalHandle::SharedPtr>
sendGoal(
Goal & goal)
82 RCLCPP_ERROR(
getLogger(),
"[CpNav2ActionInterface] Action client not available!");
83 throw std::runtime_error(
"Action client not initialized");
93 RCLCPP_WARN(
getLogger(),
"[CpNav2ActionInterface] Action client not available for cancel!");
97 RCLCPP_INFO(
getLogger(),
"[CpNav2ActionInterface] Cancelling navigation goal");
112 template <
typename TOrthogonal,
typename TSourceObject>
119 postNavigationSuccessEvent = [
this](
const WrappedResult & result)
140 ev->feedbackMessage = feedback;
144 RCLCPP_INFO(
getLogger(),
"[CpNav2ActionInterface] Component initialized");
158 RCLCPP_INFO(
getLogger(),
"[CpNav2ActionInterface] Signal connections established");
163 getLogger(),
"[CpNav2ActionInterface] Action client not found during initialization!");
168 template <
typename T>
173 onNavigationSucceeded_, callback,
object);
176 template <
typename T>
183 template <
typename T>
188 onNavigationCancelled_, callback,
object);
191 template <
typename T>
193 void (T::*callback)(
const Feedback &), T *
object)
207 RCLCPP_INFO(
getLogger(),
"[CpNav2ActionInterface] Navigation succeeded");
217 RCLCPP_WARN(
getLogger(),
"[CpNav2ActionInterface] Navigation aborted");
227 RCLCPP_INFO(
getLogger(),
"[CpNav2ActionInterface] Navigation cancelled");
237 RCLCPP_DEBUG(
getLogger(),
"[CpNav2ActionInterface] Navigation feedback received");
252 if (goal.behavior_tree.empty())
254 goal.behavior_tree =
"";
void onNavigationSuccess(const WrappedResult &result)
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_
Goal createNavigationGoal(const geometry_msgs::msg::PoseStamped &target)
virtual ~CpNav2ActionInterface()=default
void onNavigationCancelled(const WrappedResult &result)
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
void onNavigationAborted(const WrappedResult &result)
rclcpp_action::ClientGoalHandle< ActionType > GoalHandle
boost::signals2::connection onNavigationFeedback(void(T::*callback)(const Feedback &), T *object)
ActionClient * actionClient_
ActionClient * getActionClient() const
void onInitialize() override
std::function< void(const WrappedResult &)> postNavigationAbortedEvent
nav2_msgs::action::NavigateToPose ActionType
boost::signals2::connection onNavigationAborted(void(T::*callback)(const WrappedResult &), T *object)
void onNavigationFeedback(const Feedback &feedback)
void requiresComponent(TComponent *&requiredComponentStorage, bool throwExceptionIfNotExist=false)
ISmaccStateMachine * getStateMachine()
rclcpp::Logger getLogger() const
boost::signals2::connection createSignalConnection(TSmaccSignal &signal, TMemberFunctionPrototype callback, TSmaccObjectType *object)
boost::signals2::connection onSucceeded(void(T::*callback)(const WrappedResult &), T *object)
std::shared_future< typename GoalHandle::SharedPtr > sendGoal(Goal &goal, typename smacc2::SmaccSignal< void(const WrappedResult &)>::WeakPtr resultCallback=typename smacc2::SmaccSignal< void(const WrappedResult &)>::WeakPtr())
boost::signals2::connection onCancelled(void(T::*callback)(const WrappedResult &), T *object)
boost::signals2::connection onFeedback(void(T::*callback)(const Feedback &), T *object)
bool isServerReady() const
boost::signals2::connection onAborted(void(T::*callback)(const WrappedResult &), T *object)