2. 运动学基础:正运动学与逆运动学求解、DH参数法、腿部工作空间分析
各位同学,欢迎来到第二章。说实话,运动学是四足机器人所有动作的“地基”。你想想看,要让机器人走路、跑步、跳跃,首先得知道它的腿到底能伸到哪儿、关节怎么转。这一章,我们就来啃这块硬骨头。
我个人习惯把运动学比作“机器人的身体感知”。正运动学是“我知道关节怎么转,求脚在哪”;逆运动学是“我知道脚要去哪,求关节怎么转”。两者互为逆过程,缺一不可。
2.1 DH参数法:建立坐标系的“通用语言”
DH参数法,全称Denavit-Hartenberg参数法。说白了,就是一套给机器人每个关节建立坐标系的标准化流程。我在项目中遇到过不少新手,一上来就自己瞎建坐标系,结果算出来的位置全是错的。DH参数法就是为了避免这种混乱。
对于四足机器人的一条腿,我们通常把它看作一个串联机械臂。从髋关节到膝关节,再到踝关节,每个关节都用一个4x4的齐次变换矩阵来描述。
DH参数有四个核心参数:
| 参数 | 符号 | 物理含义 |
|---|---|---|
| 连杆长度 | ai-1 | 沿xi-1轴,从zi-1到zi的距离 |
| 连杆扭角 | αi-1 | 绕xi-1轴,从zi-1到zi的转角 |
| 连杆偏距 | di | 沿zi轴,从xi-1到xi的距离 |
| 关节转角 | θi | 绕zi轴,从xi-1到xi的转角 |
嗯,这里要注意:对于四足机器人,髋关节通常是旋转关节,θ是变量;而连杆长度a和偏距d是固定值,由机械结构决定。
标准DH变换矩阵长这样:
T = [ cosθ -sinθ 0 a
sinθ*cosα cosθ*cosα -sinα -d*sinα
sinθ*sinα cosθ*sinα cosα d*cosα
0 0 0 1 ]
我个人建议,在仿真中先把每条腿的DH参数表列出来,再写代码。这样不容易出错。
2.2 正运动学求解:从关节空间到工作空间
正运动学,就是给定关节角度,求脚端位置。对于四足机器人,我们通常以机身坐标系为基座,然后依次变换到髋关节、膝关节、踝关节,最后到脚端。
假设一条腿有3个自由度(髋关节横滚、髋关节俯仰、膝关节俯仰),那么正运动学就是三个变换矩阵的连乘:
T_0_3 = T_0_1 * T_1_2 * T_2_3
其中T_0_3的最后一列就是脚端在基坐标系下的位置。
我在项目中遇到过一个问题:仿真里正运动学算出来位置是对的,但实际机器人一跑就偏。后来发现是DH参数里的符号搞反了。所以,一定要在仿真里先可视化验证。
2.3 逆运动学求解:从工作空间到关节空间
逆运动学比正运动学麻烦得多。说白了,就是已知脚端的目标位置,反算出三个关节的角度。对于四足机器人,我们通常用解析法或数值法。
解析法:针对特定几何结构,推导出封闭解。速度快,但通用性差。比如,对于只有俯仰关节的腿,可以用几何法直接算。
数值法:比如牛顿-拉夫森法或雅可比伪逆法。通用性强,但迭代计算慢,而且可能不收敛。
我个人习惯在仿真中先用解析法,如果腿的结构变了,再切换到数值法。这里给出一个典型的解析法求解过程:
// 已知脚端位置 (x, y, z),求关节角 q1, q2, q3
// 假设腿结构:髋横滚(q1),髋俯仰(q2),膝俯仰(q3)
// 第一步:求髋横滚角 q1
q1 = atan2(y, z);
// 第二步:将坐标变换到髋俯仰坐标系下
r = sqrt(y^2 + z^2);
x' = x;
z' = r - L1; // L1为髋关节偏距
// 第三步:用余弦定理求膝俯仰角 q3
cos_q3 = (x'^2 + z'^2 - L2^2 - L3^2) / (2 * L2 * L3);
q3 = acos(cos_q3); // 注意:需要检查cos_q3是否在[-1,1]范围内
// 第四步:求髋俯仰角 q2
alpha = atan2(z', x');
beta = atan2(L3 * sin(q3), L2 + L3 * cos(q3));
q2 = alpha - beta;
2.4 腿部工作空间分析
工作空间,就是脚端能到达的所有点的集合。对于四足机器人,工作空间决定了它能迈多大的步子、能跨多高的障碍。
工作空间受三个因素限制:
- 关节角度限位:每个关节都有物理限位,比如膝关节不能反关节弯曲。
- 连杆长度:腿越长,工作空间越大,但惯量也越大。
- 自碰撞:腿不能和机身或其他腿撞在一起。
在仿真中,我通常用蒙特卡洛法来可视化工作空间:随机采样关节角度,计算脚端位置,然后画点云。
// 蒙特卡洛法采样工作空间
for (i = 0; i < 10000; i++) {
q1 = q1_min + rand() * (q1_max - q1_min);
q2 = q2_min + rand() * (q2_max - q2_min);
q3 = q3_min + rand() * (q3_max - q3_min);
[x, y, z] = forward_kinematics(q1, q2, q3);
plot_point(x, y, z);
}
你想想看,如果工作空间是椭球形的,那说明腿的各个方向运动能力比较均衡。如果是扁平的,那就要注意了——可能某个方向根本使不上劲。
2.5 本章知识体系
下面这张图总结了本章的核心逻辑:从DH参数到正逆运动学,再到工作空间分析,环环相扣。
嗯,这张图把本章的知识点串起来了。你从DH参数出发,既可以走正运动学路线,也可以走逆运动学路线,最终都汇聚到工作空间分析上。工作空间分析的结果,直接决定了步态规划的质量。