10 std::mutex& robot_mutex,
15 node_handle,
"set_joint_impedance",
16 [&robot, &robot_mutex](
auto&& req,
auto&& res) {
17 std::lock_guard<std::mutex> lock(robot_mutex);
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);
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);
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);
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);
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);
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);
56 const franka_msgs::SetCartesianImpedance::Request& req,
57 franka_msgs::SetCartesianImpedance::Response& ) {
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);
65 const franka_msgs::SetJointImpedance::Request& req,
66 franka_msgs::SetJointImpedance::Response& ) {
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);
73 const franka_msgs::SetEEFrame::Request& req,
74 franka_msgs::SetEEFrame::Response& ) {
75 std::array<double, 16> NE_T_EE;
76 std::copy(req.NE_T_EE.cbegin(), req.NE_T_EE.cend(), NE_T_EE.begin());
81 const franka_msgs::SetKFrame::Request& req,
82 franka_msgs::SetKFrame::Response& ) {
83 std::array<double, 16> EE_T_K;
84 std::copy(req.EE_T_K.cbegin(), req.EE_T_K.cend(), EE_T_K.begin());
90 const franka_msgs::SetForceTorqueCollisionBehavior::Request& req,
91 franka_msgs::SetForceTorqueCollisionBehavior::Response&
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());
106 robot.setCollisionBehavior(lower_torque_thresholds_nominal, upper_torque_thresholds_nominal,
107 lower_force_thresholds_nominal, upper_force_thresholds_nominal);
111 const franka_msgs::SetFullCollisionBehavior::Request& req,
112 franka_msgs::SetFullCollisionBehavior::Response& ) {
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);
149 const franka_msgs::SetLoad::Request& req,
150 franka_msgs::SetLoad::Response& ) {
151 double mass(req.mass);
152 std::array<double, 3> F_x_center_load;
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());
157 robot.setLoad(mass, F_x_center_load, load_inertia);