SMACC2
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Protected Member Functions | Protected Attributes | List of all members
smacc2::client_bases::SmaccActionClientBase< ActionType > Class Template Reference

#include <smacc_action_client_base.hpp>

Inheritance diagram for smacc2::client_bases::SmaccActionClientBase< ActionType >:
Inheritance graph
Collaboration diagram for smacc2::client_bases::SmaccActionClientBase< ActionType >:
Collaboration graph

Public Types

typedef rclcpp_action::Client< ActionType > ActionClient
 
using Goal = typename ActionClient::Goal
 
using Feedback = typename ActionClient::Feedback
 
using GoalHandle = rclcpp_action::ClientGoalHandle< ActionType >
 
typedef GoalHandle::WrappedResult WrappedResult
 
using SendGoalOptions = typename ActionClient::SendGoalOptions
 
using GoalResponseCallback = std::function< void(std::shared_future< typename GoalHandle::SharedPtr >)>
 
using FeedbackCallback = typename GoalHandle::FeedbackCallback
 
using ResultCallback = typename GoalHandle::ResultCallback
 
using CancelRequest = typename ActionType::Impl::CancelGoalService::Request
 
using CancelResponse = typename ActionType::Impl::CancelGoalService::Response
 
using CancelCallback = std::function< void(typename CancelResponse::SharedPtr)>
 
typedef smacc2::SmaccSignal< void(const WrappedResult &)> SmaccActionResultSignal
 

Public Member Functions

 SmaccActionClientBase (std::string actionServerName)
 
 SmaccActionClientBase ()
 
virtual ~SmaccActionClientBase ()
 
virtual std::shared_ptr< rclcpp_action::ClientBase > getClientBase () override
 
void onInitialize () override
 
template<typename EvType >
void postResultEvent (WrappedResult &)
 
template<typename TOrthogonal , typename TSourceObject >
void onOrthogonalAllocation ()
 
template<typename T >
boost::signals2::connection onSucceeded (void(T::*callback)(WrappedResult &), T *object)
 
template<typename T >
boost::signals2::connection onSucceeded (std::function< void(WrappedResult &)> callback)
 
template<typename T >
boost::signals2::connection onAborted (void(T::*callback)(WrappedResult &), T *object)
 
template<typename T >
boost::signals2::connection onAborted (std::function< void(WrappedResult &)> callback)
 
template<typename T >
boost::signals2::connection onCancelled (void(T::*callback)(WrappedResult &), T *object)
 
template<typename T >
boost::signals2::connection onCancelled (std::function< void(WrappedResult &)> callback)
 
virtual bool cancelGoal () override
 
std::shared_future< typename GoalHandle::SharedPtr > sendGoal (Goal &goal, typename SmaccActionResultSignal::WeakPtr resultCallback=typename SmaccActionResultSignal::WeakPtr())
 
- Public Member Functions inherited from smacc2::client_bases::ISmaccActionClient
 ISmaccActionClient ()
 
virtual ~ISmaccActionClient ()
 
std::string getNamespace () const
 
virtual bool cancelGoal ()=0
 
virtual std::shared_ptr< rclcpp_action::ClientBase > getClientBase ()=0
 
virtual std::string getName () const
 
- Public Member Functions inherited from smacc2::ISmaccClient
 ISmaccClient ()
 
virtual ~ISmaccClient ()
 
virtual void onInitialize ()
 
virtual std::string getName () const
 
template<typename TComponent >
TComponent * getComponent ()
 
template<typename TComponent >
TComponent * getComponent (std::string name)
 
template<typename TComponent >
TComponent * getComponent (int index)
 
virtual smacc2::introspection::TypeInfo::Ptr getType ()
 
ISmaccStateMachinegetStateMachine ()
 
template<typename TSmaccSignal , typename T >
void connectSignal (TSmaccSignal &signal, void(T::*callback)(), T *object)
 
template<typename SmaccClientType >
void requiresClient (SmaccClientType *&storage)
 
void getComponents (std::vector< std::shared_ptr< ISmaccComponent > > &components)
 
const std::vector< std::shared_ptr< ISmaccComponent > > & iterateComponents () const
 
