ELAI S.r.l.

The same force, two different torques: where do we measure the moment?

A 10 N force produces either 0 or 2 N m depending on the reference. A complete derivation and power check explain how to interpret robot force sensors.

The same force, two different torques: where do we measure the moment?

The number changes: did the load change too?

A robot holds a tool and its wrist sensor reports a force. Software expresses that reading in the machine frame and a torque appears as well. Is the measurement wrong? Not necessarily: the force may be identical while its moment changes because we calculate it about a different point. Before discussing intelligent sensors or AI-based control, we need to understand what those six numbers actually represent.

The question is precise: how can we transform force and moment together without changing the physical meaning of the load? We construct a synthetic case with 10 N, a 0.2 m offset, and a 90-degree rotation. We obtain a 2 N m moment and verify that 10 W remains 10 W. These results do not come from a physical sensor: they are reproducible educational calculations, with attached code and data.

A moment needs a point, not only a direction

Imagine a wrench tightening a bolt. A push far from the bolt has a larger turning effect than the same push near it. The relevant distance is perpendicular to the force, not just any distance: pushing along the wrench can produce zero moment even with a long handle. This analogy explains the reference point; it does not describe friction, deformation, or robot dynamics.

To calculate that effect, let r be the vector in metres from the point about which we take moments to the force application point; f is the force in newtons. The cross product combines magnitude, perpendicular lever arm, and rotation direction. Its direction follows a right-handed Cartesian frame. An undeclared change of convention can reverse a sign even when every magnitude looks correct.

n = r × f |n| = |r| |f| sin(theta)

Here n is the moment in newton metres and theta is the angle between r and f. With r = (0.2, 0, 0) m and f = (0, 10, 0) N, the vectors are perpendicular and the moment is (0, 0, 2) N m. If the force were parallel to r, the sine would be zero. This check prevents us from automatically replacing the cross product with distance times force and forgetting the geometry.

Separate axis orientation from origin position

Call the sensor frame {b} and a machine frame {s}. R converts components expressed in {b} into components expressed in {s}; p is the position of the b origin relative to the s origin, expressed in {s} in metres. We do not estimate R and p: we assume they are known. Calibration error is a subsequent problem, distinct from performing the correct transformation even when the geometry is exact.

For our example, choose a positive 90-degree rotation about z. The x axis of b therefore points along the y axis of s. A 10 N force along sensor x becomes a 10 N force along machine y. Its magnitude has not changed; its components have. Translating the origin is not added to a force as it would be added to the coordinates of a point.

R = [[0, -1, 0], [1, 0, 0], [0, 0, 1]] p = (0.2, 0, 0) m f_b = (10, 0, 0) N n_b = (0, 0, 0) N m

The moment n_b is zero because, in this constructed case, the force line of action passes through the b origin. That does not imply zero moment about every other point. To find the moment about s, first rotate any moment already present, then add the effect of the lever p on the rotated force. This second term disappears if the six numbers are incorrectly treated as two vectors that only need rotation.

f_s = R f_b n_s = R n_b + p × (R f_b)

Read the formula through our example: R f_b = (0, 10, 0) N, R n_b = 0, and p × R f_b = (0, 0, 2) N m. We have not added a physical load to the robot; we have described the same load about the s origin. To return, use the transpose of R as the inverse rotation and −R transpose times p as the inverse translation. Merely changing the sign of p without rotating it is not the general inverse transformation.

The six-number package and its convention

The ordered pair W = (n; f) is called a wrench: three moment components followed by three force components. We use this order throughout. Some interfaces use the opposite order, which must be checked before applying a matrix. The term does not introduce a new physical entity. It makes explicit that force and moment must travel together, with units, origin, axes, and a sign convention for the interaction.

The load direction also needs a definition: the force of the object on the robot has the opposite sign to the force of the robot on the object. Our experiment fixes one positive convention and keeps it. A coordinate transformation cannot repair a reversed contact convention. Nor can we add squared newtons to squared newton metres and call the result a total force: the two parts have different physical dimensions.

The decisive check: power must not depend on coordinates

