目录

运动学基础

运动学(kinematics)是力学的一门分支,专门描述物体的运动,即物体在空间中的位置随时间的演进而作的改变,完全不考虑作用力或质量等等影响运动的因素。

刚体是指形状和尺寸不发生变化的物体。更严格地说,刚体上任意两点之间的距离始终保持不变。

不能简单当作刚体的例子有:弹簧、绳子、在高速振动下形变不可忽略的部件等。

在运动学中,很多研究对象都可以近似看成刚体。这样做的好处是,我们可以用一个局部坐标系来代表整个物体,而不必单独描述物体上每一个点的运动。

如果一个物体可以看作刚体,那么只要记录:

  1. 一个参考点的位置
  2. 物体的姿态

就能够推导出物体上所有点的位置。这正是刚体建模高效的原因。

**点(Point)**表示空间中的一个位置,强调“物体在哪里”。

例如:车前方 10 米、左侧 2 米处有一个目标。

点的位置依赖于原点,因此换坐标系时,点会受到平移的影响。

**向量(Vector)**表示一个方向和大小,强调“朝哪里”和“有多大”。

例如:车向前的速度是 5 m/s。

向量不依赖于原点,因此仅平移坐标系时,向量本身不变。

从点 $P$ 指向点 $Q$ 的向量记作 $\vec{PQ}=Q−P $。也就是说,向量总是用终点减起点

在二维平面上:

  • 点 $P = (3, 2)$ 表示一个位置
  • 向量 $v = (3, 2)$ 表示“向右 3、向上 2”的位移或方向

虽然它们的数值形式相同,但物理含义不同。

“位置”和“方向”都必须相对于某个参考系来描述。如果没有统一的参考系,同一个物体可能会得到不同的描述结果。

常见坐标系包括:

  1. 世界坐标系(world)

    • $x$ 轴朝东
    • $y$ 轴朝北
  2. 车体坐标系(vehicle/body)

    • 以车辆自身为参考
    • $x$ 轴指向车头前方
    • $y$ 轴指向车辆左侧

因此,同一个目标在不同坐标系下,其坐标数值通常不同。

一个二维坐标系至少包含:

  • 原点
  • $x$ 轴方向
  • $y$ 轴方向

所以两个坐标系之间的差异,本质上来自:

  • 原点不同:平移
  • 轴方向不同:旋转
  • 两者都不同:平移 + 旋转

后面所有的位姿变换,本质上都来自这三种差异。

先考虑最简单的情况:两个坐标系方向一致,只是原点不同。

假设在世界坐标系 $w$ 中:

  • 车的位置是 $(10, 5)$
  • 车头方向和世界坐标系的 $x$ 轴一致
  • 一个目标点在世界坐标系中的位置是 $(13, 7)$

现在要求这个目标在车体坐标系中的坐标。

由于两个坐标系方向一致,因此只需要做减法:

$P^v = P^w - T$

其中 $T = (10, 5)$ 是车在世界坐标系中的位置。

代入可得:

$P^v = (13, 7) - (10, 5) = (3, 2)$

这表示目标在车体系中:

  • 前方 3
  • 左侧 2

如果车在世界坐标系中的位置随时间变化,可以记为:

$C(t) = (x(t), y(t))$

如果车没有转向,只是平移,那么车体坐标系始终与世界坐标系平行。

此时,一个在世界中固定不动的目标点 $P^w$,在车体坐标系中的表达为:

$P^v(t) = P^w - C(t)$

这条公式非常重要。它说明

  • 目标本身在世界中不动
  • 但由于车在移动
  • 所以目标在车体坐标系中的坐标会不断变化

在只考虑平移时,默认车体坐标系和世界坐标系方向一致。但现实中车会转弯,一旦车发生转向,车体坐标系的轴方向就改变了。

例如:

  • 世界坐标系中,$x$ 轴朝东,$y$ 轴朝北
  • 车转了 $90^\circ$,此时车头朝北

这时,同一个目标点虽然相对车的实际位置关系没有改变,但它在车体系中的数值表达会发生变化。

旋转本质上改变的是:

  • 坐标轴的方向
  • 同一个向量在这些坐标轴下的分量

