里程计模型:
- 两轮差分地盘的运动学模型
- 三轮全向底盘的运动学模型
- 航迹推算(Dead Reckoning)
里程计标定
- 线性最小二乘的基本原理
- 最小二乘的直线拟合
- 最小二乘在里程计标定中的应用
差分底盘的优势就是:
- 结构简单
- 便宜(2个电机)
- 模型简单
两轮差分地盘的运动学模型:
欠驱动系统:xyθ\thetaθ三个自由度,vl和vr(两个xx)(意味着运动是耦合的)
(相关过程直接省略)使用的是VLr−d=VRr+d\frac{V_L}{r-d}=\frac{V_R}{r+d}r−dVL=r+dVR然后得到r=vR+vLvR−vLdr=\frac{v_R+v_L}{v_R-v_L}dr=vR−vLvR+vLd
公式:
v=vR+vL2ω=vR−vL2d \begin{align} \mathbf{v} &= \frac{v_R + v_L}{2} \\ \omega &= \frac{v_R - v_L}{2d} \end{align} vω=2vR+vL=2dvR−vL
从上面两式解出 vR, vLv_R,\,v_LvR,vL :
{vR=v+ω d,vL=v−ω d. \begin{cases} v_R = v + \omega\,d,\\ v_L = v - \omega\,d. \end{cases} {vR=v+ωd,vL=v−ωd.
三轮全向底盘
具有以下的特点:
- 任何方向平移
- 全驱动系统: 3个自由度xyθ\thetaθ 和 v1、v2、v3输入–》可以向任意方向运动
- 可进行运动学分解
分解的方法就是假设只有一个方向
第一个:直接相加
第二个:是第一个的矩阵形式
第三个:第二个的逆矩阵
运动学预测(Prediction)——从增量到全局位姿
在移动机器人导航与定位中(如 EKF、粒子滤波等),预测步骤就是把机器人在自身坐标系下测得的运动增量 (dx,dy,dθ)(dx,dy,d\theta)(dx,dy,dθ),转换到全局坐标系并更新全局位姿 (x,y,θ)(x,y,\theta)(x,y,θ)。
坐标系与示意图
markdown复制编辑 机器人自身坐标系 全局坐标系 ▲ y_body ▲ Y │ / │ / │ / └───► x_body ●───► X
- 自身坐标系:机器人车体前进方向为 xbodyx_{body}xbody,左侧为 ybodyy_{body}ybody。
- 全局坐标系:环境中的固定参考系,机器人初始位姿为 (x,y,θ)(x,y,\theta)(x,y,θ)。
运动增量与同质变换
机器人在自身坐标系下运动一小段距离,测得增量向量
Δpbody=[dxdydθ]. \Delta \mathbf{p}_{body} = \begin{bmatrix} dx \\ dy \\ d\theta \end{bmatrix}. Δpbody= dxdydθ .
要将它叠加到全局位姿,使用 3×3 同质坐标变换:
$$
T(\theta) ;=;
\begin{bmatrix}
\cos\theta & -\sin\theta & 0\[4pt]
\sin\theta & ;\cos\theta & 0\[4pt]
0 & 0 & 1
\end{bmatrix},
\quad
\begin{bmatrix} x’ \ y’ \ \theta’ \end{bmatrix}\begin{bmatrix} x \ y \ \theta \end{bmatrix}
;+;
T(\theta),\Delta \mathbf{p}_{body}.
展开即得: 展开即得: 展开即得:
\begin{bmatrix} x’ \ y’ \ \theta’ \end{bmatrix}\begin{bmatrix} x \ y \ \theta \end{bmatrix}
+
\begin{bmatrix}
\cos\theta & -\sin\theta & 0\
\sin\theta & ;\cos\theta & 0\
0 & 0 & 1
\end{bmatrix}
\begin{bmatrix} dx \ dy \ d\theta \end{bmatrix}.
$$- 第一行 x′=x+cosθ⋅dx−sinθ⋅dyx' = x + \cos\theta\cdot dx - \sin\theta\cdot dyx′=x+cosθ⋅dx−sinθ⋅dy
- 第二行 y′=y+sinθ⋅dx+cosθ⋅dyy' = y + \sin\theta\cdot dx + \cos\theta\cdot dyy′=y+sinθ⋅dx+cosθ⋅dy
- 第三行 θ′=θ+dθ\theta' = \theta + d\thetaθ′=θ+dθ
旋转矩阵详解
同质矩阵 T(θ)T(\theta)T(θ) 中的前 2×2 子矩阵
R(θ)=[cosθ−sinθsinθ cosθ] R(\theta)= \begin{bmatrix} \cos\theta & -\sin\theta\\ \sin\theta & \;\cos\theta \end{bmatrix} R(θ)=[cosθsinθ−sinθcosθ]- 用途:将自身坐标系下的平移增量 (dx,dy)T(dx,dy)^T(dx,dy)T 旋转到全局坐标系下。
- 逆变换:若要把全局系增量映回自身系,使用 R−1=RTR^{-1}=R^TR−1=RT:
$$
R(\theta)^{-1}
=R(\theta)^T\begin{bmatrix}
\cos\theta & \sin\theta\
-\sin\theta & \cos\theta
\end{bmatrix}.
$$含噪声的运动模型
实际测量与执行存在误差,引入高斯噪声向量 ε=[εx,εy,εθ]T\varepsilon=[\varepsilon_x,\varepsilon_y,\varepsilon_\theta]^Tε=[εx,εy,εθ]T:
$$
\Delta \mathbf{p}_{body}^{noisy}\begin{bmatrix} dx \ dy \ d\theta \end{bmatrix}
+
\begin{bmatrix}\varepsilon_x\\varepsilon_y\\varepsilon_\theta\end{bmatrix}.
完整预测更新为: 完整预测更新为: 完整预测更新为:
\begin{bmatrix} x’ \ y’ \ \theta’ \end{bmatrix}\begin{bmatrix} x \ y \ \theta \end{bmatrix}
+
T(\theta),\Delta \mathbf{p}_{body}^{noisy}.
$$
里程计标定
使用线性最小二乘法进行标定
对于不同规模关系的线性方程组 Ax=bA x = bAx=b,常用的求解或近似方法如下:
- 适定方程组(m=nm = nm=n)
矩阵可逆(detA≠0\det A \neq 0detA=0)时
x=A−1b x = A^{-1} b x=A−1b
或者更稳定地用 LU 分解、QR 分解等数值方法直接求解。矩阵不可逆(detA=0\det A = 0detA=0)时
退化为欠定/超定的情形,见下面。
- 欠定方程组(m<nm < nm<n,方程少于未知数)
无穷多解:通解可以写成
x=x0+N(A), x = x_0 + N(A), x=x0+N(A),
其中 x0x_0x0 是任意一个特解,N(A)N(A)N(A) 是齐次解空间(维度 n−mn-mn−m)。最小范数解(最常用)
取唯一的 “最小二乘范数” 解(Moore–Penrose 伪逆),即
x∗=AT(AAT)−1b, x^* = A^T (A A^T)^{-1} b, x∗=AT(AAT)−1b,
它也是所有解中 ∥x∥\|x\|∥x∥ 最小者。
- 超定方程组(m>nm > nm>n,方程多于未知数)
无精确解:通常不存在满足所有方程的 xxx。
最小二乘解
求解
minx∥Ax−b∥2, \min_x \|A x - b\|^2, xmin∥Ax−b∥2,
通解为正规方程
ATA x=ATb⟹x∗=(ATA)−1ATb. A^T A\,x = A^T b \quad\Longrightarrow\quad x^* = (A^T A)^{-1} A^T b. ATAx=ATb⟹x∗=(ATA)−1ATb.
在数值上,推荐使用 QR 分解 或 SVD 求解最小二乘,以保证稳定性。
即
- m=nm=nm=n:直接求逆或分解;
- $m:参数化通解,常取伪逆给出最小范数解;
- m>nm>nm>n:最小二乘,正规方程或分解方法。
一般来说通解是x∗=(ATA)−1ATb.x^* = (A^T A)^{-1} A^T b.x∗=(ATA)−1ATb.但是会出现一些问题
- 超定方程组(m>nm>nm>n,方程多于未知数)
最小二乘解
x∗=(ATA)−1ATb x^* = (A^T A)^{-1} A^T b x∗=(ATA)−1ATb数值问题
- 条件数放大:κ(ATA)≈κ(A)2\kappa(A^TA)\approx\kappa(A)^2κ(ATA)≈κ(A)2,小的浮点误差被平方放大,解可能极不准确。
- 对 bbb 的微小扰动敏感:当 b→b+δbb\to b+\delta bb→b+δb 时,x∗x^*x∗ 的变化往往远大于 δb\delta bδb。
- ATAA^TAATA 不可逆或病态:若 AAA 列不满秩,ATAA^TAATA 奇异;即便可逆,也可能因病态(高条件数)而不可靠。
改进方法
QR 分解:令 A=QRA=Q RA=QR,解 R x=QTbR\,x=Q^T bRx=QTb,避免直接构造并求逆 ATAA^TAATA。
SVD/伪逆:A=UΣVTA=U \Sigma V^TA=UΣVT,取
x∗=V Σ+ UTb, x^* = V\,\Sigma^+\,U^T b, x∗=VΣ+UTb,
可处理秩亏且更稳定。正则化(Ridge):
x∗=(ATA+λI)−1ATb,λ>0 x^* = (A^T A + \lambda I)^{-1}A^T b,\quad \lambda>0 x∗=(ATA+λI)−1ATb,λ>0
对抗病态与噪声。