@@ -200,17 +200,17 @@ controller_interface::return_type ur_controllers::ForceModeController::update(co
200200 force_mode_parameters->selection_vec [5 ]);
201201
202202 command_interfaces_[CommandInterfaces::FORCE_MODE_WRENCH_X].set_value (
203- force_mode_parameters->wrench .wrench . force .x );
203+ force_mode_parameters->wrench .force .x );
204204 command_interfaces_[CommandInterfaces::FORCE_MODE_WRENCH_Y].set_value (
205- force_mode_parameters->wrench .wrench . force .y );
205+ force_mode_parameters->wrench .force .y );
206206 command_interfaces_[CommandInterfaces::FORCE_MODE_WRENCH_Z].set_value (
207- force_mode_parameters->wrench .wrench . force .z );
207+ force_mode_parameters->wrench .force .z );
208208 command_interfaces_[CommandInterfaces::FORCE_MODE_WRENCH_RX].set_value (
209- force_mode_parameters->wrench .wrench . torque .x );
209+ force_mode_parameters->wrench .torque .x );
210210 command_interfaces_[CommandInterfaces::FORCE_MODE_WRENCH_RY].set_value (
211- force_mode_parameters->wrench .wrench . torque .y );
211+ force_mode_parameters->wrench .torque .y );
212212 command_interfaces_[CommandInterfaces::FORCE_MODE_WRENCH_RZ].set_value (
213- force_mode_parameters->wrench .wrench . torque .z );
213+ force_mode_parameters->wrench .torque .z );
214214
215215 command_interfaces_[CommandInterfaces::FORCE_MODE_LIMITS_X].set_value (force_mode_parameters->limits [0 ]);
216216 command_interfaces_[CommandInterfaces::FORCE_MODE_LIMITS_Y].set_value (force_mode_parameters->limits [1 ]);
@@ -276,12 +276,12 @@ bool ForceModeController::setForceMode(const ur_msgs::srv::SetForceMode::Request
276276
277277 /* The limits specifies the maximum allowed speed along/around compliant axes. For non-compliant axes this value is
278278 * the maximum allowed deviation between actual tcp position and the one that has been programmed. */
279- force_mode_parameters.limits [0 ] = req->limits [0 ];
280- force_mode_parameters.limits [1 ] = req->limits [1 ];
281- force_mode_parameters.limits [2 ] = req->limits [2 ];
282- force_mode_parameters.limits [3 ] = req->limits [3 ];
283- force_mode_parameters.limits [4 ] = req->limits [4 ];
284- force_mode_parameters.limits [5 ] = req->limits [5 ];
279+ force_mode_parameters.limits [0 ] = req->selection_vector_x ? req-> speed_limits . linear . x : req-> deviation_limits [0 ];
280+ force_mode_parameters.limits [1 ] = req->selection_vector_y ? req-> speed_limits . linear . y : req-> deviation_limits [1 ];
281+ force_mode_parameters.limits [2 ] = req->selection_vector_z ? req-> speed_limits . linear . z : req-> deviation_limits [2 ];
282+ force_mode_parameters.limits [3 ] = req->selection_vector_rx ? req-> speed_limits . angular . x : req-> deviation_limits [3 ];
283+ force_mode_parameters.limits [4 ] = req->selection_vector_ry ? req-> speed_limits . angular . y : req-> deviation_limits [4 ];
284+ force_mode_parameters.limits [5 ] = req->selection_vector_rz ? req-> speed_limits . angular . z : req-> deviation_limits [5 ];
285285
286286 /* The type decides how the robot interprets the force frame (the one defined in task_frame). See ur_script manual
287287 * for explanation, under force_mode. */
0 commit comments