速度解算原理:底盘速度分解、轮子速度合成、逆运动学与正运动学
各位同学,今天我们来聊聊全向轮底盘最核心的部分——速度解算。说实话,我刚入行那会儿,觉得这东西不就是几个轮子转嘛,有什么难的?直到第一次调试四轮全向底盘,车子跑起来像个醉汉,我才意识到:速度解算没搞明白,底盘就是个笑话。
咱们先看一个场景:你给底盘发了个指令「以0.5m/s的速度向前走」。底盘收到指令后,四个轮子该怎么转?转多快?这就是速度解算要回答的问题。说白了,就是把你想要的车体运动,翻译成每个轮子该干的事。
核心思想:全向轮底盘的速度解算,本质上是「车体速度 ↔ 轮子速度」的双向映射。正向叫正运动学,反向叫逆运动学。
1. 底盘速度分解:从车体到轮子
我习惯把底盘看作一个刚体。它在平面上运动,有三个自由度:
- vx:沿车体X轴的速度(前进/后退)
- vy:沿车体Y轴的速度(左移/右移)
- ω:绕车体中心的角速度(旋转)
你想想看,这三个量一组合,底盘就能走出任意轨迹。但问题是——轮子不会直接理解vx、vy、ω,它只认识「转多快」。所以我们需要把车体速度,分解到每个轮子的安装位置上。
这里有个关键点:每个轮子的速度,由两部分叠加而成——平移分量和旋转分量。平移分量是车体平动时,轮子跟着走的速度;旋转分量是车体自转时,轮子绕中心转动的线速度。
我的经验:做速度分解时,一定要先明确坐标系。我习惯用「车体坐标系」——车头方向为X正,左侧为Y正,逆时针旋转为ω正。坐标系搞反了,底盘会往反方向跑,我吃过这个亏。
2. 轮子速度合成:从轮子回到车体
逆过程呢?如果我知道四个轮子各自转多快,能不能反推出车体在怎么运动?当然可以。这就是轮子速度合成,也叫正运动学。
我记得有一次调试里程计,发现底盘明明在走直线,里程计却显示在画圈。查了半天,原来是轮子速度合成时,有个轮子的安装角度写错了。嗯,细节决定成败。
正运动学的本质是:每个轮子的速度,都是车体速度在该轮子方向上的投影。把四个轮子的投影信息综合起来,就能解算出车体的实际速度。
3. 逆运动学与正运动学:一对孪生兄弟
这两个概念,说白了就是:
- 逆运动学:已知车体速度 → 求各轮速度(控制用)
- 正运动学:已知各轮速度 → 求车体速度(里程计用)
它们互为逆运算。数学上,逆运动学是一个3×4的矩阵乘法,正运动学是它的伪逆。为什么是伪逆?因为四个轮子有三个自由度,信息是冗余的——这其实是好事,冗余意味着容错。
注意:正运动学不是简单的「逆运动学矩阵求逆」。因为逆运动学矩阵不是方阵,没有标准逆矩阵。必须用伪逆(Moore-Penrose伪逆)来求解。我见过有人直接求逆,结果矩阵维度都配不上,编译都过不了。
4. 速度解算的数学公式推导
好,咱们来点硬核的。以四轮全向底盘为例,轮子安装角度为45°(麦轮常见布局)。
逆运动学公式:
对于第i个轮子:
ω_i = (1/R) * [ -sin(θ_i) * v_x + cos(θ_i) * v_y + L_i * ω ]
其中:
- ω_i:第i个轮子的角速度
- R:轮子半径
- θ_i:第i个轮子的安装角度(相对于车体X轴)
- L_i:第i个轮子到车体中心的距离
- v_x, v_y, ω:车体速度指令
写成矩阵形式更直观:
[ω₁] [ -sinθ₁ cosθ₁ L₁ ] [v_x]
[ω₂] = [ -sinθ₂ cosθ₂ L₂ ] [v_y]
[ω₃] [ -sinθ₃ cosθ₃ L₃ ] [ ω ]
[ω₄] [ -sinθ₄ cosθ₄ L₄ ]
对于标准四轮麦轮底盘(轮子安装角度分别为45°、135°、225°、315°),公式可以简化为:
ω₁ = (1/R) * ( -v_x + v_y + L*ω )
ω₂ = (1/R) * ( -v_x - v_y + L*ω )
ω₃ = (1/R) * ( v_x - v_y + L*ω )
ω₄ = (1/R) * ( v_x + v_y + L*ω )
你看,每个轮子的速度,就是v_x、v_y、ω的线性组合。系数正负号取决于轮子安装位置。
正运动学公式:
[v_x] [ -sinθ₁ -sinθ₂ -sinθ₃ -sinθ₄ ] [ω₁]
[v_y] = [ cosθ₁ cosθ₂ cosθ₃ cosθ₄ ] [ω₂]
[ ω ] [ 1/L₁ 1/L₂ 1/L₃ 1/L₄ ] [ω₃]
[ω₄]
实际应用中,我们通常用最小二乘法求解这个超定方程组。ROS里的base_controller就是这么干的。
避坑指南:我曾经在正运动学里忘了除以轮子半径R,结果里程计算出来的速度比实际大了三倍。检查了半天才发现,轮子直径是0.1m,半径0.05m,我直接用了直径。嗯,这种低级错误,犯过一次就记住了。
5. 知识体系总览
为了让你更直观地理解整个速度解算的脉络,我画了张图:
这张图把整个速度解算的流程串起来了。你看,从车体速度指令出发,经过逆运动学分解成各轮子速度,驱动电机转动;反过来,从轮子编码器读到的速度,经过正运动学合成,就能得到车体的实际速度——这就是里程计的原理。
我个人习惯把逆运动学叫做「前向通道」,正运动学叫做「反馈通道」。两者配合,才能实现闭环控制。你想想看,如果只有逆运动学没有正运动学,底盘就是开环的,跑偏了你都不知道。
好了,速度解算的原理就讲到这里。记住一句话:逆运动学让你能控制底盘,正运动学让你知道底盘在干嘛。两者缺一不可。
公众号:蓝海资料掘金营,微信deep3321