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参数里的符号搞反了。所以,一定要在仿真里先可视化验证。

小技巧: 在仿真中,你可以让关节角度从0到90度扫一遍,观察脚端轨迹是否连续、平滑。如果出现跳变,大概率是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;
避坑指南: 我曾经在逆运动学里踩过一个坑——余弦定理求角度时,acos的输入超出[-1,1]范围。这通常意味着目标点在工作空间之外。一定要加边界检查,否则仿真会直接崩溃。

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参数法 正运动学:关节→脚端 逆运动学:脚端→关节 腿部工作空间分析 步态规划 · 落脚点选择 · 避障 正运动学与逆运动学互为逆过程,共同服务于工作空间分析与步态规划

嗯,这张图把本章的知识点串起来了。你从DH参数出发,既可以走正运动学路线,也可以走逆运动学路线,最终都汇聚到工作空间分析上。工作空间分析的结果,直接决定了步态规划的质量。