Skip to content

Commit 4f14e98

Browse files
URJalaurfeex
authored andcommitted
Updated force mode functions
to match updated service definition and to match the force mode interface of ROS2.
1 parent 44e218c commit 4f14e98

File tree

3 files changed

+40
-31
lines changed

3 files changed

+40
-31
lines changed

Diff for: ur_robot_driver/include/ur_robot_driver/hardware_interface.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -221,8 +221,8 @@ class HardwareInterface : public hardware_interface::RobotHW
221221
bool activateSplineInterpolation(std_srvs::SetBoolRequest& req, std_srvs::SetBoolResponse& res);
222222
bool getRobotSoftwareVersion(ur_msgs::GetRobotSoftwareVersionRequest& req,
223223
ur_msgs::GetRobotSoftwareVersionResponse& res);
224-
bool startForceMode(ur_msgs::SetForceModeRequest& req, ur_msgs::SetForceModeResponse& res);
225-
bool endForceMode(std_srvs::TriggerRequest& req, std_srvs::TriggerResponse& res);
224+
bool setForceMode(ur_msgs::SetForceModeRequest& req, ur_msgs::SetForceModeResponse& res);
225+
bool disableForceMode(std_srvs::TriggerRequest& req, std_srvs::TriggerResponse& res);
226226

227227
std::unique_ptr<urcl::UrDriver> ur_driver_;
228228
std::unique_ptr<DashboardClientROS> dashboard_client_;
@@ -249,7 +249,7 @@ class HardwareInterface : public hardware_interface::RobotHW
249249
ros::ServiceServer activate_spline_interpolation_srv_;
250250
ros::ServiceServer get_robot_software_version_srv;
251251
ros::ServiceServer set_force_mode_srv_;
252-
ros::ServiceServer end_force_mode_srv_;
252+
ros::ServiceServer disable_force_mode_srv_;
253253

254254
hardware_interface::JointStateInterface js_interface_;
255255
scaled_controllers::ScaledPositionJointInterface spj_interface_;

Diff for: ur_robot_driver/src/hardware_interface.cpp