We have found a plausible rule for the moment, but we can check it without trusting a drawing alone. When a load acts on a moving body, its instantaneous power cannot change because we rename the axes or move the reference point used for our vectors. This check requires us to describe motion as carefully as load. We therefore introduce the twist, another six-component vector.

Write V = (omega; v), where angular velocity omega is in radians per second and the linear part v is in metres per second. With our component order, power is n dot omega plus f dot v. Each term has units of watts; the radian is dimensionless in dimensional analysis. Unlike adding force and moment magnitudes, this sum is physically meaningful. However, v must be the linear twist component in the same frame as the wrench.

P = W^T V = n · omega + f · v

The subtle point is that the linear part of a spatial twist is not generally the velocity of the sensor origin. If that origin has position p and velocity p_dot in frame s, the spatial linear component is v_s = p_dot − omega_s × p. The body velocity field at a point x is omega_s × x + v_s. Thus v_s represents that field evaluated at the s origin, even if no robot material occupies that point.

In the body-attached frame, v_b is the velocity of the b origin expressed in b axes, so p_dot = R v_b. Substituting into the previous definition gives the twist transformation. The cross-product term does not add motion: it changes the reference point associated with the linear component. We must not compare a point velocity with a spatial twist component without this conversion.

omega_s = R omega_b v_s = R v_b + p × (R omega_b)

Now choose omega_b = (0, 0, 3) rad/s and v_b = (1, 0, 0) m/s. The physical velocity of the b origin expressed in s is R v_b = (0, 1, 0) m/s. The term p × R omega_b is (0, −0.6, 0) m/s, so v_s = (0, 0.4, 0) m/s. These velocities do not contradict each other: one belongs to the b origin; the other is the velocity-field component referenced to the s origin.

In frame b, power is 0 × 3 + 10 × 1 = 10 W. In frame s, the rotational part is 2 × 3 = 6 W and the linear part is 10 × 0.4 = 4 W: they still total 10 W. The split changes; the total does not. Rotating the zero moment without shifting its reference would give only 4 W. That is not 40% efficiency: it is an inconsistent representation.

Why forces require a dual transformation

We can now derive the general matrix rather than memorise it. Let A transform the twist from b to s. Preserving power requires W_b transpose times V_b to equal W_s transpose times A V_b for every possible motion V_b. Because the equality must hold for any twist, its coefficients must agree. This requirement determines the wrench transformation.

V_s = A V_b W_b = A^T W_s W_s = A^(-T) W_b

The exponent −T means inverse and then transpose. It is neither the transpose of A alone nor A itself. The word dual describes this relationship between the motion and load transformations. Group theory is not needed to follow the numerical check; the compact formula helps specialists compare an implementation with a declared convention.

A = Ad_T = [[R, 0], [[p]_x R, R]] A^(-T) = [[R, [p]_x R], [0, R]] [p]_x u = p × u

In the last line, [p]_x is the skew-symmetric matrix implementing the cross product with p. Each block is 3 by 3 and each zero is a zero block. In the twist, the p term contributes to the linear part; in the wrench it contributes to the moment. This different placement is why a generic point-transform function, or the twist matrix itself, cannot blindly be applied to force readings.

A comparison changing only the lever arm

To isolate the effect, repeat the calculation for four lengths L while keeping force, rotation, and body twist unchanged. These are four synthetic geometries, not four measurements of one installation. The table compares the complete power with the result of incorrectly removing the moment-translation term. Values are rounded for readability; the JSON retains floating-point results.

L (m)n_s,z (N m)v_s,y (m/s)Complete P (W)Wrong P (W)
0011010
0.110.7107
0.220.4104
0.44-0.210-2

At L = 0, both methods agree: a test using coincident origins alone would miss the defect. At L = 0.4 m, the wrong method gives −2 W while the complete transformation preserves 10 W. The negative v_s, y component does not mean the b origin moves backwards: that point still has y velocity 1 m/s. It is the field component referenced to s that has become negative.

Left: moment grows with the perpendicular lever while force stays at 10 N. Right: complete power stays at 10 W; the dashed curve shows the error from rotation without an origin shift. Synthetic calculations, without experimental uncertainty bars.
Left: moment grows with the perpendicular lever while force stays at 10 N. Right: complete power stays at 10 W; the dashed curve shows the error from rotation without an origin shift. Synthetic calculations, without experimental uncertainty bars.

