卡尔曼滤波器简介——多维卡尔曼滤波
原文:多维卡尔曼滤波 (kalmanfilter.net)
目录
前言
基本背景
状态外推方程
示例 - 飞机 - 无控制输入
示例 - 带控制输入的飞机
示例 – 坠落物体
状态外推方程维度
线性时不变系统
线性动态系统建模
状态外推方程的推导
状态空间表示形式
示例 - 等速运动体
高阶动态系统建模
示例 - 恒加速度运动体
示例:质量弹簧阻尼系统
求解微分方程
无输入变量的动态系统
具有输入变量的动态系统
协方差外推方程
无过程噪声的估计不确定度
构造过程噪声矩阵 Q
离散噪声模型
连续噪声模型
选择哪种型号?
测量公式
观察矩阵 H
缩放
状态选择
状态组合
测量方程尺寸
中期摘要
预测方程
状态外推方程
协方差外推方程
辅助方程
测量公式
协方差方程
状态更新公式
状态更新公式维度
协方差更新方程
协方差更新方程推导
卡尔曼增益
卡尔曼增益方程推导
简化协方差更新公式
总结
例子
示例 9 – 车辆位置估计
状态外推方程
协方差外推方程
测量公式
卡尔曼增益
状态更新公式
协方差更新方程
数值示例
示例分析
示例 10 – 火箭高度估计
状态外推方程
协方差外推方程
测量公式
卡尔曼增益
状态更新公式
协方差更新方程
数值示例
示例分析
前言
阅读“一维卡尔曼滤波”部分后,您应该熟悉卡尔曼滤波的概念。在本节中,我们推导出多维(多变量)卡尔曼滤波方程。
本教程部分介绍线性卡尔曼滤波器 (LKF)。LKF假设系统动力学是线性的。
到目前为止,我们已经处理了一维过程,例如估计液体温度。但许多动态过程具有两个、三个甚至更多的维度。
例如,描述飞机在空间中位置的状态向量是三维的:
描述飞机位置和速度的状态向量是六维的:
描述飞机位置、速度和加速度的状态向量是九维的:
假设一个恒定加速度动力学模型,我们可以通过九个运动方程来描述时间\(n\)处的外推飞机状态:
通常的做法是用矩阵形式的单个方程描述多维过程。
首先,写出所有这些方程是非常累人的;用矩阵表示法表示它们更短,更优雅。
其次,计算机在矩阵计算方面非常高效。以矩阵形式实现卡尔曼滤波可缩短计算运行时间。
以下章节以矩阵形式描述卡尔曼滤波方程。当然,理论部分之后是完全求解的数值示例。
最后一章包括两个数值示例。在第一个例子中,我们设计了一个没有控制输入的六维卡尔曼滤波器。在第二个示例中,我们设计了一个带有控制输入的二维卡尔曼滤波器。
基本背景
状态外推方程
我想描述的第一个卡尔曼滤波方程是状态外推方程。
使用状态外推方程,我们可以根据对当前状态的了解来预测下一个系统状态。它将状态向量从现在(时间步长 n )外推到未来(时间步长 n + 1 )。
状态外推方程描述了动态系统的模型。在文献中,它也被称为:
- 预测变量方程
- 过渡方程
- 预测方程
- 动态模型
- 状态空间模型
矩阵表示法中状态外推方程的一般形式为:
是时间步长 \( n + 1 \) 处的预测系统状态向量 | |
是时间步长 \( n \) 处的估计系统状态向量 | |
是控制变量或输入变量 - 系统的可测量(确定性)输入 | |
是过程噪声或干扰 - 影响状态的不可测量输入 | |
是一个状态转换矩阵 | |
G | 是控制矩阵或输入转换矩阵(将控件映射到状态变量) |
下图提供了状态外推方程的示意图说明。
状态变量可能表示我们想知道的系统属性。
例如,移动的车辆具有三个属性:位置、速度和加速度。
您可能会问自己,哪些属性是状态变量,哪些属性是系统的输入?
- 移动机械系统具有位置、速度、加速度和阻力等属性。
- 作用在系统上的力应被视为外部强迫函数,即控制状态矢量(恒定加速度情况下的位置和速度)的系统的输入。
- 牛顿第二定律告诉我们 F = ma 。因此,我们可以将加速度视为系统的外部输入。
- 位置和速度是感兴趣的主要状态变量。
例如,在弹簧系统中,施加到弹簧 F(t) 的力是输入 u(t),而弹簧位移 x(t) 是系统状态。
对于下落的物体,输入是重力 和阻力 ,而物体高度 h(t) 和速度v(t) 是系统状态。
让我们看一下状态外推方程的几个例子。
示例 - 飞机 - 无控制输入
在此示例中,我们定义了飞机的状态外推方程,假设一个恒定的加速度模型。
在此示例中,没有控件输入。
我们将假设没有控制输入。我们将在下一个示例中看到控件输入。
考虑一架飞机在三维空间中以恒定加速度移动。描述笛卡尔坐标系中估计的飞机位置、速度和加速度的状态向量 ( x,y,z ) 为:
状态转换矩阵 F 为:
状态外推方程为:
矩阵乘法结果:
示例 - 带控制输入的飞机
此示例与前面的示例类似,但现在我们有一个传感器连接到飞行员的控件,因此我们根据飞行员的命令获得了有关飞机加速的其他信息。
描述笛卡尔坐标系中估计的飞机位置和速度的状态向量 为:
描述笛卡尔坐标系 ( x,y,z)中对照向量的飞机加速度的控制向量为:
状态转换矩阵 F 为:
控制矩阵 G 为:
状态外推方程为:
示例 – 坠落物体
考虑一个自由落体的物体。状态向量包括高度 h 和对象的速度 :
状态转换矩阵 F 为:
控制矩阵 G 为:
输入变量为:
其中 g 是引力加速度。
我们没有测量加速度的传感器,但我们知道对于下落物体,加速度等于g 。
状态外推方程如下所示:
矩阵乘法产生以下结果:
状态外推方程维度
下表指定了状态外推方程变量的矩阵维度:
变量 | 描述 |
---|---|
\ x | 状态向量 |
\ F | 状态转换矩阵 |
u | 输入变量 |
\ G | 控制矩阵 |
w | 过程噪声矢量 |
线性时不变系统
线性卡尔曼滤波器假设LTI(线性时不变)系统模型。
那么,什么是“线性”,什么是“时不变”?
线性系统由方程组描述,其中变量永远不会彼此相乘,而只是与常数相加,然后相加。线性系统用于描述变量之间的静态和动态关系。
线性系统是其输出函数 满足以下等式的系统:
其中:
a 和 b 是常数实数
g 和 h 是自变量 t 的任何任意函数
线性系统遵循两个基本规则:
- 您可以“分解”恒定乘法比例因子(上面的a 和 b )。
- 系统对输入总和的响应分别是对每个输入的响应总和。
时不变系统具有不是时间直接函数的系统函数。
让我们以增益为 ( G = 10 ) 的放大器为例。
这个系统是时不变的。尽管系统的输出随时间变化,但系统功能与时间无关。
时不变系统是指输入序列中的时间延迟(或移位)导致系统输出序列中的等效时间延迟的系统。
线性动态系统建模
嗯,这很容易描述飞机的动态模型。我想你从高中就熟悉牛顿的运动方程。
本章概括了任何线性动态系统的动态模型推导。以下描述包括积分方程和微分方程。
本章是本教程中最具挑战性的章节。理解卡尔曼滤波原理不需要它。如果您对这个数学感到不舒服 - 请随时跳过本章。
就我而言,我试图使我的解释尽可能简单易懂,当然,我提供了现实生活中的例子。
状态外推方程的推导
我们的目标是以以下形式推导出状态外推方程:
为此,我们需要对动态系统进行建模。换句话说,要弄清楚动态系统的状态空间表示。以下两个方程是 LTI 系统的状态空间表示:
x | 是状态向量 |
y | 是输出向量 |
A | 是系统的动态矩阵 |
B | 是输入矩阵 |
C | 是输出矩阵 |
D | 是馈通矩阵 |
要找到状态转移矩阵 F 和输入转换矩阵 G ,我们需要求解状态空间微分方程。
下图总结了状态外推方程推导的过程。
状态空间表示形式
您可能想知道为什么状态空间表示形式必须采用以下形式:
许多求解微分方程的计算机软件包都需要这种表示。
描述状态空间表示的最佳方式是通过示例。
示例 - 等速运动体
由于没有施加到身体上的外力,因此系统没有输入:
状态空间变量 x(t)是物体的位移 p(t) 和速度v(t)。
我们得到了微分形式的第一个方程。
动态系统输出 y(t) 是主体位移 p(t),它也是状态变量。
我们完成了。
高阶动态系统建模
许多动态系统模型由高阶微分方程描述。微分方程的阶数是微分方程中最高导数的数。
为了解决高阶方程,我们应该通过定义新变量并将它们代入最高阶项来将其简化为一阶微分方程。
微分方程阶的简化算法
一般的 n -th 阶线性微分方程可以表示为 n 一阶微分方程组。
动态系统的高阶控制方程如下所示:
控制方程完全表征了系统的动态状态。
减少方程阶数:
- 隔离最高阶导数:
y 及其第一个 n - 1 导数是这个系统的状态。
2.定义一个新变量 :设置 ,我们写:
现在,函数 是状态变量。
3.取状态变量的导数:
4. 将隔离的 项(参见步骤 1)代入最后一个等式:
5. 使用向量矩阵表示法表示生成的方程组:
就是这样。我们得到了以下形式的状态空间方程:
其中:
让我们看两个例子。
示例 - 恒加速度运动体
在这个例子中,有一个外力施加到身体上。
具有恒定加速度的运动物体的控制方程是牛顿第二定律:
其中:
p 是身体位置位移
m 是体重
F 是施加在身体上的外力
我们将把降阶算法应用于控制方程。
- 隔离最高阶导数:
2.定义新变量 和 :
和 是状态变量。
3. 取状态变量的导数
4.在最后一个等式中插入隔离的 项(请参阅步骤 1):
5.使用向量矩阵表示法表示生成的方程组:
请记住 。用 v 表示 会更有意义,因为 是体速。
我们可以将上面的等式重写如下:
或者
其中 a 是由施加的力 F 产生的身体加速度。
我们有一个公式,形式如下:
状态空间变量 x(t)是物体的位移 p(t) 和速度 v(t) 。
动态系统输出 y(t) 是主体位移 p(t),它也是状态变量的一个元素。
示例:质量弹簧阻尼系统
质量弹簧阻尼器系统包括三个基本要素:
- 质量 - 惯性元件
- 弹簧 - 弹性元件
- 阻尼器 - 摩擦元件
每个元素都有以下两种可能的能量行为之一:
- 存储提供给它的所有能量
- 通过“摩擦”效应将所有能量耗散成热量
质量将能量存储为动能。
当弹簧从其原始长度压缩时,它将能量存储为势能。
阻尼器以热量的形式耗散能量。
这三个组件:质量、弹簧和阻尼器,可以在一般意义上模拟任何动态响应情况。
该系统的力图如下所示。
弹簧力与质量的位置位移 p 成正比。
粘性阻尼力与质量的速度 成正比。
牛顿第二定律指出:
我们继续求和力并应用牛顿第二定律:
其中:
\( p \) 是身体位置位移
\( m \) 是体重
\( F \) 是施加在身体上的外力
\( k \) 是弹簧常数
\( c \) 是阻尼系数
该方程是一个控制方程,可以完全表征系统的动态状态。
我们将把降阶算法应用于控制方程。
更多示例
您可以在 ShareTechnote 网站上找到许多状态空间建模的精美示例。
求解微分方程
请记住,对于我们的卡尔曼滤波模型,我们需要确定以下形式的状态外推方程:
为了达到这个目标,我们将求解描述状态空间表示的微分方程。
我们可以使用计算机软件来解决微分方程或自己做。
让我们看看如何求解微分方程。
无输入变量的动态系统
没有外部输入的LTI动态系统可以用一阶微分方程来描述:
其中 A 是一个系统动力学矩阵。
我们的目标是找到状态转换矩阵 F。
我们需要求解微分方程来找到 F 。
在单个维度中,微分方程如下所示:
整合双方可产生以下结果:
求解积分:
同样,在多维情况下,对于:
解决方案是:
我们找到了状态转换矩阵 F :
是一个矩阵指数。
矩阵指数可以通过泰勒级数展开计算:
因此:
其中 是一个单位矩阵。
示例续 - 等速运动体
现在我们可以找到状态转换矩阵F对于等速运动方程。
以下一组微分方程可以描述恒定速度动力学模型。
以矩阵形式:
让我们计算
由于 , 的更高幂也等于 0。
现在,我们可以找到恒定速度模型的状态转换矩阵:
具有输入变量的动态系统
对于零阶保持采样,假设输入是分段常数,状态空间方程的一般解形式为:
由以下给出:
如果我们删除输入变量 ,我们得到上一章中得出的解决方案。
我不打算证明这一点——你可以在汤姆·M·阿波斯托尔的“微积分”教科书(第二版)、定理 8.3 或任何其他微积分教科书中找到证明。
现在让我们求解恒加速度运动体的状态空间方程和质量-弹簧-阻尼器系统示例。
示例续 - 恒加速度运动体
回想一下,恒定加速度运动体的状态空间表示为:
其中:
让我们求解等式:
结果 F
我们已经解决了
查找 G
的一般公式是幂级数:
的较高幂也等于 0。
现在,我们可以编写状态外推方程:
示例续 - 质量弹簧阻尼系统
回想一下,质量弹簧阻尼器系统的状态空间表示为:
在这个例子中,矩阵指数的计算并不容易,因为 A 的高幂不为零。
此微分方程的解超出了本教程的范围。
协方差外推方程
我假设读者已经熟悉协方差外推(预测)的概念。我们已经在“一维卡尔曼滤波”部分中遇到了协方差外推方程(或预测变量协方差方程)。在本节中,我们用矩阵符号推导出卡尔曼滤波协方差外推方程。
协方差外推方程的一般形式由下式给出:
是当前状态的估计值(协方差矩阵)的不确定性
是下一个状态的预测(协方差矩阵)的不确定性
F 是我们在“线性动态系统建模”部分中推导出的状态转换矩阵
Q 是过程噪声矩阵
无过程噪声的估计不确定度
假设过程噪声等于零 Q=0,则:
推导相对简单。我在“基本背景II”部分中展示了:
其中向量 x 是系统状态向量。
因此:
根据状态外推方程:
因此:
应用矩阵转置属性:
构造过程噪声矩阵 Q
如您所知,系统动态描述如下:
其中 是时间步长 n 处的进程噪声。
我们已经在“一维卡尔曼滤波器”部分讨论了过程噪声及其对卡尔曼滤波器性能的影响。在一维卡尔曼滤波器中,过程噪声方差用 q 表示。
在多维情况下,过程噪声是一个协方差矩阵,用 表示。
我们已经看到,过程噪声方差对卡尔曼滤波器的性能有关键影响。太小的 q 会导致滞后错误(see Example 7)。如果 q 值太高,卡尔曼滤波器将遵循测量值(see Example 8)并产生噪声估计值。
过程噪声可以在不同的状态变量之间独立。在这种情况下,过程噪声协方差矩阵 是对角矩阵:
过程噪声也可能取决于。例如,恒定速度模型假定加速度为零 (a=0)。但是,加速度 的随机方差会导致速度和位置的方差。在这种情况下,过程噪声与状态变量相关。
环境过程噪声有两种模型。
- 离散噪声模型
- 连续噪声模型
离散噪声模型
离散噪声模型假设噪声在每个周期不同,但在周期之间是恒定的。
对于等速度模型,过程噪声协方差矩阵如下所示:
我们用模型的随机加速度方差来表示位置和速度方差和协方差:。
我们使用“基本背景II”部分中的期望算术规则推导出矩阵元素。
现在我们可以将结果代入 矩阵:
有两种方法可以更快地构造 矩阵。
使用状态转换矩阵进行投影
如果动态模型不包含控制输入,我们可以使用状态转换矩阵在动态模型上投影加速度 的随机方差。
让我们定义一个矩阵 :
过程噪声矩阵为:
对于运动模型,矩阵由下式给出:
使用控制矩阵进行投影
如果动态模型包含控制输入,我们可以更快地计算矩阵。我们可以使用状态转移矩阵在动态模型上投影加速度 的随机方差。
其中 是控制矩阵(或输入转换矩阵)。
对于运动模型,矩阵由下式给出:
您可以使用上述方法来构造离散 矩阵。
连续噪声模型
连续模型假设噪声随时间连续变化。
为了推导出连续模型 的过程噪声协方差矩阵,我们需要随着时间的推移对离散过程噪声协方差矩阵进行积分。
选择哪种型号?
在回答此问题之前,您需要为过程噪声方差选择正确的值。您可以使用随机统计公式进行计算,也可以根据您的工程实践选择一个合理的值(最好)。
在雷达世界中,取决于目标特性和模型完整性。对于机动目标,如飞机,应该相对较高。对于非机动目标,如火箭,您可以使用较小的 。模型完整性也是选择过程噪声方差的一个因素。如果您的模型包含空气阻力等环境影响,则过程噪声随机性的程度较小,反之亦然。
选择合理的过程噪声方差值后,应选择噪声模型。它应该是离散的还是连续的?
这个问题没有明确的答案。我建议尝试这两种模型,并检查哪一个在卡尔曼滤波器上表现更好。当 非常小时,可以使用离散噪声模型。当较高时,最好使用连续噪声模型。
测量公式
到目前为止,我们已经处理了未来。我们推导出了两个卡尔曼滤波预测方程:
- 状态外推方程
- 协方差外推方程
从现在开始,我们将处理现在。让我们从测量方程式开始。
在“一维卡尔曼滤波器”部分,我们用 表示测量值。
测量值表示除测量设备引起的随机测量噪声 之外的真实系统状态。
每次测量的测量噪声方差 可以是恒定的 - 例如,精度为 0.5kg(标准偏差)的秤。另一方面,每次测量的测量噪声方差 可能不同 - 例如,精度为 0.5%(标准偏差)的温度计。在后一种情况下,噪声方差取决于测量的温度。
矩阵形式的广义测量方程由下式给出:
是测量向量 | |
是真实的系统状态(隐藏状态) | |
是一个随机噪声矢量 | |
H | 是一个观察矩阵 |
观察矩阵 H
在许多情况下,测量值不是所需的系统状态。例如,数字电温度计测量电流,而系统状态是温度。需要将系统状态(输入)转换为测量(输出)。
观察矩阵 H 的目的是使用线性变换将系统状态转换为输出。以下章节包括观察矩阵用法的示例。
缩放
测距仪向目的地发送信号并接收反射回波。测量是信号发送和接收之间的时间延迟。系统状态是范围。
在这种情况下,我们需要执行缩放:
其中:
c 是光速
是范围
是测量的时间延迟
状态选择
有时某些状态是测量的,而其他状态则不是。例如,五维状态向量的第一、第三和第五个状态是可测量的,而第二和第四个状态是不可测量的:
状态组合
有时可以测量状态的某种组合,而不是每个单独的状态。例如,三角形边的长度可能是状态,并且只能测量总周长:
测量方程尺寸
下表指定了测量公式变量的矩阵维度:
中期摘要
这是一个停下来做一个简短总结的好地方。在进一步讨论之前,我想总结一下我们迄今所学到的情况。
您还记得“一维卡尔曼滤波部分”(如果您不记得了,请再次查看),卡尔曼滤波计算基于五个方程。
两个预测方程:
- 状态外推方程 - 根据已知的当前估计预测或估计未来状态。
- 协方差外推方程 - 预测中不确定性的度量。
两个更新公式:
- 状态更新方程 - 根据已知的过去估计和当前测量估计当前状态。
- 协方差更新方程 - 估计中不确定性的度量。
卡尔曼增益方程 – 计算更新方程所必需的。卡尔曼增益是测量和过去估计的“加权”参数。它定义了过去估计的权重和估计当前状态的测量权重。
到目前为止,我们已经学习了矩阵符号中的两个预测方程和计算主方程所需的几个辅助方程。
预测方程
状态外推方程
矩阵表示法中状态外推方程的一般形式为:
是时间步长 \( n + 1 \) 处的预测系统状态向量 | |
是时间步长 \( n \) 处的估计系统状态向量 | |
是控制变量或输入变量 - 系统的可测量(确定性)输入 | |
是过程噪声或干扰 - 影响状态的不可测量输入 | |
F | 是状态转移矩阵 |
G | 是控制矩阵或输入转换矩阵(将控件映射到状态变量) |
协方差外推方程
协方差外推方程的一般形式由下式给出:
是当前状态估计的不确定性(协方差)矩阵 | |
是下一个状态估计(预测)的不确定性(协方差)矩阵 | |
F | 是我们在“线性动态系统建模”部分中推导出的状态转换矩阵 |
Q | 是过程噪声矩阵 |
辅助方程
测量公式
矩阵形式的广义测量方程由下式给出:
协方差方程
对应于过程和测量噪声的术语 和 通常不会直接出现在计算中,因为它们是未知的。
相反,这些项用于模拟方程本身中的不确定性(或噪声)。
所有协方差方程都是协方差矩阵,形式为:
即,对平方误差的期望。有关更多详细信息,请参阅基本背景 II 部分。
测量不确定度
测量不确定度由下式给出:
\ | 是测量值的协方差矩阵 |
\ | 是测量误差 |
过程噪声不确定性
过程噪声不确定度由下式给出:
\ | 是过程噪声的协方差矩阵 |
\ | 是过程噪声 |
估计不确定性
估计不确定性由下式给出:
\ | 是估计误差的协方差矩阵 |
\ | 是估计误差 |
\ | 是真实的系统状态(隐藏状态) |
\ | 是时间步长 \( n \) 处的估计系统状态向量 |
状态更新公式
此页面是本教程中最短的页面。我在“\( \alpha -\beta -\gamma \) 滤波器”部分和“一维卡尔曼滤波器”部分中提供了对状态更新方程的广泛描述。
矩阵形式的状态更新方程由下式给出:
\ | 是时间步长 \( n \) 处的估计系统状态向量 |
\ | 是时间步长 \( n - 1 \) 处的预测系统状态向量 |
\ | 是卡尔曼增益 |
\ | 是一种度量 |
\H | 是一个观察矩阵 |
您应该熟悉状态更新方程的所有分量,但矩阵表示法中的卡尔曼增益除外。我们将在以下章节中推导出卡尔曼增益。
您应该注意尺寸。例如,如果状态向量有 5 个维度,而只有 3 个维度是可测量的(第一、第三和第五个状态):
观察矩阵将是一个 矩阵:
创新( )产生
卡尔曼增益维度应为 5X 3 。
状态更新公式维度
下表指定了状态更新公式变量的矩阵维度:
协方差更新方程
协方差更新方程由下式给出:
\ | 是当前状态估计的不确定性(协方差)矩阵 |
\ | 是当前状态的先验估计不确定性(协方差)矩阵(在前一个状态预测) |
是卡尔曼增益 | |
\H | 是观察矩阵 |
\ | 是测量不确定度(测量噪声协方差矩阵) |
\ I | 是一个单位矩阵( 方阵,主对角线上有 1,其他地方有零) |
协方差更新方程推导
本节包括协方差更新方程推导。你们中的一些人可能会觉得它太详细了,但另一方面,它会帮助其他人更好地理解。
如果您不关心派生,可以跳到下一个主题。
对于推导,我使用以下四个等式:
我们推导出当前估计不确定性 作为卡尔曼增益 的函数。
卡尔曼增益
最后一个方程是卡尔曼增益方程。
矩阵符号中的卡尔曼增益由下式给出:
\ | 是卡尔曼增益 |
\ | 是当前状态的先验估计不确定性(协方差)矩阵(在上一步预测) |
\ H | 是观察矩阵 |
\ | 是测量不确定度(测量噪声协方差矩阵 |
卡尔曼增益方程推导
本章包括卡尔曼增益方程的推导。如果您不关心派生,可以跳到下一个主题。
首先,让我们重新排列协方差更新方程:
卡尔曼滤波是最佳滤波。因此,我们寻求一个卡尔曼增益,以最小化估计方差。
为了最小化估计方差,我们需要最小化协方差矩阵 的主对角线(从左上角到右下角)。
方阵主对角线之和就是矩阵的迹线。因此,我们需要最小化 tr()。为了找到产生最小值所需的条件,我们将 的跟踪与 进行区分,并将结果设置为零。
简化协方差更新公式
在许多教科书中,您可以找到协方差更新方程的简化形式:
要推导协方差更新方程的简化形式,请将卡尔曼增益方程代入协方差更新方程。
警告!这个等式更优雅,更容易记住,并且在许多情况下表现良好。然而,计算 卡尔曼增益时的微小误差(由于舍入)可能会导致巨大的计算误差。减法 由于浮点误差,可能会导致非对称矩阵。计算卡尔曼增益时的微小误差(由于舍入)可能导致巨大的计算误差。减法 由于浮点误差,可能导致非对称矩阵。!!
总结
我们已经用矩阵符号推导出了所有五个卡尔曼滤波方程。让我们把它们放在一个页面上。
卡尔曼滤波在“预测-校正”循环中运行,如下图所示。
初始化后,卡尔曼滤波器将在下一步预测系统状态。它还提供了预测的不确定性。
收到测量值后,卡尔曼滤波会更新(或校正)预测和当前状态的不确定性。卡尔曼滤波器还可以预测以下状态,依此类推。
下图提供了卡尔曼滤波操作的完整图片。
下表描述了所有卡尔曼滤波方程。
下表总结了符号(包括文献中发现的差异)和尺寸。
尺寸表示法:
- \ 是状态向量中的多个状态
- \是许多测量状态
- \是输入变量的多个元素
例子
这是多元卡尔曼滤波章节的最后一部分。
它包括两个数值示例。在第一个例子中,我们设计了一个没有控制输入的六维卡尔曼滤波器。在第二个示例中,我们设计了一个带有控制输入的二维卡尔曼滤波器。
示例 9 – 车辆位置估计
在下面的示例中,我们使用所学的材料实现多元卡尔曼滤波器。
在此示例中,我们想估计车辆在 XY 平面上的位置。
车辆有一个车载位置传感器,可报告系统的 \( X \) 和 \( Y \) 坐标。
我们假设恒定的加速度动态。
状态外推方程
首先,我们推导出状态外推方程。您还记得,矩阵表示法中状态外推方程的一般形式是:
\ | 是时间步长 \( n + 1 \) 处的预测系统状态向量 |
\ | 是时间步长 \( n \) 处的估计系统状态向量 |
\ | 是一个控制变量 |
\ | 是过程噪声 |
\F | 是状态转移矩阵 |
\G | 是控制矩阵 |
在此示例中,没有控制变量 ,因为没有控制输入。
对于此示例,状态外推方程可以简化为:
系统状态由下式定义:
时间 \( n + 1 \) 的外推车辆状态可以用以下方程组来描述:
以矩阵形式:
协方差外推方程
协方差外推方程的一般形式由下式给出:
Pn,n | 是当前状态估计的协方差矩阵 |
Pn+1,n | 是下一个状态估计(预测)的协方差矩阵 |
F | 是我们在“线性动态系统建模”部分中推导的状态转换矩阵 |
Q | 是过程噪声矩阵 |
估计协方差矩阵为:
矩阵主对角线上的元素是估计的方差:
- 是 X 坐标位置估计的方差pxX
- 是 X 坐标速度估计的方差px˙˙X
- 是 X 坐标加速度估计的方差px¨X
- 是 Y 坐标位置估计的方差pyY
- 是 Y 坐标速度估计的方差py˙Y
- 是 Y 坐标加速度估计的方差py¨Y
- 非对角线条目是协方差
我们假设 X 轴和 Y 轴中的估计误差不相关,因此互项可以设置为零。
我们已经导出了状态转换矩阵 F 。现在我们将推导出过程噪声 Q 矩阵。
过程噪声矩阵
我们假设一个离散噪声模型 - 每个时间样本的噪声不同,但在时间样本之间是恒定的。
二维恒加速度模型的过程噪声矩阵如下所示:
我们已经推导出了恒加速度运动模型的 Q 矩阵。我们示例中的 Q 矩阵为:
其中:
- 是连续测量之间的时间
- 是加速度的随机方差
现在我们可以为我们的示例写下协方差外推方程
测量公式
矩阵形式的广义测量方程由下式给出:
zn | 是测量向量 |
xn | 是真实的系统状态(隐藏状态) |
vn | 随机噪声矢量 |
H | 是观察矩阵 |
测量仅为我们提供车辆的 X 和 Y 坐标。So:
的维度是 2X1,的维度是 。因此,观察矩阵 的维数应为 2 X 6 。
测量不确定度
卡尔曼增益
矩阵符号中的卡尔曼增益由下式给出:
我们已经推导出了卡尔曼增益的所有构建块:
状态更新公式
矩阵形式的状态更新方程由下式给出:
我们已经定义了状态更新方程的所有构建块。
协方差更新方程
协方差更新方程由下式给出:
我们已经定义了协方差更新方程的所有构建块。
数值示例
现在我们准备求解数值示例。让我们假设一辆车辆以恒定的速度沿 X 方向直线移动。行驶400米后,车辆右转,转弯半径为300米。在转弯操作期间,车辆会因圆周运动(角加速度)而加速。
下图描述了车辆的运动。
- 测量周期: Δt=1s
- 随机加速度标准差: \
- 测量误差标准差:
- 状态转换矩阵 F 将为:
过程噪声矩阵 Q 将为:
测量协方差 R 将为:
下表包含一组 35 个噪声测量值:
迭代零
初始化
我们不知道车辆位置;我们将初始位置、速度和加速度设置为 0
由于我们的初始状态向量是一个猜测,因此我们设置了一个非常高的估计不确定性。高估计不确定度通过为测量提供高权重而导致高卡尔曼增益。
预测
现在我们可以根据初始化值预测下一个状态。
第一次迭代
步骤 1 - 测量
测量值:
步骤 2 - 更新
卡尔曼增益计算:
如您所见,位置的卡尔曼增益为 0.9921,这意味着第一次测量的权重明显高于估计的权重。估计的权重可以忽略不计。
估计当前状态:
更新当前估计协方差:
步骤 3 - 预测
我们的预测不确定性仍然很高。
第二次迭代
步骤 1 - 测量
测量值:
步骤 2 - 更新
卡尔曼增益计算:
估计当前状态:
更新当前估计协方差:
步骤 3 - 预测
我们的预测不确定性仍然很高。
此时,跳转到最后一个卡尔曼滤波迭代是合理的。
第三十五次迭代
步骤 1 - 测量
测量值:
步骤 2 - 更新
卡尔曼增益计算:
该位置的卡尔曼增益已收敛到 0.56,这意味着测量和估计权重几乎相等。
估计当前状态:
更新当前估计协方差:
此时,位置方差 ,这意味着估计的标准差为 。
步骤 3 - 预测
示例分析
下图显示了卡尔费休的位置和速度估计性能。
左侧的图表比较了车辆位置的真实值、测量值和估计值。右侧的两个图表比较了 x 轴速度和 y 轴速度的真实值、测量值和估计值。
如您所见,卡尔曼滤波器成功跟踪车辆。
让我们放大车辆运动的线性部分和转弯机动部分。
图上的圆圈表示 95% 置信度椭圆。由于 x 轴和 y 轴的测量误差相等,因此置信度椭圆是一个圆。
当车辆沿直线行驶时,加速度恒定且等于零。然而,在转弯机动期间,由于圆周运动 - 角加速度,车辆会经历加速。
回想一下物理学入门,角加速度是 ,其中是时间间隔,\Delta V 是时间间隔内的速度差,R 是圆半径。
尽管角加速度是恒定的,但 x 轴和 y 轴上的角加速度投影不是恒定的,因此 和 不是恒定的。
我们的卡尔曼滤波器专为恒加速度模型而设计。尽管如此,由于正确选择了 参数,它成功地跟踪了机动车辆。
我想鼓励读者在软件中实现这个例子,看看或的不同值如何影响实际的卡尔曼滤波精度、卡尔曼增益收敛性和估计不确定性。
示例 10 – 火箭高度估计
在此示例中,我们估计火箭的高度。火箭配备了一个提供高度测量的机载高度计。除了高度计外,火箭还配备了一个加速度计,用于测量火箭的加速度。
加速度计用作卡尔曼滤波器的控制输入。
我们假设恒定的加速度动态。
加速度计不感知重力。静止在桌子上的加速度计向上测量 1g,而自由落体的加速度计测量零加速度。因此,我们需要从每个加速度计测量中减去重力加速度常数g。
时间步长 n 的加速度计测量值为:
- 是对象的实际加速度(对象位置的二阶导数)
- g是重力加速度常数; g = -9.8
- ε 是加速度计测量误差
状态外推方程
矩阵表示法中状态外推方程的一般形式为:
在这个例子中,我们有一个控制变量 u ,它基于加速度计的测量。
系统状态由下式定义:
- 是时间 n 的火箭高度
- 是时间 n 的火箭速度
我们可以将状态外推方程表示如下:
在上式中:
协方差外推方程
协方差外推方程的一般形式为:
矩阵形式的估计协方差为:
矩阵主对角线的元素是估计的方差:
- 是高度估计的方差
- 是速度估计的方差
- 非对角线条目是协方差
我们已经导出了状态转换矩阵 F。现在我们将推导出过程噪声 Q 矩阵。
过程噪声矩阵
我们假设一个离散噪声模型 - 每个时间样本的噪声不同,但在时间样本之间是恒定的。
恒加速度模型的过程噪声矩阵如下所示:
- 是连续测量之间的时间
- 是加速度计测量中的随机方差
在前面的示例中,我们使用系统的加速度随机方差 作为过程噪声矩阵的乘数。但在这里,我们有一个加速度计来测量系统的随机加速度。加速度计误差v远低于系统的随机加速度;因此,我们使用 作为过程噪声矩阵的乘数。
它使我们的估计不确定性大大降低!
现在我们可以为我们的示例写下协方差外推方程:
注意:根据“构造过程噪声矩阵”一章,恒速模型的 Q 矩阵的大小应为2 X 2,恒加速度模型的Q 矩阵的大小应为3 X 3。 在此示例中,加速度由控制输入处理(因此,它不是 F 矩阵的一部分,并且 Q 矩阵为 2 X 2 )。 如果没有外部控制输入,过程矩阵将为 2 X 2 。
测量公式
矩阵形式的广义测量方程由下式给出:
测量仅提供火箭的高度:
的维数是 ,而 的维数是 ,所以观察矩阵的维数是 。
测量不确定度
卡尔曼增益
矩阵符号中的卡尔曼增益由下式给出:
我们已经推导出了卡尔曼增益的所有构建块:
状态更新公式
矩阵形式的状态更新方程由下式给出:
我们已经定义了状态更新方程的所有构建块。
协方差更新方程
协方差更新方程由下式给出:
我们已经定义了协方差更新方程的所有构建块。
数值示例
让我们假设一个具有恒定加速度的垂直助推火箭。火箭配备了一个提供高度测量的高度计和一个用作控制输入的加速度计。
- 测量周期: Δt=0.25s
- 火箭加速:
- 高度计测量误差标准偏差:
- 加速度计测量误差标准偏差:
- 状态转换矩阵 将为:
控制矩阵 将是:
过程噪声矩阵 将为:
测量方差为:
下表包含一组高度计和加速度计的 30 个噪声测量值:
迭代零
初始化
我们不知道火箭的位置;我们将初始位置和速度设置为 0。
我们也不知道火箭的加速度,但我们可以假设它大于零。让我们假设:
由于我们的初始状态向量是一个猜测,因此我们设置了一个非常高的估计不确定性。高估计不确定性导致高卡尔曼增益,从而为测量提供高权重。
预测
现在我们可以根据初始化值预测下一个状态。
第一次迭代
步骤 1 - 测量
测量值:
步骤 2 - 更新
卡尔曼增益计算:
估计当前状态:
更新当前估计协方差:
我们的预测不确定性仍然很高。
第二次迭代
步骤 1 - 测量
测量值:
步骤 2 - 更新
卡尔曼增益计算:
估计当前状态:
更新当前估计协方差:
步骤 3 - 预测
此时,跳转到最后一个卡尔曼滤波迭代是合理的。
第三十次迭代
步骤 1 - 测量
测量值:
步骤 2 - 更新
卡尔曼增益计算:
高度的卡尔曼增益收敛到0.12,这意味着估计权重远高于测量权重。
估计当前状态:
更新当前估计协方差:
此时,高度方差 ,这意味着估计的标准差为 (请记住测量的标准差为 20m)。
步骤 3 - 预测
示例分析
下图比较了火箭高度的真实值、测量值和估计值。
我们可以看到良好的钦哲基金会跟踪性能和收敛性。
下图比较了火箭速度的真实值、测量值和估计值。
将估计值收敛到真正的火箭速度大约需要 2.5 秒。
一开始,估计的高度受到测量值的影响,并且由于测量值非常嘈杂,因此与真实的火箭高度不太一致。
但随着KF收敛,噪声测量的影响较小,估计的高度与真实高度完全一致。
在这个例子中,我们没有任何导致加速度变化的动作,但如果我们有,控制输入(加速度计)将更新状态外推方程。
相关文章:
卡尔曼滤波器简介——多维卡尔曼滤波
原文:多维卡尔曼滤波 (kalmanfilter.net) 目录 前言 基本背景 状态外推方程 示例 - 飞机 - 无控制输入 示例 - 带控制输入的飞机 示例 – 坠落物体 状态外推方程维度 线性时不变系统 线性动态系统建模 状态外推方程的推导 状态空间表示形式 示例 - 等速…...
如何用 GPT-4 帮你写游戏?
你知道的,GPT-4 发布了。 目前你想要用上 GPT-4,主要的渠道是 ChatGPT Plus 。作为交了订阅费的用户,你可以在对话的时候选择模型来使用。 另一种渠道,就是申请官方 API 的排队。我在申请 New Bing Chat 的时候,耐心被…...
R语言的贝叶斯时空数据模型实践技术应用
时间-空间数据(以下简称“时空数据”)是最重要的观测数据形式之一,很多科学研究的数据都以时空数据的形式得以呈现,而科学研究目的可以归结为挖掘时空数据中的规律。另一方面,贝叶斯统计学作为与传统统计学…...
Lazysysadmin靶机渗透过程
准备工作 下载好靶机到本地后 VMware导入OVA 启动靶机 扫描信息 首先扫描整个C段发现主机 进一步扫描端口 从扫描结果可知: Samba服务MySQLSSH端口网站端口 先对网站进行目录遍历 发现有wordpress网站和phpmyadmin管理系统 出现了非常多遍My name is togie.可能…...
为什么网络安全缺口很大,招聘却很少?
2020年我国网络空间安全人才数量缺口超过了140万,就业人数却只有10多万,缺口高达了93%。这里就有人会问了: 1、网络安全行业为什么这么缺人? 2、明明人才那么稀缺,为什么招聘时招安全的人员却没有那么多呢࿱…...
SpringBoot手册
目录 依赖管理关于各种的 start 依赖关于自动配置关于约定大于配置中的配置SpringBoot 整合 SpringMVC定制化 SpringMVC静态资源处理对上传文件的处理对异常的处理Web原生组件注入(Servlet、Filter、Listener)Interceptor 自定义拦截器DispatcherServlet…...
【Linux】如何实现单机版QQ,来看进程间通信之管道
学会了管道,就可以实现简单的qq哦~ 文章目录 前言一、匿名管道总结 前言 为什么要进行进程间通信呢?因为需要以下这些事: 数据传输:一个进程需要将它的数据发送给另一个进程 资源共享:多个进程之间共享同样的资源。 …...
从一到无穷大 #6 盘满排查过程
文章目录 引言df/du 原理排查思路文件系统预留空间进程占用句柄挂载覆盖 引言 核心在于执行df和du的时候发现显示的存储量完全不同,我本地系统盘有99G空间,du显示占用了45G,但是df却显示使用了99G,排查的过程本文所示。 先记录几…...
ChatGPT技术原理 第九章:数据集和训练技巧
目录 9.1 对话数据集 9.2 数据预处理 9.3 预训练技巧 9.4 微调技巧 9.5 多任务学习...
NCR被攻击后服务中断!原是BlackCat勒索软件作祟
近日,在遭到BlackCat勒索软件攻击后,NCR 的 Aloha 销售点平台出现中断。 NCR公司是全球关系管理技术解决方案领导供应商,为全球零售、金融、传讯、制造、旅游、交通及保安等客户提供服务。凭著累积多年的业界知识、专业顾问经验、专业增值应用…...
带你认识什么是BMS(电池管理系统)
文章目录 概述BMS的硬件拓扑BMS的电气架构BMS的功能BMS的总压采集(主板功能)BMS的电流采集(主板功能)BMS的电芯电压和温度采集(从板功能)BMS的SOC、SOP和SOH(ASW计算)BSM的绝缘检测B…...
安装Ubuntu22.04虚拟机的一些常见问题解决方法
文章目录 VirttalBox 开启共享剪切板文件夹、拖放的功能VirtualBox 安装 ubuntu后安装增强工具无效的解决办法解决ubuntu您没有权限查看“ 某某文件夹”的内容所需的权限linux更换源的两种方法[如何在 Ubuntu 20.04 上安装 Visual Studio Code - ](https://zhuanlan.zhihu.com/…...
银河麒麟操作系统,安装Gitlab 基于docker
不废话。直接上干货 操作系统信息 ############## Kylin Linux Version ################# Release: Kylin Linux Advanced Server release V10 (Sword) Kernel: 4.19.90-24.4.v2101.ky10.aarch64 Build: Kylin Linux Advanced Server release V10 (SP2) /(Sword)-aarch64-…...
基于Python实现个人手机定位分析
TransBigData是一个为交通时空大数据处理、分析和可视化而开发的Python包。本文就来用它实现个人手机定位分析,感兴趣的小伙伴可以了解一下 但其实交通时空大数据并不仅仅局限于交通工具产生的数据,我们的日常生活中也会产生大量的数据。比如我们的手机…...
Unity Navgation系统杂记
立即停止寻路 使用agent.isStoppedtrue,可以停止寻路,但是有很大的延迟,视觉体验很不好。 使用agent.enabledfalse,通过禁用NavMeshAgent组件的方式实现立即停止寻路。因为组件被禁用可能会产生其它问题,比如失去了Ob…...
[2021.11.9]lighteffect架构优化详细设计文档
1 lighteffect系统架构图 图1-1 整改前lighteffect系统架构图 上图为整改前lighteffect系统架构图,存在的问题如下: (1)代码bug 原因:由于系统中兼容了lighteffect和lighteffect2,写代码时只记了一个,出现代码bug。…...
经典回归算法
回归的概念 回归方程: 写成矩阵: 核心问题,构建预测函数z来映射特征矩阵x和标签y的线性关系 预测的目标值,有连续值也有离散值 连续值,就直接预测输出就行离散值,需要在输出端加一个变换函数例如。Si…...
Python两三行代码轻松批量添加~防韩还是很有必要的~
人生苦短,我用python 一直想做一个这种系列的但是因为七七八八的事情总是忘记, 今天正好有空,来开整一下~ 首先, 天冷防韩是什么梗? 【天冷防韩】 “天冷防韩”是“天冷防寒”的谐音, 不过“寒”指的…...
开心消消乐
给定一个 N 行 M 列的二维矩阵,矩阵中每个位置的数字取值为 0 或 1,矩阵示例如: 1 1 0 0 0 0 0 1 0 0 1 1 1 1 1 1 现需要将矩阵中所有的 1 进行反转为 0,规则如下: 当点击一个 1 时,该 1 被反转为 0&am…...
有效日志管理在软件开发和运营中的作用
作者:Luca Wintergerst, David Hope, Bahubali Shetti 当今存在的快速软件开发过程需要扩展和复杂的基础架构和应用程序组件,并且操作和开发团队的工作不断增长且涉及多个方面。 有助于管理和分析遥测数据的可观察性是确保应用程序和基础架构的性能和可靠…...
【五一创作】【笔记】Git|如何将仓库中所有的 commit 合成一个?又名,如何清除所有 git 提交记录?(附 git rebase 机制的简要分析)
在对代码进行开源时,我们往往并不希望代码开发过程中的提交记录被其他人看到,因为提交的过程中往往会涵盖一些敏感信息。因此会存在 将仓库中所有 commit 合成一个 的需求。 直觉上,往往会用 rebase 和 squash 或 reset,不过我尝…...
如何写出高质量代码?
作为一名资深开发人员,写出高质量的代码是我们必须要追求的目标。然而,在实际开发中,我们常常会遇到各种问题。比如,代码的可读性、可维护性、健壮性和灵活性等,这些都会影响代码的质量。那么,究竟如何才能…...
外卖项目优化-01-redis缓存短信验证码、菜品数据、Spring Cache(注解开发缓存)、(注解开发)缓存套餐数据
文章目录 外卖项目优化-01课程内容前言1. 环境搭建1.1 版本控制解决branch和tag命名冲突 1.2 环境准备 2. 缓存短信验证码2.1 思路分析2.2 代码改造2.3 功能测试 3. 缓存菜品信息3.1 实现思路3.2 代码改造3.2.1 查询菜品缓存3.2.2 清理菜品缓存 3.3 功能测试3.4 提交并推送代码…...
Chapter1:控制系统数学模型(下)
第一章:控制系统数学模型 Exercise1.13 已知控制系统结构图如下图所示,求系统的输出 C 1 ( s ) C_1(s) C...
排序算法总结
常见排序算法的时间复杂度、空间复杂度及稳定性分析: 时间复杂度空间复杂度是否有稳定性基于比较的排序算法选择排序 O(N^2)O(1)否 冒泡排序O(N^2)O(1)是插入排序O(N^2)O(1)是归并排序O(N*logN)O(N),每次需要额外一个数组用于拷贝是快排O(N*log…...
java+jsp企业物流货运快递管理系统servlet
功能需求具体描述: (1)用户功能模块包括用户登录注册,用户信息的修改,用户发布货物信息,给客服人员留言,对运输公司进行评价。 (2)企业功能模块包括企业注册登录,企业信息的修改,受理用户发布的…...
【ROS仿真实战】获取机器人在gazebo位置真值的三种方法(三)
文章目录 前言一. 使用ROS tf库二、 使用Gazebo Model Plugin三、 使用libgazebo_ros_p3d插件四、总结 前言 在ROS和Gazebo中,获取机器人的位置信息通常通过ROS消息传递进行。在这篇文章中,我们将介绍三种获取机器人在Gazebo中位置真值的方法࿱…...
Winform从入门到精通(35)——FontDialog(史上最全)
文章目录 前言一、属性1、Name2、AllowScriptChange3、AllowSimulations4、AllowVectorFonts5、AllowVerticalFonts6、Color7、FixedPitchOnly8、Font9、FontMustExist10、MaxSize11、MinSize12、 ScriptsOnly13、ShowApply14、ShowColor15、ShowEffects16、ShowHelp...
AcWing 854. Floyd求最短路Floyd模板
Floyd算法: 标准弗洛伊德算法,三重循环,基于动态规划。 循环结束之后 d[i][j]存储的就是点 i 到点 j 的最短距离。 需要注意循环顺序不能变:第一层枚举中间点,第二层和第三层枚举起点和终点。 特点: 1.复杂…...
Graph Theory(图论)
一、图的定义 图是通过一组边相互连接的顶点的集合。 In this graph, V { A , B , C , D , E } E { AB , AC , BD , CD , DE } 二、图的类型 2.1 Finite Graph A graph consisting of finite number of vertices and edges is called as a finite graph. Null Graph Tri…...
网站建设应注意什么/张家口网站seo
目录 dubbo是什么 负载均衡算法 集群容错(容忍错误) Dubbo的SPI Java的SPI dubbo是什么 Dubbo是一个支持远程服务调用的分布式框架。 负载均衡算法 RandomLoadBalance:权重随机算法,根据权重值进行随机负载 RoundRobinLoadBalance:加权轮询算法 LeastActiveLoadBalance:最…...
如何管理好一个网站/360搜索建站
版本管理工具GIT篇 一、版本管理工具干什么用的? 备份文件 作用同U盘 网盘 保存每天的成果 若是本地文件丢失 损坏 找备份如 打游戏时候的存档记录历史网盘 U盘存储的是文件最新状态 历史操作没有 作用同 history命令 找到历史操作的版本 记录 修改时间 修改内容等(提交…...
网站开发界面设计用什么工具/seo网站免费优化软件
在使用CAD看图软件查看DWG图纸的过程中,当图纸中的CAD标注文字太小的时候该怎么修改其大小呢?浩辰CAD看图王电脑版中,提供了多种标注方法,包含线性标注、对齐标注、角度标注、坐标标注等,标注主要就是将标注内容显示在…...
中央人民政府网站谢芳友高层访问/品牌推广平台
计算机导论教材课件1课件.ppt第12章计算机科学与技术学科课程体系结构 教学目标 掌握计算机科学与技术学科的基本内容 掌握计算机科学理论 的组成 掌握计算机科学与技术学科的课程体系结构 了解计算机科学与技术学科基础课程 了解计算机科学与技术学科各专业方向课程群 第12章计…...
废品网站怎么做/2345网址导航应用
148. 排序链表 思路: 归并排序调用过程: 过程: ①分割:找到链表的中间节点,不断的分割,直到金生一个节点为止。 ②合并:实质是多次运用 "两个有序链表合并"的过程。 链表找中间节点…...
188网站开发/百度的营销策略
修改进程用户相关信息 int access (__const char *__name, int __type):检测当前进程是否拥有对某文件的访问权限 参数1:待访问文件 参数2:相应权限 4(R_OK 可读),2(W_OK 可写)&…...