Skip to content

Commit

Permalink
add callbacks and multihthreaded executor
Browse files Browse the repository at this point in the history
Signed-off-by: Aleksander Szymański <[email protected]>
  • Loading branch information
Bitterisland6 committed Dec 28, 2023
1 parent 6c1be61 commit 9dfa6de
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 5 deletions.
1 change: 1 addition & 0 deletions leo_fw/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ ament_target_dependencies(leo_fw
rclcpp_components_register_node(leo_fw
PLUGIN "leo_fw::FirmwareMessageConverter"
EXECUTABLE "firmware_message_converter"
EXECUTOR "MultiThreadedExecutor"
)

ament_python_install_package(${PROJECT_NAME})
Expand Down
13 changes: 8 additions & 5 deletions leo_fw/src/firmware_message_converter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,8 @@ class FirmwareMessageConverter : public rclcpp::Node
&FirmwareMessageConverter::set_imu_calibration_callback, this,
std::placeholders::_1, std::placeholders::_2));

reset_odometry_client = create_client<std_srvs::srv::Trigger>("firmware/reset_odometry");
auto client_cb_group_ = this->create_callback_group(rclcpp::CallbackGroupType::MutuallyExclusive);
reset_odometry_client = create_client<std_srvs::srv::Trigger>("firmware/reset_odometry", rmw_qos_profile_services_default, client_cb_group_);

reset_odometry_service = create_service<std_srvs::srv::Trigger>(
"reset_odometry",
Expand Down Expand Up @@ -252,13 +253,15 @@ class FirmwareMessageConverter : public rclcpp::Node

auto reset_request = std::make_shared<std_srvs::srv::Trigger_Request>();

auto result = reset_odometry_client->async_send_request(reset_request);
auto future = reset_odometry_client->async_send_request(reset_request);

auto result_status = result.wait_for(callback_timeout);
auto result_status = future.wait_for(callback_timeout);

if (result_status == std::future_status::ready) {
res->success = true;
if (future.valid()) {
res->success = future.get()->success;
} else {
if(result_status == std::future_status::timeout)
res->message = "Firmware service timeout";
res->success = false;
}
}
Expand Down

0 comments on commit 9dfa6de

Please sign in to comment.