轮毂电机分布式驱动车辆状态估计: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 大些。实际应用中可根据具体需求和硬件条件选择合适的滤波方法。希望这些内容能给搞车辆动力学和状态估计的小伙伴们一些启发。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1131807.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于S7 - 200 PLC和组态王打造5种商品自动售货机

基于S7-200 PLC和组态王自动售货机5种商品售货 带解释的梯形图程序,接线图原理图图纸,io分配,组态画面在自动化控制领域,利用S7 - 200 PLC结合组态王来实现自动售货机的功能是一个很有趣且实用的项目。今天就来和大家详细分享一下…

雷军回应被指营销大师;字节跳动否认造车;传微软即将开启2026第一次大规模裁员,预计波及超万人 | 极客头条

「极客头条」—— 技术人员的新闻圈!CSDN 的读者朋友们好,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧。(投稿或寻求报道:zhanghycsdn.net)整理 | 苏宓出品 | CSDN(ID&…

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

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

基于总变差正则化模型的图像复原

总变差正则化(Total Variation, TV)模型是一种广泛应用于图像复原的技术,能够有效去除噪声和模糊,同时保持图像的边缘信息。 1. 总变差正则化模型的基本原理 总变差正则化模型通过最小化一个包含数据保真项和正则化项的目标函数来…

工控机的抗恶劣环境设计:高温、高湿、强电磁,如何做到稳定运行?

在工业自动化领域,工控机作为系统的控制核心,时常需要在高温、高湿、强电磁干扰等恶劣环境下稳定运行。与普通商用计算机不同,工控机采用了一系列特殊设计来应对这些挑战。本文将深入探讨工控机如何通过硬件和软件设计,在恶劣工业…

Z-Image-Turbo本地运行安全性验证报告

Z-Image-Turbo本地运行安全性验证报告 引言:AI图像生成模型的本地化安全挑战 随着生成式AI技术的快速普及,越来越多开发者和企业选择在本地环境部署AI图像生成模型,以保障数据隐私、降低云服务成本并提升响应效率。阿里通义推出的Z-Image-T…

Linux PS2 环境变量详解

Linux PS2 环境变量详解PS2 是什么?PS2(Secondary Prompt String)是 第二提示符,也称为 继续提示符。当命令输入不完整,需要继续输入时显示。何时会看到 PS2?在以下情况会显示 PS2:1. 多行命令&…

Thinkphp的校园快递仓库管理系统的设计与实现

目录校园快递仓库管理系统的设计与实现(基于ThinkPHP)项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理校园快递仓库管理系统的设计与实现(基于ThinkPHP) 针对高校快递数量激增、管理效率低下的问题&…

Linux IFS 环境变量详解

Linux IFS 环境变量详解IFS 是什么?IFS(Internal Field Separator)是 内部字段分隔符,它定义了 Shell 在**分词(word splitting)**时使用的分隔符。默认值# 默认 IFS 值(空格、制表符、换行符&a…

基于蚁群算法求解带时间窗的车辆路径问题

基于蚁群算法(ACO)求解带时间窗的车辆路径问题(VRPTW)的Matlab实现,需结合路径优化与时间窗约束,通过信息素正反馈和启发式搜索实现全局最优。一、算法框架 1. 问题定义 输入数据:客户需求坐标、…

Thinkphp的招投标系统的设计与实现

目录摘要关键词项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理摘要 随着互联网技术的快速发展,招投标系统逐渐向信息化、智能化方向发展。基于ThinkPHP框架的招投标系统设计旨在提高招投标过程的效率、透明度和公平性,减少…

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

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

三菱FX3U实现五角星绘制:直线插补与多边形绘制的探索

三菱FX3U画五角星程序,同理可以画多边形,直线插补,程序使用了变址,角度计算等指令,程序简单明了,还有个人手绘五角星加强理解,程序注释清晰完全,是学习直线插补与画多边形的学习好资…

AI出海新趋势:开源翻译镜像助力中小企业全球化布局

AI出海新趋势:开源翻译镜像助力中小企业全球化布局 🌐 AI 智能中英翻译服务 (WebUI API) 从“能用”到“好用”:AI翻译的进化之路 在全球化加速的今天,语言壁垒依然是中小企业出海过程中最现实的障碍之一。传统机器翻译工具虽然普…

Thinkphp的医疗健康管理平台

目录ThinkPHP医疗健康管理平台摘要项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理ThinkPHP医疗健康管理平台摘要 ThinkPHP医疗健康管理平台是基于PHP框架ThinkPHP开发的一套综合性系统,旨在为医疗机构、医生和患者提供高效、安全、便…

Thinkphp的在线医疗预约与咨询平台

目录在线医疗预约与咨询平台基于ThinkPHP框架开发系统架构与技术实现核心功能模块安全性与扩展性项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理在线医疗预约与咨询平台基于ThinkPHP框架开发 ThinkPHP作为一款高效、简洁的PHP开发框架&#xff0…

【BurpSuite 插件开发】实战篇 - 补充章节

1 前言 本章内容用于测试我们开发的 BurpSuite 插件的功能,分为服务端接口脚本和接口测试脚本。使用 python 的 flask 框架和 requests 库快速实现。 2 服务端 2.1 安装依赖 pip install Flask2.2 完整代码 from flask import Flask, request, jsonify, make_response im…

【计算机毕业设计案例】基于python卷积神经网络的淡水生物识别

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

探索之旅:基于.net 6 的多功能自用工具开发

这是一个使用.net 6 基于wpf 、OpencvSharp(opencv的.net wrapper)、ReactiveUI等开发的自用工具,主要用来做ReactiveUI与OpencvSharp学习过程中的尝试以及opencv算子参数的调试等,该程序还可以显示3D点云数据(目前程序中的点云数据是由格雷码条纹拍摄的…

Thinkphp的在线拍卖网站系统的设计与实现

目录摘要项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理摘要 在线拍卖网站系统基于ThinkPHP框架开发,采用B/S架构,结合MySQL数据库,实现了用户注册、商品管理、竞拍出价、订单支付等核心功能。系统采用MVC设计…