随机变量与分布
激光测距仪对着同一面墙连测十次,读数从来不会完全一样;轮子"走了 1 米",实际可能是 0.97 米。机器人必须把每个测量、每次动作都当成一个随机变量:取值事先不确定,但并非毫无规律,规律就写在它的分布里。这一节从"我在走廊的哪一格"出发,建立概率质量、概率密度、累积分布这三个最基本的工具。
1为什么机器人需要它
机器人世界里几乎没有哪个数字是确切的。同一面墙,激光测出来是 2.01 m、1.98 m、2.03 m……;同一个角点,相机今天检测在第 312.4 列,明天在 312.9 列;让电机"转 90°",它可能转了 88°。更糟的是,传感器偶尔还会给出完全离谱的读数:激光打在玻璃上穿了过去,或者被人走过挡了一下。
如果把测量当成"一个数",机器人只能硬着头皮信它,或者干脆全不信。把它当成随机变量 (random variable),机器人才能问出真正有用的问题:
- 这次读数是 2.4 m,而我以为墙在 2.0 m,这有多反常?是正常抖动,还是前面有障碍物?
- 我现在在走廊的哪一格?每一格各有多大把握?
- 两个传感器说法不一,我该各信几分?
回答这些问题的语言就是概率。本节只做一件事:把"不确定的数"变成可以计算的对象,也就是分布 (distribution)。后面四节会依次教你怎么用读数更新分布(4.2)、怎么用几个数概括分布(4.3)、最常用的分布长什么样(4.4)、分布怎样穿过一个函数(4.5),最后在 4.8 汇合成卡尔曼滤波。
2直觉:一根根加起来恒为 1 的柱子
先看最简单的情形。走廊被分成 8 格,机器人不知道自己在哪一格。把"所在格子的编号"记作 \(X\),它每次取哪个值事先不确定,这样的量就是随机变量。它的"规律"是一张表:每一格对应多大概率。这张表叫概率质量函数 (PMF),画出来就是一排柱子。
PMF 只有两条铁律:每根柱子 \(\ge 0\);所有柱子的和恰好等于 1,因为机器人一定在某一格里。概率像一桶总量固定的沙子:这一格多分一点,别的格子就得让出来。亲手试一次:在图里按住并拖动任意一根柱子。
- 把一格的概率拉到 60% 以上,观察其余七格发生了什么。
- 点"抽样 ×100",让紫色圆圈和柱顶对齐。再改一下分布,重新抽样一次。
- 调整分布和区间,使"区间只含 2 格,但概率超过 80%"。
分布 = "概率的总量 1 在各个取值上怎么分配"。均匀分布是"毫无头绪",一根独高的柱子是"心里有数",两根高柱子是"在两个地方之间拿不准"。后面所有的滤波器,本质上都是在不断重新分配这桶沙子。
3动手玩:从样本到密度曲线
测距读数不是 8 个格子之一,而是一个连续的实数。此时"每个取值的概率"没有意义(任何一个精确的数,被命中的概率都是 0,后面会解释),要用概率密度函数 (PDF) \(f(x)\):把样本按宽度 \(\Delta x\) 分箱,每箱的高度 = 落入该箱的比例 ÷ 箱宽。样本越多、箱越窄,这个"直方图"就越逼近一条光滑曲线,那条曲线就是 \(f(x)\)。
下面的实验用固定的随机种子依次抽样。拉动 N 看直方图怎么"长出来",再换几种分布:高斯是典型的测距噪声,均匀是"只知道范围",指数是"离下一个意外有多远",双峰是"可能看到墙,也可能看穿门洞"。
- 把 N 拉到 12 以下:直方图和真实曲线差多远?只看这几个点,你能认出这是哪种分布吗?
- N 拉到 2000 以上,箱数设在 12 到 40 之间:柱顶是否紧贴曲线?
- 保持 N 不变,把箱数拉到 55 以上:直方图变得又细又毛。箱宽太窄时,每个箱里没几个样本,结果反而更不可信。
你手里永远只有有限个样本,分布本身是摸不到的理想对象。样本是分布的"证据",分布是样本的"模型"。把两者混为一谈是初学者的头号误区(见第 7 节)。
4第二个视角:概率是面积,累积分布是面积的累计
连续随机变量落在区间 \([a, b]\) 里的概率,等于密度曲线在这一段下面的面积。曲线的"高度"本身不是概率,只有乘上宽度(也就是面积)才是。这带来两个看似反常、其实顺理成章的事实:
- 密度值可以大于 1(只要总面积是 1,窄而高的曲线是完全合法的);
- 区间缩成一个点,面积变成 0,所以任何单个精确值的概率都是 0,哪怕这个值的密度很高。
另一种记账方式是累积分布函数 (CDF) \(F(x) = P(X \le x)\):从最左边一路累计面积。CDF 从 0 单调升到 1,而 \(P(a \lt X \le b) = F(b) - F(a)\),也就是 CDF 上两点的纵坐标之差。拖动图中的 \(a\)、\(b\) 看看这两种读法怎么对上。
- 选"窄均匀"分布:确认密度值是 2,可总面积仍是 1。
- 把 \(a\) 和 \(b\) 挤到一起(宽度 < 0.03):面积趋于 0,哪怕此处密度不小。
- 在"标准高斯"里令 \(a = -2,\ b = 2\):概率约为 0.954。这是"±2σ 约含 95%"的来历。
5再看数学
提示:悬停带底色的公式部分,对应图中的柱子、阴影或曲线会高亮(FIG 1 和 FIG 3)。
离散:概率质量函数
随机变量写大写 \(X\),它的一个具体取值写小写 \(x\)。若 \(X\) 只取可数个值 \(x_1, x_2, \dots\),PMF 为 \(p(x_i) = P(X = x_i)\),满足
连续:密度与累积分布
连续随机变量用密度 \(f(x) \ge 0\) 描述,概率是面积;CDF 是从左到 \(x\) 的累计面积,反过来,密度是 CDF 的斜率:
离散与连续可以统一:离散时把积分换成求和,\(f\) 换成 \(p\)。注意 \(f(x)\,dx\) 才对应"概率":\(f(x)\) 是"每单位 \(x\) 的概率",所以它的单位是 \(x\) 单位的倒数,数值可以大于 1。
多个变量:联合、边缘与独立
机器人的状态往往是好几个变量一起:位置 \((x, y)\)、朝向 \(\theta\)。它们的联合分布 \(p(x, y)\) 描述"同时取这两个值"的可能性。想只关心其中一个,就把另一个积掉,得到边缘分布 (marginal);如果联合分布恰好等于两个边缘的乘积,就称两个变量独立:
"在已知 \(Y\) 的前提下 \(X\) 的分布"叫条件分布,它是下一节(4.2)的主角,贝叶斯定理就从它来。
| 符号 | 含义 | 在图里 |
|---|---|---|
| \(X,\ x\) | 随机变量与它的一个取值 | FIG 1 的格子编号 |
| \(p(x_i)\) | 概率质量:\(X = x_i\) 的概率 | FIG 1 的柱高 |
| \(f(x)\) | 概率密度:单位长度上的概率 | FIG 2、FIG 3 的曲线高度 |
| \(F(x)\) | 累积分布:\(P(X \le x)\) | FIG 3 下图 |
| \(p(x, y)\) | 联合分布 | 4.3 起的二维图 |
机器人学的文献里经常省略大小写,直接写 \(p(x)\),让上下文说明它是 PMF 还是 PDF。状态记作 \(x\),测量记作 \(z\),控制记作 \(u\),对状态的信念记作 \(\mathrm{bel}(x)\)。本课程也这样写(符号遵循 Thrun 等人的 Probabilistic Robotics)。
6机器人中的它:激光测距的传感器模型
真实的激光读数 \(z\) 并不是"真值加一点高斯噪声"这么干净。要给传感器建模,就是写出给定机器人的真实状态,读数的分布 \(p(z \mid x)\)。对一束激光,若墙真的在 \(z^*\),经典的"光束模型"(beam model) 把读数分布写成四种成因的混合 (mixture):
- 命中:正常测到那面墙,读数是以 \(z^*\) 为中心的高斯;
- 过短:光束被意外的东西(行人、灰尘)挡住,读数落在 \(z^*\) 之前,近处更常见,用截断指数分布;
- 最大量程:什么都没打到(或打在玻璃、黑色吸光物上),传感器返回 \(z_{\max}\),这是一个点质量;
- 随机:毫无来由的乱读数,在 \([0, z_{\max}]\) 上均匀分布。
四种成因各占一定比例,比例之和为 1。拖动图中的 \(z^*\),调整滑块,看总分布(黄色)怎么由四块拼成。
- 拖动 \(z^*\):命中峰跟着走,"过短"的那块面积随着 \(z^*\) 变长而变宽(它只在 \(z^*\) 之前有值)。
- 选"拥挤的人群"预设,让命中成分低于 60%:这时一个读数"打在墙上"的把握有多大?
写成公式
\(\eta\) 只是保证"过短"成分的总面积是 1 的归一化常数,\(\delta\) 是点质量(狄拉克函数)。这个模型的威力在于诚实:它承认传感器会出错,所以遇到一个离谱读数,不会得出"概率为 0,不可能"的结论,只会觉得"有点可疑"。如果只用纯高斯,一个 3 米外的离群点会让似然几乎为 0,整个滤波器会被它带崩。
蒙特卡洛定位 (AMCL,ROS 导航栈的标配) 的激光模型有两种:一种就是这里的光束模型,一种是更便宜的"似然场模型"。它们的参数 \(w_\cdot, \sigma, \lambda\) 通常从真实数据里拟合:让机器人对着已知墙壁扫几千次,用最大似然估计(本章 4.6)把这四个比例和两个宽度找出来。
7常见误区
"\(f(2.0) = 3.99\),概率怎么会是 399%?" 因为 \(f\) 不是概率,\(f(x)\,dx\) 才是。同样,"在 2.0 m 处读数的概率"这句话本身就问错了:问"读数落在 \([1.99, 2.01]\) 里的概率"才有意义,答案大约是 \(f(2.0) \times 0.02\)。
三个读数的平均值不是真值,三个读数的直方图也不是分布(FIG 2 里 N 很小时的样子)。另外,"随机"不一定指世界在掷骰子。墙就在 2.000 m 处,一动不动,随机性来自我们的知识不完整。机器人的位置是确定的,只是它自己不知道,于是用分布来表示"我的把握"。这种用概率描述信念的观点,是整个概率机器人学的出发点。
你经常会先得到"正比于概率"的数(比如每格的得分 1, 2, 5),而不是概率本身。它们加起来不是 1,不能当分布用。除以总和(归一化)才行:\(p_i = w_i / \sum_j w_j\)。下一节的贝叶斯更新,最后一步就是这个。
两个变量独立,则它们互不影响;反过来不成立。4.3 节会给出一个反例:\(y = x^2\) 完全由 \(x\) 决定,但它们"线性相关系数"恰好是 0。
8小练习
9延伸阅读
- S. Thrun, W. Burgard & D. Fox, Probabilistic Robotics, MIT Press, 2005, Sec. 2.2 and Sec. 6.3 — 机器人学里的概率记号,以及本节的光束测距模型
- T. D. Barfoot, State Estimation for Robotics, Cambridge University Press, 2017, Ch. 2 — 面向机器人的概率论速成
- C. M. Bishop, Pattern Recognition and Machine Learning, Springer, 2006, Sec. 1.2 — 概率密度、期望与高斯分布,讲得清晰
- J. Blitzstein & J. Hwang, Introduction to Probability, CRC Press — 哈佛 Stat 110 的教材,例子丰富,适合建立直觉
- C. M. Grinstead & J. L. Snell, Introduction to Probability, American Mathematical Society — 可免费下载的入门教材