news 2026/4/21 21:59:25

轮毂电机分布式驱动车辆状态估计:EKF 与 UKF 的实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
轮毂电机分布式驱动车辆状态估计:EKF 与 UKF 的实战

车辆状态估计,扩展卡尔曼滤波EKF,无迹卡尔曼滤波UKF车辆状态估计,扩展卡尔曼滤波EKF,无迹卡尔曼滤波UKF 角阶跃输入+整车7自由度模型+UKF状态估计模型+附送EKF状态估计模型,针对于轮毂电机分布式驱动车辆,进行车速,质心侧偏角,横摆角速度估计。 模型输入:方向盘转角delta,车辆纵向加速度ax 模型输出:横摆角速度wz,纵向车速vx,质心侧偏角β

在车辆动力学研究中,准确估计车辆状态对于车辆的稳定性控制和智能驾驶等方面至关重要。今天咱就唠唠基于角阶跃输入、整车 7 自由度模型,用扩展卡尔曼滤波(EKF)和无迹卡尔曼滤波(UKF)对轮毂电机分布式驱动车辆进行车速、质心侧偏角和横摆角速度估计这事儿。

1. 整车 7 自由度模型

整车 7 自由度模型考虑了车辆的纵向、侧向、垂向运动以及横摆、侧倾、俯仰运动,这里咱聚焦跟状态估计相关的侧向和横摆运动部分。通过一系列复杂的力学推导(具体公式就不展开折磨大家了,不然篇幅太长),我们可以得到描述车辆运动状态的状态空间方程。

假设车辆状态向量 $X = [vx, \beta, \omegaz]^T$,分别代表纵向车速、质心侧偏角和横摆角速度。输入向量 $U = [\delta, a_x]^T$,即方向盘转角和车辆纵向加速度。

状态方程可大致写成:$\dot{X} = f(X, U)$

这里的 $f$ 函数包含了车辆动力学相关的各种参数,像车辆质量、转动惯量、轮胎侧偏刚度等等。

2. 扩展卡尔曼滤波(EKF)

2.1 原理

EKF 是卡尔曼滤波在非线性系统中的扩展。它通过对非线性函数进行一阶泰勒展开来线性化。对于我们的车辆状态估计问题,预测步骤和更新步骤跟标准卡尔曼滤波类似,但有一些非线性的处理。

2.2 代码示例(Python 伪代码)

import numpy as np # 假设已经定义了状态转移函数 f 和观测函数 h def ekf_predict(X, P, Q, dt, U): # 预测状态 X = f(X, U, dt) # 计算状态转移矩阵 F F = np.eye(3) # 预测协方差 P = F @ P @ F.T + Q return X, P def ekf_update(X, P, Z, R, U): # 计算观测矩阵 H H = np.eye(3) # 计算卡尔曼增益 K S = H @ P @ H.T + R K = P @ H.T @ np.linalg.inv(S) # 更新状态 X = X + K @ (Z - h(X, U)) # 更新协方差 P = (np.eye(3) - K @ H) @ P return X, P

2.3 代码分析

ekfpredict函数里,先通过状态转移函数f预测下一时刻状态X,然后手动设置一个简单的状态转移矩阵F(实际应用需根据具体模型计算),接着根据公式更新预测协方差Pekfupdate函数中,计算观测矩阵H(同样这里是简单示意),通过协方差相关计算得到卡尔曼增益K,利用观测值Z更新状态X和协方差P

3. 无迹卡尔曼滤波(UKF)

3.1 原理

UKF 不像 EKF 那样对非线性函数线性化,而是通过 Sigma 点采样来近似概率分布。它能更准确地处理非线性问题,对于车辆这种非线性系统很适用。

3.2 代码示例(Python 伪代码)

