2. 运动学基础(上):空间坐标系与变换、Delta机器人结构参数、正运动学推导
各位同学,欢迎来到运动学基础部分。说实话,很多搞机器人的朋友一听到「运动学」三个字就头大,觉得全是公式推导。但我想说,这部分恰恰是Delta机器人控制中最「实在」的内容。你想想看,如果连机器人手爪在哪儿都不知道,你怎么让它去抓东西?
我个人习惯把运动学比作「机器人的眼睛」。没有它,你的控制器就是个瞎子。今天我们先讲上半部分,把坐标系、结构参数和正运动学这几个硬骨头啃下来。
2.1 空间坐标系与变换:给机器人一个「世界观」
Delta机器人是个空间机构,它的动平台在三维空间里运动。所以,我们首先得定义清楚「空间」长什么样。
2.1.1 坐标系定义
我一般会建两个坐标系:
- 基坐标系 {B}:固定在静平台上,原点在静平台中心,Z轴竖直向上。
- 动坐标系 {P}:固定在动平台上,原点在动平台中心,姿态随动平台变化。
嗯,这里要注意:Delta机器人的动平台在运动中始终保持水平(只平移,不旋转)。所以{P}的姿态相对于{B}是恒定的。这个特性大大简化了我们的计算。
2.1.2 坐标变换
说白了,正运动学就是求:已知三个主动臂的角度,求动平台中心在{B}下的坐标(x, y, z)。
这里用到的变换很简单,就是平移变换:
P_B = P_P + T
其中P_B是动平台中心在基坐标系下的坐标,P_P是动平台中心在动坐标系下的坐标(其实就是原点(0,0,0)),T是平移向量。
2.2 Delta机器人结构参数:你得知道你的机器人长什么样
每个Delta机器人都有自己的一套「身体数据」。这些参数是运动学计算的基础,必须精确测量。
2.2.1 关键参数一览
| 参数符号 | 含义 | 典型值(参考) |
|---|---|---|
| R | 静平台半径(基座中心到主动臂铰点) | 200 mm |
| r | 动平台半径(动平台中心到从动臂铰点) | 50 mm |
| L1 | 主动臂长度 | 300 mm |
| L2 | 从动臂长度(平行四边形结构) | 600 mm |
我在项目中遇到过一个问题:有个同事把静平台半径和动平台半径搞混了,结果算出来的工作空间完全不对。后来花了整整一天排查,才发现是参数写反了。所以,我建议你把这些参数定义清楚后,第一时间写到配置文件里,并且加上注释。
2.2.2 结构简化模型
Delta机器人的三条支链是完全对称的,间隔120°。所以我们只需要分析一条支链,然后通过旋转矩阵扩展到另外两条。
每条支链的几何关系可以简化为一个平面四连杆机构。嗯,这里要记住:从动臂是平行四边形结构,所以动平台始终平行于静平台。
2.3 正运动学推导:从角度到位姿
正运动学,说白了就是:给你三个电机的角度θ1、θ2、θ3,你算出动平台中心在空间中的位置(x, y, z)。
推导思路其实很直接——几何约束法。每条支链都约束了动平台中心的一个球面轨迹,三条支链的交点就是动平台中心的位置。
2.3.1 单条支链的几何约束
以第一条支链为例(位于X轴正方向):
- 主动臂铰点A1在基坐标系下的坐标:
A1 = (R, 0, 0) - 主动臂末端B1的坐标(由θ1决定):
B1 = (R + L1*cos(θ1), 0, L1*sin(θ1)) - 从动臂约束:B1到动平台铰点P1的距离恒为L2。
P1在动坐标系下的坐标为(r, 0, 0),在基坐标系下为:
P1_B = (x + r, y, z) - 于是得到约束方程:
(x + r - B1x)² + (y - 0)² + (z - B1z)² = L2²
同理,对另外两条支链(旋转±120°)写出约束方程,就得到了三个方程。
2.3.2 求解方程组
三个方程,三个未知数(x, y, z)。理论上可解。但直接解很麻烦,我一般用数值方法或者几何法。
这里给出一个常用的解析解法思路:
- 将三个方程两两相减,消去二次项,得到两个线性方程。
- 用这两个线性方程把x和y表示为z的函数。
- 代入任意一个原始方程,得到一个关于z的一元二次方程。
- 解出z,再回代得到x和y。
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