services.cpp
Go to the documentation of this file.
1 // Copyright (c) 2017 Franka Emika GmbH
2 // Use of this source code is governed by the Apache-2.0 license, see LICENSE
3 #include <franka_hw/services.h>
4 
5 #include <mutex>
6 
7 namespace franka_hw {
8 
9 void setupServices(franka::Robot& robot,
10  std::mutex& robot_mutex,
11  ros::NodeHandle& node_handle,
12  ServiceContainer& services) {
13  services
14  .advertiseService<franka_msgs::SetJointImpedance>(
15  node_handle, "set_joint_impedance",
16  [&robot, &robot_mutex](auto&& req, auto&& res) {
17  std::lock_guard<std::mutex> lock(robot_mutex);
18  return franka_hw::setJointImpedance(robot, req, res);
19  })
20  .advertiseService<franka_msgs::SetCartesianImpedance>(
21  node_handle, "set_cartesian_impedance",
22  [&robot, &robot_mutex](auto&& req, auto&& res) {
23  std::lock_guard<std::mutex> lock(robot_mutex);
24  return franka_hw::setCartesianImpedance(robot, req, res);
25  })
26  .advertiseService<franka_msgs::SetEEFrame>(node_handle, "set_EE_frame",
27  [&robot, &robot_mutex](auto&& req, auto&& res) {
28  std::lock_guard<std::mutex> lock(robot_mutex);
29  return franka_hw::setEEFrame(robot, req, res);
30  })
31  .advertiseService<franka_msgs::SetKFrame>(node_handle, "set_K_frame",
32  [&robot, &robot_mutex](auto&& req, auto&& res) {
33  std::lock_guard<std::mutex> lock(robot_mutex);
34  return franka_hw::setKFrame(robot, req, res);
35  })
36  .advertiseService<franka_msgs::SetForceTorqueCollisionBehavior>(
37  node_handle, "set_force_torque_collision_behavior",
38  [&robot, &robot_mutex](auto&& req, auto&& res) {
39  std::lock_guard<std::mutex> lock(robot_mutex);
40  return franka_hw::setForceTorqueCollisionBehavior(robot, req, res);
41  })
42  .advertiseService<franka_msgs::SetFullCollisionBehavior>(
43  node_handle, "set_full_collision_behavior",
44  [&robot, &robot_mutex](auto&& req, auto&& res) {
45  std::lock_guard<std::mutex> lock(robot_mutex);
46  return franka_hw::setFullCollisionBehavior(robot, req, res);
47  })
48  .advertiseService<franka_msgs::SetLoad>(node_handle, "set_load",
49  [&robot, &robot_mutex](auto&& req, auto&& res) {
50  std::lock_guard<std::mutex> lock(robot_mutex);
51  return franka_hw::setLoad(robot, req, res);
52  });
53 }
54 
55 void setCartesianImpedance(franka::Robot& robot,
56  const franka_msgs::SetCartesianImpedance::Request& req,
57  franka_msgs::SetCartesianImpedance::Response& /* res */) {
58  std::array<double, 6> cartesian_stiffness;
59  std::copy(req.cartesian_stiffness.cbegin(), req.cartesian_stiffness.cend(),
60  cartesian_stiffness.begin());
61  robot.setCartesianImpedance(cartesian_stiffness);
62 }
63 
64 void setJointImpedance(franka::Robot& robot,
65  const franka_msgs::SetJointImpedance::Request& req,
66  franka_msgs::SetJointImpedance::Response& /* res */) {
67  std::array<double, 7> joint_stiffness;
68  std::copy(req.joint_stiffness.cbegin(), req.joint_stiffness.cend(), joint_stiffness.begin());
69  robot.setJointImpedance(joint_stiffness);
70 }
71 
72 void setEEFrame(franka::Robot& robot,
73  const franka_msgs::SetEEFrame::Request& req,
74  franka_msgs::SetEEFrame::Response& /* res */) {
75  std::array<double, 16> NE_T_EE; // NOLINT [readability-identifier-naming]
76  std::copy(req.NE_T_EE.cbegin(), req.NE_T_EE.cend(), NE_T_EE.begin());
77  robot.setEE(NE_T_EE);
78 }
79 
80 void setKFrame(franka::Robot& robot,
81  const franka_msgs::SetKFrame::Request& req,
82  franka_msgs::SetKFrame::Response& /* res */) {
83  std::array<double, 16> EE_T_K; // NOLINT [readability-identifier-naming]
84  std::copy(req.EE_T_K.cbegin(), req.EE_T_K.cend(), EE_T_K.begin());
85  robot.setK(EE_T_K);
86 }
87 
89  franka::Robot& robot,
90  const franka_msgs::SetForceTorqueCollisionBehavior::Request& req,
91  franka_msgs::SetForceTorqueCollisionBehavior::Response& /* res */
92 ) {
93  std::array<double, 7> lower_torque_thresholds_nominal;
94  std::copy(req.lower_torque_thresholds_nominal.cbegin(),
95  req.lower_torque_thresholds_nominal.cend(), lower_torque_thresholds_nominal.begin());
96  std::array<double, 7> upper_torque_thresholds_nominal;
97  std::copy(req.upper_torque_thresholds_nominal.cbegin(),
98  req.upper_torque_thresholds_nominal.cend(), upper_torque_thresholds_nominal.begin());
99  std::array<double, 6> lower_force_thresholds_nominal;
100  std::copy(req.lower_force_thresholds_nominal.cbegin(), req.lower_force_thresholds_nominal.cend(),
101  lower_force_thresholds_nominal.begin());
102  std::array<double, 6> upper_force_thresholds_nominal;
103  std::copy(req.upper_force_thresholds_nominal.cbegin(), req.upper_force_thresholds_nominal.cend(),
104  upper_force_thresholds_nominal.begin());
105 
106  robot.setCollisionBehavior(lower_torque_thresholds_nominal, upper_torque_thresholds_nominal,
107  lower_force_thresholds_nominal, upper_force_thresholds_nominal);
108 }
109 
110 void setFullCollisionBehavior(franka::Robot& robot,
111  const franka_msgs::SetFullCollisionBehavior::Request& req,
112  franka_msgs::SetFullCollisionBehavior::Response& /* res */) {
113  std::array<double, 7> lower_torque_thresholds_acceleration;
114  std::copy(req.lower_torque_thresholds_acceleration.cbegin(),
115  req.lower_torque_thresholds_acceleration.cend(),
116  lower_torque_thresholds_acceleration.begin());
117  std::array<double, 7> upper_torque_thresholds_acceleration;
118  std::copy(req.upper_torque_thresholds_acceleration.cbegin(),
119  req.upper_torque_thresholds_acceleration.cend(),
120  upper_torque_thresholds_acceleration.begin());
121  std::array<double, 7> lower_torque_thresholds_nominal;
122  std::copy(req.lower_torque_thresholds_nominal.cbegin(),
123  req.lower_torque_thresholds_nominal.cend(), lower_torque_thresholds_nominal.begin());
124  std::array<double, 7> upper_torque_thresholds_nominal;
125  std::copy(req.upper_torque_thresholds_nominal.cbegin(),
126  req.upper_torque_thresholds_nominal.cend(), upper_torque_thresholds_nominal.begin());
127  std::array<double, 6> lower_force_thresholds_acceleration;
128  std::copy(req.lower_force_thresholds_acceleration.cbegin(),
129  req.lower_force_thresholds_acceleration.cend(),
130  lower_force_thresholds_acceleration.begin());
131  std::array<double, 6> upper_force_thresholds_acceleration;
132  std::copy(req.upper_force_thresholds_acceleration.cbegin(),
133  req.upper_force_thresholds_acceleration.cend(),
134  upper_force_thresholds_acceleration.begin());
135  std::array<double, 6> lower_force_thresholds_nominal;
136  std::copy(req.lower_force_thresholds_nominal.cbegin(), req.lower_force_thresholds_nominal.cend(),
137  lower_force_thresholds_nominal.begin());
138  std::array<double, 6> upper_force_thresholds_nominal;
139  std::copy(req.upper_force_thresholds_nominal.cbegin(), req.upper_force_thresholds_nominal.cend(),
140  upper_force_thresholds_nominal.begin());
141  robot.setCollisionBehavior(lower_torque_thresholds_acceleration,
142  upper_torque_thresholds_acceleration, lower_torque_thresholds_nominal,
143  upper_torque_thresholds_nominal, lower_force_thresholds_acceleration,
144  upper_force_thresholds_acceleration, lower_force_thresholds_nominal,
145  upper_force_thresholds_nominal);
146 }
147 
148 void setLoad(franka::Robot& robot,
149  const franka_msgs::SetLoad::Request& req,
150  franka_msgs::SetLoad::Response& /* res */) {
151  double mass(req.mass);
152  std::array<double, 3> F_x_center_load; // NOLINT [readability-identifier-naming]
153  std::copy(req.F_x_center_load.cbegin(), req.F_x_center_load.cend(), F_x_center_load.begin());
154  std::array<double, 9> load_inertia;
155  std::copy(req.load_inertia.cbegin(), req.load_inertia.cend(), load_inertia.begin());
156 
157  robot.setLoad(mass, F_x_center_load, load_inertia);
158 }
159 
160 } // namespace franka_hw
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
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
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
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::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
services.h
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
ros::NodeHandle


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