腿足机器人之六- 前向运动学
想象一下,你正在控制一个四足机器人(比如波士顿动力的Spot)在复杂地形中行走。要让它的“脚”准确踩到目标位置,首先需要知道一个问题:
“如果机器人的关节转动某个角度,它的脚会移动到哪里?”
这就是**前向运动学(Forward Kinematics)**解决的问题。
它是机器人控制的基石,也是理解步态规划、避障等高级功能的第一步。
机器人在运动的时候,还需要根据未来的姿态动作,倒推计算关节的控制信息,这被称为逆运动学,下一篇博客揭晓,欢迎关注,前向运动学的基础是刚体变换和坐标系转换,这部分和普通机械臂类似(如成熟的工业机械臂),用到的核心知识是D-H参数,但腿足机器人的结构更加多变,比如关节的串联和并联以及多个自由度。
腿足机器人通常有两或四个腿,需要考虑基坐标系到每个腿的基座,再到脚端的位置,这里涉及多个运动链,比如四足机器人每条腿独立,但身体作为基座。需要确定每个连杆的坐标系,然后通过变换矩阵相乘得到末端位置。
在第二篇 腿足机器人之二- 运动控制概览我们提到前向运动学是中间层,运动的规划(步态规划)则是MPC/RL等算法实现,前向运动学主要是关注单腿的运动学,而不是步态规划。但前向运动学需要考虑基坐标系的变化,比如当机器人身体移动时,各腿末端的位置会相对世界坐标系变化,可能需要将身体坐标系到世界坐标系的转换也包括进去。
前向运动学知识点主要包括:刚体运动学基础(坐标系、旋转矩阵、齐次变换)、关节类型(旋转和移动关节)、运动链建模(串联结构)、正运动学公式推导(变换矩阵连乘)、多腿协调中的基座变换(比如身体移动对脚端位置的影响)、以及可能的并联机构(如果腿有并联结构的话)。
刚体运动学基础
在腿足机器人中,坐标系定义是运动学建模的核心,经典运动学中主要包括三种坐标系,分别是基坐标系,关节坐标系、末端坐标系,这是描述机器人运动控制、步态规划,注意和环境感知、定位导航的坐标系(如Camera传感器上的坐标、地图坐标等等)区别。
坐标系定义
基坐标系(base frame):通常固定在机器人躯干或髋关节处(如上图中间的圆圈位置,在髋关节的旋转中心),通常以髋关节的初始位置为原点,Z轴(Yaw)垂直于躯干平面(竖直方向,人体直立时从脚到头的连线),X轴(Roll)指向机器人前进方向(平行于地面),Y轴(Pitch,从左肩到右肩的连线)。
关节坐标系:每个关节的局部坐标系,用于描述相邻连杆的相对运
- 髋关节坐标系:与基坐标系重合(初始状态),当髋关节偏航(Yaw)时,绕基坐标系的Z轴旋转。
- 膝关节坐标系:位于大腿末端,绕髋关节俯仰轴(Y轴)旋转。
- 踝关节坐标系:位于小腿末端,绕膝关节俯仰轴(Y轴)旋转。
- 肩关节坐标系:位于肩部,提供三个方向运动。
- 肘关节坐标系:位于手肘不,沿X轴(Roll)平移运动。
末端坐标系:固定在足端或执行器(如足底、手掌)的坐标系。
旋转矩阵与欧拉角
在腿足机器人中,每个关节的旋转会改变后续连杆的方向,以髋关节的偏航 Y a w Yaw Yaw为例:
假设髋关节绕基坐标系的Z轴旋转角度为 θ \theta θ,则其旋转矩阵为:
R z ( θ ) = [ cos θ − sin θ 0 sin θ cos θ 0 0 0 1 ] R_z(\theta)=\begin{bmatrix} \cos \theta & -\sin \theta & 0 \\ \sin \theta & \cos \theta & 0 \\ 0 & 0 & 1 \end{bmatrix} Rz(θ)=
cosθsinθ0−sinθcosθ0001
矩阵元素 | 物理意义 |
---|---|
R 11 = cos θ R_{11}=\cos \theta R11=cosθ | 表示新坐标系Z轴在原坐标系X轴上的投影比例 |
R 12 = − sin θ R_{12}=-\sin \theta R12=−sinθ$ | 表示新坐标系Y轴在原坐标系X轴上的投影比例(因旋转后Y轴向左偏移) |
R 21 = sin θ R_{21}=\sin \theta R21=sinθ | 表示新坐标系X轴在原坐标系Y轴上的投影比例(X轴向右前方倾斜) |
R 22 = cos θ R_{22}=\cos \theta R22=cosθ | 表示新坐标系Y轴在原坐标系Y轴上的投影比例 |
R 33 = 1 R_{33}=1 R33=1$ | 表示新坐标系Z轴和原坐标系Z轴始终重合(绕Z轴旋转不影响竖直方向) |
其他轴(X/Y)的旋转矩阵类似,需注意旋转顺序(如Z-Y-Z欧拉角)
齐次变换矩阵(平移+旋转的统一表示)
齐次变换矩阵用于描述从一个坐标系到另一个坐标系的平移和旋转,是串联关节运动的核心工具,还是以上面的髋关节俯仰(绕Y轴旋转)为例,其变换矩阵为:
将平移向量 p = [ x , y , z ] T \mathbf p=[x,y,z]^T p=[x,y,z]T和旋转矩阵 R R R合并为4x4矩阵:
T = [ R p 0 1 ] T=\begin{bmatrix} R & p \\ 0 & 1 \end{bmatrix} T=[R0p1]
用于统一描述刚体的位姿变换。
髋关节偏航(Yaw)
假设基座标系为( O 0 O_0 O0),髋关节旋转后的坐标系为 O 1 O_1 O1,则变换矩阵 T 1 0 T_1^0 T10包含绕Z轴(脚到头连线)旋转 θ 1 \theta_1 θ1,无平移(假设关节在原点):
T 1 0 [ cos θ 1 − sin θ 1 0 0 sin θ 1 cos θ 1 0 0 0 0 1 0 0 0 0 1 ] T_1^0\begin{bmatrix} \cos \theta_1 & -\sin \theta_1 & 0 &0\\ \sin \theta_1 & \cos \theta_1 & 0 & 0\\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1\end{bmatrix} T10 cosθ1sinθ100−sinθ1cosθ10000100001 髋关节俯仰
髋关节旋转后的坐标系为 O 1 O_1 O1,大腿末端的坐标系为 O 2 O_2 O2,绕Y轴(左肩到右肩连线)旋转 θ 2 \theta_2 θ2,并沿大腿长度方向(新
的X轴)平移 L 1 L_1 L1(大腿长度):
T 2 1 [ cos θ 2 0 sin θ 2 L 1 cos θ 2 0 1 0 0 − sin θ 2 0 cos θ 2 − L 1 sin θ 2 0 0 0 1 ] T_2^1\begin{bmatrix} \cos \theta_2 & 0 & \sin \theta_2 & L_1 \cos \theta_2 \\ 0 & 1& 0 & 0\\ - \sin \theta_2 & 0 & \cos \theta_2 & -L_1 \sin \theta_2 \\ 0 & 0 & 0 & 1\end{bmatrix} T21 cosθ20−sinθ200100sinθ20cosθ20L1cosθ20−L1sinθ21 膝关节俯仰
大腿末端的坐标系为 O 2 O_2 O2,小腿末端的坐标系为 O 3 O_3 O3,绕Y轴(左肩到右肩连线)旋转 θ 3 \theta_3 θ3,并沿小腿长度方向(新
的X轴)平移 L 2 L_2 L2(大腿长度):
T 3 2 [ cos θ 3 0 sin θ 3 L 2 cos θ 3 0 1 0 0 − sin θ 3 0 cos θ 3 − L 2 sin θ 3 0 0 0 1 ] T_3^2\begin{bmatrix} \cos \theta_3 & 0 & \sin \theta_3 & L_2 \cos \theta_3 \\ 0 & 1& 0 & 0\\ - \sin \theta_3 & 0 & \cos \theta_3 & -L_2 \sin \theta_3 \\ 0 & 0 & 0 & 1\end{bmatrix} T32 cosθ30−sinθ300100sinθ30cosθ30L2cosθ30−L2sinθ31 全局变换矩阵
足端在基座标系中的位置为:
T 3 0 = T 1 0 ⋅ T 2 1 ⋅ T 3 2 T_3^0=T_1^0\cdot T_2^1 \cdot T_3^2 T30=T10⋅T21⋅T32
足端坐标 P e n d = [ x , y , z ] T P_{end}=[x,y,z]^T Pend=[x,y,z]T由 T 3 0 T_3^0 T30的最后一列前三行给出。
注意事项:
- 旋转顺序的影响:若关节旋转顺序不同(如先俯仰后偏航),结果会完全不同。
- 实际机器人的校准:需测量真实的 L 1 L_1 L1和 L 2 L_2 L2(可能因装配误差而偏离设计值)。
- 姿态计算:足端的姿态(如是否水平着地)由旋转矩阵部分决定,需额外分析。
- 实际的机器人还有踝关节,即图中的(Ankle),因为和膝关节类似,自由度是俯仰方向,且计算方法也类似,所以这里并没有列出。
运动链建模
串联运动链结构(从基座到末端的关节连接)
标准Denavit-Hartenberg(D-H)参数法
D-H参数(Denavit-Hartenberg参数) 是一种用于描述机器人连杆和关节几何关系的标准化方法,由 Jacques Denavit 和 Richard S. Hartenberg 于1955年提出。它是机器人运动学建模的基础工具,尤其适用于串联式机械臂或腿足机器人的运动学分析。
D-H参数的核心思想是机器人每个关节的运动(旋转或平移)会影响末端的位置和姿态,因此D-H参数通过定义相邻连杆之间的相对位姿关系,将复杂的多关节运动分解为一系列简单的坐标系变换,最终通过矩阵乘法得到末端位姿。
D-H参数法
每个关节需要定义 4个参数,用于描述相邻两个连杆之间的几何关系:
参数 | 符号 | 意义 |
---|---|---|
连杆长度 | a i a_i ai | 从关节 i i i到 i + 1 i+1 i+1沿 X i X_i Xi轴的距离 |
连杆转角 | α i \alpha_i αi | 绕 X i X_i Xi轴从 Z i Z_i Zi旋转到 Z i + 1 Z_{i+1} Zi+1的角度 |
连杆偏距 | d i d_i di | 沿 Z i Z_i Zi轴从 X i − 1 X_{i-1} Xi−1到 X i X_i Xi的距离 |
关节角度 | θ i \theta_i θi | 绕 Z i Z_i Zi轴从 X i − 1 X_{i-1} Xi−1到 X i X_i Xi的旋转角 |
从坐标系 i − 1 i-1 i−1到 i i i的齐次变换矩阵 T i − 1 i T_{i-1}^i Ti−1i由一下四个参数计算得到:
T i − 1 i [ cos θ i − sin θ i cos α i sin θ i sin α i a i cos θ i sin θ i cos θ i cos α i − cos θ i sin α i a i sin θ i 0 sin α i cos α i d i 0 0 0 1 ] T_{i-1}^i\begin{bmatrix} \cos \theta_i & -\sin \theta_i \cos \alpha_i & \sin \theta_i \sin \alpha_i & a_i \cos \theta_i \\ \sin \theta_i & \cos \theta_i \cos \alpha_i& -\cos \theta_i \sin \alpha_i & a_i \sin \theta_i\\ 0 & \sin \alpha_i & \cos \alpha_i & d_i \\ 0 & 0 & 0 & 1\end{bmatrix} Ti−1i
cosθisinθi00−sinθicosαicosθicosαisinαi0sinθisinαi−cosθisinαicosαi0aicosθiaisinθidi1
其中:
1.绕 Z i − 1 Z_{i-1} Zi−1旋转 θ i \theta_i θi:修正关节角度
2.沿 Z i − 1 Z_{i-1} Zi−1平移 d i d_i di:处理滑动关节的偏移
3.沿 X i X_i Xi平移 a i a_i ai:定义连杆长度
4.绕 X i X_i Xi旋转 α i \alpha_i αi:修正连杆的扭转角度。
这样从基座到末端的全局变换矩阵为各局部变换矩阵的连乘:
T e n d b a s e = T 1 ⋅ T 2 ⋅ . . . ⋅ T n T_{end}^{base}=T_1 \cdot T_2 \cdot... \cdot T_n Tendbase=T1⋅T2⋅...⋅Tn
其中 T i T_i Ti是第i个关节的变换矩阵,如上例的 T 3 0 T_3^0 T30所求解示例。
改进D-H参数法(针对复杂关节轴对齐问题)
标准的D-H参数法坐标系建立在连杆的远端,而改进的D-H参数法,将坐标系建立在连杆的近端,主要是为了更加适应树状结构机器人。
D-H参数法统一了运动学建模的流程,通过链式矩阵乘法即可得到末端位置,适用于大多数串联式机器人(尤其是成熟的机械臂工业机器人),但是对并联或者闭链结构不友好。
多腿协调与基座标系转换
上面的例子都是单腿,但是对于韧性的双足或者机器狗的四足,在步态的运动中,就涉及到两足或者四足之间的协调,以实现动态环境下的步态规划,其中一个重要点是通过将各腿运动学链与基座变换结合实现全局坐标统一,在此基础上更容易规划步态。
基座标系(机器人本体)到世界坐标系的变换
若机器人躯干(基座)在三维空间世界中运动,坐标系中运动(平移 T b = [ x b , y b , z b ] T T_b=[x_b, y_b, z_b]^T Tb=[xb,yb,zb]T和旋转 R b ∈ S O ( 3 ) R_b \in SO(3) Rb∈SO(3)描述,则腿末端(足端)在基座标系位置为 T e n d b a s e T_{end}^{base} Tendbase,则其在世界坐标系(全局坐标系)为:
T e n d w o r l d = T b w o r l d + R b ⋅ T e n d b a s e T_{end}^{world}=T_{b}^{world} + R_b \cdot T_{end}^{base} Tendworld=Tbworld+Rb⋅Tendbase
其中:
T b T_b Tb是基座原点在世界坐标系中的位置。表示从世界坐标系原点(如地面上的固定点)到机器人基座中心的位移。 x b x_b xb是沿世界坐标系x轴的位移(前后方向,可参考一开始的图)。
假设机器人的足端在基座标系中的位置为 P b a s e = [ 1 , 0 , 0 ] T P_{base}=[1,0,0]^T Pbase=[1,0,0]T,若基座向右移动了2米,即 T b = [ 0 , 2 , 0 ] T T_b=[0,2,0]^T Tb=[0,2,0]T,则足端的世界坐标为:
P w o r l d = T b + P b a s e = [ 1 , 2 , 0 ] T P_{world}=T_b+P_{base}=[1,2,0]^T Pworld=Tb+Pbase=[1,2,0]TR b R_b Rb是基座姿态的旋转矩阵,由欧拉角(横滚 ϕ \phi ϕ,俯仰 θ \theta θ和偏航 ψ \psi ψ)定义:
R b = R z ( ψ ) ⋅ R y ( θ ) ⋅ R x ( ϕ ) R_b=R_z(\psi)\cdot R_y(\theta) \cdot R_x(\phi) Rb=Rz(ψ)⋅Ry(θ)⋅Rx(ϕ)
R x R_x Rx, R y R_y Ry, R z R_z Rz是绕各轴的旋转矩阵。SO(3) 是 特殊正交群(Special Orthogonal Group) 的缩写,表示所有三维旋转矩阵的集合。满足正交性(即旋转不改变向量长度和夹角, R T R = I R^TR=I RTR=I)和纯旋转,无镜像反射(即 d e t ( R ) = 1 det(R)=1 det(R)=1)。SO(3)中的矩阵除了能唯一描述物理上可能的旋转,还方便了逆向计算( R − 1 = R T R^{-1}=R^T R−1=RT)。
基座到世界坐标系的齐次变换矩阵为:
H b w o r l d = = [ R b T b 0 1 ] H_b^{world}==\begin{bmatrix} R_b & T_b \\ 0 & 1 \end{bmatrix} Hbworld==[Rb0Tb1]
足端位置变换为:
[ P e n d w o r l d 1 ] = H b w o r l d ⋅ [ P b a s e w o r l d 1 ] \begin{bmatrix} P_{end}^{world} \\ 1 \end{bmatrix}=H_b^{world} \cdot \begin{bmatrix} P_{base}^{world} \\ 1 \end{bmatrix} [Pendworld1]=Hbworld⋅[Pbaseworld1]
在动态步态中,基座位姿随时间变化(如行走时躯干起伏),需实时更新 T b T_b Tb和 R b R_b Rb,可通过IMU测量姿态角,编码器或视觉里程计估计位置,通常要求更新频率 ≥ 100Hz(如ROS(机器人操作系统)中的tf库)。
如控制右前腿在摆动相中沿抛物线轨迹运动,同时基座移动,支撑腿左腿需调整关节角度以保持足端静止(全局坐标),这可以用逆运动学(下一篇博客)计算基座运动导致的足端位移,调整关节角度抵消。
多腿独立运动学链的全局坐标统一
在多腿运动学模型中,每条腿为串联结构(如3自由度),使用D-H参数建模,所有腿共享同一基座坐标系,但运动独立(并联驱动),当基座运动时,各腿的末端全局位置需统一到世界坐标系,以协调步态。
全局坐标统一步骤主要分为三步:
1.单腿前向运动学:计算每条腿末端在基座标系中的位置 T e n d b a s e T_{end}^{base} Tendbase(基于关节角度);
2.坐标变换到世界系:应用基座标系的 H b w o r l d H_b^{world} Hbworld变换,得到全局坐标系;
3.步态协调:根据全局坐标规划各腿的摆动/支撑相位,保持机器人平衡,这部分放到后面MPC/RL部分内容展开。
- 基座标系变换 是多腿协调的核心,需实时融合传感器数据更新位姿。
- 全局坐标统一 通过将各腿运动学链与基座变换结合,实现动态环境下的步态规划。
- 实际挑战 包括实时性保障、多解协调和动态补偿,需结合控制理论与工程优化。
- 当各退独立求解时可能导致冲突(如跳跃时双腿同时摆动),可以通过状态机控制各腿的摆动/支撑相位和基于ZMP(零力矩点)调整基座位姿和各腿力分配。
真实机器人中的挑战
- 误差校准:实际关节存在齿轮间隙、制造公差(实际连杆长度与理论值偏差)、电机误差、连杆柔性变形。
- 传感器反馈:使用IMU、编码器实时修正位置。
- 制动态控制:前向运动学是静态模型,实际需结合动力学(如惯性、摩擦力)。
- 多腿协调运动控制
仿真工具推荐
- PyBullet:轻量级物理引擎,适合验证运动学算法。
- ROS + Gazebo:工业级机器人仿真平台。
- Webots:用户友好的多机器人仿真环境。
- ROS MoveIt、Robotics Toolbox for Python.
工程上如果只是使用运动学和动力学,而不深究和改进其实现,那么ROS机器人操作系统是个不错的入手环境,该操作系统集成了运动学和动力学计算工具orocos-kdl -, 这个工具还集成了bullet3D物理引擎,用于模拟碰撞检测、刚体和软体动力学。