template<typename EventType >
void postEvent (const EventType &ev)
 
template<typename EventType >
void postEvent ()
 

Static Public Member Functions

static std::string getEventLabel ()
 

Public Attributes

std::string action_endpoint_
 
std::optional< std::shared_future< typename GoalHandle::SharedPtr > > lastRequest_
 
SmaccActionResultSignal onSucceeded_
 
SmaccActionResultSignal onAborted_
 
SmaccActionResultSignal onCancelled_
 
std::function< void(WrappedResult)> postSuccessEvent
 
std::function< void(WrappedResult)> postAbortedEvent
 
std::function< void(WrappedResult)> postCancelledEvent
 
std::function< void(const Feedback &)> postFeedbackEvent
 
FeedbackCallback feedback_cb
 

Protected Member Functions

void onFeedback (typename GoalHandle::SharedPtr, const std::shared_ptr< const Feedback > feedback_msg)
 
void onResult (const WrappedResult &result_msg)
 
- Protected Member Functions inherited from smacc2::ISmaccClient
template<typename TOrthogonal , typename TSourceObject >
void onOrthogonalAllocation ()
 
template<typename SmaccComponentType , typename TOrthogonal , typename TClient , typename... TArgs>
SmaccComponentType * createComponent (TArgs... targs)
 
template<typename SmaccComponentType , typename TOrthogonal , typename TClient , typename... TArgs>
SmaccComponentType * createNamedComponent (std::string name, TArgs... targs)
 
rclcpp::Node::SharedPtr getNode ()
 
rclcpp::Logger getLogger ()
 

Protected Attributes

ActionClient::SharedPtr client_
 
- Protected Attributes inherited from smacc2::client_bases::ISmaccActionClient
std::string name_
 
- Protected Attributes inherited from smacc2::ISmaccClient
std::map< ComponentKey, std::shared_ptr< smacc2::ISmaccComponent > > components_
 

Detailed Description

template<typename ActionType>
class smacc2::client_bases::SmaccActionClientBase< ActionType >

Definition at line 37 of file smacc_action_client_base.hpp.

Member Typedef Documentation

◆ ActionClient

template<typename ActionType >
typedef rclcpp_action::Client<ActionType> smacc2::client_bases::SmaccActionClientBase< ActionType >::ActionClient

Definition at line 42 of file smacc_action_client_base.hpp.

◆ CancelCallback

template<typename ActionType >
using smacc2::client_bases::SmaccActionClientBase< ActionType >::CancelCallback = std::function<void(typename CancelResponse::SharedPtr)>

Definition at line 61 of file smacc_action_client_base.hpp.

◆ CancelRequest

template<typename ActionType >
using smacc2::client_bases::SmaccActionClientBase< ActionType >::CancelRequest = typename ActionType::Impl::CancelGoalService::Request

Definition at line 59 of file smacc_action_client_base.hpp.

◆ CancelResponse

template<typename ActionType >
using smacc2::client_bases::SmaccActionClientBase< ActionType >::CancelResponse = typename ActionType::Impl::CancelGoalService::Response

Definition at line 60 of file smacc_action_client_base.hpp.

◆ Feedback

template<typename ActionType >
using smacc2::client_bases::SmaccActionClientBase< ActionType >::Feedback = typename ActionClient::Feedback

Definition at line 50 of file smacc_action_client_base.hpp.

◆ FeedbackCallback

template<typename ActionType >
using smacc2::client_bases::SmaccActionClientBase< ActionType >::FeedbackCallback = typename GoalHandle::FeedbackCallback

Definition at line 57 of file smacc_action_client_base.hpp.

◆ Goal

template<typename ActionType >
using smacc2::client_bases::SmaccActionClientBase< ActionType >::Goal = typename ActionClient::Goal

Definition at line 49 of file smacc_action_client_base.hpp.

◆ GoalHandle

template<typename ActionType >
using smacc2::client_bases::SmaccActionClientBase< ActionType >::GoalHandle = rclcpp_action::ClientGoalHandle<ActionType>

Definition at line 51 of file smacc_action_client_base.hpp.

