@@ -445,3 +445,80 @@ def test_deactivating_controller_stops_force_mode(self, tf_prefix):
445445 self .assertAlmostEqual (
446446 trans_before_wait .transform .translation .z , trans_after_wait .transform .translation .z
447447 )
448+
449+ def test_params_out_of_range_fails (self , tf_prefix ):
450+ self .assertTrue (
451+ self ._controller_manager_interface .switch_controller (
452+ strictness = SwitchController .Request .BEST_EFFORT ,
453+ activate_controllers = [
454+ "force_mode_controller" ,
455+ ],
456+ deactivate_controllers = [
457+ "scaled_joint_trajectory_controller" ,
458+ "joint_trajectory_controller" ,
459+ ],
460+ ).ok
461+ )
462+ self ._force_mode_controller_interface = ForceModeInterface (self .node )
463+
464+ # Create task frame for force mode
465+ point = Point (x = 0.0 , y = 0.0 , z = 0.0 )
466+ orientation = Quaternion (x = 0.0 , y = 0.0 , z = 0.0 , w = 1.0 )
467+ task_frame_pose = Pose ()
468+ task_frame_pose .position = point
469+ task_frame_pose .orientation = orientation
470+ header = std_msgs .msg .Header (seq = 1 , frame_id = tf_prefix + "base" )
471+ header .stamp .sec = int (time .time ()) + 1
472+ header .stamp .nanosec = 0
473+ frame_stamp = PoseStamped ()
474+ frame_stamp .header = header
475+ frame_stamp .pose = task_frame_pose
476+
477+ res = self ._force_mode_controller_interface .start_force_mode (
478+ task_frame = frame_stamp , gain_scaling = - 0.1
479+ )
480+ self .assertFalse (res .success )
481+
482+ res = self ._force_mode_controller_interface .start_force_mode (
483+ task_frame = frame_stamp , gain_scaling = 0
484+ )
485+ self .assertTrue (res .success )
486+ res = self ._force_mode_controller_interface .stop_force_mode ()
487+ self .assertTrue (res .success )
488+
489+ res = self ._force_mode_controller_interface .start_force_mode (
490+ task_frame = frame_stamp , gain_scaling = 2
491+ )
492+ self .assertTrue (res .success )
493+ res = self ._force_mode_controller_interface .stop_force_mode ()
494+ self .assertTrue (res .success )
495+
496+ res = self ._force_mode_controller_interface .start_force_mode (
497+ task_frame = frame_stamp , gain_scaling = 2.1
498+ )
499+ self .assertFalse (res .success )
500+
501+ # damping factor
502+ res = self ._force_mode_controller_interface .start_force_mode (
503+ task_frame = frame_stamp , damping_factor = - 0.1
504+ )
505+ self .assertFalse (res .success )
506+
507+ res = self ._force_mode_controller_interface .start_force_mode (
508+ task_frame = frame_stamp , damping_factor = 0
509+ )
510+ self .assertTrue (res .success )
511+ res = self ._force_mode_controller_interface .stop_force_mode ()
512+ self .assertTrue (res .success )
513+
514+ res = self ._force_mode_controller_interface .start_force_mode (
515+ task_frame = frame_stamp , damping_factor = 1
516+ )
517+ self .assertTrue (res .success )
518+ res = self ._force_mode_controller_interface .stop_force_mode ()
519+ self .assertTrue (res .success )
520+
521+ res = self ._force_mode_controller_interface .start_force_mode (
522+ task_frame = frame_stamp , damping_factor = 1.1
523+ )
524+ self .assertFalse (res .success )
0 commit comments