services.h
Go to the documentation of this file.
1 // Copyright (c) 2019 Franka Emika GmbH
2 // Use of this source code is governed by the Apache-2.0 license, see LICENSE
3 #pragma once
4 #include <mutex>
5 #include <vector>
6 
7 #include <franka/exception.h>
8 #include <franka/robot.h>
9 #include <ros/console.h>
10 #include <ros/node_handle.h>
11 #include <ros/service_server.h>
12 
13 #include <franka_msgs/SetCartesianImpedance.h>
14 #include <franka_msgs/SetEEFrame.h>
15 #include <franka_msgs/SetForceTorqueCollisionBehavior.h>
16 #include <franka_msgs/SetFullCollisionBehavior.h>
17 #include <franka_msgs/SetJointImpedance.h>
18 #include <franka_msgs/SetKFrame.h>
19 #include <franka_msgs/SetLoad.h>
20 
21 namespace franka_hw {
22 
32 template <typename T>
34  ros::NodeHandle& node_handle,
35  const std::string& name,
36  std::function<void(typename T::Request&, typename T::Response&)> handler) {
37  return node_handle.advertiseService<typename T::Request, typename T::Response>(
38  name, [name, handler](typename T::Request& request, typename T::Response& response) {
39  try {
40  handler(request, response);
41  response.success = true;
42  ROS_DEBUG_STREAM(name << " succeeded.");
43  } catch (const franka::Exception& ex) {
44  ROS_ERROR_STREAM(name << " failed: " << ex.what());
45  response.success = false;
46  response.error = ex.what();
47  }
48  return true;
49  });
50 }
51 
57  public:
63  template <typename T, typename... TArgs>
64  ServiceContainer& advertiseService(TArgs&&... args) {
65  ros::ServiceServer server = franka_hw::advertiseService<T>(std::forward<TArgs>(args)...);
66  services_.push_back(server);
67  return *this;
68  }
69 
70  private:
71  std::vector<ros::ServiceServer> services_;
72 };
73 
82 void setupServices(franka::Robot& robot,
83  std::mutex& robot_mutex,
84  ros::NodeHandle& node_handle,
85  ServiceContainer& services);
86 
94 void setCartesianImpedance(franka::Robot& robot,
95  const franka_msgs::SetCartesianImpedance::Request& req,
96  franka_msgs::SetCartesianImpedance::Response& res);
97 
105 void setJointImpedance(franka::Robot& robot,
106  const franka_msgs::SetJointImpedance::Request& req,
107  franka_msgs::SetJointImpedance::Response& res);
108 
116 void setEEFrame(franka::Robot& robot,
117  const franka_msgs::SetEEFrame::Request& req,
118  franka_msgs::SetEEFrame::Response& res);
119 
127 void setKFrame(franka::Robot& robot,
128  const franka_msgs::SetKFrame::Request& req,
129  franka_msgs::SetKFrame::Response& res);
130 
139  franka::Robot& robot,
140  const franka_msgs::SetForceTorqueCollisionBehavior::Request& req,
141  franka_msgs::SetForceTorqueCollisionBehavior::Response& res);
142 
150 void setFullCollisionBehavior(franka::Robot& robot,
151  const franka_msgs::SetFullCollisionBehavior::Request& req,
152  franka_msgs::SetFullCollisionBehavior::Response& res);
153 
161 void setLoad(franka::Robot& robot,
162  const franka_msgs::SetLoad::Request& req,
163  franka_msgs::SetLoad::Response& res);
164 
165 } // namespace franka_hw
response
const std::string response
franka_hw::setFullCollisionBehavior
void setFullCollisionBehavior(franka::Robot &robot, const franka_msgs::SetFullCollisionBehavior::Request &req, franka_msgs::SetFullCollisionBehavior::Response &res)
Callback for the service interface to franka::robot::setFullCollisionBehavior.
Definition: services.cpp:110
franka_hw::ServiceContainer::advertiseService
ServiceContainer & advertiseService(TArgs &&... args)
Advertises and adds a service to the container class.
Definition: services.h:64
node_handle.h
franka_hw::setCartesianImpedance
void setCartesianImpedance(franka::Robot &robot, const franka_msgs::SetCartesianImpedance::Request &req, franka_msgs::SetCartesianImpedance::Response &res)
Callback for the service interface to franka::robot::setCartesianImpedance.
Definition: services.cpp:55
ROS_ERROR_STREAM
#define ROS_ERROR_STREAM(args)
franka_hw::ServiceContainer
This class serves as container that gathers all possible service interfaces to a libfranka robot inst...
Definition: services.h:56
franka_hw::setLoad
void setLoad(franka::Robot &robot, const franka_msgs::SetLoad::Request &req, franka_msgs::SetLoad::Response &res)
Callback for the service interface to franka::robot::setLoad.
Definition: services.cpp:148
ros::NodeHandle::advertiseService
ServiceServer advertiseService(AdvertiseServiceOptions &ops)
ROS_DEBUG_STREAM
#define ROS_DEBUG_STREAM(args)
ros::ServiceServer
console.h
franka_hw::setJointImpedance
void setJointImpedance(franka::Robot &robot, const franka_msgs::SetJointImpedance::Request &req, franka_msgs::SetJointImpedance::Response &res)
Callback for the service interface to franka::robot::setJointImpedance.
Definition: services.cpp:64
franka_hw::advertiseService
ros::ServiceServer advertiseService(ros::NodeHandle &node_handle, const std::string &name, std::function< void(typename T::Request &, typename T::Response &)> handler)
Advertises a service that acts according to the handler function which is used in the service callbac...
Definition: services.h:33
franka_hw::setupServices
void setupServices(franka::Robot &robot, std::mutex &robot_mutex, ros::NodeHandle &node_handle, ServiceContainer &services)
Sets up all services relevant for a libfranka robot inside a service container.
Definition: services.cpp:9
franka_hw::ServiceContainer::services_
std::vector< ros::ServiceServer > services_
Definition: services.h:71
franka_hw::setEEFrame
void setEEFrame(franka::Robot &robot, const franka_msgs::SetEEFrame::Request &req, franka_msgs::SetEEFrame::Response &res)
Callback for the service interface to franka::robot::setEEFrame.
Definition: services.cpp:72
franka_hw
Definition: control_mode.h:8
franka_hw::setKFrame
void setKFrame(franka::Robot &robot, const franka_msgs::SetKFrame::Request &req, franka_msgs::SetKFrame::Response &res)
Callback for the service interface to franka::robot::setKFrame.
Definition: services.cpp:80
franka_hw::setForceTorqueCollisionBehavior
void setForceTorqueCollisionBehavior(franka::Robot &robot, const franka_msgs::SetForceTorqueCollisionBehavior::Request &req, franka_msgs::SetForceTorqueCollisionBehavior::Response &res)
Callback for the service interface to franka::robot::setForceTorqueCollisionBehavior.
Definition: services.cpp:88
service_server.h
ros::NodeHandle


franka_hw
Author(s): Franka Emika GmbH
autogenerated on Mon Sep 19 2022 02:33:21