传感器仿真是缩小仿真与现实差距的关键环节。真实机器人系统中,控制策略必须基于带噪声、延迟和偏差的传感器数据做出决策。本章深入探讨各类传感器的物理建模、噪声特性分析以及标定方法,帮助读者构建更真实的仿真环境,提高强化学习策略的现实部署成功率。我们将从视觉传感器的光学仿真开始,逐步覆盖力觉、触觉等多模态感知系统,最后讨论系统级的传感器融合与标定技术。
完成本章学习后,您将能够:
视觉传感器是机器人感知的核心。从物理原理出发,相机成像过程可以用针孔模型近似描述。三维世界点 $\mathbf{X}_w = [X_w, Y_w, Z_w]^T$ 到像素坐标 $[u, v]$ 的映射涉及多个坐标系变换:
\[s \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = \mathbf{K} \mathbf{P} \mathbf{T}_{cw} \begin{bmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{bmatrix}\]其中内参矩阵 $\mathbf{K}$ 包含焦距和主点:
\[\mathbf{K} = \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix}\]| 投影矩阵 $\mathbf{P} = [\mathbf{I}_{3×3} | \mathbf{0}{3×1}]$ 执行透视投影,$\mathbf{T}{cw}$ 是相机外参变换矩阵。 |
真实镜头存在径向和切向畸变。Brown-Conrady模型是工业标准:
径向畸变: \(\begin{aligned} x_d &= x_u(1 + k_1 r^2 + k_2 r^4 + k_3 r^6) \\ y_d &= y_u(1 + k_1 r^2 + k_2 r^4 + k_3 r^6) \end{aligned}\)
切向畸变: \(\begin{aligned} x_d &= x_u + [2p_1 x_u y_u + p_2(r^2 + 2x_u^2)] \\ y_d &= y_u + [p_1(r^2 + 2y_u^2) + 2p_2 x_u y_u] \end{aligned}\)
其中 $r^2 = x_u^2 + y_u^2$ 是归一化平面上的径向距离。
相机噪声源包括:
光子噪声(Shot Noise):遵循泊松分布 \(P(k; \lambda) = \frac{\lambda^k e^{-\lambda}}{k!}\) 其中 $\lambda$ 是期望光子数,与光强成正比。
读出噪声(Read Noise):高斯分布 \(n_{read} \sim \mathcal{N}(0, \sigma_{read}^2)\)
暗电流噪声(Dark Current):热电子产生 \(n_{dark} = \sqrt{D \cdot t_{exp}} \cdot \xi, \quad \xi \sim \mathcal{N}(0, 1)\)
总噪声模型: \(I_{observed} = g \cdot (I_{photon} + n_{dark}) + n_{read} + n_{quantization}\)
全局快门的运动模糊可用时间积分表示: \(I_{blur}(x, y) = \frac{1}{t_{exp}} \int_0^{t_{exp}} I(x + v_x(t), y + v_y(t)) dt\)
滚动快门(Rolling Shutter)产生几何畸变: \(t_{row}(y) = t_0 + \frac{y}{H} \cdot t_{readout}\)
每行的曝光时间不同,导致快速运动物体的扭曲。
结构光深度相机通过投影编码图案测量深度: \(Z = \frac{f \cdot b}{d}\) 其中 $b$ 是基线,$d$ 是视差。
ToF相机测量光飞行时间: \(d = \frac{c \cdot \Delta\phi}{4\pi f_{mod}}\)
深度噪声模型: \(\sigma_z = \alpha \cdot z^2 + \beta\)
六轴F/T传感器测量三个力分量和三个力矩分量。应变片布置遵循惠斯通电桥原理:
\[\begin{bmatrix} F_x \\ F_y \\ F_z \\ M_x \\ M_y \\ M_z \end{bmatrix} = \mathbf{C} \begin{bmatrix} V_1 \\ V_2 \\ \vdots \\ V_n \end{bmatrix}\]其中 $\mathbf{C}$ 是标定矩阵,$V_i$ 是电桥输出电压。
力传感器的动态响应可用二阶系统建模: \(\ddot{x} + 2\zeta\omega_n\dot{x} + \omega_n^2 x = \omega_n^2 F_{applied}\)
频率响应: \(H(j\omega) = \frac{1}{1 - (\omega/\omega_n)^2 + j2\zeta(\omega/\omega_n)}\)
带宽限制导致高频力信号衰减和相位滞后。
温度影响: \(F_{measured} = F_{true}(1 + \alpha \Delta T) + F_{offset}(T)\)
迟滞效应用Preisach模型描述: \(y(t) = \int\int_{\alpha \geq \beta} \mu(\alpha, \beta) \gamma_{\alpha\beta}[u(t)] d\alpha d\beta\)
传感器轴间串扰: \(\mathbf{F}_{measured} = (\mathbf{I} + \mathbf{X})\mathbf{F}_{true} + \mathbf{n}\)
其中 $\mathbf{X}$ 是串扰矩阵,典型值为1-3%。
触觉传感器将接触力分布转换为空间采样信号:
Contact Force Distribution
┌─────────────────────┐
│ ╱╲ ╱╲ ╱╲ │
│ ╱ ╲ ╱ ╲ ╱ ╲ │ → Taxel Grid
│╱ ╲╱ ╲╱ ╲ │
└─────────────────────┘
↓ ↓ ↓ ↓ ↓
[p₁, p₂, p₃, ..., pₙ]
单个触觉单元(taxel)响应: \(p_i = \int_{\Omega_i} \sigma(\mathbf{x}) \cdot w_i(\mathbf{x}) d\mathbf{x}\)
其中 $\sigma(\mathbf{x})$ 是压力分布,$w_i$ 是空间权重函数。
增量式编码器: \(\theta_{measured} = \theta_0 + \frac{2\pi \cdot N_{counts}}{N_{resolution}}\)
量化噪声: \(\epsilon_{quant} \sim \mathcal{U}(-\Delta\theta/2, \Delta\theta/2)\)
其中 $\Delta\theta = 2\pi/N_{resolution}$。
加速度计测量: \(\mathbf{a}_{measured} = \mathbf{R}_{sb}(\mathbf{a}_{true} - \mathbf{g}) + \mathbf{b}_a + \mathbf{n}_a\)
陀螺仪测量: \(\boldsymbol{\omega}_{measured} = \mathbf{R}_{sb}\boldsymbol{\omega}_{true} + \mathbf{b}_g + \mathbf{n}_g\)
偏差随机游走: \(\dot{\mathbf{b}} = \mathbf{n}_b, \quad \mathbf{n}_b \sim \mathcal{N}(0, \sigma_b^2\mathbf{I})\)
电机电流与输出力矩的关系: \(\tau = K_t \cdot i - \tau_{friction}(sign(\dot{\theta}))\)
电流测量噪声: \(i_{measured} = i_{true} + n_{ADC} + i_{ripple}(\theta_{elec})\)
加性高斯白噪声(AWGN): \(y = x + n, \quad n \sim \mathcal{N}(0, \sigma^2)\)
乘性噪声: \(y = x(1 + n), \quad n \sim \mathcal{N}(0, \sigma_m^2)\)
量化噪声: \(y = \lfloor x/\Delta + 0.5 \rfloor \cdot \Delta\)
$1/f$ 噪声(粉红噪声): \(S(f) = \frac{K}{f^\alpha}, \quad \alpha \approx 1\)
Allan方差用于识别惯性传感器噪声特性: \(\sigma_y^2(\tau) = \frac{1}{2}\langle(y_{k+1} - y_k)^2\rangle\)
不同噪声源在log-log图上的斜率:
最小二乘标定: \(\min_{\boldsymbol{\theta}} \sum_{i=1}^N \|y_i - f(\mathbf{x}_i; \boldsymbol{\theta})\|^2\)
贝叶斯标定考虑先验: \(p(\boldsymbol{\theta}|\mathbf{y}) \propto p(\mathbf{y}|\boldsymbol{\theta}) p(\boldsymbol{\theta})\)
卡尔曼滤波器用于在线参数估计: \(\begin{aligned} \hat{\mathbf{x}}_{k|k-1} &= \mathbf{F}\hat{\mathbf{x}}_{k-1|k-1} \\ \mathbf{P}_{k|k-1} &= \mathbf{F}\mathbf{P}_{k-1|k-1}\mathbf{F}^T + \mathbf{Q} \\ \mathbf{K}_k &= \mathbf{P}_{k|k-1}\mathbf{H}^T(\mathbf{H}\mathbf{P}_{k|k-1}\mathbf{H}^T + \mathbf{R})^{-1} \end{aligned}\)
不同任务的传感器配置:
抓取任务:
运动控制:
域随机化中的传感器噪声增强: \(\mathbf{o}_{train} = \mathbf{o}_{clean} + \alpha \cdot \mathbf{n}_{random}\)
其中 $\alpha \sim \mathcal{U}[\alpha_{min}, \alpha_{max}]$ 控制噪声强度。
预测控制补偿传感器延迟: \(\hat{\mathbf{s}}_{t+\Delta t} = \mathbf{s}_t + \int_t^{t+\Delta t} f(\mathbf{s}, \mathbf{a}) d\tau\)
互补滤波器融合IMU和编码器: \(\theta_{fused} = \alpha \cdot \theta_{IMU} + (1-\alpha) \cdot \theta_{encoder}\)
其中 $\alpha$ 根据频率特性选择。
Rudolf E. Kálmán在1960年发表的论文”A New Approach to Linear Filtering and Prediction Problems”彻底改变了状态估计领域。作为匈牙利裔美国数学家,Kalman提出的递归滤波算法不仅在阿波罗登月计划中发挥关键作用,更成为现代传感器融合的理论基石。
Kalman滤波器的优雅之处在于其贝叶斯框架下的最优性:给定线性系统和高斯噪声假设,它提供最小均方误差估计。这一理论突破使得从噪声测量中提取有用信息成为可能,直接推动了GPS、自动驾驶和机器人导航等技术的发展。
| 量子传感器利用量子叠加和纠缠实现超越经典极限的测量精度。量子态 $ | \psi\rangle$ 对参数 $\theta$ 的Fisher信息: |
量子Cramér-Rao界限: \(\Delta\theta \geq \frac{1}{\sqrt{n F_Q(\theta)}}\)
位置-动量不确定性: \(\Delta x \cdot \Delta p \geq \frac{\hbar}{2}\)
这对力传感器的带宽-灵敏度权衡施加了基本限制。
虽然当前机器人系统主要使用经典传感器,但在纳米尺度操作和极端环境下,量子效应不可忽略:
\[\langle\Delta F^2\rangle_{quantum} = \langle\Delta F^2\rangle_{classical} + \frac{\hbar\omega}{2}\coth\left(\frac{\hbar\omega}{2k_BT}\right)\]本章系统介绍了机器人仿真中的传感器建模方法:
关键概念:
核心公式:
| Kalman更新:$\hat{\mathbf{x}}_{k | k} = \hat{\mathbf{x}}_{k | k-1} + \mathbf{K}k(\mathbf{z}_k - \mathbf{H}\hat{\mathbf{x}}{k | k-1})$ |
实践要点:
14.1 相机内参标定 给定棋盘格标定图像,其中一个角点的世界坐标为$(0, 0, 0)$,像素坐标为$(320, 240)$。相机距离棋盘格500mm,像素尺寸为5μm。计算焦距$f_x$和$f_y$(假设无畸变)。
Hint: 使用针孔相机模型的投影关系。
14.2 力传感器带宽分析 一个力传感器的自然频率$\omega_n = 1000$Hz,阻尼比$\zeta = 0.7$。计算: a) -3dB带宽 b) 100Hz正弦力信号的幅值衰减和相位滞后
Hint: 使用二阶系统的频率响应函数。
14.3 IMU噪声参数估计 给定IMU陀螺仪的Allan方差数据点:
识别主要噪声源并估计参数。
Hint: 不同噪声源在log-log图上有特定斜率。
14.4 深度相机误差建模 设计一个实验来标定结构光深度相机的误差模型$\sigma_z = \alpha z^2 + \beta$。描述: a) 实验设置 b) 数据采集协议 c) 参数拟合方法 d) 验证策略
Hint: 考虑不同距离、不同材质的标定板。
14.5 多传感器时间同步 设计一个算法来估计和补偿相机(30Hz)、IMU(200Hz)和力传感器(1kHz)之间的时间偏移。考虑:
Hint: 利用运动事件在不同传感器中的相关性。
14.6 触觉SLAM 提出一种基于触觉传感器的SLAM(Simultaneous Localization and Mapping)算法框架。考虑:
Hint: 借鉴视觉SLAM但考虑触觉的独特性。
14.7 传感器故障检测与容错 设计一个基于模型的传感器故障检测系统,能够: a) 检测传感器故障(突变、漂移、卡死) b) 隔离故障传感器 c) 重构丢失的测量
Hint: 使用解析冗余和观测器设计。
错误:忽略有限曝光时间
# 错误:瞬时采样
image = render(scene, t)
# 正确:时间积分
image = integrate(lambda t: render(scene, t), t0, t0+exposure_time)
错误:线性化畸变模型
错误:忽略安装刚度
错误:静态标定用于动态测量
错误:直接积分加速度获取位置
# 错误:误差快速累积
position += velocity * dt
velocity += acceleration * dt
# 正确:使用滤波器融合
ekf.predict(imu_data)
ekf.update(external_measurement)
错误:假设即时通信
错误:所有噪声都是高斯白噪声