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
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.