3. 运动学模型基础

各位同学,欢迎来到运动学模型这一章。

说实话,搞机器人路径跟踪,最绕不开的就是运动学模型。你想想看,你给机器人发一个速度指令,它到底怎么动?轮子怎么转?车头往哪拐?这些全得靠运动学方程来算。

我个人习惯把运动学模型比作「机器人的腿」。没有它,你的控制算法再漂亮,也只是纸上谈兵。今天我们就来啃下这块硬骨头——两轮差速模型和阿克曼模型。

3.1 两轮差速模型:最常用的移动底盘

两轮差速模型,说白了就是靠两个独立驱动的轮子,通过转速差来实现转向。我在项目中遇到过很多次,这种底盘结构简单、成本低,室内机器人几乎都在用。

3.1.1 模型结构

想象一下:两个轮子左右分布,中间一个万向轮或者从动轮撑着。左轮速度 vL,右轮速度 vR,轮距(两个轮子中心之间的距离)为 L。

  • 当 vL = vR,机器人直行
  • 当 vL > vR,机器人向右转弯
  • 当 vL < vR,机器人向左转弯
  • 当 vL = -vR,机器人原地旋转

核心公式:

机器人线速度:v = (vR + vL) / 2

机器人角速度:ω = (vR - vL) / L

转弯半径:R = v / ω = L * (vR + vL) / (2 * (vR - vL))

3.1.2 运动学方程推导

嗯,这里要注意。我们通常用位姿 (x, y, θ) 来表示机器人在世界坐标系中的状态。其中 θ 是朝向角。

那么,机器人的运动学方程就是:

ẋ = v * cos(θ)
ẏ = v * sin(θ)
θ̇ = ω

写成离散形式(用于代码实现):

x(k+1) = x(k) + v * cos(θ(k)) * Δt
y(k+1) = y(k) + v * sin(θ(k)) * Δt
θ(k+1) = θ(k) + ω * Δt

我的经验:实际编码时,记得把 θ 归一化到 [-π, π] 区间。我曾经因为没做归一化,积分漂移导致机器人原地转圈,排查了整整一下午。

3.2 阿克曼模型:汽车底盘的灵魂

阿克曼模型,就是汽车转向的那个经典结构。前轮转向,后轮驱动。你想想看,为什么汽车转弯时,内侧轮子和外侧轮子的转角不一样?

原因很简单:内侧轮子走的圆弧半径小,外侧轮子走的圆弧半径大。如果转角一样,轮胎就会打滑。阿克曼转向几何就是为了解决这个问题。

3.2.1 模型参数

参数 符号 说明
轴距 L 前后轴之间的距离
轮距 W 左右轮之间的距离
前轮转角 δ 前轮平均转向角
后轮速度 v 后轴中心的速度

3.2.2 运动学方程

阿克曼模型的核心运动学方程:

ẋ = v * cos(θ)
ẏ = v * sin(θ)
θ̇ = (v / L) * tan(δ)

离散形式:

x(k+1) = x(k) + v * cos(θ(k)) * Δt
y(k+1) = y(k) + v * sin(θ(k)) * Δt
θ(k+1) = θ(k) + (v / L) * tan(δ(k)) * Δt

避坑指南:我曾经在阿克曼模型上栽过跟头。δ 不能太大,否则 tan(δ) 会爆炸。实际车辆的前轮转角一般不超过 ±35°。另外,低速时阿克曼模型很准,但高速时需要考虑动力学因素。

3.3 两种模型的对比

我整理了一个对比表,方便你快速理解:

特性 两轮差速 阿克曼
转向方式 转速差 前轮转角
原地旋转 支持 不支持
侧向移动 不支持 不支持
控制输入 vL, vR v, δ
典型应用 室内机器人、AGV 无人车、智能汽车

3.4 知识体系结构图

下面这张图,是我用 SVG 画的。它把本章的核心逻辑串起来了:

运动学模型知识体系 两轮差速模型 阿克曼模型 v = (vR+vL)/2 ω = (vR-vL)/L 位姿更新:x, y, θ θ̇ = (v/L)*tan(δ) 前轮转角限制 位姿更新:x, y, θ 共同目标:为路径跟踪提供运动学约束 室内AGV 扫地机器人 无人驾驶 智能搬运车

3.5 代码实现要点

最后,我分享一下实际写代码时的几个要点:

  1. 时间步长 Δt 要固定:控制周期不稳定,积分误差会累积。我一般用 10ms 或 20ms。
  2. 边界检查:阿克曼模型的 δ 要限幅,两轮差速的 vL、vR 也要限幅。
  3. 位姿初始化:第一次启动时,记得给 (x, y, θ) 赋初值。我习惯用 (0, 0, 0)。
  4. 调试技巧:先让机器人走直线,再走圆弧,最后走复杂路径。一步一步来,别想一口吃成胖子。

一个小技巧:如果你用的是 ROS,可以用 odom 话题直接获取里程计数据。但自己实现一遍运动学方程,能帮你更深入理解底层原理。

好了,运动学模型就讲到这里。记住,模型是基础,后面所有的路径跟踪算法——纯追踪、Stanley、MPC——全都建立在这两个模型之上。把今天的内容吃透,后面的路就好走了。