也就是说:物理向量本身没有变,变化的是它在某个坐标系中的表达方式。

在二维平面中,逆时针旋转 $\theta$ 的矩阵为:

R(θ)=[cosθsinθsinθcosθ] R(\theta)= \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix}

如果一个向量原来是 $v$,旋转后的结果为:

$v’ = R(\theta)v$

一些常见例子如下:

  • 若 $v = (1, 0)$,逆时针旋转 $90^\circ$,则 $v’ = (0, 1)$
  • 若旋转 $180^\circ$,则 $v’ = (-1, 0)$
  • 若旋转 $45^\circ$,则 $v’ = \left(\frac{\sqrt{2}}{2}, \frac{\sqrt{2}}{2}\right)$

以逆时针旋转 $90^\circ$ 为例:

v=[10],R(90)=[0110] v= \begin{bmatrix} 1 \\ 0 \end{bmatrix}, \quad R(90^\circ)= \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix}

因此:

v=[0110][10]=[01] v'= \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix} \cdot \begin{bmatrix} 1 \\ 0 \end{bmatrix} = \begin{bmatrix} 0 \\ 1 \end{bmatrix}

这里有一个很容易混淆的点:旋转向量变换坐标系中的表达并不是同一件事。

  • 主动旋转:向量本身被旋转,例如 $v’ = R(\theta)v$
  • 被动旋转:向量本身没有动,只是换了一个坐标系去表达它

因此,在坐标变换中,经常会看到角度符号相反的情况。例如:

  • 把向量本身逆时针转 $\theta$,用 $R(\theta)$
  • 把同一个量从世界系换到一个相对世界系转了 $\theta$ 的车体系中表达,通常要用 $R(-\theta)$

记忆时可以这样理解:

坐标系转了多少,把量变回这个坐标系表达时,就要反着转回来。

位姿可以拆成两部分:

  • :位置(position)
  • 姿:姿态或朝向(orientation)

在二维平面中,一个刚体的位姿通常用 3 个量表示:$(x, y, \theta)$

其中:

  • $x, y$:参考点的位置
  • $\theta$:朝向角

例如,一辆车在平面上的位姿写成 $(8, 3, 30^\circ)$,表示:

  • 车原点在世界坐标系中的位置是 $(8, 3)$
  • 车头相对世界坐标系 $x$ 轴逆时针转了 $30^\circ$

如果车的位姿已知,那么车体系中的任意一点 $p^v$ 都可以映射到世界坐标系:

pw=[xy]+R(θ)pv p^w = \begin{bmatrix} x \\ y \end{bmatrix} + R(\theta)p^v

这说明:一个刚体一旦位姿确定,刚体上所有点的位置也就都确定了。

当平移和旋转组合在一起时,顺序通常不能交换。

这是因为变换结果取决于以下几个问题:

  • 平移向量是在哪个坐标系里定义的
  • 点是在哪个坐标系里表达的
  • 旋转是从哪个坐标系变到哪个坐标系

所以在使用公式时,一定要先明确“这个量属于哪个坐标系”。

若车在世界坐标系中的朝向为 $\theta$,要把世界坐标系中的点 $p^w$ 转成车体系中的表达,常用公式为:

$p^v = R(-\theta)(p^w - C^w)$

其中:

  • $p^w$:点在世界坐标系中的坐标
  • $C^w$:车原点在世界坐标系中的坐标
  • $p^v$:点在车体坐标系中的坐标
  • $\theta$:车体坐标系相对世界坐标系的朝向角

之所以使用 $-\theta$,是因为:

  • 车体系相对世界系旋转了 $+\theta$
  • 要把世界系中的量变到车体系中表达,就要反着转回来
  • 所以使用 $R(-\theta)$

设:

  • 车位置 $C = (8, 3)$
  • 目标位置 $P = (11, 5)$
  • 车朝向 $\theta = 90^\circ$

先计算相对位移:

PC=(3,2) P - C = (3, 2)

再乘以 $R(-90^\circ)$:

R(90)=[0110] R(-90^\circ)= \begin{bmatrix} 0 & 1 \\ -1 & 0 \end{bmatrix}

