Performance: Action server implementation
This affects the responsiveness and real-time interaction of robotic systems by managing how actions are processed and feedback is sent.
def execute_cb(goal): rate = rospy.Rate(1) for i in range(10): if server.is_preempt_requested(): server.set_preempted() return feedback = FeedbackType() feedback.progress = i * 10 server.publish_feedback(feedback) rate.sleep() server.set_succeeded(ResultType()) server = actionlib.SimpleActionServer('action_name', ActionType, execute_cb=execute_cb, auto_start=False) server.start()
def execute_cb(goal): # Blocking long task result = long_task() server.set_succeeded(result) server = actionlib.SimpleActionServer('action_name', ActionType, execute_cb=execute_cb, auto_start=False) server.start()
| Pattern | Message Handling | Callback Blocking | Feedback Responsiveness | Verdict |
|---|---|---|---|---|
| Blocking execute callback | Delays message queue | High blocking | Delayed feedback | [X] Bad |
| Non-blocking loop with feedback | Smooth message flow | Low blocking | Timely feedback | [OK] Good |
for i in range(3):
feedback.percent_complete = (i + 1) * 33
self._action_server.publish_feedback(feedback)
rospy.sleep(1)
result.success = True
self._action_server.set_succeeded(result)def execute_callback(self, goal):
if goal.order < 0:
self._action_server.set_aborted()
result = Result()
result.output = goal.order * 2
self._action_server.set_succeeded(result)Pass the test and this pattern moves unknown