数字变了,载荷也变了吗?
机器人握着工具,腕部传感器报告一个力。软件把读数转换到机器的参考系后,又出现了力矩。这一定是测量错误吗?未必:力可以完全相同,而力矩因参考点不同而改变。在讨论智能传感器或基于 AI 的控制之前,需要先理解这六个数字究竟代表什么。
本文的问题很明确:怎样同时转换力与力矩,而不改变载荷的物理含义?我们构造一个教学例子:10 N 的力、0.2 m 的偏移和 90 度旋转。计算得到 2 N m 的力矩,并检验原来的 10 W 功率仍然是 10 W。这些结果并非来自真实传感器,而是可复现的计算,代码与数据随文提供。
力矩不仅需要方向,还需要参考点
想象用扳手拧螺栓。同样的推力,作用位置离螺栓越远,转动效果通常越大。但关键是垂直于力的力臂,并非任意距离:沿着扳手方向推,即使扳手很长,力矩也可能为零。这个类比用于理解参考点,不用于描述摩擦、变形或机器人的动力学。
为计算这个效果,令 r 为从取矩参考点指向力作用点的向量,单位为米;f 为力,单位为牛顿。叉积把大小、垂直力臂和转动方向结合起来。方向采用右手笛卡尔坐标系;如果暗中改变约定,即使所有大小看起来都正确,符号仍可能相反。
这里 n 是力矩,单位为牛顿米;theta 是 r 与 f 的夹角。若 r = (0.2, 0, 0) m,f = (0, 10, 0) N,两者垂直,力矩为 (0, 0, 2) N m。若力与 r 平行,正弦为零。这个检查提醒我们:不能忘记几何关系,把叉积一概替换成距离乘以力。
把坐标轴方向与原点位置分开
把传感器坐标系称为 {b},机器坐标系称为 {s}。R 把 {b} 中的分量转换为 {s} 中的分量;p 是 b 原点相对 s 原点的位置,以 {s} 坐标表示,单位为米。这里不估计 R 和 p,而是假设它们已知。标定误差是后续问题;即使几何关系完全准确,表示变换本身仍必须正确。
在例子中,选取绕 z 轴正向旋转 90 度,因此 b 的 x 轴沿着 s 的 y 轴。传感器 x 方向的 10 N 力,变成机器 y 方向的 10 N 力。力的大小没有改变,只是分量改变了。不能像变换点坐标那样,把原点的平移向量直接加到力上。
构造的情况中,力的作用线经过 b 原点,因此 n_b 为零。但这不表示相对所有其他点的力矩都为零。要计算 s 中的力矩,应先旋转已有力矩,再加上力臂 p 对旋转后力的作用。如果错误地把六个数字当作只需分别旋转的两个向量,第二项就会丢失。
代入本例:R f_b = (0, 10, 0) N,R n_b = 0,p × R f_b = (0, 0, 2) N m。我们没有给机器人增加实际载荷,只是把同一载荷改为相对 s 原点表示。逆变换使用 R 的转置作为逆旋转,以负的 R 转置乘 p 作为逆平移。只改变 p 的符号而不旋转它,并不是一般情况下正确的逆变换。
六个数字及其排列约定
有序向量对 W = (n; f) 称为 wrench,即先放三个力矩分量,再放三个力分量。全文采用这一顺序;有些接口采用相反顺序,使用矩阵之前必须确认。这个术语没有引入新的物理实体,而是强调力与力矩必须一起传递,并附带单位、原点、坐标轴和相互作用的符号约定。
载荷的方向也必须说明:物体对机器人的力,与机器人对物体的力符号相反。实验中固定一种正向约定并始终保持。坐标变换不能修复反向的接触约定。另外,不能把牛顿的平方与牛顿米的平方相加,再把结果称为总力:这两部分具有不同的物理量纲。
决定性的检验:功率不能依赖坐标表示
力矩变换看起来合理,但还可以用不依赖图形的办法检验。载荷作用于运动刚体时,其瞬时功率不可能仅仅因为重新命名坐标轴或改变向量的参考点就发生变化。为完成检验,必须像描述载荷一样仔细地描述运动。因此引入另一个六维向量:twist,即刚体速度的组合表示。
记 V = (omega; v),其中角速度 omega 的单位是弧度每秒,线性部分 v 的单位是米每秒。按所选排列,功率等于 n 与 omega 的点积,加上 f 与 v 的点积。两项的单位都是瓦特;在量纲分析中弧度无量纲。这种求和具有物理意义,而力与力矩大小直接相加没有。但 v 必须是与 wrench 相同参考系中的 twist 线性部分。
关键细节是:空间 twist 的线性部分通常不等于传感器原点的速度。若该原点在 s 中的位置为 p,速度为 p_dot,则空间线性部分为 v_s = p_dot − omega_s × p。刚体在点 x 的速度场为 omega_s × x + v_s。因此 v_s 表示这个速度场在 s 原点的值,即使该位置并没有机器人实体材料。
在随体坐标系中,v_b 是 b 原点的速度,用 b 的坐标轴表示,因此 p_dot = R v_b。代入前面的定义就得到 twist 的变换。叉积项没有增加额外运动,而是在修正线性部分对应的参考点。没有这一步转换,就不能直接把某点的速度与空间 twist 的分量比较。
现在取 omega_b = (0, 0, 3) rad/s,v_b = (1, 0, 0) m/s。b 原点的实际速度在 s 中为 R v_b = (0, 1, 0) m/s。叉积 p × R omega_b 为 (0, −0.6, 0) m/s,因此 v_s = (0, 0.4, 0) m/s。两者没有矛盾:前者是 b 原点的速度,后者是相对 s 原点表示的速度场线性分量。
在 b 中,功率为 0 × 3 + 10 × 1 = 10 W。在 s 中,转动部分为 2 × 3 = 6 W,线性部分为 10 × 0.4 = 4 W,总计仍为 10 W。两部分的分配改变,但总量不变。若只旋转零力矩却不改变其参考点,结果就只剩 4 W。这不是效率降到了 40%,而是表示不一致。
为什么力需要对偶变换
现在可以推导一般矩阵,而不必死记。令 A 把 twist 从 b 转为 s。要保持功率,就要求对所有可能的运动 V_b,都有 W_b 的转置乘 V_b 等于 W_s 的转置乘 A V_b。由于等式必须对任意 twist 成立,乘在它前面的系数必须一致。这个条件决定了 wrench 的变换。
指数 −T 表示先求逆再转置,不是仅把 A 转置,也不是 A 本身。“对偶”描述的正是运动变换与载荷变换之间的这种关系。理解数值检验不需要先学习群论;紧凑公式则方便专业读者对照明确的约定检查实现。
最后一行的 [p]_x 是实现“与 p 做叉积”的反对称矩阵。每个块都是 3 乘 3 矩阵,零表示零矩阵块。在 twist 中,p 相关项进入线性部分;在 wrench 中,它进入力矩部分。两者的位置不同,因此不能不加区分地用点坐标变换函数,或直接用 twist 的矩阵来处理力读数。
只改变力臂的比较
为单独观察力臂的作用,使用四个长度 L 重复计算,保持力、旋转和随体 twist 不变。这是四种合成几何情况,不是对同一实际装置的四次测量。表格比较完整计算得到的功率,与错误删除力矩平移项后的功率。表中数值经过舍入以便阅读,JSON 保留浮点计算结果。
| L(m) | n_s,z(N m) | v_s,y(m/s) | 完整 P(W) | 错误 P(W) |
|---|---|---|---|---|
| 0 | 0 | 1 | 10 | 10 |
| 0.1 | 1 | 0.7 | 10 | 7 |
| 0.2 | 2 | 0.4 | 10 | 4 |
| 0.4 | 4 | -0.2 | 10 | -2 |
当 L = 0 时,两种方法结果相同:只测试原点重合的情况,无法发现缺陷。L = 0.4 m 时,错误方法得到 −2 W,而完整变换仍保持 10 W。v_s, y 为负不代表 b 原点倒着运动;该点在 y 方向仍以 1 m/s 运动。变为负数的是相对 s 原点表示的速度场分量。

