Skip to content

Commit 193c744

Browse files
Felix ExnerRobertWilbrandt
authored andcommitted
Use a subscriber instead of a service
1 parent e1dcd7b commit 193c744

File tree

2 files changed

+14
-20
lines changed

2 files changed

+14
-20
lines changed

joint_trajectory_controller/include/joint_trajectory_controller/joint_trajectory_controller.hpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
#include "control_msgs/action/follow_joint_trajectory.hpp"
2424
#include "control_msgs/msg/joint_trajectory_controller_state.hpp"
2525
#include "control_msgs/srv/query_trajectory_state.hpp"
26-
#include "control_msgs/srv/set_scaling_factor.hpp"
2726
#include "control_toolbox/pid.hpp"
2827
#include "controller_interface/controller_interface.hpp"
2928
#include "hardware_interface/types/hardware_interface_type_values.hpp"
@@ -43,6 +42,8 @@
4342
#include "trajectory_msgs/msg/joint_trajectory.hpp"
4443
#include "trajectory_msgs/msg/joint_trajectory_point.hpp"
4544

45+
#include "std_msgs/msg/float64.hpp"
46+
4647
// auto-generated by generate_parameter_library
4748
#include "joint_trajectory_controller_parameters.hpp"
4849

@@ -169,8 +170,8 @@ class JointTrajectoryController : public controller_interface::ControllerInterfa
169170
std::vector<double> tmp_command_;
170171

171172
// Things around speed scaling
172-
double scaling_factor_{};
173173
realtime_tools::RealtimeBuffer<TimeData> time_data_;
174+
double scaling_factor_{1.0};
174175

175176
// Timeout to consider commands old
176177
double cmd_timeout_;
@@ -312,14 +313,12 @@ class JointTrajectoryController : public controller_interface::ControllerInterfa
312313
void resize_joint_trajectory_point_command(
313314
trajectory_msgs::msg::JointTrajectoryPoint & point, size_t size);
314315

315-
bool set_scaling_factor(
316-
control_msgs::srv::SetScalingFactor::Request::SharedPtr req,
317-
control_msgs::srv::SetScalingFactor::Response::SharedPtr resp);
316+
bool set_scaling_factor(const double scaling_factor);
318317

319318
urdf::Model model_;
320319

321320
realtime_tools::RealtimeBuffer<double> scaling_factor_rt_buff_;
322-
rclcpp::Service<control_msgs::srv::SetScalingFactor>::SharedPtr set_scaling_factor_srv_;
321+
rclcpp::Subscription<std_msgs::msg::Float64>::SharedPtr scaling_factor_sub_;
323322

324323
/**
325324
* @brief Assigns the values from a trajectory point interface to a joint interface.

joint_trajectory_controller/src/joint_trajectory_controller.cpp

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -914,10 +914,9 @@ controller_interface::CallbackReturn JointTrajectoryController::on_configure(
914914
!has_velocity_command_interface_ && !has_acceleration_command_interface_ &&
915915
!has_effort_command_interface_)
916916
{
917-
set_scaling_factor_srv_ = get_node()->create_service<control_msgs::srv::SetScalingFactor>(
918-
"~/set_scaling_factor", std::bind(
919-
&JointTrajectoryController::set_scaling_factor, this,
920-
std::placeholders::_1, std::placeholders::_2));
917+
scaling_factor_sub_ = get_node()->create_subscription<std_msgs::msg::Float64>(
918+
"~/speed_scaling_input", rclcpp::SystemDefaultsQoS(),
919+
[&](const std_msgs::msg::Float64 & msg) { set_scaling_factor(msg.data);});
921920
RCLCPP_INFO(
922921
logger, "Setting initial scaling factor to %2f", params_.scaling_factor_initial_default);
923922
scaling_factor_rt_buff_.writeFromNonRT(params_.scaling_factor_initial_default);
@@ -1632,19 +1631,16 @@ void JointTrajectoryController::resize_joint_trajectory_point_command(
16321631
}
16331632
}
16341633

1635-
bool JointTrajectoryController::set_scaling_factor(
1636-
control_msgs::srv::SetScalingFactor::Request::SharedPtr req,
1637-
control_msgs::srv::SetScalingFactor::Response::SharedPtr resp)
1634+
bool JointTrajectoryController::set_scaling_factor(const double scaling_factor)
16381635
{
1639-
if (req->scaling_factor < 0 && req->scaling_factor > 1)
1636+
if (scaling_factor < 0 || scaling_factor > 1)
16401637
{
16411638
RCLCPP_WARN(
16421639
get_node()->get_logger(), "Scaling factor has to be in range [0, 1]. Ignoring input!");
1643-
resp->success = false;
1644-
return true;
1640+
return false;
16451641
}
16461642

1647-
RCLCPP_INFO(get_node()->get_logger(), "New scaling factor will be %f", req->scaling_factor);
1643+
RCLCPP_INFO(get_node()->get_logger(), "New scaling factor will be %f", scaling_factor);
16481644
if (params_.speed_scaling_command_interface_name.empty())
16491645
{
16501646
if (!params_.speed_scaling_state_interface_name.empty())
@@ -1655,7 +1651,7 @@ bool JointTrajectoryController::set_scaling_factor(
16551651
"This will likely get overwritten by the hardware again. If available, please also setup "
16561652
"the speed_scaling_command_interface_name");
16571653
}
1658-
scaling_factor_rt_buff_.writeFromNonRT(req->scaling_factor);
1654+
scaling_factor_rt_buff_.writeFromNonRT(scaling_factor);
16591655
}
16601656
else
16611657
{
@@ -1665,12 +1661,11 @@ bool JointTrajectoryController::set_scaling_factor(
16651661
{
16661662
if (interface.get_name() == params_.speed_scaling_command_interface_name)
16671663
{
1668-
interface.set_value(static_cast<double>(req->scaling_factor));
1664+
interface.set_value(static_cast<double>(scaling_factor));
16691665
}
16701666
}
16711667
}
16721668
}
1673-
resp->success = true;
16741669
return true;
16751670
}
16761671

0 commit comments

Comments
 (0)