This package contains a ROS 2 controller that can be used to control a robot's end-effector in 3D space using Cartesian velocity and force setpoints. The controller is designed to be used with a force-torque sensor, and it can be used to implement hybrid force/velocity control. The controller can also be used without a force-torque sensor, in which case it will be a Cartesian velocity controller.
Here's the list of all the parameters that can be configured, with their descriptions and default values:
velocity_force_controller:
planning_group_name: {
type: string,
default_value: "",
description: "Specifies the planning group name. Must be a valid planning group defined in the SRDF config file.",
read_only: true
}
command_joints: {
type: string_array,
default_value: [],
description: "Specifies which joints will be commanded by the controller. If empty, it defaults to the joints included in the given planning group.",
read_only: true
}
sensor_frame: {
type: string,
default_value: "",
description: "Specifies the frame/link name of the force torque sensor. Must exist in the robot description."
}
ee_frame: {
type: string,
default_value: "",
description: "Specifies the frame/link name of the end-effector frame. Must exist in the robot description."
}
ft_sensor_name: {
type: string,
default_value: "",
description: "Specifies the name of the force torque sensor in the robot description which will be used in the admittance calculation."
}
ft_cutoff_frequency_ratio: {
type: double,
default_value: 1.0,
description: "Specifies the cutoff frequency ratio for the FTS filter. Valid values range from 0 to 1, where 1 is the sampling frequency.",
validation: {
bounds<>: [0.0, 1.0]
}
}
ft_force_deadband: {
type: double,
default_value: 0.0,
description: "Specifies the deadband threshold for the force measurements (N).",
validation: {
gt_eq<>: 0.0
}
}
ft_torque_deadband: {
type: double,
default_value: 0.0,
description: "Specifies the deadband threshold for the torque measurements (Nm).",
validation: {
gt_eq<>: 0.0
}
}
state_publish_rate: {
type: int,
default_value: 50,
description: "Rate in Hz at which the controller will publish the state. Set to zero to disable state publishing.",
validation: {
gt_eq<>: 0
}
}
jacobian_damping: {
type: double,
default_value: 0.001,
description: "Specifies the damping coefficient for the Jacobian damped least-squares inverse.",
validation: {
gt<>: 0.0
}
}
command_timeout: {
type: double,
default_value: 0.2,
description: "Timeout in seconds after which the controller will stop motion if no new commands are received.",
validation: {
gt<>: 0.0
}
}
max_joint_velocity: {
type: double_array,
description: "Joint velocity limits (absolute value), one element per robot joint.",
validation: {
lower_element_bounds<>: 0.001
}
}
max_joint_acceleration: {
type: double_array,
description: "Joint acceleration limits (absolute value), one element per robot joint.",
validation: {
lower_element_bounds<>: 0.001
}
}
max_cartesian_velocity: {
type: double_array,
description: "Cartesian velocity limits (absolute value), one element per Cartesian axis (x, y, z, rx, ry, rz).",
validation: {
fixed_size<>: 6,
lower_element_bounds<>: 0.001
}
}
max_cartesian_acceleration: {
type: double_array,
description: "Cartesian acceleration limits (absolute value), one element per Cartesian axis (x, y, z, rx, ry, rz).",
validation: {
fixed_size<>: 6,
lower_element_bounds<>: 0.001
}
}
joint_limit_position_tolerance: {
type: double,
default_value: 0.02, # radians.
description: "Padding (in radians) to add to joint position limits as a safety margin when predicting joint limit violations.",
validation: {
gt<>: 0.0
}
}