2. 运动学基础(上):空间坐标系与变换、Delta机器人结构参数、正运动学推导

各位同学,欢迎来到运动学基础部分。说实话,很多搞机器人的朋友一听到「运动学」三个字就头大,觉得全是公式推导。但我想说,这部分恰恰是Delta机器人控制中最「实在」的内容。你想想看,如果连机器人手爪在哪儿都不知道,你怎么让它去抓东西?

我个人习惯把运动学比作「机器人的眼睛」。没有它,你的控制器就是个瞎子。今天我们先讲上半部分,把坐标系、结构参数和正运动学这几个硬骨头啃下来。

2.1 空间坐标系与变换:给机器人一个「世界观」

Delta机器人是个空间机构,它的动平台在三维空间里运动。所以,我们首先得定义清楚「空间」长什么样。

2.1.1 坐标系定义

我一般会建两个坐标系:

  • 基坐标系 {B}:固定在静平台上,原点在静平台中心,Z轴竖直向上。
  • 动坐标系 {P}:固定在动平台上,原点在动平台中心,姿态随动平台变化。

嗯,这里要注意:Delta机器人的动平台在运动中始终保持水平(只平移,不旋转)。所以{P}的姿态相对于{B}是恒定的。这个特性大大简化了我们的计算。

核心要点:Delta机器人的运动是纯平移运动。动平台只有x、y、z三个自由度,没有旋转自由度。

2.1.2 坐标变换

说白了,正运动学就是求:已知三个主动臂的角度,求动平台中心在{B}下的坐标(x, y, z)。

这里用到的变换很简单,就是平移变换:

P_B = P_P + T

其中P_B是动平台中心在基坐标系下的坐标,P_P是动平台中心在动坐标系下的坐标(其实就是原点(0,0,0)),T是平移向量。

我的经验:虽然Delta只有平移,但我建议你还是把旋转矩阵的框架搭好。万一以后要做变种机构(比如带旋转轴的Delta),代码改起来就方便了。

2.2 Delta机器人结构参数:你得知道你的机器人长什么样

每个Delta机器人都有自己的一套「身体数据」。这些参数是运动学计算的基础,必须精确测量。

2.2.1 关键参数一览

参数符号 含义 典型值(参考)
R 静平台半径(基座中心到主动臂铰点) 200 mm
r 动平台半径(动平台中心到从动臂铰点) 50 mm
L1 主动臂长度 300 mm
L2 从动臂长度(平行四边形结构) 600 mm

我在项目中遇到过一个问题:有个同事把静平台半径和动平台半径搞混了,结果算出来的工作空间完全不对。后来花了整整一天排查,才发现是参数写反了。所以,我建议你把这些参数定义清楚后,第一时间写到配置文件里,并且加上注释。

2.2.2 结构简化模型

Delta机器人的三条支链是完全对称的,间隔120°。所以我们只需要分析一条支链,然后通过旋转矩阵扩展到另外两条。

每条支链的几何关系可以简化为一个平面四连杆机构。嗯,这里要记住:从动臂是平行四边形结构,所以动平台始终平行于静平台。

避坑指南:我曾经遇到过从动臂的平行四边形铰链间隙过大,导致运动学计算的理论位置和实际位置差了2mm。对于高速分拣来说,2mm足以让吸盘抓空。所以,机械精度一定要保证。

2.3 正运动学推导:从角度到位姿

正运动学,说白了就是:给你三个电机的角度θ1、θ2、θ3,你算出动平台中心在空间中的位置(x, y, z)。

推导思路其实很直接——几何约束法。每条支链都约束了动平台中心的一个球面轨迹,三条支链的交点就是动平台中心的位置。

2.3.1 单条支链的几何约束

以第一条支链为例(位于X轴正方向):

  1. 主动臂铰点A1在基坐标系下的坐标:
    A1 = (R, 0, 0)
  2. 主动臂末端B1的坐标(由θ1决定):
    B1 = (R + L1*cos(θ1), 0, L1*sin(θ1))
  3. 从动臂约束:B1到动平台铰点P1的距离恒为L2。
    P1在动坐标系下的坐标为(r, 0, 0),在基坐标系下为:
    P1_B = (x + r, y, z)
  4. 于是得到约束方程:
    (x + r - B1x)² + (y - 0)² + (z - B1z)² = L2²

同理,对另外两条支链(旋转±120°)写出约束方程,就得到了三个方程。

2.3.2 求解方程组

三个方程,三个未知数(x, y, z)。理论上可解。但直接解很麻烦,我一般用数值方法或者几何法。

这里给出一个常用的解析解法思路:

  1. 将三个方程两两相减,消去二次项,得到两个线性方程。
  2. 用这两个线性方程把x和y表示为z的函数。
  3. 代入任意一个原始方程,得到一个关于z的一元二次方程。
  4. 解出z,再回代得到x和y。
注意:一元二次方程会有两个解。一个对应动平台在上方(正常工作位姿),一个对应动平台在下方(奇异位姿)。我们取z较大的那个解。

2.3.3 代码实现示例

下面是我在实际项目中用的正运动学函数(Python伪代码):

import numpy as np

def forward_kinematics(theta1, theta2, theta3, R, r, L1, L2):
    """
    输入:三个主动臂角度(rad),结构参数
    输出:动平台中心位置(x, y, z)
    """
    # 计算三条支链的B点坐标
    B1 = np.array([R + L1*np.cos(theta1), 0, L1*np.sin(theta1)])
    B2 = np.array([-(R + L1*np.cos(theta2))/2, 
                   np.sqrt(3)/2*(R + L1*np.cos(theta2)), 
                   L1*np.sin(theta2)])
    B3 = np.array([-(R + L1*np.cos(theta3))/2, 
                   -np.sqrt(3)/2*(R + L1*np.cos(theta3)), 
                   L1*np.sin(theta3)])
    
    # 构建方程组并求解(此处省略具体推导,使用数值求解)
    # 实际项目中我用的是牛顿迭代法
    
    return x, y, z
我的建议:虽然解析法效率高,但数值法(比如牛顿迭代)更鲁棒。我在调试初期先用数值法验证,稳定后再换成解析法提高速度。

2.4 本章小结

这一章我们讲了三个核心内容:

  • 坐标系与变换:基坐标系和动坐标系的定义,以及纯平移变换。
  • 结构参数:R、r、L1、L2这四个参数决定了Delta机器人的「身材」。
  • 正运动学推导:从三个角度到位姿的映射,核心是几何约束法。

说实话,正运动学是Delta控制的基础。你只有知道机器人现在在哪儿,才能规划它下一步去哪儿。下一章我们会讲逆运动学——也就是告诉电机怎么转,才能让动平台到达目标位置。那个在实际控制中更常用。

好,今天就到这儿。有问题欢迎在课程群里讨论。


公众号:蓝海资料掘金营,微信deep3321