代码检验了什么,又不能检验什么
附件程序用整数元素构成四分之一圈的旋转矩阵,避免把数值计算中极小的余弦值误认为真实力。程序以 10⁻¹² W 的绝对容差检查功率,并通过逆变换重建初始的力与力矩。不使用随机抽样,因此不需要随机种子。JSON 中细小的小数差异来自浮点舍入,不是传感器噪声。
另一个检查在 b 中沿 z 轴增加 1 N m 的纯力矩。此时 s 中的总力矩变为 3 N m:其中 1 来自原有力矩,2 来自力的力臂。两个参考系的功率都一致地变为 13 W。把原点选在力的作用线上并不能消除纯力矩;纯力矩不能简单地等同于 r × f 一项。
这里的功率检验是代数检验,不是在测量机器人的电功耗。所选速度用于检查变换,不是建议机器执行的指令。即使机器人静止,软件也可以选取虚拟 twist 来检查一致性。若只测试零速度,任意 wrench 都会给出零功率,因而无法发现错误。对于一般矩阵,需要测试多个独立方向,不能仅依赖本教程的平面例子。
从传感器到控制:还需要哪些证据
如果控制器或 AI 模型接收这六个分量,也必须知道其约定。模型可能学到数据中的相关性,却不会因此自动修正错误的参考点。要把载荷关联到关节,雅可比矩阵 J 若将关节速度 q_dot 映射为 twist,就必须与 wrench 使用同一参考系和分量顺序。此时功率相等可导出关节力矩关系,符号也要与所声明的载荷约定一致。
这一关系本身既不是完整动力学,也不是安全控制律。我们没有建模工具质量、加速度、重力、摩擦、饱和、采样、延迟或噪声,没有测量传感器,也没有比较真实机器人。已知的理想旋转用于隔离表示问题;实际硬件还需要可追溯标定、测量协议和系统特定检查。正确变换是必要条件,但不构成协作机器人工作单元的安全认证。
对 EL-AI 而言,工业与协作机器人是用户明确提出的未来探索方向。本文没有宣布机器人产品、自有传感器或企业实际部署。这里的贡献是编辑性分析:让连接测量、软件与控制的数学步骤可以核查,而不是把助手执行的例子包装成企业实验成果。
回答最初的问题
同一个力可以对应不同力矩,因为力矩包含了取矩参考点的信息。在完整例子中,10 N 仍是 10 N,但从力作用线上的原点改为相距 0.2 m 的原点,会出现 2 N m 的力矩。完整变换同时一致地转换运动表示,所以功率仍是 10 W。数字不同并不能证明载荷不同:首先应比较原点、坐标轴、单位与约定。
来源与可复现性
这些是基础教学来源,不是对 2026 年前沿研究的综述;相关技术文字稿已完整阅读。本文的向量、四种力臂比较及纯力矩例子属于独立计算,不是复现来源中的性能基准。下面的代码中,cross 计算力产生的力矩,两个点积重建功率的两部分;断言用于防止把 4 W 错当成总功率。
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))
代码、数据与说明 · JSON. 教学计算使用 Python 3.14.0,图使用 Matplotlib 3.11.2。分析由 AI 辅助,不声称经过同行评审或人工审核。原创 ImageGen 封面仅作示意,不记录 EL-AI 人员、场所或实际安装。来源查阅于 2026 年 10 月 18 日。

