[rclcpp_action] Do not throw exception in action client if take fails (#888)

As documented in rcl_action, a return code of RCL_RET_ACTION_CLIENT_TAKE_FAILED does not mean that
an error occurred.

Signed-off-by: Jacob Perron <jacob@openrobotics.org>
This commit is contained in:
Jacob Perron 2019-10-14 09:03:59 -07:00 committed by GitHub
parent 07cb443a18
commit 8e69b7d505
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -388,20 +388,20 @@ ClientBase::execute()
rcl_ret_t ret = rcl_action_take_feedback( rcl_ret_t ret = rcl_action_take_feedback(
pimpl_->client_handle.get(), feedback_message.get()); pimpl_->client_handle.get(), feedback_message.get());
pimpl_->is_feedback_ready = false; pimpl_->is_feedback_ready = false;
if (RCL_RET_OK != ret) { if (RCL_RET_OK == ret) {
rclcpp::exceptions::throw_from_rcl_error(ret, "error taking feedback");
} else {
this->handle_feedback_message(feedback_message); this->handle_feedback_message(feedback_message);
} else if (RCL_RET_ACTION_CLIENT_TAKE_FAILED != ret) {
rclcpp::exceptions::throw_from_rcl_error(ret, "error taking feedback");
} }
} else if (pimpl_->is_status_ready) { } else if (pimpl_->is_status_ready) {
std::shared_ptr<void> status_message = this->create_status_message(); std::shared_ptr<void> status_message = this->create_status_message();
rcl_ret_t ret = rcl_action_take_status( rcl_ret_t ret = rcl_action_take_status(
pimpl_->client_handle.get(), status_message.get()); pimpl_->client_handle.get(), status_message.get());
pimpl_->is_status_ready = false; pimpl_->is_status_ready = false;
if (RCL_RET_OK != ret) { if (RCL_RET_OK == ret) {
rclcpp::exceptions::throw_from_rcl_error(ret, "error taking status");
} else {
this->handle_status_message(status_message); this->handle_status_message(status_message);
} else if (RCL_RET_ACTION_CLIENT_TAKE_FAILED != ret) {
rclcpp::exceptions::throw_from_rcl_error(ret, "error taking status");
} }
} else if (pimpl_->is_goal_response_ready) { } else if (pimpl_->is_goal_response_ready) {
rmw_request_id_t response_header; rmw_request_id_t response_header;
@ -409,10 +409,10 @@ ClientBase::execute()
rcl_ret_t ret = rcl_action_take_goal_response( rcl_ret_t ret = rcl_action_take_goal_response(
pimpl_->client_handle.get(), &response_header, goal_response.get()); pimpl_->client_handle.get(), &response_header, goal_response.get());
pimpl_->is_goal_response_ready = false; pimpl_->is_goal_response_ready = false;
if (RCL_RET_OK != ret) { if (RCL_RET_OK == ret) {
rclcpp::exceptions::throw_from_rcl_error(ret, "error taking goal response");
} else {
this->handle_goal_response(response_header, goal_response); this->handle_goal_response(response_header, goal_response);
} else if (RCL_RET_ACTION_CLIENT_TAKE_FAILED != ret) {
rclcpp::exceptions::throw_from_rcl_error(ret, "error taking goal response");
} }
} else if (pimpl_->is_result_response_ready) { } else if (pimpl_->is_result_response_ready) {
rmw_request_id_t response_header; rmw_request_id_t response_header;
@ -420,10 +420,10 @@ ClientBase::execute()
rcl_ret_t ret = rcl_action_take_result_response( rcl_ret_t ret = rcl_action_take_result_response(
pimpl_->client_handle.get(), &response_header, result_response.get()); pimpl_->client_handle.get(), &response_header, result_response.get());
pimpl_->is_result_response_ready = false; pimpl_->is_result_response_ready = false;
if (RCL_RET_OK != ret) { if (RCL_RET_OK == ret) {
rclcpp::exceptions::throw_from_rcl_error(ret, "error taking result response");
} else {
this->handle_result_response(response_header, result_response); this->handle_result_response(response_header, result_response);
} else if (RCL_RET_ACTION_CLIENT_TAKE_FAILED != ret) {
rclcpp::exceptions::throw_from_rcl_error(ret, "error taking result response");
} }
} else if (pimpl_->is_cancel_response_ready) { } else if (pimpl_->is_cancel_response_ready) {
rmw_request_id_t response_header; rmw_request_id_t response_header;
@ -431,10 +431,10 @@ ClientBase::execute()
rcl_ret_t ret = rcl_action_take_cancel_response( rcl_ret_t ret = rcl_action_take_cancel_response(
pimpl_->client_handle.get(), &response_header, cancel_response.get()); pimpl_->client_handle.get(), &response_header, cancel_response.get());
pimpl_->is_cancel_response_ready = false; pimpl_->is_cancel_response_ready = false;
if (RCL_RET_OK != ret) { if (RCL_RET_OK == ret) {
rclcpp::exceptions::throw_from_rcl_error(ret, "error taking cancel response");
} else {
this->handle_cancel_response(response_header, cancel_response); this->handle_cancel_response(response_header, cancel_response);
} else if (RCL_RET_ACTION_CLIENT_TAKE_FAILED != ret) {
rclcpp::exceptions::throw_from_rcl_error(ret, "error taking cancel response");
} }
} else { } else {
throw std::runtime_error("Executing action client but nothing is ready"); throw std::runtime_error("Executing action client but nothing is ready");