Skip to content

Commit 0f85ece

Browse files
committed
added servo_start and servo_stop to grpc server
1 parent d61a357 commit 0f85ece

File tree

4 files changed

+65
-7
lines changed

4 files changed

+65
-7
lines changed

aegis_grpc/CMakeLists.txt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,13 @@ find_package(ament_cmake REQUIRED)
1818
set(ROS_DEPENDS
1919
rclcpp
2020
rclcpp_action
21-
controller_manager_msgs
2221
control_msgs
22+
controller_manager_msgs
2323
geometry_msgs
24-
sensor_msgs
2524
moveit_msgs
26-
moveit_ros_planning_interface)
25+
moveit_ros_planning_interface
26+
sensor_msgs
27+
std_srvs)
2728

2829
# Hide warnings from importing moveit packages
2930
if(POLICY CMP0167)

aegis_grpc/include/aegis_grpc/robot_control_service.hpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,14 @@
99

1010
#include <rclcpp/rclcpp.hpp>
1111
#include <rclcpp_action/rclcpp_action.hpp>
12-
#include <controller_manager_msgs/srv/switch_controller.hpp>
1312
#include <control_msgs/action/gripper_command.hpp>
1413
#include <control_msgs/msg/joint_jog.hpp>
15-
#include <geometry_msgs/msg/twist.hpp>
16-
#include <geometry_msgs/msg/twist_stamped.hpp>
14+
#include <controller_manager_msgs/srv/switch_controller.hpp>
1715
#include <geometry_msgs/msg/pose.hpp>
16+
#include <geometry_msgs/msg/twist_stamped.hpp>
17+
#include <geometry_msgs/msg/twist.hpp>
1818
#include <moveit/move_group_interface/move_group_interface.h>
19+
#include <std_srvs/srv/trigger.hpp>
1920

2021