def ukf_predict(X, P, Q, dt, U): # 计算 Sigma 点 n = X.shape[0] lambda_ = 3 - n Wm = np.zeros(2 * n + 1) Wc = np.zeros(2 * n + 1) Wm[0] = lambda_ / (lambda_ + n) Wc[0] = lambda_ / (lambda_ + n) + (1 - np.power(2, -n)) for i in range(1, 2 * n + 1): Wm[i] = 1 / (2 * (lambda_ + n)) Wc[i] = 1 / (2 * (lambda_ + n)) X_sigma = np.zeros((n, 2 * n + 1)) X_sigma[:, 0] = X for i in range(n): X_sigma[:, i + 1] = X + np.sqrt((lambda_ + n) * P)[i, :] X_sigma[:, i + n + 1] = X - np.sqrt((lambda_ + n) * P)[i, :] # 预测 Sigma 点 X_sigma_pred = np.zeros((n, 2 * n + 1)) for i in range(2 * n + 1): X_sigma_pred[:, i] = f(X_sigma[:, i], U, dt) # 预测状态 X = np.sum(Wm * X_sigma_pred, axis = 1).reshape(-1, 1) # 预测协方差 P = np.zeros((n, n)) for i in range(2 * n + 1): P += Wc[i] * (X_sigma_pred[:, i].reshape(-1, 1) - X) @ (X_sigma_pred[:, i].reshape(-1, 1) - X).T P += Q return X, P def ukf_update(X, P, Z, R, U): # 计算 Sigma 点 n = X.shape[0] lambda_ = 3 - n Wm = np.zeros(2 * n + 1) Wc = np.zeros(2 * n + 1) Wm[0] = lambda_ / (lambda_ + n) Wc[0] = lambda_ / (lambda_ + n) + (1 - np.power(2, -n)) for i in range(1, 2 * n + 1): Wm[i] = 1 / (2 * (lambda_ + n)) Wc[i] = 1 / (2 * (lambda_ + n)) X_sigma = np.zeros((n, 2 * n + 1)) X_sigma[:, 0] = X for i in range(n): X_sigma[:, i + 1] = X + np.sqrt((lambda_ + n) * P)[i, :] X_sigma[:, i + n + 1] = X - np.sqrt((lambda_ + n) * P)[i, :] # 预测 Sigma 点 Z_sigma = np.zeros((n, 2 * n + 1)) for i in range(2 * n + 1): Z_sigma[:, i] = h(X_sigma[:, i], U) # 预测观测值 Z_pred = np.sum(Wm * Z_sigma, axis = 1).reshape(-1, 1) # 计算协方差 Pzz = np.zeros((n, n)) Pxz = np.zeros((n, n)) for i in range(2 * n + 1): Pzz += Wc[i] * (Z_sigma[:, i].reshape(-1, 1) - Z_pred) @ (Z_sigma[:, i].reshape(-1, 1) - Z_pred).T Pxz += Wc[i] * (X_sigma[:, i].reshape(-1, 1) - X) @ (Z_sigma[:, i].reshape(-1, 1) - Z_pred).T Pzz += R # 计算卡尔曼增益 K K = Pxz @ np.linalg.inv(Pzz) # 更新状态 X = X + K @ (Z - Z_pred) # 更新协方差 P = P - K @ Pzz @ K.T return X, P

3.3 代码分析

ukfpredict函数里,先计算 Sigma 点相关的权重WmWc以及 Sigma 点Xsigma,通过状态转移函数f预测 Sigma 点Xsigmapred,然后根据权重计算预测状态X和预测协方差Pukfupdate函数类似,计算观测相关的 Sigma 点Zsigma,预测观测值Z_pred,通过协方差计算得到卡尔曼增益K来更新状态X和协方差P

4. 总结

通过角阶跃输入结合整车 7 自由度模型,利用 EKF 和 UKF 可以有效地对轮毂电机分布式驱动车辆的车速、质心侧偏角和横摆角速度进行估计。UKF 在处理非线性方面有优势,但计算量相对 EKF 大些。实际应用中可根据具体需求和硬件条件选择合适的滤波方法。希望这些内容能给搞车辆动力学和状态估计的小伙伴们一些启发。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/21 20:21:03

Z-Image-Turbo日志审计功能:生成记录追溯与合规性检查

Z-Image-Turbo日志审计功能:生成记录追溯与合规性检查 在AI图像生成系统日益广泛应用于内容创作、广告设计和数字媒体的背景下,可追溯性与合规性成为企业级部署不可忽视的核心需求。阿里通义Z-Image-Turbo WebUI作为基于DiffSynth Studio框架二次开发的…

作者头像 李华
网站建设 2026/4/21 8:21:27

离线环境适用:内网部署AI翻译,彻底杜绝数据外泄

离线环境适用:内网部署AI翻译,彻底杜绝数据外泄 🌐 AI 智能中英翻译服务 (WebUI API) 在企业级应用场景中,数据安全始终是首要考量。尤其涉及敏感文档、技术资料或商业合同的翻译需求时,将文本上传至公有云API存在严…

作者头像 李华
网站建设 2026/4/21 16:32:57

Thinkphp的在线招聘求职系统设计与实现

目录摘要项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理摘要 随着互联网技术的快速发展,在线招聘求职系统已成为企业与求职者高效对接的重要平台。该系统基于ThinkPHP框架开发,采用B/S架构,结合MySQL数据库&am…

作者头像 李华
网站建设 2026/4/20 7:12:00

深度学习毕设选题推荐:基于python-CNN深度学习的食物识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/4/20 23:16:32

模组无尘系列(Clean Room Series)全解析

TOYO(东佑达)无尘系列模组专为Class 10(ISO 14644-1 标准) 洁净室环境设计,通过密封结构优化、真空抽气系统、低发尘材料与润滑三大核心技术,实现运行时发尘量≤10 particles/ft,广泛应用于半导…

作者头像 李华