◆ GoalResponseCallback

template<typename ActionType >
using smacc2::client_bases::SmaccActionClientBase< ActionType >::GoalResponseCallback = std::function<void(std::shared_future<typename GoalHandle::SharedPtr>)>

Definition at line 55 of file smacc_action_client_base.hpp.

◆ ResultCallback

template<typename ActionType >
using smacc2::client_bases::SmaccActionClientBase< ActionType >::ResultCallback = typename GoalHandle::ResultCallback

Definition at line 58 of file smacc_action_client_base.hpp.

◆ SendGoalOptions

template<typename ActionType >
using smacc2::client_bases::SmaccActionClientBase< ActionType >::SendGoalOptions = typename ActionClient::SendGoalOptions

Definition at line 54 of file smacc_action_client_base.hpp.

◆ SmaccActionResultSignal

template<typename ActionType >
typedef smacc2::SmaccSignal<void(const WrappedResult &)> smacc2::client_bases::SmaccActionClientBase< ActionType >::SmaccActionResultSignal

Definition at line 63 of file smacc_action_client_base.hpp.

◆ WrappedResult

template<typename ActionType >
typedef GoalHandle::WrappedResult smacc2::client_bases::SmaccActionClientBase< ActionType >::WrappedResult

Definition at line 52 of file smacc_action_client_base.hpp.

Constructor & Destructor Documentation

◆ SmaccActionClientBase() [1/2]

template<typename ActionType >
smacc2::client_bases::SmaccActionClientBase< ActionType >::SmaccActionClientBase ( std::string  actionServerName)
inline

◆ SmaccActionClientBase() [2/2]

template<typename ActionType >
smacc2::client_bases::SmaccActionClientBase< ActionType >::SmaccActionClientBase ( )
inline

◆ ~SmaccActionClientBase()

template<typename ActionType >
virtual smacc2::client_bases::SmaccActionClientBase< ActionType >::~SmaccActionClientBase ( )
inlinevirtual

Definition at line 73 of file smacc_action_client_base.hpp.

73{}

Member Function Documentation

◆ cancelGoal()

template<typename ActionType >
virtual bool smacc2::client_bases::SmaccActionClientBase< ActionType >::cancelGoal ( )
inlineoverridevirtual

Implements smacc2::client_bases::ISmaccActionClient.

Definition at line 214 of file smacc_action_client_base.hpp.

215 {
216 auto fut = this->client_->async_cancel_all_goals();
217 fut.wait();
218
219 // if (lastRequest_ && lastRequest_->valid())
220 // {
221
222 // // rclcpp::spin_until_future_complete(getNode(), *lastRequest_);
223 // auto req = lastRequest_->get();
224 // RCLCPP_INFO_STREAM(
225 // getLogger(), "[" << getName() << "] Cancelling goal. req id: "
226 // << rclcpp_action::to_string(req->get_goal_id()));
227 // auto cancelresult = client_->async_cancel_goal(req);
228
229 // // wait actively
230 // // rclcpp::spin_until_future_complete(getNode(), cancelresult);
231 // //lastRequest_.reset();
232 // return true;
233 // }
234 // else
235 // {
236 // RCLCPP_ERROR(
237 // getLogger(), "%s [at %s]: not connected with actionserver, skipping cancel goal ...",
238 // getName().c_str(), getNamespace().c_str());
239 // return false;
240 // }
241
242 return true;
243 }

References smacc2::client_bases::SmaccActionClientBase< ActionType >::client_.

Referenced by cl_nav2z::CbNav2ZClientBehaviorBase::cancelGoal(), and cl_nav2z::CbAbortNavigation::onEntry().

Here is the caller graph for this function:

◆ getClientBase()

template<typename ActionType >
virtual std::shared_ptr< rclcpp_action::ClientBase > smacc2::client_bases::SmaccActionClientBase< ActionType >::getClientBase ( )
inlineoverridevirtual

◆ getEventLabel()

template<typename ActionType >
static std::string smacc2::client_bases::SmaccActionClientBase< ActionType >::getEventLabel ( )
inlinestatic

