action_tutorials_py
Python action tutorial code
Links
README
Action Server
In the constructor for FibonacciActionServer
, an action server is created with a callback that is called when a goal is accepted.
self._action_server = ActionServer(
self,
Fibonacci,
'fibonacci',
self.execute_callback)
There are three types of callbacks:
A
goal_callback
can optionally be added to conditionally accept or reject the goal, however, by default the goal is accepted.A
cancel_callback
can also optionally be added to conditionally accept or reject the cancel goal request, however, by default the cancel goal request is accepted.The
execute_callback
calculates the Fibonacci sequence up to order and publishes partial sequences as feedback as each item is added to the sequence.
The thread sleeps for 1 second between the calculation of each item in order to represent a long-running task. When execution is complete, the full sequence is returned to the action client.
Action Client
In the constructor for FibonacciActionClient
, an action client for the fibonacci
action is created:
self._action_client = ActionClient(self, Fibonacci, 'fibonacci')
A goal of type Fibonacci
is created with order 10.
The goal is sent asynchronously with callbacks registered for the goal response and the feedback:
self._send_goal_future = self._action_client.send_goal_async(
goal_msg,
feedback_callback=self.feedback_callback)
self._send_goal_future.add_done_callback(self.goal_response_callback)
Within the goal_response_callback
, if the goal is accepted, the goal result is requested asynchronously.
A callback is registered for receiving the result:
self._get_result_future = goal_handle.get_result_async()
self._get_result_future.add_done_callback(self.get_result_callback)
There are two types of callbacks:
The
feedback_callback
logs the partial sequences as they are received.The
get_result_callback
logs the full Fibonacci sequence.