Chapter 12: Force Mode

About This Chapter

Normal robot control controls:

Position

Force Mode, on the other hand, controls:

Force

For example, it can be used to:

  • Push with a constant load.

  • Press a component against another component.

  • Slide along a surface.

  • Produce spring-like motion.


12.1 Position Control and Force Control

Normal moveJ and moveL commands use:

Position control

For example, the robot attempts to move to:

100 mm

Even if an obstacle is encountered on the way, it attempts to reach the target position as far as possible.


Force Mode continues to push with:

10 N

The position is not guaranteed. Instead, the force is maintained at a constant value.


12.2 Applications of Force Mode

Typical examples:

  • Connector insertion

  • Component assembly

  • Polishing

  • Deburring

  • Button pressing

  • Spring measurement

  • Load testing


12.3 Basic Sequence

Force Mode follows this sequence:

Start

↓

Force Mode

↓

Control at regular intervals

↓

End Force Mode

Unlike moveJ, it is not a command that is sent only once.


12.4 Basic API

Example:

rtde_c.forceMode(
    task_frame,
    selection_vector,
    wrench,
    force_type,
    limits,
)

While Force Mode is active, the controller performs force control internally.


12.5 task_frame

This specifies the coordinate system in which force control is performed.

For example:

Base coordinates

Tool coordinates

Feature coordinates

In many cases, the following is used:

TCP coordinates

12.6 selection_vector

This specifies which degrees of freedom are subject to force control.

[
1,
1,
1,
0,
0,
0
]

In this example, only the XYZ directions are force-controlled. The rotational directions remain under position control.


For example:

[
0,
0,
1,
0,
0,
0
]

This applies force only along the Z direction.


12.7 wrench

The target force and torque are specified as:

[
Fx,
Fy,
Fz,
Mx,
My,
Mz
]

Units:

N

Nm

For example:

Fz=10 N

This applies a downward force of 10 N.


12.8 force_type

This specifies the controller’s control mode.

Normally, the standard setting is sufficient. It is rarely changed except for special applications.


12.9 limits

This specifies the allowable displacement.

For example, if the robot has pushed as far as:

10 mm

without reaching:

10 N

it will not move any farther. This also serves as a safety feature.


12.10 Operation During Force Mode

The controller performs the following control cycle internally:

Current force

↓

Difference from target force

↓

PID

↓

Joint correction

↓

Motor

The user does not need to calculate the force on every cycle.


12.11 Reading the Force

API used together with Force Mode:

rtde_r.getActualTCPForce()

Return values:

Fx

Fy

Fz

Mx

My

Mz

These values can be used to check the current force and torque.


12.12 Stopping Force Mode

Force Mode is terminated using:

forceModeStop()

Afterward, normal motion commands such as moveJ and moveL can be used again.


12.13 Common Applications

Connector Insertion

moveJ

↓

moveL

↓

ForceMode

↓

10 N

↓

Insertion

↓

Stop

Button Pressing

moveL

↓

ForceMode

↓

5 N

↓

Hold for 0.5 seconds

↓

Stop

Surface Following

ForceMode

↓

Constant force

↓

Move in the XY directions

This is used in applications such as polishing.


12.14 Precautions

Force Mode may not produce the expected force unless the following are configured correctly:

  • TCP settings

  • Payload settings

Payload calibration is important when using an actual robot.


12.15 Difference from moveJ

moveJ:

Position

↓

Stop

Force Mode:

Force

↓

Maintain a constant value

Their purposes are completely different.


12.16 Design in ur_ctrl.py

For a high-level API, it is convenient to separate starting and stopping:

start_force_mode()

stop_force_mode()

Combining these with:

get_tcp_force()

also makes force monitoring easy to implement.


Summary

Force Mode controls force rather than position.

Its purpose differs from that of ordinary motion APIs. It is used for:

  • Assembly

  • Pressing operations

  • Polishing

  • Contact tasks

When using Force Mode, it is important to configure and use the following appropriately:

  • TCP settings

  • Payload settings

  • ForceModeStop()

The next chapter describes Freedrive Mode.