Definition at line 87 of file smacc_action_client_base.hpp.

88 {
89 auto type = TypeInfo::getTypeInfoFromType<ActionType>();
90 return type->getNonTemplatedTypeName();
91 }

◆ onAborted() [1/2]

template<typename ActionType >
template<typename T >
boost::signals2::connection smacc2::client_bases::SmaccActionClientBase< ActionType >::onAborted ( std::function< void(WrappedResult &)>  callback)
inline

Definition at line 171 of file smacc_action_client_base.hpp.

172 {
173 return this->getStateMachine()->createSignalConnection(onAborted_, callback);
174 }
ISmaccStateMachine * getStateMachine()
boost::signals2::connection createSignalConnection(TSmaccSignal &signal, TMemberFunctionPrototype callback, TSmaccObjectType *object)

References smacc2::ISmaccStateMachine::createSignalConnection(), and smacc2::ISmaccClient::getStateMachine().

Here is the call graph for this function:

◆ onAborted() [2/2]

template<typename ActionType >
template<typename T >
boost::signals2::connection smacc2::client_bases::SmaccActionClientBase< ActionType >::onAborted ( void(T::*)(WrappedResult &)  callback,
T *  object 
)
inline

Definition at line 165 of file smacc_action_client_base.hpp.

166 {
167 return this->getStateMachine()->createSignalConnection(onAborted_, callback, object);
168 }

References smacc2::ISmaccStateMachine::createSignalConnection(), and smacc2::ISmaccClient::getStateMachine().

Here is the call graph for this function:

◆ onCancelled() [1/2]

template<typename ActionType >
template<typename T >
boost::signals2::connection smacc2::client_bases::SmaccActionClientBase< ActionType >::onCancelled ( std::function< void(WrappedResult &)>  callback)
inline

Definition at line 183 of file smacc_action_client_base.hpp.

184 {
185 return this->getStateMachine()->createSignalConnection(onCancelled_, callback);
186 }

References smacc2::ISmaccStateMachine::createSignalConnection(), and smacc2::ISmaccClient::getStateMachine().

Here is the call graph for this function:

◆ onCancelled() [2/2]

template<typename ActionType >
template<typename T >
boost::signals2::connection smacc2::client_bases::SmaccActionClientBase< ActionType >::onCancelled ( void(T::*)(WrappedResult &)  callback,
T *  object 
)
inline

Definition at line 177 of file smacc_action_client_base.hpp.

178 {
179 return this->getStateMachine()->createSignalConnection(onCancelled_, callback, object);
180 }

References smacc2::ISmaccStateMachine::createSignalConnection(), and smacc2::ISmaccClient::getStateMachine().

Here is the call graph for this function:

◆ onFeedback()

template<typename ActionType >
void smacc2::client_bases::SmaccActionClientBase< ActionType >::onFeedback ( typename GoalHandle::SharedPtr  ,
const std::shared_ptr< const Feedback feedback_msg 
)
inlineprotected

Definition at line 380 of file smacc_action_client_base.hpp.

383 {
384 postFeedbackEvent(*feedback_msg);
385 }
std::function< void(const Feedback &)> postFeedbackEvent

References smacc2::client_bases::SmaccActionClientBase< ActionType >::postFeedbackEvent.

Referenced by smacc2::client_bases::SmaccActionClientBase< ActionType >::onOrthogonalAllocation().

Here is the caller graph for this function:

◆ onInitialize()

template<typename ActionType >
void smacc2::client_bases::SmaccActionClientBase< ActionType >::onInitialize ( )
inlineoverridevirtual

Reimplemented from smacc2::ISmaccClient.

Definition at line 77 of file smacc_action_client_base.hpp.

78 {
79 if (name_ == "") name_ = smacc2::demangleSymbol(typeid(*this).name());
80 this->client_ = rclcpp_action::create_client<ActionType>(getNode(), action_endpoint_);
81 // RCLCPP_INFO_STREAM(
82 // this->getLogger(),
83 // "Waiting for action server '" << name_ << "' of type: " << demangledTypeName<ActionType>());
84 //client_->wait_for_action_server();
85 }
rclcpp::Node::SharedPtr getNode()
Definition: client.cpp:60
std::string demangleSymbol()

