点积和叉积#
在机器人学中,点积与叉积是描述刚体姿态、运动及力交互的数学基石。前者量化向量的“线性关联度”,解决“方向对齐”“有效分量”等问题;后者生成“垂直于原向量的新向量”,定义“旋转轴”“力矩方向”等关键物理量。二者共同支撑机器人正逆运动学、动力学建模与控制算法的实现。
1 点积(Dot Product):机器人中的“线性测量与关联工具”#
点积又称数量积,计算结果为标量,核心是通过向量的代数运算,转化为几何层面的“夹角关系”与“投影分量”,在机器人方向判断、能量计算中高频应用。
1.1 数学定义与核心性质#
对于三维向量 \( \vec{a} = (a_1,a_2,a_3) \) 和 \( \vec{b} = (b_1,b_2,b_3) \),点积有两种核心表达形式,分别对应代数计算与几何意义:
代数形式:\( \vec{a} \cdot \vec{b} = a_1b_1 + a_2b_2 + a_3b_3 \)
直接通过向量坐标运算,无需考虑几何关系,是机器人编程中最常用的形式。几何形式:\( \vec{a} \cdot \vec{b} = |\vec{a}||\vec{b}|\cos\theta \)
其中 \( \theta \) 为两向量的夹角(\( 0 \leq \theta \leq 180^\circ \)),揭示点积与“向量模长”“夹角余弦值”的关联,是物理意义的核心来源。
关键性质:
若 \( \vec{a} \cdot \vec{b} = 0 \),则 \( \vec{a} \perp \vec{b} \)(夹角90°),可用于判断向量垂直关系。
若 \( \vec{a} \cdot \vec{b} > 0 \),则 \( \theta < 90° \)(向量同向趋势);若 \( \vec{a} \cdot \vec{b} < 0 \),则 \( \theta > 90° \)(向量反向趋势)。
简单类比:推箱子时,推力(向量 a)与箱子移动方向(向量 b)的夹角越小,点积越大,实际 “有用的力” 就越多。
1.2 核心应用场景#
1.2.1 方向对齐与相似度判断#
点积的几何形式可延伸为“余弦相似度”(\( \cos\theta = \frac{\vec{a} \cdot \vec{b}}{|\vec{a}||\vec{b}|} \)),为机器人提供量化的“方向匹配度”指标:
精准抓取对齐:将工具坐标系z轴单位向量 \( \hat{z}_{tool} \) 与物体表面法向量单位向量 \( \hat{n}_{object} \) 做点积,得到匹配分数 \( score = \hat{z}_{tool} \cdot \hat{n}_{object} \)。当 \( score \approx 1 \) 时,工具完全正对物体;\( score \approx 0 \) 时,工具与物体垂直;\( score \approx -1 \) 时,工具方向完全反向,可直接作为抓取姿态的评分标准。
示教轨迹评估:在示教学习中,比较专家演示轨迹与机器人学习轨迹的方向向量序列,计算平均余弦相似度,评估轨迹的一致性(相似度越高,学习效果越好)。
1.2.2 关节限位与有效分量计算#
关节限位检测:以2自由度机械臂关节1(J1)为例,J1正方向向量为 \( \hat{u}_{J1+} = (1,0,0) \)(逆时针旋转),负限位方向向量为 \( \hat{u}_{J1-} = (0,-1,0) \)(顺时针旋转至-90°)。若J1实时运动向量与 \( \hat{u}_{J1-} \) 点积为正,说明运动朝向负限位,需结合当前位置向量与 \( \hat{u}_{J1-} \) 的点积(计算夹角),判断是否减速或停止。
有效速度/力提取:机械臂末端斜向运动时,通过“运动向量”与“目标方向单位向量”的点积,可直接得到沿目标方向的有效速度分量。例如,抓取物体时需沿x轴水平靠近,点积结果即为x轴方向的有效速度,确保满足抓取速度要求。
1.2.3 动力学中的功与功率计算#
在机器人能耗分析与电机选型中,点积是计算“功”与“功率”的核心工具:
物理中,功 \( W = \vec{F} \cdot \vec{d} \)(力向量与位移向量的点积);
机器人关节电机的实时功率 \( P = \vec{\tau} \cdot \vec{\omega} \)(力矩向量与关节角速度向量的点积)。
功率值直接反映电机的“做功效率”,可用于优化能耗(如降低非必要动作的功率)、防止电机过载(功率超限时触发保护)。
2 叉积(Cross Product):机器人中的“旋转与垂直方向工具”#
叉积又称向量积,计算结果为向量,核心是生成“同时垂直于两个原向量的新向量”,其方向(右手定则)与大小(平行四边形面积)直接决定机器人的旋转轴、角速度及力矩方向,是旋转运动建模的核心。
2.1 数学定义与核心性质#
对于三维向量 \( \vec{a} = (a_1,a_2,a_3) \) 和 \( \vec{b} = (b_1,b_2,b_3) \),叉积的表达形式与物理意义紧密绑定:
行列式形式(编程常用):
\( \vec{a} \times \vec{b} = \begin{vmatrix} \vec{i} & \vec{j} & \vec{k} \\ a_1 & a_2 & a_3 \\ b_1 & b_2 & b_3 \end{vmatrix} = (a_2b_3 - a_3b_2)\vec{i} - (a_1b_3 - a_3b_1)\vec{j} + (a_1b_2 - a_2b_1)\vec{k} \)几何意义:
大小:\( |\vec{a} \times \vec{b}| = |\vec{a}||\vec{b}|\sin\theta \)(等于以 \( \vec{a} \)、\( \vec{b} \) 为邻边的平行四边形面积);
方向:遵循右手定则——四指从 \( \vec{a} \) 绕向 \( \vec{b} \)(小于180°的角),拇指指向即为叉积方向,且该方向同时垂直于 \( \vec{a} \) 和 \( \vec{b} \)。
关键性质:
反交换律:\( \vec{a} \times \vec{b} = -\vec{b} \times \vec{a} \)(交换向量顺序,方向反向);
若 \( \vec{a} \times \vec{b} = 0 \),则 \( \vec{a} \parallel \vec{b} \)(夹角0°或180°),可用于判断向量平行关系。
简单类比:用扳手拧螺丝时,手的作用力(向量 a)和扳手长度(向量 b)的夹角越接近 90°,sinθ 越大,叉积的模长(力矩)越大,螺丝越容易拧动。
2.2 核心应用场景#
2.2.1 机器人坐标系构建#
机器人每个关节的坐标系(如DH参数建模中的{1}、{2}...坐标系)需满足正交性,叉积是生成第三轴的核心工具:
以2自由度机械臂关节1坐标系{1}为例:已知{1}的x轴(\( \hat{x}_1 = (1,0,0) \),沿连杆1方向)和z轴(\( \hat{z}_1 = (0,0,1) \),旋转轴方向),通过叉积 \( \hat{y}_1 = \hat{z}_1 \times \hat{x}_1 \) 生成y轴(计算得 \( \hat{y}_1 = (0,1,0) \))。
注:右手坐标系中,标准正交关系为 \( \hat{x} \times \hat{y} = \hat{z} \),因此当已知 \( \hat{x} \) 和 \( \hat{z} \) 时,需通过 \( \hat{y} = \hat{z} \times \hat{x} \) 确保坐标系的右手定则一致性,顺序错误会导致方向颠倒。
2.2.2 角速度向量定义与合成#
机械臂末端的总角速度是各关节角速度的向量和,而每个关节的角速度向量需通过“标量与向量的乘法”定义(方向由旋转轴决定):
单个关节角速度向量:若关节i的旋转速率为 \( \omega_i \)(标量,单位rad/s),旋转轴单位向量为 \( \hat{z}_i \),则该关节的角速度向量为 \( \vec{\omega}_i = \omega_i \cdot \hat{z}_i \)(方向沿 \( \hat{z}_i \),大小为 \( \omega_i \))。
注:此处“\( \cdot \)”表示标量与向量的乘法,非点积,仅用于将旋转速率与方向结合。末端总角速度合成:以2自由度机械臂为例,J1角速度向量 \( \vec{\omega}_1 = 2 \cdot (0,0,1) = (0,0,2)\ \text{rad/s} \),J2角速度向量 \( \vec{\omega}_2 = 3 \cdot (0,0,1) = (0,0,3)\ \text{rad/s} \),末端总角速度 \( \vec{\omega}_{\text{end}} = \vec{\omega}_1 + \vec{\omega}_2 = (0,0,5)\ \text{rad/s} \)(因旋转轴平行,直接叠加大小)。
若旋转轴不平行(如J1绕z轴、J2绕x轴),需先将J2的旋转轴向量转换到基坐标系,再计算角速度向量并叠加,确保合成结果符合实际运动。
2.2.3 力矩计算与雅可比矩阵构建#
叉积是机器人动力学中“力矩”计算的核心,且与雅可比矩阵(关节速度与末端速度的映射)直接关联:
外力矩计算:末端受外力 \( \vec{F} \) 时,外力对关节i的力矩向量为 \( \vec{M}_i = \vec{r}_i \times \vec{F} \)(\( \vec{r}_i \) 是关节i到力作用点的位置向量)。而关节i所需输出的标量力矩(沿旋转轴的分量)为 \( \tau_i = \hat{z}_i \cdot (\vec{r}_i \times \vec{F}) \),该值直接决定电机输出,是力控算法与动力学计算的核心输入。
雅可比矩阵中的叉积:雅可比矩阵 \( \mathbf{J} \) 的每一列描述单个关节对末端速度的贡献,其中“末端线速度贡献列”为 \( \hat{z}_i \times (\vec{p}_{\text{end}} - \vec{p}_i) \)(\( \vec{p}_{\text{end}} \) 为末端位置,\( \vec{p}_i \) 为关节i位置)。雅可比矩阵是逆运动学(由末端速度求关节速度)、力控(由末端力求关节力矩)的核心,叉积则是其构建的基础。
3 点积与叉积的进阶延伸:从理论到工程实践#
3.1 统一数学框架:外代数与几何积#
在更高级的几何代数(Geometric Algebra)框架下,点积与叉积是“几何积”的不同组成部分,实现了二者的统一:
几何积定义:\( \vec{a}\vec{b} = \vec{a} \cdot \vec{b} + \vec{a} \wedge \vec{b} \)
其中 \( \vec{a} \cdot \vec{b} \) 是对称的标量部分(内积/点积),\( \vec{a} \wedge \vec{b} \) 是反对称的“楔积”(表示有向面积,二维子空间)。机器人意义:三维空间中,楔积与叉积通过“霍奇对偶”关联(\( \vec{a} \times \vec{b} = (\vec{a} \wedge \vec{b})^* \)),即霍奇对偶将二维子空间(2-向量)映射为垂直于该空间的向量(1-向量)。这一特性仅在三维空间成立,是现代机器人旋量理论的基础——将线速度与角速度统一为“运动旋量”,力与力矩统一为“力旋量”,简化复杂运动的描述与计算。
3.2 工程陷阱:坐标系方向与数值稳定性#
3.2.1 坐标系方向的影响#
不同工具/系统的坐标系约定可能不同,直接影响叉积方向,需提前统一:
坐标系类型 |
z轴方向(x×y结果) |
叉积方向规则 |
典型应用场景 |
|---|---|---|---|
右手系 |
+z(向前) |
右手定则 |
ROS、MATLAB、SolidWorks |
左手系 |
+z(向后) |
左手定则 |
Unity、DirectX |
工程警告:若机器人控制系统(右手系)与视觉系统(左手系)对接时未统一坐标系,叉积计算的旋转轴方向会错误,导致姿态估计偏差、轨迹抖动。解决方法是通过旋转矩阵(如 \( R_z(180^\circ) \))翻转z轴,统一坐标系。
3.2.2 数值稳定性与编程建议#
实际编程中,点积与叉积的计算需规避数值问题,确保结果可靠:
避免除零错误:计算夹角 \( \theta = \arccos\left(\frac{\vec{a} \cdot \vec{b}}{|\vec{a}||\vec{b}|}\right) \) 前,需检查 \( |\vec{a}| \) 和 \( |\vec{b}| \) 是否为零,防止除零;同时用
np.clip修正浮点误差导致的 \( \cos\theta \) 越界(限制在[-1,1])。叉积的斜对称矩阵形式:在雅可比矩阵推导、角加速度计算中,常将叉积转化为斜对称矩阵(便于符号运算)。对于向量 \( \vec{\omega} = [\omega_x, \omega_y, \omega_z]^T \),其斜对称矩阵为:
\( [\vec{\omega}]_\times = \begin{bmatrix}0 & -\omega_z & \omega_y \\ \omega_z & 0 & -\omega_x \\ -\omega_y & \omega_x & 0\end{bmatrix} \)
满足 \( [\vec{\omega}]_\times \vec{v} = \vec{\omega} \times \vec{v} \),可直接用于矩阵乘法运算。
3.3 综合工程案例:六自由度机械臂抓取#
以UR5六轴机械臂抓取杯子为例,点积与叉积协同支撑整个流程:
步骤 |
数学操作(点积/叉积) |
物理含义与目标 |
|---|---|---|
1. 构建工具坐标系 |
\( \hat{y} = \hat{z}_{tool} \times \hat{x}_{temp} \);\( \hat{x} = \hat{y} \times \hat{z}_{tool} \) |
基于杯子法向量 \( \hat{z}_{tool} \),用两次叉积生成正交的x、y轴,构建完整工具坐标系(确保右手系) |
2. 检查抓取方向 |
\( \hat{z}_{\text{current}} \cdot \hat{z}_{\text{target}} \approx 1 \) |
通过点积判断当前工具z轴与目标方向的对齐度,确保正对杯子 |
3. 计算关节力矩 |
\( \tau_i = \hat{z}_i \cdot (\vec{r}_i \times \vec{F}) \) |
计算外力 \( \vec{F} \) 在关节轴 \( \hat{z}_i \) 上的标量力矩,用于电机力矩控制或静力平衡 |
3.4 临时的x轴参考向量说明#
\( \hat{x}_{\text{temp}} \) 是一个临时的x轴参考向量,用于辅助通过叉积生成正交的坐标系轴系,其核心作用是提供一个初始方向基准,以便结合已知的z轴(工具方向)生成符合右手定则的y轴和最终x轴。
3.4.1 具体含义与作用#
在机械臂抓取场景中,假设已通过视觉系统确定工具坐标系的z轴(\( \hat{z}_{\text{tool}} \),通常为抓取方向,与物体表面法向量一致),但x轴和y轴的方向尚未确定(因工具在垂直于z轴的平面内可任意旋转,即“姿态冗余”)。此时:
先引入一个临时向量 \( \hat{x}_{\text{temp}} \)(例如取基坐标系的x轴 \( (1,0,0) \) 或世界坐标系的某个固定方向),作为x轴的初始参考;
利用叉积 \( \hat{y} = \hat{z}_{\text{tool}} \times \hat{x}_{\text{temp}} \) 生成y轴,确保y轴同时垂直于z轴和临时x轴;
再通过叉积 \( \hat{x} = \hat{y} \times \hat{z}_{\text{tool}} \) 生成最终的x轴,确保x轴与y轴、z轴均正交,且整个坐标系满足右手定则。
3.4.2 为什么需要临时向量?#
坐标系的三个轴必须满足正交性(两两垂直)和右手定则,但仅已知z轴时,x轴和y轴的方向有无数种可能(在垂直于z轴的平面内可旋转任意角度);
\( \hat{x}_{\text{temp}} \) 的作用是“打破冗余”,提供一个初始方向来固定坐标系的姿态(例如让工具的x轴尽量接近基坐标系的x轴,避免姿态无意义的旋转);
临时向量的选择不唯一(可根据任务需求设定,如沿世界坐标系x轴、或沿机器人基坐标系x轴),但最终生成的坐标系一定满足正交性。
3.4.3 举例说明#
在六自由度机械臂抓取杯子的案例中:
已知工具z轴 \( \hat{z}_{\text{tool}} = (0,0,1) \)(垂直于桌面向上,与杯子法向量一致);
取临时x轴 \( \hat{x}_{\text{temp}} = (1,0,0) \)(沿基坐标系x轴向前);
计算y轴:\( \hat{y} = \hat{z}_{\text{tool}} \times \hat{x}_{\text{temp}} = (0,0,1) \times (1,0,0) = (0,1,0) \);
计算最终x轴:\( \hat{x} = \hat{y} \times \hat{z}_{\text{tool}} = (0,1,0) \times (0,0,1) = (1,0,0) \);
结果:生成正交坐标系 \( \{\hat{x}=(1,0,0), \hat{y}=(0,1,0), \hat{z}=(0,0,1)\} \),与基坐标系一致,符合直观姿态。
若临时x轴选择不同(如 \( \hat{x}_{\text{temp}} = (0,1,0) \)),最终x轴和y轴的方向会相应改变,但仍保持正交性,这体现了临时向量对姿态的“锚定”作用。
4 主要区别#
维度 |
点积(\( \vec{a} \cdot \vec{b} \)) |
叉积(\( \vec{a} \times \vec{b} \)) |
|---|---|---|
结果类型 |
标量(无方向,仅反映大小/关联度) |
向量(有方向,反映旋转/垂直方向) |
核心作用 |
计算投影、判断平行/垂直、量化相似度 |
生成垂直向量、定义旋转轴、计算力矩/角速度 |
关键应用场景 |
关节限位、有效速度提取、功率计算 |
坐标系建模、角速度合成、雅可比矩阵构建 |
数学关联 |
几何积的标量部分(内积) |
几何积的向量部分(楔积对偶,三维特有) |
点积与叉积是机器人在三维空间中“感知”与“行动”的基本语言:
点积回答“How much?”——量化方向的匹配度、有效分量的大小,是“感知判断”的工具;
叉积回答“Which way?”——定义旋转的方向、垂直的维度,是“行动控制”的工具。