Skip to content

Commit b6bdb92

Browse files
authored
Use a realtime_tools::RealtimePublisher for publishing the state (backport #1822) (#1825)
1 parent 2031186 commit b6bdb92

2 files changed

Lines changed: 18 additions & 10 deletions

File tree

ur_controllers/include/ur_controllers/speed_scaling_state_broadcaster.hpp

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,11 @@
4242
#include <string>
4343
#include <vector>
4444

45-
#include "controller_interface/controller_interface.hpp"
46-
#include "rclcpp_lifecycle/lifecycle_publisher.hpp"
47-
#include "rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp"
48-
#include "rclcpp/time.hpp"
49-
#include "rclcpp/duration.hpp"
50-
#include "std_msgs/msg/float64.hpp"
45+
#include <realtime_tools/realtime_publisher.hpp>
46+
#include <controller_interface/controller_interface.hpp>
47+
#include <rclcpp/time.hpp>
48+
#include <rclcpp/duration.hpp>
49+
#include <std_msgs/msg/float64.hpp>
5150
#include "ur_controllers/speed_scaling_state_broadcaster_parameters.hpp"
5251

5352
namespace ur_controllers
@@ -69,13 +68,15 @@ class SpeedScalingStateBroadcaster : public controller_interface::ControllerInte
6968

7069
controller_interface::CallbackReturn on_deactivate(const rclcpp_lifecycle::State& previous_state) override;
7170

71+
controller_interface::CallbackReturn on_cleanup(const rclcpp_lifecycle::State& previous_state) override;
72+
7273
controller_interface::CallbackReturn on_init() override;
7374

7475
protected:
7576
std::vector<std::string> sensor_names_;
7677
double publish_rate_;
7778

78-
std::shared_ptr<rclcpp::Publisher<std_msgs::msg::Float64>> speed_scaling_state_publisher_;
79+
std::shared_ptr<realtime_tools::RealtimePublisher<std_msgs::msg::Float64>> speed_scaling_state_publisher_;
7980
std_msgs::msg::Float64 speed_scaling_state_msg_;
8081

8182
// Parameters from ROS for SpeedScalingStateBroadcaster

ur_controllers/src/speed_scaling_state_broadcaster.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,8 @@ SpeedScalingStateBroadcaster::on_configure(const rclcpp_lifecycle::State& /*prev
108108
RCLCPP_INFO(get_node()->get_logger(), "Publisher rate set to : %.1f Hz", publish_rate_);
109109

110110
try {
111-
speed_scaling_state_publisher_ =
112-
get_node()->create_publisher<std_msgs::msg::Float64>("~/speed_scaling", rclcpp::SystemDefaultsQoS());
111+
speed_scaling_state_publisher_ = std::make_shared<realtime_tools::RealtimePublisher<std_msgs::msg::Float64>>(
112+
get_node()->create_publisher<std_msgs::msg::Float64>("~/speed_scaling", rclcpp::SystemDefaultsQoS()));
113113
} catch (const std::exception& e) {
114114
// get_node() may throw, logging raw here
115115
fprintf(stderr, "Exception thrown during init stage with message: %s \n", e.what());
@@ -138,11 +138,18 @@ controller_interface::return_type SpeedScalingStateBroadcaster::update(const rcl
138138
speed_scaling_state_msg_.data = state_interfaces_[0].get_optional().value_or(1.0) * 100.0;
139139

140140
// publish
141-
speed_scaling_state_publisher_->publish(speed_scaling_state_msg_);
141+
speed_scaling_state_publisher_->try_publish(speed_scaling_state_msg_);
142142
}
143143
return controller_interface::return_type::OK;
144144
}
145145

146+
controller_interface::CallbackReturn
147+
SpeedScalingStateBroadcaster::on_cleanup(const rclcpp_lifecycle::State& /*previous_state*/)
148+
{
149+
speed_scaling_state_publisher_.reset();
150+
return controller_interface::CallbackReturn::SUCCESS;
151+
}
152+
146153
} // namespace ur_controllers
147154

148155
#include "pluginlib/class_list_macros.hpp"

0 commit comments

Comments
 (0)