Why Force/Torque Sensing Matters for Manipulation
Vision-only manipulation policies fail predictably on contact-sensitive tasks: peg insertion, drawer opening, screw fastening, and any task where the robot must apply a controlled force rather than simply move to a pose. The fundamental reason is that vision cannot directly measure force — it can only infer contact from appearance, which is unreliable for small contact areas, deformable objects, or occluded grasps.
Force/torque (F/T) sensing adds the sense of touch. A 6-axis wrist F/T sensor measures three force components (Fx, Fy, Fz) and three torque components (Tx, Ty, Tz) at the robot wrist. This allows policies to detect contact, regulate applied force, detect slip, and recognize task completion events (e.g., peg fully seated when insertion force drops).
The cost-benefit of adding F/T sensing is high. A $1.5K–$3K sensor can be the difference between a policy that works in the lab and one that works in production. For any task involving contact, insertion, or force regulation, budget for F/T sensing from the start.
The trade-off: F/T sensors add weight (100–400 g), reduce payload, add a potential failure point, and require careful integration. They are not necessary for free-space pick-and-place — only for contact-rich tasks.
Sensor Types: Wrist 6-Axis vs. Fingertip Tactile
Wrist 6-axis F/T sensors mount between the robot arm flange and the gripper/end-effector. They measure all forces and torques at the wrist, regardless of gripper type. They are the workhorse choice for most manipulation applications.
| Sensor | Price | Type | Force Range (Fz) | Resolution | Bandwidth | Interface | Best For |
|---|---|---|---|---|---|---|---|
| ATI Gamma SI-32-2.5 | $3,200 | Wrist 6-axis | 32 N | 6.25 mN | 7 kHz | EtherCAT/USB | Precision assembly, highest accuracy |
| Robotiq FT 300-S | $1,950 | Wrist 6-axis | 300 N | 0.1 N | 100 Hz | RS-485/USB | UR arms (native), general manipulation |
| Bota SensONE | $1,500 | Wrist 6-axis | 200 N | 0.1 N | 2000 Hz | EtherCAT/USB | High-bandwidth contact tasks |
| OnRobot HEX-E QC | $2,800 | Wrist 6-axis | 200 N | 0.2 N | 100 Hz | UR Tool I/O | UR arms, quick-change mount |
| FANUC F-200iA (built-in) | Included | Wrist 6-axis | 200 N | 0.5 N | 1000 Hz | Proprietary | FANUC arms only |
| GelSight Mini | $500 | Fingertip tactile | ~5 N normal | 0.01 N | 30 fps | USB | Grasp slip detection, texture sensing |
| uSkin (XELA Robotics) | $800 | Fingertip tactile (3×4 array) | ~20 N | 0.05 N/cell | 100 Hz | USB/SPI | Distributed contact sensing |
Fingertip tactile sensors (GelSight, uSkin) provide spatially distributed contact information at the fingertip surface. They answer "where is the contact and what is its shape" rather than just "how much force at the wrist." They are used for slip detection, grasp quality estimation, and tasks requiring contact localization.
For most manipulation tasks, start with a wrist 6-axis sensor. Add fingertip sensors if you need slip detection or grasp texture information. Running both simultaneously is viable on a workstation-class compute platform.
Key Specifications Explained
| Specification | What It Means | Practical Implication |
|---|---|---|
| Force range | Maximum measurable force before saturation | Must exceed peak task forces including collision; overload safety is separate |
| Resolution | Smallest detectable force change | Determines delicacy threshold; 0.1 N resolution detects contact at 0.1 N |
| Bandwidth (Hz) | Fastest signal updates per second | Control loops running at 1 kHz need sensor bandwidth >1 kHz |
| Overload rating | Maximum survivable force (not measurement range) | Must be 5–10× rated range for collision safety |
| Crosstalk (%) | Effect of one axis on another axis's reading | ATI <1%, budget sensors 3–5%; matters for precision tasks |
| Thermal drift | Signal change per °C without load | Re-zero after warm-up; compensate in long sessions |
| Weight | Sensor mass added to payload chain | 100–400 g; subtract from arm's rated payload |
Overload Protection: The Critical Safety Requirement
F/T sensors are precision instruments that can be permanently damaged by forces exceeding their rated range. During robot programming, debugging, and unexpected collisions, the arm can easily generate forces 10–50× the sensor's rated range. This is the most common cause of expensive F/T sensor failure.
Minimum overload protection requirements:
- Select a sensor with overload rating ≥10× rated force range. ATI Gamma (32 N rated, 900 N overload) meets this. Robotiq FT300-S (300 N rated, 800 N overload) is borderline — the 2.7× overload ratio is lower than ideal. For collision safety, prefer ATI.
- Software force limit: Configure your robot controller to abort motion when wrist force exceeds a threshold (e.g., 20 N for a delicate task, 50 N for robust manipulation). This is separate from the physical overload protection but catches programming errors.
- Mechanical overload protection: Some F/T sensors include mechanical slip clutches or fuses that protect the sensing element during hard collisions. ATI offers this as an optional module. For high-speed applications or collaborative robots, mechanical protection is worth the added cost.
- Gravity compensation at startup: After mounting an end-effector, the sensor reads a constant offset equal to the gripper weight × gravity vector. Run bias compensation (zero the sensor with the gripper in a known orientation) at the start of every session. Failing to do this adds a constant bias to all force readings that corrupts contact detection.
ROS2 Integration Guide
All major F/T sensors have ROS2 drivers. The integration pattern is standard:
- Driver installation: Robotiq:
apt install ros-humble-robotiq-ft-sensor. ATI:ati_force_torqueROS2 package on GitHub. Bota:rokubiminiROS2 package. All publish to/ft_sensor/wrenchasgeometry_msgs/WrenchStamped. - Bias compensation node: Run at startup with gripper in reference pose. Call the
/ft_sensor/biasservice with the gripper hanging vertically downward. This removes gravity offset. Re-run after any gripper change or at the start of each session. - Low-pass filter: Raw F/T data contains high-frequency noise from motor vibration and encoder quantization. Apply a Butterworth low-pass filter at 50 Hz for contact detection, 200 Hz for impedance control. In ROS2:
ros2_controlprovides filters, or use scipy.signal in Python. - Force torque topic to action topic: For policy training that uses F/T data as observation, publish the filtered wrench alongside joint states on the same timer callback to ensure synchronized timestamps.
- Contact event detection: Implement a simple threshold detector: when
|Fz| > contact_threshold(e.g., 1.0 N) for more than 5 consecutive samples, publish a/contact_detectedBool topic. This enables event-triggered state machines for assembly tasks.
F/T Sensor Use Cases with Specific Parameters
| Task | Key Force Requirement | Sensor Setup | Control Strategy |
|---|---|---|---|
| Peg-in-hole assembly | Detect 5 N insertion resistance, stop at 20 N | Wrist 6-axis, 0.1 N resolution | Force stops at 5 N threshold; search spiral until Fz drops |
| Surface following (wiping) | Maintain 1–3 N normal force | Wrist 6-axis, 0.1 N resolution, 200 Hz | Impedance control maintaining Fz = 2 N |
| Delicate grasp (eggs, produce) | Contact at 0.5 N, max grasp 3 N | Fingertip tactile or wrist 6-axis with 50 mN resolution | Grasp until contact, increase to target, stop |
| Screw insertion | Detect 0.1 Nm torque onset, 0.5 Nm strip limit | Wrist 6-axis with torque sensitivity | Rotate until Tz = 0.4 Nm, then stop |
| Door handle operation | Detect knob engagement at 2 N | Wrist 6-axis, 200 N range | Force-guided approach; impedance follow through rotation |
| Deformable object grasp | Grip force 0.5–5 N, slip detection | Wrist + fingertip tactile | Maintain target grip force; increase if slip detected |
Recommendation Summary
- Best value for UR arms: Robotiq FT 300-S ($1,950). Native UR Tool I/O connector, plug-and-play with UR polyscope, no additional wiring. Adequate for most manipulation tasks.
- Best accuracy for precision assembly: ATI Gamma SI-32-2.5 ($3,200). 6 mN resolution is unmatched in this price range. Required for tasks with sub-1 N force thresholds.
- Best bandwidth for high-speed control: Bota SensONE ($1,500). 2000 Hz bandwidth enables kHz-rate impedance controllers. Price-performance leader.
- Best for slip detection: GelSight Mini ($500) at fingertip. Gel-based optic sensor provides contact geometry and slip direction — far more information than a wrist sensor for grasp quality tasks.
- For new labs starting out: Buy a Robotiq FT 300-S if you have a UR arm; buy a Bota SensONE for non-UR arms. Add a GelSight only if your task specifically requires slip sensing. Do not skip F/T sensing for contact tasks — it will cost you months of debugging failed policies.
Signal Processing: Gravity Compensation and Filtering
Raw F/T sensor readings are not usable for control or policy training without processing. Two essential steps must be applied in real-time:
Gravity compensation: The sensor measures the weight of the end-effector (gripper + any held object) as a constant bias. This bias changes with arm orientation because gravity's direction relative to the sensor changes. Compensate with:
import numpy as np
def compensate_gravity(wrench_raw, R_sensor_world, mass_ee, com_ee):
"""Remove gravity bias from F/T readings.
Args:
wrench_raw: [Fx, Fy, Fz, Tx, Ty, Tz] raw sensor reading
R_sensor_world: 3x3 rotation matrix, sensor frame to world
mass_ee: end-effector mass in kg
com_ee: center of mass [x, y, z] in sensor frame
Returns:
wrench_compensated: gravity-free wrench
"""
g_world = np.array([0, 0, -9.81])
g_sensor = R_sensor_world.T @ g_world
F_gravity = mass_ee * g_sensor
T_gravity = np.cross(com_ee, F_gravity)
bias = np.concatenate([F_gravity, T_gravity])
return wrench_raw - bias
Run this compensation at sensor rate (100-2000 Hz). The rotation matrix comes from the arm's forward kinematics. Calibrate mass_ee and com_ee once by recording sensor readings at 10 different arm orientations and solving the least-squares system.
Low-pass filtering: Motor vibration and encoder noise create high-frequency content that obscures contact signals. Apply a 2nd-order Butterworth filter:
- Contact detection: Cutoff at 30-50 Hz. Preserves contact onset timing while removing vibration noise.
- Impedance control: Cutoff at 100-200 Hz. Higher bandwidth needed for stable force feedback loops.
- Data logging for policy training: Cutoff at 20-30 Hz. Policies running at 10-50 Hz do not benefit from higher-frequency force data. Aggressive filtering produces cleaner training signals.
Calibration Schedule and Drift Management
- Session start re-zero: At the beginning of every data collection session, move the arm to a known calibration pose (gripper pointing straight down) and call the sensor's bias service. This takes 10 seconds and eliminates thermal drift accumulated since the last session.
- Every 2 hours: Re-zero during a scheduled break. Sensor drift over 2 hours is typically 0.05-0.2 N depending on ambient temperature changes. For tasks with contact thresholds below 1 N, this drift matters.
- After any gripper change: Changing the gripper changes the mass and center of mass parameters. Re-run gravity calibration (10 poses, 5 minutes) and update the compensation parameters.
- Annual factory calibration: Strain gauge sensors (ATI, Robotiq) should be sent for factory recalibration annually. Cost: $300-$600. The calibration matrix that converts raw strain readings to force/torque values drifts over time due to strain gauge aging.
OpenArm 101 Compatible F/T Sensors
The OpenArm 101 uses a standard ISO 9409-1-31.5-4-M5 flange. These sensors mount directly:
- Bota SensONE ($1,500) -- recommended for OpenArm. Matching 31.5 mm bolt circle, 2000 Hz bandwidth, ROS2 driver included. Total added weight: 120 g.
- ATI Gamma ($3,200) -- highest accuracy, available with ISO 9409 adapter. Overkill for most OpenArm tasks but required for sub-0.1 N contact detection.
- Robotiq FT 300-S ($1,950) -- designed for UR arms but compatible via adapter plate. Good choice if your fleet includes both UR and OpenArm arms and you want sensor interchangeability.
For fingertip sensing on OpenArm's default parallel jaw gripper, mount a GelSight Mini ($500) on each finger pad using the included adhesive mount. This provides contact geometry for slip detection without adding a wrist sensor.
Related Guides
- Glove-Based Dexterous Teleoperation -- combining F/T sensing with glove input for dexterous tasks
- ROS2 and MoveIt2 Integration -- integrating F/T data into the ROS2 control stack
- Data Formats: HDF5, RLDS, and LeRobot -- storing F/T data alongside joint and image data
- Preventive Maintenance -- F/T sensor calibration as part of your maintenance schedule
- Curriculum Design -- contact-rich tasks that benefit from F/T observation
Work with SVRC
SVRC stocks F/T sensors and provides integration support for all major arm platforms.
- Hardware Store -- purchase ATI, Robotiq, Bota, GelSight, and Paxini sensors with integration support
- Data Collection Services -- we collect force-rich demonstration data with F/T-equipped arms for contact-sensitive tasks
- Repair and Maintenance -- F/T sensor calibration, mounting, and ROS2 driver integration services
- Contact Us -- request sensor selection guidance for your specific manipulation tasks