+24-16
Original file line numberDiff line numberDiff line change
@@ -457,11 +457,10 @@ bool HardwareInterface::init(ros::NodeHandle& root_nh, ros::NodeHandle& robot_hw
457457
set_payload_srv_ = robot_hw_nh.advertiseService("set_payload", &HardwareInterface::setPayload, this);
458458

459459
// Calling this service will set the robot in force mode
460-
set_force_mode_srv_ = robot_hw_nh.advertiseService("set_force_mode", &HardwareInterface::setForceMode, this);
460+
set_force_mode_srv_ = robot_hw_nh.advertiseService("start_force_mode", &HardwareInterface::setForceMode, this);
461461

462462
// Calling this service will stop the robot from being in force mode
463-
disable_force_mode_srv_ =
464-
robot_hw_nh.advertiseService("disable_force_mode", &HardwareInterface::disableForceMode, this);
463+
disable_force_mode_srv_ = robot_hw_nh.advertiseService("stop_force_mode", &HardwareInterface::disableForceMode, this);
465464

466465
// Call this to activate or deactivate using spline interpolation locally on the UR controller, when forwarding
467466
// trajectories to the UR robot.
@@ -1240,20 +1239,29 @@ bool HardwareInterface::setForceMode(ur_msgs::SetForceModeRequest& req, ur_msgs:
12401239
selection_vector[4] = req.selection_vector_ry;
12411240
selection_vector[5] = req.selection_vector_rz;
12421241

1243-
wrench[0] = req.wrench.wrench.force.x;
1244-
wrench[1] = req.wrench.wrench.force.y;
1245-
wrench[2] = req.wrench.wrench.force.z;
1246-
wrench[3] = req.wrench.wrench.torque.x;
1247-
wrench[4] = req.wrench.wrench.torque.y;
1248-
wrench[5] = req.wrench.wrench.torque.z;
1249-
1250-
limits[0] = req.limits.twist.linear.x;
1251-
limits[1] = req.limits.twist.linear.y;
1252-
limits[2] = req.limits.twist.linear.z;
1253-
limits[3] = req.limits.twist.angular.x;
1254-
limits[4] = req.limits.twist.angular.y;
1255-
limits[5] = req.limits.twist.angular.z;
1242+
wrench[0] = req.wrench.force.x;
1243+
wrench[1] = req.wrench.force.y;
1244+
wrench[2] = req.wrench.force.z;
1245+
wrench[3] = req.wrench.torque.x;
1246+
wrench[4] = req.wrench.torque.y;
1247+
wrench[5] = req.wrench.torque.z;
1248+
1249+
limits[0] = req.selection_vector_x ? req.speed_limits.linear.x : req.deviation_limits[0];
1250+
limits[1] = req.selection_vector_y ? req.speed_limits.linear.y : req.deviation_limits[1];
1251+
limits[2] = req.selection_vector_z ? req.speed_limits.linear.z : req.deviation_limits[2];
1252+
limits[3] = req.selection_vector_rx ? req.speed_limits.angular.x : req.deviation_limits[3];
1253+
limits[4] = req.selection_vector_ry ? req.speed_limits.angular.y : req.deviation_limits[4];
1254+
limits[5] = req.selection_vector_rz ? req.speed_limits.angular.z : req.deviation_limits[5];
1255+
1256+
if (req.type < 1 || req.type > 3)
1257+
{
1258+
ROS_ERROR("The force mode type has to be 1, 2, or 3. Received %u", req.type);
1259+
res.success = false;
1260+
return false;
1261+
}
1262+
12561263
unsigned int type = req.type;
1264+
12571265
if (ur_driver_->getVersion().major < 5)
12581266
{
12591267
if (gain_scale != 0)

Diff for: ur_robot_driver/test/integration_test.py

+13-12
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from std_srvs.srv import Trigger, TriggerRequest
1616
import tf
1717
from trajectory_msgs.msg import JointTrajectoryPoint
18-
from geometry_msgs.msg import Pose, PoseStamped, Quaternion, Point, WrenchStamped, TwistStamped, Wrench, Twist, Vector3
18+
from geometry_msgs.msg import Pose, PoseStamped, Quaternion, Point, Wrench, Twist, Vector3
1919
from ur_msgs.srv import SetIO, SetIORequest, GetRobotSoftwareVersion, SetForceModeRequest, SetForceMode
2020
from ur_msgs.msg import IOStates
2121

@@ -128,9 +128,9 @@ def init_robot(self):
128128
self.fail("Could not reach start force mode service. Make sure that the driver is actually running."
129129
" Msg: {}".format(err))
130130

131-
self.end_force_mode_srv = rospy.ServiceProxy('/ur_hardware_interface/end_force_mode', Trigger)
131+
self.stop_force_mode_srv = rospy.ServiceProxy('/ur_hardware_interface/stop_force_mode', Trigger)
132132
try:
133-
self.end_force_mode_srv.wait_for_service(timeout)
133+
self.stop_force_mode_srv.wait_for_service(timeout)
134134
except rospy.exceptions.ROSException as err:
135135
self.fail("Could not reach end force mode service. Make sure that the driver is actually running."
136136
" Msg: {}".format(err))
@@ -159,6 +159,7 @@ def set_robot_to_mode(self, target_mode):
159159
return self.set_mode_client.get_result().success
160160

161161
def test_force_mode_srv(self):
162+
req = SetForceModeRequest()
162163
point = Point(0.1, 0.1, 0.1)
163164
orientation = Quaternion(0, 0, 0, 0)
164165
task_frame_pose = Pose(point, orientation)
@@ -167,29 +168,29 @@ def test_force_mode_srv(self):
167168
header.stamp.nsecs = 0
168169
frame_stamp = PoseStamped(header, task_frame_pose)
169170
compliance = [0,0,1,0,0,1]
170-
wrench_vec = Wrench(Vector3(0,0,1),Vector3(0,0,1))
171-
wrench_stamp = WrenchStamped(header,wrench_vec)
172-
type_spec = 2
173-
limits = Twist(Vector3(0.1,0.1,0.1), Vector3(0.1,0.1,0.1))
174-
limits_stamp = TwistStamped(header, limits)
171+
wrench = Wrench(Vector3(0,0,1),Vector3(0,0,1))
172+
type_spec = req.NO_TRANSFORM
173+
speed_limits = Twist(Vector3(0.1,0.1,0.1), Vector3(0.1,0.1,0.1))
174+
deviation_limits = [0.1, 0.1, 0.1, 0.1, 0.1, 0.1]
175175
damping_factor = 0.8
176176
gain_scale = 0.8
177-
req = SetForceModeRequest()
177+
178178
req.task_frame = frame_stamp
179179
req.selection_vector_x = compliance[0]
180180
req.selection_vector_y = compliance[1]
181181
req.selection_vector_z = compliance[2]
182182
req.selection_vector_rx = compliance[3]
183183
req.selection_vector_ry = compliance[4]
184184
req.selection_vector_rz = compliance[5]
185-
req.wrench = wrench_stamp
185+
req.wrench = wrench
186186
req.type = type_spec
187-
req.limits = limits_stamp
187+
req.speed_limits = speed_limits
188+
req.deviation_limits = deviation_limits
188189
req.damping_factor = damping_factor
189190
req.gain_scaling = gain_scale
190191
res = self.start_force_mode_srv.call(req)
191192
self.assertEqual(res.success, True)
192-
res = self.end_force_mode_srv.call(TriggerRequest())
193+
res = self.stop_force_mode_srv.call(TriggerRequest())
193194
self.assertEqual(res.success, True)
194195

195196

0 commit comments

Comments
 (0)