2、四足机器人运动学基础:正运动学与逆运动学、DH参数法、腿部工作空间分析
各位同学,欢迎来到第二章。这一章我们聊聊运动学。
说实话,很多刚入行的朋友一听到「运动学」三个字就头大,觉得全是公式推导。我当年也一样,在学校里学了一堆齐次变换矩阵,真到了做四足机器人项目时,发现根本不知道怎么用。后来踩了不少坑,才慢慢摸到门道。
这一章,我会用最直接的方式,把正运动学、逆运动学、DH参数法还有工作空间分析讲清楚。你不需要有深厚的数学功底,但得有点空间想象能力。准备好了吗?我们开始。
2.1 为什么运动学对四足机器人这么重要?
先问一个问题:你想让机器人的脚踩到某个点,怎么控制?
你肯定不能直接说「电机,你给我转个角度让脚到那里」。电机只认角度,不认位置。所以我们需要一个桥梁——把「脚的位置」翻译成「关节角度」,或者反过来。
这就是运动学干的事:
- 正运动学:已知关节角度,求脚的位置。
- 逆运动学:已知脚的位置,求关节角度。
在四足机器人里,逆运动学用得更多。因为我们要规划足端轨迹,然后反算出每个关节该转多少度。正运动学呢?主要用于验证和调试。
核心观点:没有运动学,你的机器人就是个铁疙瘩。有了运动学,它才能动起来。
2.2 DH参数法——建立坐标系的「通用语言」
说到运动学,绕不开DH参数法。Denavit和Hartenberg这两位老前辈,在1955年提出了一套标准方法,用来描述相邻连杆之间的坐标变换。
我个人习惯把DH参数法理解为「给机器人关节建立身份证」。每个关节都有四个参数:
| 参数 | 符号 | 含义 |
|---|---|---|
| 连杆长度 | ai-1 | 从zi-1到zi沿xi-1的距离 |
| 连杆扭转角 | αi-1 | 从zi-1到zi绕xi-1的转角 |
| 连杆偏距 | di | 从xi-1到xi沿zi的距离 |
| 关节角 | θi | 从xi-1到xi绕zi的转角 |
有了这四个参数,我们就可以写出相邻坐标系之间的齐次变换矩阵。然后一路乘下去,就能得到足端相对于基座的位置。
我的经验:刚开始学DH参数时,最容易搞混的是坐标系的z轴方向。记住一条铁律:z轴永远沿着关节的旋转轴方向。x轴呢?从当前z轴指向下一个z轴。这样就不会乱。
2.3 正运动学——从关节到足端
正运动学相对简单。你给出一组关节角度,我告诉你脚在哪里。
以四足机器人最常见的三关节腿部构型为例(髋关节横滚、髋关节俯仰、膝关节俯仰),正运动学的推导过程如下:
// 伪代码:三关节腿部正运动学
// 输入:三个关节角度 q1, q2, q3
// 输出:足端位置 (x, y, z)
// 定义连杆长度
L1 = 髋关节到髋关节俯仰的长度
L2 = 大腿长度
L3 = 小腿长度
// 齐次变换矩阵连乘
T = T_base_to_hip * T_hip_roll(q1) * T_hip_pitch(q2) * T_knee_pitch(q3)
// 提取位置
x = T[0][3]
y = T[1][3]
z = T[2][3]
实际项目中,我一般不会手写这些矩阵乘法。用Python的NumPy或者C++的Eigen库,几行代码就搞定了。但你要理解背后的几何意义——每个矩阵乘法的本质,就是一次旋转加一次平移。
注意:正运动学虽然简单,但容易出错的地方在于坐标系的定义。不同机器人厂商的坐标系定义可能不同。我曾经在调试一个开源四足机器人时,发现足端位置算出来总是反的,查了半天才发现是z轴方向定义反了。所以,拿到一个机器人,第一件事就是确认坐标系定义。
2.4 逆运动学——从足端到关节
逆运动学才是真正的难点。你告诉机器人「脚踩到那个点」,它得算出每个关节该转多少度。
对于四足机器人的腿部,通常有两种解法:
- 解析法:通过几何关系直接求解。速度快,但只适用于特定构型。
- 数值法:用迭代逼近的方式求解。通用性强,但计算量大。
我个人更推荐解析法。为什么?因为四足机器人的腿部构型相对固定,解析法完全够用,而且实时性好。你想想看,机器人每秒钟要跑几百次逆运动学,数值法那点计算延迟可能就导致步态不稳。
下面是一个典型的解析法逆运动学推导(以三关节腿部为例):
// 伪代码:三关节腿部逆运动学(解析法)
// 输入:足端目标位置 (x, y, z)
// 输出:三个关节角度 q1, q2, q3
// 第一步:计算髋关节横滚角
q1 = atan2(y, z)
// 第二步:将问题投影到腿部平面
r = sqrt(y^2 + z^2)
x_proj = x
y_proj = r - L1
// 第三步:利用余弦定理求解膝关节角
cos_q3 = (x_proj^2 + y_proj^2 - L2^2 - L3^2) / (2 * L2 * L3)
q3 = acos(cos_q3) // 注意:需要检查合法性
// 第四步:求解髋关节俯仰角
q2 = atan2(y_proj, x_proj) - atan2(L3 * sin(q3), L2 + L3 * cos(q3))
关键点:逆运动学可能有多个解(比如膝关节可以向上弯也可以向下弯)。你需要根据机器人的实际机械限位,选择合理的解。我一般会加一个「解选择器」,优先选择离当前关节角度最近的解,这样运动更平滑。
2.5 腿部工作空间分析
工作空间,说白了就是机器人的脚能够到的所有点的集合。
为什么要分析这个?两个原因:
- 避坑:如果你规划的足端轨迹超出了工作空间,逆运动学算出来的关节角度就是虚数,机器人会乱动甚至损坏。
- 优化设计:通过工作空间分析,你可以调整连杆长度,让机器人的工作空间更符合实际需求。
工作空间的形状取决于关节限位和连杆长度。对于典型的四足机器人腿部,工作空间大致是一个「扇形」或者「香蕉形」的立体区域。
下面我用一张SVG图来展示工作空间分析的核心逻辑:
在实际项目中,我一般会用蒙特卡洛方法来做工作空间分析。随机采样大量关节角度组合,计算对应的足端位置,然后画成散点图。这样能直观地看到工作空间的形状和边界。
避坑指南:我曾经在一个项目中,设计的步态轨迹刚好在工作空间边界附近。结果机器人跑起来后,足端位置稍微一抖动就超出了工作空间,导致逆运动学无解,机器人直接摔倒。后来我学乖了,规划轨迹时至少留出10%的安全余量。
2.6 本章小结
这一章我们讲了四足机器人运动学的核心内容:
- DH参数法:建立坐标系的标准化方法
- 正运动学:从关节角度到足端位置
- 逆运动学:从足端位置到关节角度(解析法优先)
- 工作空间分析:搞清楚机器人的脚能伸到哪里
这些内容看起来是纯理论,但每一条在实际项目中都会用到。尤其是逆运动学,几乎是所有步态控制算法的基石。下一章我们会基于这些知识,开始讲步态规划——怎么让四条腿协调地动起来。
嗯,今天就到这里。如果你在推导过程中遇到问题,欢迎随时交流。记住,运动学这东西,多画图、多动手算,自然就通了。