ROS Action Server
03_01_ros_action_server.ipynb
- Running the cell codeCtrl + Enter
import rospy
import actionlib
import actionlib_tutorials.msg
Import rospy modules
Import the actionlib and actionlib_tutorials.msg modules
class FibonacciAction(object):
# Generate messages for use in publishing feedback and results
_feedback = actionlib_tutorials.msg.FibonacciFeedback()
_result = actionlib_tutorials.msg.FibonacciResult()
def __init__(self, name):
self._action_name = name
self._as = actionlib.SimpleActionServer(self._action_name, actionlib_tutorials.msg.FibonacciAction, execute_cb=self.execute_cb, auto_start = False)
self._as.start()
def execute_cb(self, goal):
r = rospy.Rate(1)
success = True
# Add the starting point of the Fibonacci sequence
self._feedback.sequence = []
self._feedback.sequence.append(0)
self._feedback.sequence.append(1)
# console publish information for users
rospy.loginfo('%s: Executing, creating fibonacci sequence of order %i with seeds %i, %i' % (self._action_name, goal.order, self._feedback.sequence[0], self._feedback.sequence[1]))
# start action execution
for i in range(1, goal.order):
# Check if there is no request from the client
if self._as.is_preempt_requested():
rospy.loginfo('%s: Preempted' % self._action_name)
self._as.set_preempted()
success = False
break
self._feedback.sequence.append(self._feedback.sequence[i] + self._feedback.sequence[i-1])
# publish feedback
self._as.publish_feedback(self._feedback)
r.sleep()
if success:
self._result.sequence = self._feedback.sequence
rospy.loginfo('%s: Succeeded' % self._action_name)
self._as.set_succeeded(self._result)
Fibonacci operation
Reference
rospy.init_node('fibonacci')
server = FibonacciAction(rospy.get_name())
rospy.spin()
Execute fibonacci Action Node for Fibonacci operation
Output success result after Fibonacci operation