References smacc2::client_bases::SmaccActionClientBase< ActionType >::action_endpoint_, smacc2::client_bases::SmaccActionClientBase< ActionType >::client_, smacc2::introspection::demangleSymbol(), smacc2::ISmaccClient::getNode(), and smacc2::client_bases::ISmaccActionClient::name_.

Here is the call graph for this function:

◆ onOrthogonalAllocation()

template<typename ActionType >
template<typename TOrthogonal , typename TSourceObject >
void smacc2::client_bases::SmaccActionClientBase< ActionType >::onOrthogonalAllocation ( )
inline

Definition at line 125 of file smacc_action_client_base.hpp.

126 {
127 // we create here all the event factory functions capturing the TOrthogonal
128 postSuccessEvent = [this](auto msg)
129 { this->postResultEvent<EvActionSucceeded<TSourceObject, TOrthogonal>>(msg); };
130 postAbortedEvent = [this](auto msg)
131 { this->postResultEvent<EvActionAborted<TSourceObject, TOrthogonal>>(msg); };
132
133 postCancelledEvent = [this](auto msg)
134 { this->postResultEvent<EvActionCancelled<TSourceObject, TOrthogonal>>(msg); };
135
136 postFeedbackEvent = [this](auto msg)
137 {
138 auto actionFeedbackEvent = new EvActionFeedback<Feedback, TOrthogonal>();
139 actionFeedbackEvent->client = this;
140 actionFeedbackEvent->feedbackMessage = msg;
141 this->postEvent(actionFeedbackEvent);
142 RCLCPP_DEBUG(getLogger(), "[%s] FEEDBACK EVENT", demangleType(typeid(*this)).c_str());
143 };
144
145 // result_cb = [this](auto r) { this->onResult(r); };
146 // result_cb = boost::bind(&SmaccActionClientBase<ActionType>::onResult, this, _1, _2);
147 // active_cb;
148
149 feedback_cb = [this](auto client, auto feedback) { this->onFeedback(client, feedback); };
150 }
rclcpp::Logger getLogger()
void onFeedback(typename GoalHandle::SharedPtr, const std::shared_ptr< const Feedback > feedback_msg)
std::function< void(WrappedResult)> postCancelledEvent
std::function< void(WrappedResult)> postSuccessEvent
std::function< void(WrappedResult)> postAbortedEvent
std::string demangleType(const std::type_info *tinfo)

References smacc2::introspection::demangleType(), smacc2::client_bases::SmaccActionClientBase< ActionType >::feedback_cb, smacc2::ISmaccClient::getLogger(), smacc2::client_bases::SmaccActionClientBase< ActionType >::onFeedback(), smacc2::client_bases::SmaccActionClientBase< ActionType >::postAbortedEvent, smacc2::client_bases::SmaccActionClientBase< ActionType >::postCancelledEvent, smacc2::ISmaccClient::postEvent(), smacc2::client_bases::SmaccActionClientBase< ActionType >::postFeedbackEvent, and smacc2::client_bases::SmaccActionClientBase< ActionType >::postSuccessEvent.

Here is the call graph for this function:

◆ onResult()

template<typename ActionType >
void smacc2::client_bases::SmaccActionClientBase< ActionType >::onResult ( const WrappedResult result_msg)
inlineprotected

Definition at line 387 of file smacc_action_client_base.hpp.

