news 2026/5/16 9:59:00

基于分布式驱动电动汽车的车辆状态估计探索

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于分布式驱动电动汽车的车辆状态估计探索

基于分布式驱动电动汽车的车辆状态估计,采用的是容积卡尔曼(ckf)观测器,可估计包括纵向速度,质心侧偏角,横摆角速度,侧倾角四个状态。 模型中第一个模块是四轮驱动电机;第二个模块是carsim输出的真实参数,包括汽车所受横向力,纵向力,驱动力矩等:第三个模块是dugoff模型计算轮胎力。 第四个模块是关于ckf的车辆状态估计,可估计包括纵向速度,横摆角速度,质心侧偏角,侧倾角四个自由度。 模型和代码完全是由自己亲手编写,可供自己参考和学习。 本模型是基于simulink与carsim联合仿真,ckf是由s function进行编写,提供相关文献和。 如果有需要在电机无传感器控制和车辆状态估计上改进卡尔曼滤波,比如平方根容积卡尔曼,高阶容积卡尔曼等

最近在研究基于分布式驱动电动汽车的车辆状态估计,过程还挺有趣的,来和大家分享分享。

这次采用的是容积卡尔曼(CKF)观测器,它能估计纵向速度、质心侧偏角、横摆角速度、侧倾角这四个关键状态。这对于了解车辆实时动态,保障行车安全和性能优化都非常重要。

模型模块剖析

  1. 四轮驱动电机模块:这是车辆动力的起始点,负责将电能转化为机械能,驱动车辆前进。它就像是车辆的“心脏”,稳定且高效的运作是车辆正常行驶的基础。虽然代码还比较基础,但却至关重要。比如下面这段简单模拟电机输出扭矩的代码(以MATLAB为例):
function torque = motorTorque(speed) % 根据电机转速计算输出扭矩 torque = 100 - 0.5 * speed; % 这里简单假设扭矩与转速呈线性关系,实际中模型会复杂得多 end

在实际应用中,需要更精确的电机模型来模拟不同工况下的输出,这就需要考虑电机的特性曲线、温度影响等等因素。

  1. Carsim输出真实参数模块:Carsim就像是一个强大的“数据宝库”,为我们提供汽车所受横向力、纵向力、驱动力矩等真实参数。这些参数是后续分析和估计的重要依据。我们可以通过接口函数来获取这些数据,例如在Simulink中,可以使用如下代码片段来连接Carsim并获取纵向力:
function longForce = getLongForceFromCarsim() % 假设这里有连接Carsim并获取数据的底层函数 longForce = callCarsimAPI('longitudinalForce'); end

这里的callCarsimAPI函数是一个自定义的与Carsim交互的函数,实际实现需要根据Carsim提供的API来编写。

  1. Dugoff模型计算轮胎力模块:轮胎力对于车辆的操控性和稳定性起着关键作用。Dugoff模型能根据车辆的各种参数准确计算轮胎力。下面是一个简化的Dugoff模型代码框架(Python实现):
def dugoffTireForce(verticalLoad, slipRatio, frictionCoefficient): # 根据Dugoff理论计算轮胎力 # 这里只是简单框架,实际公式复杂 tireForce = verticalLoad * frictionCoefficient * slipRatio return tireForce

实际的Dugoff模型包含很多复杂的公式和参数调整,以适应不同的轮胎和路面状况。

  1. CKF车辆状态估计模块:重头戏来了,这个模块利用CKF观测器估计纵向速度、横摆角速度、质心侧偏角、侧倾角四个自由度。CKF观测器在处理非线性系统状态估计方面表现出色。在Simulink中,我使用S - function来编写CKF。以下是一个简单的S - function框架(以估计纵向速度为例):