于是:

pv=[0110][32]=[23] p^v = \begin{bmatrix} 0 & 1 \\ -1 & 0 \end{bmatrix} \begin{bmatrix} 3 \\ 2 \end{bmatrix} = \begin{bmatrix} 2 \\ -3 \end{bmatrix}

这表示在车体系中,目标位于:

  • 前方 2
  • 右侧 3

因为车已经朝北,而目标在世界中相对车的位置是“东 3、北 2”,对于车来说就是“前 2、右 3”。

如果已经知道一个点在车体系中的坐标 $p^v$,想求它在世界坐标系中的坐标 $p^w$,就是做逆变换:

$p^w = C^w + R(\theta)p^v$

这条公式可以理解为两步:

  1. 先把车体系中的向量旋转到世界方向
  2. 再加上车在世界中的位置

在工程中,不同对象、不同模块通常都有自己的局部参考系,因此会自然出现多个坐标系。

常见例子有:

  • 世界坐标系:表示全局位置、地图位置、绝对轨迹
  • 车体坐标系:以车中心或某个车体参考点为原点,$x$ 轴朝前,$y$ 轴朝左
  • 传感器坐标系:例如相机、雷达、灯体模组等,都有自己的安装坐标系

假设某个目标点先在传感器坐标系中被测得,记为 $p^s$。

如果最终希望知道它在世界坐标系中的位置 $p^w$,通常需要分两步:

  1. 先从传感器系变到车体系
  2. 再从车体系变到世界系

这就是多坐标系串联。

若传感器相对车体系的安装位姿已知:

  • 旋转:$R_{vs}$
  • 平移:$t_{vs}$

则有:

$p^v = R_{vs}p^s + t_{vs}$

它表示:先把传感器坐标中的点转成车体系方向,再加上传感器原点在车体系中的位置。

同理,若车体系相对世界系的位姿已知:

  • 旋转:$R_{wv}$
  • 平移:$t_{wv}$

则有:

$p^w = R_{wv}p^v + t_{wv}$

把上式中的 $p^v$ 代入,可得:

pw=(RwvRvs)ps+Rwvtvs+twv p^w = (R_{wv}R_{vs})p^s + R_{wv}t_{vs} + t_{wv}

这个式子很有代表性,它展示了多坐标系串联时旋转和平移的组合方式。

在多坐标系串联中,有两个结论特别值得记住:

  1. 旋转可以连续叠加

    • 例如总旋转为 $R_{wv}R_{vs}$
  2. 平移不能直接简单相加

    • 例如不是 $t_{vs} + t_{wv}$
    • 而是 $R_{wv}t_{vs} + t_{wv}$

原因在于:前一个坐标系中的平移向量,进入后一个坐标系之前,通常也需要先经过旋转。

如果车在运动,那么它的位姿就不是固定值,而是时间的函数:

pose(t)=(x(t),y(t),θ(t)) pose(t) = (x(t), y(t), \theta(t))

这表示:

  • 车的位置会随时间变化
  • 车的朝向也会随时间变化

如果位置是时间函数,那么对时间求导就得到速度:

$\dot{x}(t) = \frac{dx}{dt}$,$\dot{y}(t) = \frac{dy}{dt}$

于是,世界坐标系下的速度向量为:

vw=[x˙y˙] v^w = \begin{bmatrix} \dot{x} \\ \dot{y} \end{bmatrix}

它表示:

  • 在世界 $x$ 方向上的速度分量
  • 在世界 $y$ 方向上的速度分量

如果车的朝向是 $\theta(t)$,那么它对时间的变化率就是角速度:

$\omega = \dot{\theta}$

这个量表示:

  • 车每秒转过多少弧度,单位通常是 rad/s
  • 也可以换算成度每秒,单位是 deg/s

通常约定:

  • $\omega > 0$:逆时针转
  • $\omega < 0$:顺时针转
  • $\omega = 0$:不转向,只做直线运动

从车辆自身的角度看,我们通常更关心:

  • 车沿自己车头方向跑多快
  • 车有没有横向滑动
  • 车转得快不快

因此,车体系中的速度常写成:

