当前位置: 首页 > news >正文

状态量: 轮速、滑移率、附着系数

基于分布式驱动电动汽车的路面附着系数估计,分别采用无迹卡尔曼滤波(UKF)和容积卡尔曼滤波(CKF)对电动汽车四个车轮的路面附着系数进行估计。 可高速,低速,高附着系数,低附着系数,对开路面,对接路面等组合工况下对路面附着系数进行准确估计。

轮胎和路面之间的摩擦系数直接决定了车辆能不能稳稳刹住车、会不会原地打滑。对于装了四个轮边电机的电动车来说,每个轮子都能独立输出扭矩的特性,反而给路面识别开了个外挂——咱可以通过电机转速反推出真实抓地力。

先看个有意思的场景:左前轮压到冰面时,传统车辆可能会触发ESP疯狂干预,但分布式驱动的车可以立刻单独调节这个轮子的扭矩输出。要实现这种精准控制,核心在于实时估算每个轮胎下的路面附着系数。

这里掏出两个非线性滤波神器:UKF和CKF。它们都能处理轮速、电机扭矩这些非线性关系的数据。先看一段简化的状态方程伪代码:

def vehicle_dynamics(state, torque): v_wheel, slip, mu = state # 电机扭矩到轮边力的转换 Fx = torque * transmission_ratio / radius # 魔术公式轮胎模型简化版 Fx_max = mu * load effective_Fx = min(Fx, Fx_max) # 轮速变化率 dv_dt = (effective_Fx - road_resistance)/inertia return [dv_dt, calc_slip_derivative(), mu_estimate]

这里藏着关键点:当实际驱动力超过路面附着极限时,轮子开始空转,这时候滑移率突变就能反映附着系数变化。两种滤波器的任务就是抓住这个突变特征。

基于分布式驱动电动汽车的路面附着系数估计,分别采用无迹卡尔曼滤波(UKF)和容积卡尔曼滤波(CKF)对电动汽车四个车轮的路面附着系数进行估计。 可高速,低速,高附着系数,低附着系数,对开路面,对接路面等组合工况下对路面附着系数进行准确估计。

上UKF的实现片段:

class UKF: def predict(self): # 生成sigma点 sigmas = self.sigma_points(self.x, self.P) # 传播每个sigma点 propagated = [f(x, u) for x in sigmas] # 计算预测均值和协方差 self.x_pred = np.dot(self.Wm, propagated) self.P_pred = self.Wc @ np.outer(propagated-self.x_pred) def update(self, z): # 观测预测 sigmas_z = [h(x) for x in self.sigmas_pred] z_pred = np.dot(self.Wm, sigmas_z) # 计算卡尔曼增益 Pxz = np.dot(self.Wc, np.outer(self.sigmas_pred - self.x_pred, sigmas_z - z_pred)) K = Pxz @ np.linalg.inv(S) # 状态更新 self.x += K @ (z - z_pred)

重点在sigma点的生成策略,UKF用固定规则选取2n+1个采样点(n为状态量维度)。而CKF换了套玩法,采用球面径向立方规则,采样点数量随维度指数增长。实测发现,当四个车轮的附着系数差异较大时(比如对开路面),CKF的3阶精度优势开始显现。

来看个冰面接沥青的工况:右轮在0.2附着系数路面,左轮突然切换到0.8的高附着路面。此时UKF估计值会出现约0.5秒的滞后,而CKF能在0.3秒内收敛。这差异来自两者对高阶非线性项的处理能力——CKF的容积规则更擅长捕捉状态突变时的概率分布畸变。

不过计算量是个坎儿。当系统维度上升到8维(四轮独立估计)时,CKF的采样点数会暴涨到2^8=256个,是UKF的17倍多。这时候就得做取舍:要么简化模型,要么加硬件。某实车项目里,我们最终采用异步更新策略——高滑移率时切CKF,正常行驶用UKF,计算资源省了40%。

最后放个实测数据彩蛋:在对接路面(前轮高附着后轮低附着)紧急制动时,传统单一路面估计会导致后轮过早抱死。而基于CKF的四轮独立估计,能让刹车距离缩短1.2米——这个差距可能就是追尾与否的分界线。

http://www.jsqmd.com/news/561947/

相关文章:

  • Spring Data MongoDB 实战指南:从基础映射到高效CRUD与避坑技巧
  • Kubernetes集群资源优化架构:基于Descheduler的智能再调度系统设计
  • Windows 10 USB断连:精准排查电源与驱动问题
  • java工具:《Java 8 Stream实战:一行代码搞定集合对象类型转换》
  • 激光雷达点云处理—从原理到实战工具链
  • 手把手教你用MestRenova和Chemdraw解析核磁共振谱图(附实战案例)
  • OpenClaw 的模型服务是否支持基于策略的流量控制?
  • WindowsCleaner深度解析:如何用开源工具轻松解决C盘空间不足问题
  • [EAI-034] 迭代式强化学习优化VLA模型的稳定性与泛化能力
  • Windows系统DLL文件缺失?手把手教你修复appvisvsubsystems64_arm64x.dll等常见错误
  • 用好 Claude Code 的那些门道
  • 避坑指南:Libero仿真波形怎么看?综合前、综合后、布局布线后三次仿真的区别与意义
  • DeepSeek-R1-Distill-Qwen-7B推理优化实战:5步完成Ollama本地部署
  • 2048 AI辅助工具深度剖析:从算法核心到跨平台实践
  • 银河麒麟V4.0.2-sp4系统初始化实战:网络、DNS与软件源一站式配置指南
  • 音乐界面定制:foobar2000皮肤的个性化体验方案
  • Unity场景的面数上限
  • Qwen3.5-4B-Claude-Opus效果展示:编程语言特性对比(如Python/Go)
  • 基于51单片机的甲醛监测以及通风控制系统(有完整资料)
  • 缝纫机SW三维模型
  • 基于Jenkins的前后端分离项目自动化部署实战指南
  • 自动送料装车系统PLC控制的设计——24页
  • 终极抢票神器:Python自动化脚本让你轻松锁定心仪演出门票
  • 【LeetCode】118.杨辉三角
  • ncmdumpGUI:如何突破网易云音乐加密限制实现跨设备自由播放
  • 3大核心功能解锁虚幻引擎游戏深度定制:UE4SS实战指南
  • STM32H750VBT6网络实战:CubeIDE+FreeRTOS+LWIP保姆级配置,从零搞定LAN8720A以太网通信
  • KinhDown:突破百度网盘限速的效率革命
  • DaemonSet节点管理:实现Kubernetes集群自动化运维
  • 在语音对话中,OpenClaw 的语音识别是否支持个性化声学模型?