388 {
389 // auto *actionResultEvent = new EvActionResult<TDerived>();
390 // actionResultEvent->client = this;
391 // actionResultEvent->resultMessage = *result_msg;
392
393 // const auto &resultType = this->getState();
394 const auto & resultType = result_msg.code;
395
396 RCLCPP_INFO_STREAM(
397 getLogger(), "[" << this->getName() << "] response result ["
398 << rclcpp_action::to_string(result_msg.goal_id) << "]: " << (int)resultType);
399
400 if (resultType == rclcpp_action::ResultCode::SUCCEEDED)
401 {
402 RCLCPP_INFO(getLogger(), "[%s] request result: Success", this->getName().c_str());
403 onSucceeded_(result_msg);
404 postSuccessEvent(result_msg);
405 }
406 else if (resultType == rclcpp_action::ResultCode::ABORTED)
407 {
408 RCLCPP_INFO(getLogger(), "[%s] request result: Aborted", this->getName().c_str());
409 onAborted_(result_msg);
410 postAbortedEvent(result_msg);
411 }
412 else if (resultType == rclcpp_action::ResultCode::CANCELED)
413 {
414 RCLCPP_INFO(getLogger(), "[%s] request result: Cancelled", this->getName().c_str());
415 onCancelled_(result_msg);
416 postCancelledEvent(result_msg);
417 }
418 /*
419 else if (resultType == actionlib::SimpleClientGoalState::REJECTED)
420 {
421 RCLCPP_INFO(getLogger(),"[%s] request result: Rejected", this->getName().c_str());
422 onRejected_(result_msg);
423 postRejectedEvent(result_msg);
424 }
425 else if (resultType == actionlib::SimpleClientGoalState::PREEMPTED)
426 {
427 RCLCPP_INFO(getLogger(),"[%s] request result: Preempted", this->getName().c_str());
428 onPreempted_(result_msg);
429 postPreemptedEvent(result_msg);
430 }*/
431 else
432 {
433 RCLCPP_INFO(
434 getLogger(), "[%s] request result: NOT HANDLED TYPE: %d", this->getName().c_str(),
435 (int)resultType);
436 }
437 }

References smacc2::ISmaccClient::getLogger(), smacc2::client_bases::ISmaccActionClient::getName(), smacc2::client_bases::SmaccActionClientBase< ActionType >::onAborted_, smacc2::client_bases::SmaccActionClientBase< ActionType >::onCancelled_, smacc2::client_bases::SmaccActionClientBase< ActionType >::onSucceeded_, smacc2::client_bases::SmaccActionClientBase< ActionType >::postAbortedEvent, smacc2::client_bases::SmaccActionClientBase< ActionType >::postCancelledEvent, and smacc2::client_bases::SmaccActionClientBase< ActionType >::postSuccessEvent.

Referenced by smacc2::client_bases::SmaccActionClientBase< ActionType >::sendGoal().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ onSucceeded() [1/2]

template<typename ActionType >
template<typename T >
boost::signals2::connection smacc2::client_bases::SmaccActionClientBase< ActionType >::onSucceeded ( std::function< void(WrappedResult &)>  callback)
inline

Definition at line 159 of file smacc_action_client_base.hpp.

160 {
161 return this->getStateMachine()->createSignalConnection(onSucceeded_, callback);
162 }

References smacc2::ISmaccStateMachine::createSignalConnection(), and smacc2::ISmaccClient::getStateMachine().

Here is the call graph for this function:

◆ onSucceeded() [2/2]

template<typename ActionType >
template<typename T >
boost::signals2::connection smacc2::client_bases::SmaccActionClientBase< ActionType >::onSucceeded ( void(T::*)(WrappedResult &)  callback,
T *  object 
)
inline

Definition at line 153 of file smacc_action_client_base.hpp.

154 {
155 return this->getStateMachine()->createSignalConnection(onSucceeded_, callback, object);
156 }

References smacc2::ISmaccStateMachine::createSignalConnection(), and smacc2::ISmaccClient::getStateMachine().

Here is the call graph for this function:

◆ postResultEvent()

template<typename ActionType >
template<typename EvType >
void smacc2::client_bases::SmaccActionClientBase< ActionType >::postResultEvent ( WrappedResult )
inline

Definition at line 114 of file smacc_action_client_base.hpp.

115 {
116 auto * ev = new EvType();
117 // ev->client = this;
118 // ev->resultMessage = *result;
119 RCLCPP_INFO(
120 getLogger(), "Action client Posting EVENT %s", demangleSymbol(typeid(ev).name()).c_str());
121 this->postEvent(ev);
122 }

References smacc2::introspection::demangleSymbol(), smacc2::ISmaccClient::getLogger(), and smacc2::ISmaccClient::postEvent().