vv=[vxvvyv] v^v = \begin{bmatrix} v_x^v \\ v_y^v \end{bmatrix}

其中:

  • $v_x^v$:沿车头方向的速度
  • $v_y^v$:沿车左方向的速度

速度是向量,因此它不受原点平移影响,只受方向变化影响。

所以:

  • 车体系到世界系:$v^w = R(\theta)v^v$
  • 世界系到车体系:$v^v = R(-\theta)v^w$

这和前面学过的坐标变换完全一致,只不过对象从“位置点”换成了“速度向量”。

对于理想的小车模型,通常假设:

vv=[v0] v^v = \begin{bmatrix} v \\ 0 \end{bmatrix}

这表示车只沿着车头方向前进,不发生横向滑动。

这是最经典、最常见的简化模型。

把车体系中的速度 $v^v = \begin{bmatrix} v \ 0 \end{bmatrix}$ 变换到世界坐标系,就得到:

x˙(t)=vcosθy˙(t)=vsinθ \begin{aligned} \dot{x}(t) &= v \cos\theta \\ \dot{y}(t) &= v \sin\theta \end{aligned}

这两个式子非常重要。

它们的含义是:

  • 车在自身坐标系下,是沿前方以速度 $v$ 前进
  • 但在世界坐标系中,这个速度会分解到 $x$ 和 $y$ 两个方向上

如果再加上角速度 $\omega$,那么二维平面上的车辆最基础运动学模型可以写成:

x˙(t)=vcosθy˙(t)=vsinθθ˙(t)=ω \begin{aligned} \dot{x}(t) &= v \cos\theta \\ \dot{y}(t) &= v \sin\theta \\ \dot{\theta}(t) &= \omega \end{aligned}

这个模型把位姿、速度和朝向变化统一串联起来。

如果给定:

  • 初始位姿 $(x_0, y_0, \theta_0)$
  • 控制输入 $v(t)$ 和 $\omega(t)$

那么就可以通过积分得到车辆轨迹。

假设 $v = 5$,$\omega = 0.2$,表示车持续向前运动,同时朝向不断变化。

如果 $v$ 和 $\omega$ 一直保持不变,那么车辆做匀速圆周运动,此时有一个非常常见的关系:

$R = \frac{v}{\omega}$

其中:

  • $R$:转弯半径
  • $v$:线速度
  • $\omega$:角速度

这个公式说明:

  • 速度越大,转弯半径越大
  • 转得越快,转弯半径越小

这部分内容可以用一条主线串起来理解:

  • 先把研究对象看成刚体
  • 再用点、向量、坐标系来描述它
  • 坐标系之间的差异,本质上是平移和旋转
  • 位姿统一描述刚体的位置和朝向
  • 用坐标变换处理世界系、车体系、传感器系之间的关系
  • 当位姿开始随时间变化,就进入了运动学
  • 进一步结合速度和角速度,就得到最基本的二维车辆运动学模型

这样从“静态描述”一路走到“动态运动”,整个知识链条就是连贯的。

  1. 刚体建模的核心:一个参考点的位置 + 一个姿态,就能表示整个物体。

  2. 点和向量不同:点表示位置,向量表示方向和大小。

  3. 坐标系差异的本质:平移、旋转,或两者组合。

  4. 方向一致时的变换:直接做减法。

  5. 旋转改变的不是物理量本身,而是它的坐标表达。

  6. 位姿是位置和朝向的统一表示,二维中通常写成 $(x, y, \theta)$。

  7. 世界系到车体系:$p^v = R(-\theta)(p^w - C^w)$

  8. 车体系到世界系:$p^w = C^w + R(\theta)p^v$

  9. 多坐标系串联时:旋转可以连乘,平移要先考虑旋转后再叠加。

  10. 速度也是向量,所以只受旋转影响,不受平移影响。

  11. 最基础二维车辆模型

    x˙=vcosθ,y˙=vsinθ,θ˙=ω \dot{x} = v\cos\theta,\quad \dot{y} = v\sin\theta,\quad \dot{\theta} = \omega
  12. 匀速转弯半径:$R = \frac{v}{\omega}$