What the code checks and what it cannot check

The attached program uses an integer-valued quarter-turn rotation matrix, avoiding a tiny numerical cosine being mistaken for a real force. It checks power with absolute tolerance 10⁻¹² W and reconstructs the initial force and moment using the inverse transformation. There is no random sampling and no seed is needed. Small decimal discrepancies in the JSON are floating-point rounding, not sensor noise.

A further check adds a pure moment of 1 N m along z in frame b. In frame s the total moment becomes 3 N m: 1 from the moment already present and 2 from the force lever. Power consistently becomes 13 W in both frames. A pure moment cannot be removed by choosing an origin on the force line of action; it is not interchangeable with the r × f term alone.

The power check is algebraic, not a measurement of robot electrical consumption. The chosen velocities test the transformation; they are not suggested machine commands. Even for a stationary robot, software can test consistency using a chosen virtual twist. A zero-velocity test alone would give zero for any wrench and miss the error. General matrices require multiple independent directions, not just this tutorial’s planar case.

From sensor to control: what still needs evidence

If a controller or AI model receives these six components, it also needs their convention. A model may learn data correlations without correcting a wrong reference point. To relate load to joints, a Jacobian J mapping joint velocities q_dot to the twist must use the same frame and component order as the wrench. Power equality then gives the joint-torque relation, with a sign consistent with the declared load convention.

V = J q_dot W^T V = W^T J q_dot = (J^T W)^T q_dot tau = J^T W

This relation alone supplies neither complete dynamics nor a safe control law. We have not modelled tool mass, acceleration, gravity, friction, saturation, sampling, delay, or noise. We have not measured a sensor or compared robots. The known ideal rotation isolates a representation problem; hardware would require traceable calibration, a measurement protocol, and system-specific checks. A correct transformation is necessary, but does not certify a collaborative cell as safe.

For EL-AI, industrial and collaborative robotics is a future direction stated by the user. This article announces no robot product, proprietary sensor, or company installation. Its contribution is editorial: making a mathematical link between measurement, software, and control verifiable, without presenting an assistant-executed example as a company experimental result.

Answering the original question

The same force can have different moments because a moment includes the point about which it is calculated. In our worked example, 10 N remains 10 N, but moving from an origin on the line of action to one 0.2 m away introduces a 2 N m moment. The complete transformation preserves 10 W because it also changes the motion representation consistently. A different number does not establish a different load: first compare origin, axes, units, and conventions.

Sources and reproducibility

Kevin M. Lynch and Frank C. Park. Modern Robotics, section 3.3.1: Homogeneous Transformation Matrices. Foundational teaching transcript, accessed 18 October 2026..

Kevin M. Lynch and Frank C. Park. Modern Robotics, section 3.4: Wrenches. Full technical transcript, including the power-invariance argument, accessed 18 October 2026..

These are foundational teaching sources, not a survey of the 2026 state of the art. The relevant technical transcripts were read in full. The vectors, four-lever comparison, and pure-moment case are this article’s independent calculations, not a reproduction of a source benchmark. In the snippet below, cross computes the force moment, while the two dot products reconstruct the power components; the assertion prevents confusing 4 W with the total.

def cross(a,b):
    return [a[1]*b[2]-a[2]*b[1],
            a[2]*b[0]-a[0]*b[2],
            a[0]*b[1]-a[1]*b[0]]
def dot(a,b): return sum(x*y for x,y in zip(a,b))
f_s=[0,10,0]; p=[0.2,0,0]; omega_s=[0,0,3]
n_s=cross(p,f_s)
v_s=[0,1-3*p[0],0]
assert abs(dot(n_s,omega_s)+dot(f_s,v_s)-10)<1e-12
print(n_s, dot(f_s,v_s), dot(n_s,omega_s))

Code, data, and instructions · JSON. Educational calculations executed with Python 3.14.0; figures with Matplotlib 3.11.2. AI-assisted analysis, without claiming peer review or human review. Original illustrative ImageGen cover: it does not document EL-AI people, premises, or installations. Sources accessed 18 October 2026.