@@ -44,8 +44,11 @@ void JoystickManager::initialize_joystick_manager() {
4444 vehicle_estop_trigger_service);
4545 srv_client_estop_reset =
4646 node->create_client <std_srvs::srv::Trigger>(vehicle_estop_reset_service);
47+ srv_client_pause_servo =
48+ node->create_client <std_srvs::srv::SetBool>(" /franka/servo_node/pause_servo" );
4749 srv_client_arm_home =
48- node->create_client <alliander_interfaces::srv::StringSrv>(arm_home_service);
50+ node->create_client <alliander_interfaces::srv::StringSrv>(
51+ arm_home_service);
4952
5053 // Action clients
5154 action_client_gripper_open = rclcpp_action::create_client<TriggerAction>(
@@ -86,8 +89,11 @@ void JoystickManager::joy_cb(const sensor_msgs::msg::Joy::SharedPtr msg) {
8689 handle_button_input (msg->buttons );
8790
8891 switch (current_mode) {
89- case arm_mode && !arm_busy: // Don't send arm messages while it's already
90- // following a trajectory
92+ case arm_mode:
93+ if (arm_busy) {
94+ // Don't send arm messages while it's already following a trajectory.
95+ break ;
96+ }
9197 handle_arm_movement (msg->axes [1 ], msg->axes [0 ], msg->axes [3 ],
9298 msg->axes [2 ]);
9399 break ;
@@ -241,9 +247,12 @@ void JoystickManager::move_arm_to_home() {
241247 return ;
242248 }
243249
250+ pause_servo_node (true );
251+
244252 arm_busy = true ;
245253
246- auto request = std::make_shared<alliander_interfaces::srv::StringSrv::Request>();
254+ auto request =
255+ std::make_shared<alliander_interfaces::srv::StringSrv::Request>();
247256 request->text = " home" ;
248257
249258 if (!srv_client_arm_home->service_is_ready ()) {
@@ -260,20 +269,50 @@ void JoystickManager::move_arm_to_home() {
260269 auto response = future.get ();
261270
262271 if (response->success ) {
263- RCLCPP_INFO (node->get_logger (), " Arm moved home successfully." );
272+ RCLCPP_DEBUG (node->get_logger (), " Arm moved home successfully." );
264273 } else {
265274 RCLCPP_WARN (node->get_logger (), " Move home failed." );
266275 }
267276 } catch (const std::exception& e) {
268277 RCLCPP_ERROR (node->get_logger (), " 'Move arm' service call failed: %s" ,
269278 e.what ());
270279 }
280+ pause_servo_node (false );
271281
272282 // Unblock arm once service call finishes
273283 arm_busy = false ;
274284 });
275285}
276286
287+ void JoystickManager::pause_servo_node (bool pause) {
288+ auto request = std::make_shared<std_srvs::srv::SetBool::Request>();
289+ request->data = pause;
290+
291+ if (!srv_client_pause_servo->service_is_ready ()) {
292+ RCLCPP_WARN (node->get_logger (), " (Un)pause servo node service not available." );
293+ arm_busy = false ;
294+ return ;
295+ }
296+
297+ srv_client_pause_servo->async_send_request (
298+ request,
299+ [this ](rclcpp::Client<std_srvs::srv::SetBool>::SharedFuture future) {
300+ try {
301+ auto response = future.get ();
302+
303+ if (response->success ) {
304+ RCLCPP_DEBUG (node->get_logger (),
305+ " Servo node (un)paused successfully." );
306+ } else {
307+ RCLCPP_WARN (node->get_logger (), " (Un)pause servo node failed." );
308+ }
309+ } catch (const std::exception& e) {
310+ RCLCPP_ERROR (node->get_logger (),
311+ " (Un)pause servo node service call failed: %s" , e.what ());
312+ }
313+ });
314+ }
315+
277316void JoystickManager::send_trigger_request (
278317 const rclcpp::Client<std_srvs::srv::Trigger>::SharedPtr& client) {
279318 auto trigger_request = std::make_shared<std_srvs::srv::Trigger::Request>();
@@ -291,7 +330,7 @@ void JoystickManager::send_trigger_request(
291330 auto response = future.get ();
292331
293332 if (response->success ) {
294- RCLCPP_INFO (node->get_logger (), " Trigger service successful." );
333+ RCLCPP_DEBUG (node->get_logger (), " Trigger service successful." );
295334 } else {
296335 RCLCPP_WARN (node->get_logger (), " Trigger service failed." );
297336 }
0 commit comments