Simple Action Client (Python)
Minimal Example
Sends the goal, and ignores the result and the feedback
import rclpy
from rclpy.node import Node
from simple_actions import SimpleActionClient
from example_interfaces.action import Fibonacci
def main(args=None):
rclpy.init(args=args)
node = Node('my_client')
client = SimpleActionClient(node, Fibonacci, 'fibonacci')
goal_msg = Fibonacci.Goal(order=10)
client.send_goal(goal_msg)
if __name__ == '__main__':
main()
Example with Result
This example sends the goal and waits for the result.
import rclpy
from rclpy.node import Node
from simple_actions import SimpleActionClient
from example_interfaces.action import Fibonacci
def main(args=None):
rclpy.init(args=args)
node = Node('my_client')
client = SimpleActionClient(node, Fibonacci, 'fibonacci')
goal_msg = Fibonacci.Goal(order=10)
# Use the call operator to send goal
result = client(goal_msg)
print(result.sequence)
if __name__ == '__main__':
main()
Example with Callbacks
This example uses custom callbacks for the result and feedback.
import rclpy
from rclpy.node import Node
from simple_actions import SimpleActionClient
from example_interfaces.action import Fibonacci
def my_awesome_feedback_cb(feedback):
print(f'Feedback: {feedback.sequence}')
def my_awesome_result_cb(result_code, result):
print(f'Result ({result_code}): {result.sequence}')
def main(args=None):
rclpy.init(args=args)
node = Node('my_client')
client = SimpleActionClient(node, Fibonacci, 'fibonacci')
goal_msg = Fibonacci.Goal(order=10)
client.send_goal(goal_msg,
result_callback=my_awesome_result_cb,
feedback_callback=my_awesome_feedback_cb)
rclpy.spin(node)
if __name__ == '__main__':
main()
Call Operator with Feedback
You can also specify a feedback callback with the call operator, a la
result = client(goal_msg, feedback_callback=my_awesome_feedback_cb)
Wait For Server
By default, creating the SimpleActionClient
will wait for the server to come up. You can disable that by passing in wait_for_server=False
and then calling wait_for_server()
later.
client = SimpleActionClient(node, Fibonacci, 'fibonacci', wait_for_server=False)
# Do something else
client.wait_for_server()
client.send_goal(goal_msg)