function [sys,x0,str,ts] = longitudinalVelocityCKF(t,x,u,flag) switch flag, case 0, [sys,x0,str,ts]=mdlInitializeSizes; case 1, sys=mdlDerivatives(t,x,u); case 2, sys=mdlUpdate(t,x,u); case 3, sys=mdlOutputs(t,x,u); case 4, sys=mdlGetTimeOfNextVarHit(t,x,u); case 9, sys=mdlTerminate(t,x,u); otherwise DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); end function [sys,x0,str,ts]=mdlInitializeSizes() sizes = simsizes; sizes.NumContStates = 1; sizes.NumDiscStates = 0; sizes.NumOutputs = 1; sizes.NumInputs = 1; sizes.DirFeedthrough = 1; sizes.NumSampleTimes = 1; sys = simsizes(sizes); x0 = [0]; str = []; ts = [0.01 0]; function sys=mdlDerivatives(t,x,u) % 这里编写状态转移方程的导数,简单假设 sys(1) = u(1); function sys=mdlUpdate(t,x,u) sys = x; function sys=mdlOutputs(t,x,u) sys(1) = x(1); % 输出估计的纵向速度 function sys=mdlGetTimeOfNextVarHit(t,x,u) sampleTime = 0.01; sys = t + sampleTime; function sys=mdlTerminate(t,x,u) sys = [];

这个S - function框架实现了一个基本的CKF估计纵向速度的过程,实际应用中需要根据具体的系统模型和噪声特性来完善状态转移方程、观测方程以及噪声协方差等参数。

联合仿真与拓展

整个模型是基于Simulink与Carsim联合仿真的,这样能充分利用两者的优势。Simulink便于搭建控制系统模型,而Carsim提供高精度的车辆动力学模型。

如果有需要在电机无传感器控制和车辆状态估计上改进卡尔曼滤波,平方根容积卡尔曼(SRCKF)和高阶容积卡尔曼(HKF)是不错的选择。SRCKF能提高数值稳定性,在处理一些对精度和稳定性要求极高的场景时很有用。而HKF则可以通过增加容积点的数量来提高估计精度,适用于系统模型较为复杂,需要更精确估计的情况。感兴趣的朋友可以参考相关文献进一步研究,我这里也整理了一些有用的文献资料,后续可以分享给大家一起探讨。

这次的模型和代码都是自己亲手编写的,在这个过程中收获了很多,也希望能给同样在这个领域探索的朋友们一些启发。后续还会继续优化和完善这个模型,期待能有更多新发现!

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

AI:我裂开了!现在的大模型评估究竟有多变态?

本文视频:https://bilibili.com/video/BV1HnB7BjEAN/ 年底的 AI 圈子很热闹,可以说是神仙打架:Gemini 3.0、Claude Opus 4.5、GPT 5.2 … 这三大全球最顶级的模型,几乎在同一时间甩出了自己的“王炸”。 今天这家说自己代码能力…

作者头像 李华
网站建设 2026/5/16 6:02:09

PS学习基础笔记

第一节课一、 Ps:位图 Ai:矢量图 id:排版ctrlK:界面设置 二、 1、esc键 直接 进入 2、工具栏右击->显示工具 3、窗口->复位基本功能 4、新建画布:Ctrln 5、像素:一个个小格子,缩写px(用在…

作者头像 李华
网站建设 2026/5/16 6:02:09

dpdk-testpmd在超过128核双numa场景启动失败问题

问题描述: dpdk-testpmd在超过128核双numa场景中,启动失败问题,问题日志如下,扫描内存的时候,无法使用numa1的内存。 ... EAL: Detected lcore 0 as core 0 on socket 0 EAL: Detected lcore 127 as core 215 on socke…

作者头像 李华
网站建设 2026/5/16 6:02:11

pdb设置内存参数

查看pdb设置的参数 set linesize 120 column pdb_name format a10 column name format a30 column value$ format a30select ps.db_uniq_name,ps.pdb_uid,p.name as pdb_name,ps.name,ps.value$ from pdb_spfile$ psjoin v$pdbs p on ps.pdb_uid p.con_uid order by 1, 2, …

作者头像 李华
网站建设 2026/5/15 23:45:32

索引的原理

一、索引的核心思想:空间换时间代价:索引需要占用额外的存储空间,并且会在数据增删改时引入额外的维护开销。收益:通过预先建立并维护一个更小的、针对性更强的数据结构,使得查询时能以远快于遍历全表的速度定位到目标…

作者头像 李华
网站建设 2026/5/9 17:02:49

基于大数据对B站热门视频的数据分析与数据研究系统(程序+文档+讲解)

课题介绍在 B 站内容生态精细化运营、创作者赋能需求下,传统热门视频分析存在 “维度单一、实时性差、规律挖掘不足” 的痛点,基于大数据技术构建的 B 站热门视频数据分析与研究系统,适配平台运营人员、UP 主、数据分析师等角色,整…

作者头像 李华