Here is the call graph for this function:

◆ sendGoal()

template<typename ActionType >
std::shared_future< typename GoalHandle::SharedPtr > smacc2::client_bases::SmaccActionClientBase< ActionType >::sendGoal ( Goal goal,
typename SmaccActionResultSignal::WeakPtr  resultCallback = typename SmaccActionResultSignal::WeakPtr() 
)
inline

Function called whenever feedback is received for the goal.

Function called when the result for the goal is received.

Definition at line 245 of file smacc_action_client_base.hpp.

249 {
250 // client_->sendGoal(goal, result_cb, active_cb, feedback_cb);
251 // std::shared_future<typename GoalHandle::SharedPtr>
252
253 SendGoalOptions options;
254
255 // GoalResponseCallback
256 // options.goal_response_callback;
257
259 // FeedbackCallback
260 options.feedback_callback = feedback_cb;
261
263 // ResultCallback result_callback;
264 // options.result_callback = result_cb;
265
266 options.result_callback =
267 [this, resultCallback](
268 const typename rclcpp_action::ClientGoalHandle<ActionType>::WrappedResult & result)
269 {
270 // TODO(#1652): a work around until rcl_action interface is updated
271 // if goal ids are not matched, the older goa call this callback so ignore the result
272 // if matched, it must be processed (including aborted)
273
274 RCLCPP_INFO_STREAM(
275 getLogger(), "[" << getName() << "] Action result callback, getting shared future");
276 // auto goalHandle = result->get();
277 // goalHandle_ = lastRequest_->get();
278 RCLCPP_INFO_STREAM(
279 getLogger(), "[" << getName() << "] Action client Result goal id: "
280 << rclcpp_action::to_string(result.goal_id));
281
282 // if (goalHandle_->get_goal_id() == result.goal_id)
283 // {
284 // // goal_result_available_ = true;
285 // // result_ = result;
286 // RCLCPP_INFO_STREAM(getLogger(), "[" << getName() << "] Result CB Goal id matches with last request");
287
288 auto resultCallbackPtr = resultCallback.lock();
289
290 if (resultCallbackPtr != nullptr)
291 {
292 RCLCPP_INFO_STREAM(
293 getLogger(), "[" << getName() << "] Result CB calling user callback:"
294 << demangleSymbol(typeid(*resultCallbackPtr).name()));
295 (*resultCallbackPtr)(result);
296 }
297 else
298 {
299 RCLCPP_INFO_STREAM(
300 getLogger(), "[" << getName() << "] Result CB calling default callback");
301 this->onResult(result);
302 }
303
304 // }
305 // else
306 // {
307 // RCLCPP_ERROR_STREAM(getLogger(), "[" << getName() << "] Result CB Goal id DOES NOT match with last request. Skipping, incorrect behavior.");
308 // }
309 };
310
311 // if (lastRequest_ && lastRequest_->valid())
312 // {
313 // RCLCPP_INFO_STREAM(getLogger(), getName() << ": checking previous request is really finished.");
314 // auto res = this->lastRequest_->get();
315 // RCLCPP_INFO_STREAM(getLogger(), getName() << ": okay");
316 // }
317 // else
318 // {
319 // RCLCPP_INFO_STREAM(getLogger(), getName() << ": no previous request.");
320 // }
321
322 RCLCPP_INFO_STREAM(
323 getLogger(), "[" << getName() << "] client ready clients: "
324 << this->client_->get_number_of_ready_clients());
325 RCLCPP_INFO_STREAM(
326 getLogger(),
327 "[" << getName() << "] Waiting it is ready? " << client_->action_server_is_ready());
328
329 RCLCPP_INFO_STREAM(getLogger(), getName() << ": async send goal.");
330 auto lastRequest = this->client_->async_send_goal(goal, options);
331 this->lastRequest_ = lastRequest;
332
333 RCLCPP_INFO_STREAM(
334 getLogger(),
335 "["
336 << getName()
337 << "] Action request "
338 // << rclcpp_action::to_string(this->goalHandle_->get_goal_id()) <<". Goal sent to " << this->action_endpoint_
339 << "\": " << std::endl
340 << goal);
341
342 // if (client_->isServerConnected())
343 // {
344 // RCLCPP_INFO_STREAM(getLogger(), getName() << ": Goal sent:" << goal);
345
346 // RCLCPP_INFO_STREAM(getLogger(), getName() << ": Goal Id: " <<
347 // rclcpp_action::to_string(lastRequest_->get()->get_goal_id()));
348
349 // for (auto& gh: this->goal_handles_)
350 // {
351
352 // }
353
354 // RCLCPP_INFO_STREAM(getLogger(), getName() << ": spinning until completed");
355 // if (rclcpp::spin_until_future_complete(this->getNode(), lastRequest_, std::chrono::seconds(2))
356 // !=rclcpp::executor::FutureReturnCode::SUCCESS)
357 // {
358 // throw std::runtime_error("send_goal failed");
359 // }
360
361 // goalHandle_ = lastRequest_->get();
362 // if (!goalHandle_) {
363 // throw std::runtime_error("Goal was rejected by the action server");
364 // }
365
366 // }
367 // else
368 // {
369 // RCLCPP_ERROR(getLogger(),"%s [at %s]: not connected with actionserver, skipping goal request
370 // ...", getName().c_str(), getNamespace().c_str());
371 // //client_->waitForServer();
372 // }
373
374 return lastRequest;
375 }
typename ActionClient::SendGoalOptions SendGoalOptions
void onResult(const WrappedResult &result_msg)
std::optional< std::shared_future< typename GoalHandle::SharedPtr > > lastRequest_

