@@ -914,10 +914,12 @@ 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+ auto qos = rclcpp::QoS (1 );
918+ qos.transient_local ();
919+
920+ scaling_factor_sub_ = get_node ()->create_subscription <std_msgs::msg::Float64>(
921+ " speed_scaling_input" , qos,
922+ [&](const std_msgs::msg::Float64 & msg) { set_scaling_factor (msg.data );});
921923 RCLCPP_INFO (
922924 logger, " Setting initial scaling factor to %2f" , params_.scaling_factor_initial_default );
923925 scaling_factor_rt_buff_.writeFromNonRT (params_.scaling_factor_initial_default );
@@ -1626,19 +1628,16 @@ void JointTrajectoryController::resize_joint_trajectory_point_command(
16261628 }
16271629}
16281630
1629- bool JointTrajectoryController::set_scaling_factor (
1630- control_msgs::srv::SetScalingFactor::Request::SharedPtr req,
1631- control_msgs::srv::SetScalingFactor::Response::SharedPtr resp)
1631+ bool JointTrajectoryController::set_scaling_factor (const double scaling_factor)
16321632{
1633- if (req-> scaling_factor < 0 && req-> scaling_factor > 1 )
1633+ if (scaling_factor < 0 || scaling_factor > 1 )
16341634 {
16351635 RCLCPP_WARN (
16361636 get_node ()->get_logger (), " Scaling factor has to be in range [0, 1]. Ignoring input!" );
1637- resp->success = false ;
1638- return true ;
1637+ return false ;
16391638 }
16401639
1641- RCLCPP_INFO (get_node ()->get_logger (), " New scaling factor will be %f" , req-> scaling_factor );
1640+ RCLCPP_INFO (get_node ()->get_logger (), " New scaling factor will be %f" , scaling_factor);
16421641 if (params_.speed_scaling_command_interface_name .empty ())
16431642 {
16441643 if (!params_.speed_scaling_state_interface_name .empty ())
@@ -1649,7 +1648,7 @@ bool JointTrajectoryController::set_scaling_factor(
16491648 " This will likely get overwritten by the hardware again. If available, please also setup "
16501649 " the speed_scaling_command_interface_name" );
16511650 }
1652- scaling_factor_rt_buff_.writeFromNonRT (req-> scaling_factor );
1651+ scaling_factor_rt_buff_.writeFromNonRT (scaling_factor);
16531652 }
16541653 else
16551654 {
@@ -1659,12 +1658,11 @@ bool JointTrajectoryController::set_scaling_factor(
16591658 {
16601659 if (interface.get_name () == params_.speed_scaling_command_interface_name )
16611660 {
1662- interface.set_value (static_cast <double >(req-> scaling_factor ));
1661+ interface.set_value (static_cast <double >(scaling_factor));
16631662 }
16641663 }
16651664 }
16661665 }
1667- resp->success = true ;
16681666 return true ;
16691667}
16701668
0 commit comments