ROS2 действие выполнить обратный вызов никогда не завершается - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь реализовать действия клиента и сервера ROS2, как указано в примере репозитория: https://github.com/ros2/examples/tree... (server.py и client.py).Кажется, все работает, но на стороне клиента никогда не вызывается get_result_callback.На стороне сервера я использую следующую функцию, которая не завершает функцию callback.

async def execute_callback(self, goal_handle):
"""Executes a goal."""
self.get_logger().info('Executing goal...')

# Append the seeds for the Fibonacci sequence
feedback_msg = Fibonacci.Feedback()
feedback_msg.sequence = [0, 1]

# Start executing the action
for i in range(1, goal_handle.request.order):
    if goal_handle.is_cancel_requested:
        goal_handle.canceled()
        self.get_logger().info('Goal canceled')
        return Fibonacci.Result()

    # Update Fibonacci sequence
    feedback_msg.sequence.append(feedback_msg.sequence[i] + feedback_msg.sequence[i-1])
    self.get_logger().info('Publishing feedback: {0}'.format(feedback_msg.sequence))

    # Publish the feedback
    goal_handle.publish_feedback(feedback_msg)

    # Sleep for demonstration purposes
    time.sleep(1)


print('before success')
goal_handle.succeed()
print('after success')

# Populate result message
result = Fibonacci.Result()
result.sequence = feedback_msg.sequence
self.get_logger().info('Returning result: {0}'.format(result.sequence))`

Результат:

 [INFO] [minimal_action_server]: Received goal request 
 [INFO] [minimal_action_server]: Executing goal... 
 [INFO] [minimal_action_server]: Publishing feedback: [0, 1, 1] 
 [INFO] [minimal_action_server]: Publishing feedback: [0, 1, 1, 2] 
 [INFO] [minimal_action_server]: Publishing feedback: [0, 1, 1, 2, 3]
 [INFO] [minimal_action_server]: Publishing feedback: [0, 1, 1, 2, 3, 5]   
 [INFO] [minimal_action_server]: Publishing feedback: [0, 1, 1, 2, 3, 5, 8]   
 [INFO] [minimal_action_server]: Publishing feedback: [0, 1, 1, 2, 3, 5, 8, 13] 
 [INFO] [minimal_action_server]: Publishing feedback: [0, 1, 1, 2, 3, 5, 8, 13, 21] 
 [INFO] [minimal_action_server]: Publishing feedback: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34] 
 [INFO] [minimal_action_server]: Publishing feedback: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55] 
 before success

Я ничего не изменил в коде **

В чем здесь проблема?

1 Ответ

2 голосов
/ 20 мая 2019

Я заменил:

goal_handle.succeed()

на

goal_handle.set_succeeded()

Работает как положено.

...