2122
namespace aegis_grpc {
@@ -84,6 +85,8 @@ class RobotControlServiceImpl final
8485
bool SwitchControllers(
8586
const std::vector<std::string>& activate,
8687
const std::vector<std::string>& deactivate);
88+
bool CallServoStartService();
89+
bool CallServoStopService();
8790

8891
void ServoPublishLoop();
8992
void GripperSendGoal(double position, double max_effort);
@@ -97,6 +100,8 @@ class RobotControlServiceImpl final
97100
std::unique_ptr<moveit::planning_interface::MoveGroupInterface> move_group_;
98101

99102
rclcpp::Client<controller_manager_msgs::srv::SwitchController>::SharedPtr switch_controller_client_;
103+
rclcpp::Client<std_srvs::srv::Trigger>::SharedPtr start_servo_client_;
104+
rclcpp::Client<std_srvs::srv::Trigger>::SharedPtr stop_servo_client_;
100105
rclcpp::Publisher<control_msgs::msg::JointJog>::SharedPtr servo_joint_pub_;
101106
rclcpp::Publisher<geometry_msgs::msg::TwistStamped>::SharedPtr servo_tcp_pub_;
102107
rclcpp_action::Client<GripperCommand>::SharedPtr gripper_client_;

aegis_grpc/package.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
<depend>rclcpp</depend>
2828
<depend>rclcpp_action</depend>
2929
<depend>sensor_msgs</depend>
30+
<depend>std_srvs</depend>
3031

3132
<exec_depend>python3-grpc-tools</exec_depend>
3233
<exec_depend>python3-grpcio</exec_depend>

aegis_grpc/src/robot_control_service.cpp

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ RobotControlServiceImpl::RobotControlServiceImpl(
3636
RCLCPP_INFO(get_logger(), "> Frequency ratio for servo re-publishig is %i", servo_frequency_ratio_);
3737

3838
switch_controller_client_ = node_->create_client<controller_manager_msgs::srv::SwitchController>("/controller_manager/switch_controller");
39+
start_servo_client_ = node_->create_client<std_srvs::srv::Trigger>("/servo_node/start_servo");
40+
stop_servo_client_ = node_->create_client<std_srvs::srv::Trigger>("/servo_node/stop_servo");
3941
servo_joint_pub_ = node_->create_publisher<control_msgs::msg::JointJog>(
4042
node_->get_parameter("topic_servo_joint").as_string(), 10);
4143
servo_tcp_pub_ = node_->create_publisher<geometry_msgs::msg::TwistStamped>(
@@ -101,6 +103,40 @@ bool RobotControlServiceImpl::SwitchControllers(
101103
return future.get()->ok;
102104
}
103105

106+
bool RobotControlServiceImpl::CallServoStartService() {
107+
if (!start_servo_client_->wait_for_service(action_timeout_)) {
108+
RCLCPP_WARN(get_logger(), "Service `/servo_node/start_servo` not available.");
109+
return false;
110+
}
111+
112+
auto request = std::make_shared<std_srvs::srv::Trigger::Request>();
113+
auto result_future = start_servo_client_->async_send_request(request);
114+
115+
if (result_future.wait_for(action_timeout_) != std::future_status::ready) {
116+
RCLCPP_WARN(get_logger(), "Service `/servo_node/start_servo` call timed out.");
117+
return false;
118+
}
119+
auto result = result_future.get();
120+
return result->success;
121+
}
122+
123+
bool RobotControlServiceImpl::CallServoStopService() {
124+
if (!stop_servo_client_->wait_for_service(action_timeout_)) {
125+
RCLCPP_WARN(get_logger(), "Service `/servo_node/stop_servo` not available.");
126+
return false;
127+
}
128+
129+
auto request = std::make_shared<std_srvs::srv::Trigger::Request>();
130+
auto result_future = stop_servo_client_->async_send_request(request);
131+
132+
if (result_future.wait_for(action_timeout_) != std::future_status::ready) {
133+
RCLCPP_WARN(get_logger(), "Service `/servo_node/stop_servo` call timed out.");
134+
return false;
135+
}
136+
auto result = result_future.get();
137+
return result->success;
138+
}
139+
104140
grpc::Status RobotControlServiceImpl::ServoEnable(
105141
grpc::ServerContext*,
106142
const google::protobuf::Empty*,
@@ -117,13 +153,21 @@ grpc::Status RobotControlServiceImpl::ServoEnable(
117153
return grpc::Status(grpc::StatusCode::INTERNAL, err);
118154
}
119155

156+
if (!CallServoStartService()) {
157+
std::string err = "Failed to start servo service.";
158+
RCLCPP_WARN(get_logger(), "[RobotControlService][ServoEnable] %s", err.c_str());
159+
response->set_msg(err);
160+
return grpc::Status(grpc::StatusCode::INTERNAL, err);
161+
}
162+
120163
{
121164
std::lock_guard<std::mutex> lock(servo_mutex_);
122165
servo_mode_ = ServoMode::JointJog;
123166
}
124167

125168
response->set_success(true);
126169
response->set_msg("");
170+
RCLCPP_INFO(get_logger(), "[RobotControlService][ServoDisable] Servo enabled");
127171
return grpc::Status::OK;
128172
}
129173

@@ -134,6 +178,13 @@ grpc::Status RobotControlServiceImpl::ServoDisable(
134178
{
135179
response->set_success(false);
136180

181+
if (!CallServoStopService()) {
182+
std::string err = "Failed to stop servo service.";
183+
RCLCPP_WARN(get_logger(), "[RobotControlService][ServoDisable] %s", err.c_str());
184+
response->set_msg(err);
185+
return grpc::Status(grpc::StatusCode::INTERNAL, err);
186+
}
187+
137188
if (!SwitchControllers(
138189
{"scaled_joint_trajectory_controller"},
139190
{"forward_position_controller"})) {
@@ -152,7 +203,7 @@ grpc::Status RobotControlServiceImpl::ServoDisable(
152203

153204
response->set_success(true);
154205
response->set_msg("");
155-
RCLCPP_WARN(get_logger(), "[RobotControlService][ServoDisable] RETURN");
206+
RCLCPP_INFO(get_logger(), "[RobotControlService][ServoDisable] Servo disabled");
156207
return grpc::Status::OK;
157208
}
158209

0 commit comments

Comments
 (0)