Part I · 第 2 章 微积分 · 2.3

积分与数值积分

导数问"变化有多快",积分问"累计变了多少"。速度累加成位置,加速度累加成速度,力累加成冲量。计算机里没有"无穷小",只能一小步一小步地加,所以怎么加、步子多大、误差多少,就成了机器人里里程计和惯导漂移的根源。

约 25 分钟 前置:2.1 导数 5 个交互

    1为什么机器人需要它

    机器人"知道自己在哪"的大部分办法,都是积分。轮速积分得到里程计位置,陀螺仪的角速度积分得到朝向,加速度计积分两次得到位移。轨迹规划里,给定加加速度或加速度的曲线,也要积分才能得到每一时刻的位置。

    问题是积分会累积误差:每一步多一点点偏差,加起来越来越大。这一节先看清积分是什么,再看数值积分有哪些办法、各自多准,最后看一个机器人最怕的现象:漂移。

    2直觉:曲线下的面积就是累计量

    一辆车以 60 km/h 开 2 小时,走了 \(60\times2=120\) km:这是"速度 × 时间",也是速度曲线下一个长方形的面积。速度变来变去时,把时间切成许多小段,每段里近似当作匀速,把这些小长方形的面积加起来,就是黎曼和。段切得越细,和越接近真实的累计量,极限就是积分。

    下面选一种"取高度"的方式,调整分段数 \(n\),观察和与精确值之间的差距。

    FIG 1黎曼和
    取高度的方式
    曲线是速度 \(v(t)\),青色块是每一小段的近似。"误差比"是"分段数减半时的误差 ÷ 当前误差"。在"光滑"曲线上,左 / 右矩形法的比值约为 2(误差 ∝ 1/n),中点法与梯形法约为 4(误差 ∝ 1/n²)。"先加速后减速"的首尾速度都是 0,左矩形法恰好等于梯形法,比值也是 4;梯形速度曲线有拐点,比值不规则。
    • 在"光滑"曲线上,用梯形法或中点法,只用不超过 8 段,把相对误差压到 0.5% 以下。
    • 用左矩形法,设一个偶数 n,看到误差比接近 2。
    • 换成梯形法,看到误差比接近 4:同样加倍工作量,精度提高得多得多。

    3动手玩:积分与导数互为逆运算

    把右端点 \(b\) 拖来拖去,面积 \(F(b)=\int_0^b f(t)\,\mathrm dt\) 就是一个关于 \(b\) 的函数。它长什么样?右图画出了 \(F\)。仔细看琥珀色切线的斜率:它恰好等于左图在 \(b\) 处的高度 \(f(b)\)。这就是微积分基本定理。

    FIG 2累计函数 F(b)
    f(t)
    F(b)
    \(f\) 在 \(t\)-轴之上时面积为正,之下时为负。\(f>0\) 的地方 \(F\) 上升,\(f<0\) 的地方 \(F\) 下降,\(f=0\) 处 \(F\) 的切线水平:\(F\) 的峰与谷对应 \(f\) 的零点。
    • 把 b 拖到 F 的最高点:此时 f 刚好从正变负。
    • 让 F(b) 变成负数(走过了"回头路")。

    哪种加法更划算?

    不同的规则,误差随 \(n\) 缩小的速度大不相同。下图是误差对 \(n\) 的双对数图,直线的斜率就是"收敛阶"。左矩形法是 1 阶,梯形法和中点法是 2 阶,Simpson 法是 4 阶:\(n\) 增大 10 倍,误差分别缩小 10、100、10000 倍。Simpson 的曲线最后变平,是因为碰到了计算机的舍入误差(约 \(10^{-16}\))。切换到不光滑的函数看看会发生什么。

    FIG 3收敛阶
    横轴 \(\log_{10}n\),纵轴 \(\log_{10}\)(误差)。右侧读数是 \(n=10\) 到 \(n=100\) 之间量得的斜率(取负号)。不光滑的函数(拐点、平方根)会把高阶方法的优势吃掉:规则的阶数是"函数足够光滑"时才有的。
    • 依次查看三个函数,直到读数里每种方法的阶数都看过。

    4再看数学

    提示:悬停在公式带底色的符号上,FIG 1 里对应的部分会高亮。

    定积分

    $$ \int_a^b f(t)\,\mathrm dt \;=\; \lim_{n\to\infty}\sum_{i=0}^{n-1} \hl{h}{f(t_i^*)}\;\hl{dt}{\Delta t},\qquad \Delta t=\frac{b-a}{n}. $$

    \(t_i^*\) 是第 \(i\) 段里选来取高度的点:左端点、右端点、中点,极限都相同(只要 \(f\) 足够规整),差别在于有限 \(n\) 时的误差。积分是线性的:\(\int(\alpha f+g)=\alpha\int f+\int g\)。

    微积分基本定理

    $$ \frac{\mathrm d}{\mathrm db}\int_0^b f(t)\,\mathrm dt = f(b),\qquad \int_a^b f'(t)\,\mathrm dt = f(b)-f(a). $$

    第一式:累计量的变化率就是被累计的东西本身(FIG 2 的切线)。第二式:把变化率累加起来,得到总变化,即"位置的变化等于速度的积分"。这使得有原函数时,定积分可以精确地算出来。机器人里的积分多数没有解析原函数(速度是传感器读数),只能用数值方法。

    常用数值规则

    规则每段近似误差阶
    左矩形\(f(t_i)\,\Delta t\)\(O(\Delta t)\)
    中点\(f(t_i+\tfrac{\Delta t}2)\,\Delta t\)\(O(\Delta t^2)\)
    梯形\(\tfrac12\big(f(t_i)+f(t_{i+1})\big)\Delta t\)\(O(\Delta t^2)\)
    Simpson\(\tfrac{\Delta t}{6}\big(f(t_i)+4f(t_i+\tfrac{\Delta t}2)+f(t_{i+1})\big)\)\(O(\Delta t^4)\)

    阶数的来源是泰勒展开(2.4 节):中点法的一阶误差项恰好抵消,梯形法对线性函数精确,Simpson 法对三次多项式精确。

    积分一个微分方程

    机器人里的"积分"常常是边走边积:\(\dot x=f(x,t)\),下一时刻的值依赖当前值。最简单的做法 \(x_{k+1}=x_k+f(x_k,t_k)\,\Delta t\) 叫欧拉法,本质是左矩形法,一阶精度。更高阶的方法见 2.5 节。

    5机器人中的它:航位推算与惯导漂移

    航位推算(dead reckoning):已知前进速度 \(v\) 和转速 \(\omega\),用积分推出位姿:\(\dot x=v\cos\theta,\ \dot y=v\sin\theta,\ \dot\theta=\omega\)。下面让机器人以 \(v=1.5\) m/s、时变的 \(\omega(t)=0.9+0.4\sin 0.8t\) 行驶 20 秒。灰色是(用极小步长算出的)准确路径,其余是用步长 \(\Delta t\) 算出的结果。欧拉法每步用步初的朝向前进,可这一步里机器人一直在转,合适的朝向应该是步子中间的那个,于是每步带来约 \(\tfrac12\omega\Delta t\) 的朝向滞后,整条路径系统性地偏离。中点法用半步之后的朝向,这个滞后基本抵消。

    FIG 4航位推算:步长与陀螺偏置
    位置误差 (m,对数)
    灰:准确路径。琥珀:欧拉法。青:中点法。紫色虚线:在真实 ω 上加了一个常值陀螺偏置之后的准确积分。纵轴是 \(\log_{10}\)(距真实位置的距离)。
    • 把步长 Δt 调到 0.4 s 以上:欧拉法的终点误差超过 0.5 m,而中点法不到它的 1/4。
    • 加入 2°/s 以上的陀螺偏置:终点误差超过 1.5 m,并随时间不断增大。

    另一个更典型的例子是惯性导航:把加速度计读数积分两次得到位移。传感器哪怕有很小的常值偏置 \(b\),位置误差也会以 \(\tfrac12 b t^2\) 增长,时间多一倍,误差多四倍;再加上噪声,误差还会按随机游走扩散。试试看,几十秒之后会漂到多远:

    FIG 5加速度计二次积分
    机器人其实静止不动,真实加速度为 0。青色是积分两次得到的"位置",紫色虚线是纯偏置造成的 \(\tfrac12bt^2\)。
    • 让一个"静止"的机器人在 30 s 内"漂"出 10 m 以上。
    真实系统里

    没有人把原始积分直接拿来用:里程计要靠 IMU、视觉或 GPS 周期性地校正(卡尔曼滤波,4.8 节),误差的增长规律(线性、二次、随机游走)决定了校正必须多频繁。三维里的朝向不能直接把角速度逐分量积分,要用李群上的指数映射(5.6 节)。

    6常见误区

    误区 1:步长越小越好

    步长小到一定程度,舍入误差反而主导。FIG 3 里 Simpson 曲线最后变平就是这样。另外,传感器采样率是固定的,积分的"步长"往往就是采样周期,你并不能随意选。

    误区 2:积分是"平均",误差会抵消

    随机噪声确实有一部分相互抵消,但偏置不会,它每一步都往同一个方向推。偏置积一次线性增长,积两次平方增长。这也是为什么零偏标定对 IMU 如此重要。

    误区 3:忘了 \(\Delta t\) 不均匀

    传感器时间戳有抖动、丢帧。把 \(\Delta t\) 当成常数会在积分里引入系统误差。应该用时间戳之差,并检查异常大的间隔。

    误区 4:高阶方法一定更好

    高阶方法的优势只在被积函数光滑时才有。接触、碰撞、限幅、符号函数这类"拐点"会把它的收敛阶拉回到 1 或 2 阶(FIG 3 的"拐点")。这些地方要么把区间在拐点处切开,要么用事件检测。

    7小练习

    1. 速度 \(v(t)=3t\)(m/s),从 \(t=0\) 到 \(t=2\) s,走了多远?
    \(\int_0^2 3t\,\mathrm dt=\tfrac32t^2\big|_0^2=6\)。几何上:底 2、高 6 的三角形,面积 \(\tfrac12\cdot2\cdot6=6\)。
    2. 用梯形法,把分段数 \(n\) 加倍,误差大约变成原来的……
    梯形法是 2 阶方法,误差 \(\propto\Delta t^2\propto 1/n^2\)。(Simpson 法才是 1/16。)
    3. 静止的机器人,加速度计有常值偏置 \(b=0.05\ \mathrm{m/s^2}\),把读数积分两次,10 秒后"位置"漂了多远?
    \(\tfrac12bt^2=\tfrac12\times0.05\times100=2.5\) m。把时间加到 20 s 就是 10 m。
    4. 用欧拉法对匀速转弯的机器人推算位置。把步长 \(\Delta t\) 加倍,位置误差大约变成原来的……
    欧拉法是一阶方法,朝向滞后 \(\tfrac12\omega\Delta t\) 与步长成正比,位置误差也随之加倍。中点法是二阶的,才会变成四倍。
    5. \(F(b)=\int_0^b f(t)\,\mathrm dt\),则 \(F'(b)\) 等于?
    微积分基本定理:累计量的变化率就是被积函数在当前点的值,即 FIG 2 中的切线斜率。

    8延伸阅读

    • 3Blue1Brown, Essence of Calculus — 第 8 章:积分与导数的关系
    • G. Strang, Calculus (MIT OpenCourseWare) — 积分与基本定理
    • L. N. Trefethen, Approximation Theory and Approximation Practice — 数值积分与高阶规则
    • T. Barfoot, State Estimation for Robotics — 运动模型与里程计误差的累积
    • O. Woodman, An introduction to inertial navigation, Univ. of Cambridge Tech. Rep. UCAM-CL-TR-696 — 惯导误差的来源与增长