References smacc2::client_bases::SmaccActionClientBase< ActionType >::client_, smacc2::introspection::demangleSymbol(), smacc2::client_bases::SmaccActionClientBase< ActionType >::feedback_cb, smacc2::ISmaccClient::getLogger(), smacc2::client_bases::ISmaccActionClient::getName(), and smacc2::client_bases::SmaccActionClientBase< ActionType >::onResult().

Referenced by cl_nav2z::CbNav2ZClientBehaviorBase::sendGoal(), and cl_nav2z::WaypointNavigator::sendNextGoal().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ action_endpoint_

template<typename ActionType >
std::string smacc2::client_bases::SmaccActionClientBase< ActionType >::action_endpoint_

◆ client_

template<typename ActionType >
ActionClient::SharedPtr smacc2::client_bases::SmaccActionClientBase< ActionType >::client_
protected

◆ feedback_cb

template<typename ActionType >
FeedbackCallback smacc2::client_bases::SmaccActionClientBase< ActionType >::feedback_cb

◆ lastRequest_

template<typename ActionType >
std::optional<std::shared_future<typename GoalHandle::SharedPtr> > smacc2::client_bases::SmaccActionClientBase< ActionType >::lastRequest_

Definition at line 93 of file smacc_action_client_base.hpp.

◆ onAborted_

template<typename ActionType >
SmaccActionResultSignal smacc2::client_bases::SmaccActionClientBase< ActionType >::onAborted_

◆ onCancelled_

template<typename ActionType >
SmaccActionResultSignal smacc2::client_bases::SmaccActionClientBase< ActionType >::onCancelled_

◆ onSucceeded_

template<typename ActionType >
SmaccActionResultSignal smacc2::client_bases::SmaccActionClientBase< ActionType >::onSucceeded_

◆ postAbortedEvent

template<typename ActionType >
std::function<void(WrappedResult)> smacc2::client_bases::SmaccActionClientBase< ActionType >::postAbortedEvent

◆ postCancelledEvent

template<typename ActionType >
std::function<void(WrappedResult)> smacc2::client_bases::SmaccActionClientBase< ActionType >::postCancelledEvent

◆ postFeedbackEvent

template<typename ActionType >
std::function<void(const Feedback &)> smacc2::client_bases::SmaccActionClientBase< ActionType >::postFeedbackEvent

◆ postSuccessEvent

template<typename ActionType >
std::function<void(WrappedResult)> smacc2::client_bases::SmaccActionClientBase< ActionType >::postSuccessEvent

The documentation for this class was generated from the following file: