MATLAB车辆动力学建模 ——《控制系统现代开发技术》
引言
在上这门课之前,我已经用过CasADi 去做过最优化的相关实践,其中每一步迭代主要就是由:对象系统+优化求解两部分组成的。这里我们重点介绍 “对象系统”如何去描述 ,因为它是每一步迭代中重要的一环——“优化求解”会获得控制输入u,u需要作用于模型,获得状态,以去计算目标函数“代价”。在上该课之前,我并没有系统的认识,因此,这门课让我对自己之前的实践有了全新的认识。
致谢
感谢BIT的智能车辆研究所的于会龙老师,其事无巨细的教导,手把手教学让身为研究牲的我感慨万分。
前言
虽然标题是车辆动力学, 但例子是车子的垂向减震系统哈。抱歉
代码流程
这个流程很重要,大家仔细体会。6)-10)步就不放图了,大家直接在后面的代码里寻找对应的部分。
数值积分函数
这里提供了三个选择,matlab中给了4阶龙格库塔和欧拉,大家自行选择
MATLAB代码
clc
clear
clear all
%----------------------------------
global Mb Mw ks bs kt bt
Mb = 290;
Mw = 32;
ks = 20000;
bs = 500;
kt = 1400000;
bt = 100;
%----------------------------------
tf = 1;
dt = 0.001;%seconds
%----------------------------------
Xin = [0; 0; 0];
t = 0;
%----------------------------------
tlog = zeros(tf/dt,1);
xlog = zeros(tf/dt,3);for i = 1: tf/dtu = -0.1 + 0.2*rand; %控制子程序 Xout = Euler(@vdn1,Xin,u,t,dt); %积分函数 tlog(i) = t; %数据存储t = i*dt; %时间更新Xin = Xout; %状态更新xlog(i,:) = Xin'; %数据存储
endfigure
subplot(3,1,1)
plot(tlog,xlog(:,1),'k');
ylabel('$z_b \,(m) $');
xlabel('$$ t \, (s) $$');
subplot(3,1,2)
plot(tlog,xlog(:,2),'r');
ylabel('$ {\dot z_b} \,(m) $');
xlabel('$$ t \, (s) $$');
subplot(3,1,3)
plot(tlog,xlog(:,3),'b');
ylabel('$ {z_r} \,(m) $');
xlabel('$$ t \, (s) $$');function dXin = vdn1(t,Xin,u)
global Mb ks bs
%% 状态变量
Zb = Xin(1,:); %车身垂向位移
dZb = Xin(2,:); %车身垂向速度
Zr = Xin(3,:); %路面接触点垂向位移
%% 求状态变量一阶导数
dZr = u(1,:); %路面接触点垂向位移变化率
ddZb = (-bs.*(dZb-dZr)-ks.*(Zb-Zr))/Mb; %车身垂向加速度%% 状态变量一阶导数
dXin = [dZb;ddZb;dZr];
endfunction [y]=runge_kutta4(ufunc,Xin,u,t,h)% ode45
%-----------------------------------------------------------------------------------%
% Author: HUILONG YU, hlyubit@gmail.com.
% Date : 09/11/2016
% Copyright (C) 2016 HUILONG YU. All Rights Reserved.
%-----------------------------------------------------------------------------------%
k1=ufunc(t,Xin,u);
k2=ufunc(t+h/2,Xin+h*k1/2,u);
k3=ufunc(t+h/2,Xin+h*k2/2,u);
k4=ufunc(t+h,Xin+h*k3,u);y=Xin+h*(k1+2*k2+2*k3+k4)/6;
endfunction y = Euler(ufunc,Xin,u,t,h)y= Xin+ h * ufunc(t,Xin,u);
end
补充
1、参数中有两个关键参数,决定悬架的“硬度”,【调整悬架参数可抑制路面不平度激励带来的车身振动】
ks = 20000; bs = 500;比 ks = 2000000; bs = 100000; 更好
2、程序每次运行结果不同是因为 输入u 里有一个rand随机数。
Python
环境:Windows ,官网安装的python(安装过程中选择将python添加到全局路径) ,在vscode里直接执行。还需要cmd调出终端安装两个py的模块。
pip install numpy matplotlib
import numpy as np
import matplotlib.pyplot as plt# 全局变量
Mb = 290
Mw = 32
ks = 20000
bs = 500
kt = 1400000
bt = 100# 时间设置
tf = 1
dt = 0.001 # 秒# 初始条件
Xin = np.array([0, 0, 0])
t = 0# 数据存储
tlog = np.zeros(int(tf/dt))
xlog = np.zeros((int(tf/dt), 3))# 定义 vdn1 函数
def vdn1(t, Xin, u):Zb = Xin[0] # 车身垂向位移dZb = Xin[1] # 车身垂向速度Zr = Xin[2] # 路面接触点垂向位移dZr = u # 路面接触点垂向位移变化率ddZb = (-bs * (dZb - dZr) - ks * (Zb - Zr)) / Mb # 车身垂向加速度return np.array([dZb, ddZb, dZr])# 定义 Euler 函数
def Euler(ufunc, Xin, u, t, h):return Xin + h * ufunc(t, Xin, u)# 主循环
for i in range(int(tf/dt)):u = -0.1 + 0.2 * np.random.rand() # 控制子程序Xout = Euler(vdn1, Xin, u, t, dt) # 积分函数tlog[i] = t # 数据存储t = (i + 1) * dt # 时间更新Xin = Xout # 状态更新xlog[i, :] = Xin # 数据存储# 绘图
plt.figure()plt.subplot(3, 1, 1)
plt.plot(tlog, xlog[:, 0], 'k')
plt.ylabel('$z_b \,(m)$')
plt.xlabel('$t \,(s)$')plt.subplot(3, 1, 2)
plt.plot(tlog, xlog[:, 1], 'r')
plt.ylabel('$\dot{z_b} \,(m/s)$')
plt.xlabel('$t \,(s)$')plt.subplot(3, 1, 3)
plt.plot(tlog, xlog[:, 2], 'b')
plt.ylabel('$z_r \,(m)$')
plt.xlabel('$t \,(s)$')plt.tight_layout()
plt.show()
相关文章:

MATLAB车辆动力学建模 ——《控制系统现代开发技术》
引言 在上这门课之前,我已经用过CasADi 去做过最优化的相关实践,其中每一步迭代主要就是由:对象系统优化求解两部分组成的。这里我们重点介绍 “对象系统”如何去描述 ,因为它是每一步迭代中重要的一环——“优化求解”会获得控制…...

复杂json解析(其中有一个key的value是json格式的字符串)
app上报的参数如下: {"clientId": "8517895440514039afcf6d3e5d7832ae","dua": "SNDOCKCJPH90_GA&VN900042418&BN0&VCXiaomi&MOM2012K11AC&RL1080_2239&CHIDunknown_unknown&LCID&RV&OSAndroid13&…...

线程池的一些问题
核心线程数1.最大线程5.队列5.存活时间10s 1.场景一 如果核心线程数.被一直占用得不到释放.新进来1个任务.会怎么样?答: 会在队列中中死等. 只要进来的任务.不超过队列的长度,就会一直挡在队列中死等 package com.lin;import java.util.concurrent.Executors; import java.u…...

企业或者个体户为什么会经营异常?
在复杂多变的市场经济环境中,无论是企业还是个体工商户,都可能遭遇经营异常的情况。及时识别这些预警信号并采取有效措施,对于避免潜在风险、保持健康发展至关重要。本文将深入探讨企业与个体户常见的经营异常类型、识别方法以及应对策略&…...

ROS从入门到精通4-3:制作Docker镜像文件Dockerfile
目录 0 专栏介绍1 为什么需要Dockerfile?2 Dockerfile书写原则3 Dockerfile常用指令3.1 FROM3.2 MAINTAINER3.3 RUN3.4 ADD3.5 COPY3.6 CMD3.7 ENV3.8 EXPOSE3.9 WORKDIR3.10 ARG 4 Dockerfile构建ROS工程实例 0 专栏介绍 本专栏旨在通过对ROS的系统学习࿰…...
【CV】计算机视觉是什么?
计算机视觉是一门研究如何使机器“看”的学科,旨在实现从图像或视频中获取信息的技术和方法。它涵盖了图像处理、模式识别、机器学习等多个领域,是人工智能领域的重要分支之一。以下是计算机视觉的一般概要介绍: 概要介绍: 图像…...
如何在Vue中实现鼠标悬浮展示与隐藏弹窗的功能
如果你需要鼠标在元素和弹窗上时保持弹窗显示,而鼠标离开这两者时隐藏弹窗,你可以使用一个稍微复杂的逻辑来处理鼠标的进入和离开事件。 这通常涉及到延时关闭弹窗,以便给用户足够的时间从元素移动到弹窗上,而不触发弹窗关闭。以…...

03 Linux编程-进程
1、进程的相关概念 1.1 程序与进程 程序是静态的概念,进程是程序的一次运行活动。 1.2 查看系统中有哪些进程 ps #只显示一小部分进程 ps -aux #会打印当前所有进程 ps -aux|grep init #使用grep筛选出只含有init的进程top #运行显示的进程有点类似windows…...

Hbuild-X运行ios基座app
一、说明 ios真机第一次运行的时候需要下载插件,这个都是自动监测,自动下载的,不用多说。ios真机运行是需要签名的,不然就会报以下错误。如何制作免费的签名证书呢,需要借助爱思助手来完成。 二、安装爱思助手 &…...

Node.js基础:从入门到实战
初识 Node.js 与内置模块 (初识) 1、知道什么是node.js 2、知道node.js可以做什么 3、node.js 中js的组成部分 (内置模块) 4、用 fs 模块读写操作文件 5、使用 path 模块处理路径 6、使用http 模块写一个基本的web服务器 初识 N…...
考研408笔记总结~
目录 一.数据结构 二.计算机组成原理 三.操作系统 四.计算机网络 私以为边看视频,边做笔记会更专注些,大家需要自取。欢迎大家和我一起探讨考研的问题,包括不仅限于专业课,数学,英语等等......,想说什么…...
使用在线工具等方式下载推特视频
使用在线工具等方式下载推特视频 使用在线工具 Visit a Twitter video downloader website: Websites like twdown.net, twittervideodownloader.com, and savevideo.me offer services to download Twitter videos.Paste the Twitter video URL into the designated input bo…...
性能优化:几方面考虑
我们可以继续再考虑下关于性能优化,我们还能从哪些方面着手呢? 1. 代码层面: 使用更高效的数据结构和算法。使用缓存避免多次数据库交互减少不必要的计算和内存分配。利用并行和异步编程提高性能。使用性能分析工具定位和优化瓶颈。 2. We…...
学习大数据:论学习Spark的重要性
随着科技的不断发展,大数据已经成为了当今社会的热门话题。大数据技术的出现,为我们提供了处理海量数据的新方法,使得我们能够从这些数据中挖掘出有价值的信息。在众多的大数据处理框架中,Apache Spark无疑是最为出色的一种。本文…...
学习java第七十一天
DI:依赖注入 依赖注入是spring容器中创建对象时给其设置依赖对象的方式,比如给spring一个清单,清单中列出了需要创建B对象以及其他的一些对象(可能包含了B类型中需要依赖对象),此时spring在创建B对象的时候…...
Altium Designer PCB快捷键设置
6)PCB修改快捷键,并自定义工具栏 添加boardlayerset系统命令。 修改系统脚本, 在D:\Program Files\Altium\AD18\System下,找到advpcb.rcs文件,打开。 Tree MNPCB_LayerSets CaptionManage Layer Se&ts Popup Emp…...

玩转Matlab-Simscape(初级)- 08 - 基于Solidworks、Matlab Simulink、COMSOL的协同仿真(案例实战)
** 玩转Matlab-Simscape(初级)- 08 - 基于Solidworks、Matlab Simulink、COMSOL的协同仿真(案例实战) ** 目录 玩转Matlab-Simscape(初级)- 08 - 基于Solidworks、Matlab Simulink、COMSOL的协同仿真&…...

vue嵌套路由
一、嵌套 children配置 1.父类路由 mymusic 2.子类路由 musicson 1.创建MusicSon组件 <template><div><p>从前和后来</p><p>唯一</p><p>运气来的似有若无</p></div> </template><script>export defaul…...

视频降噪算法 hqdn3d 原理分析
视频降噪 视频降噪是一种处理技术,旨在减少视频中的噪声,提高画面质量。噪声可能来自多种源头,包括摄像机的传感器、压缩算法、传输过程中的干扰等。降噪处理对于视频监控、视频会议、电影后期制作以及任何需要高画质输出的应用场景都非常重…...

Ansys Mechanical|屈曲分析技术
屈曲分析的基本概念 当受拉杆件的应力达到屈服极限或强度极限时,将引起塑性变形或断裂。这些是由于强度不足所引起的失效。 在工程中,我们会注意到当细长杆件受压时,表现出与强度失效完全不同的性质。当杆件受压超过某一临界值时࿰…...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...
13.10 LangGraph多轮对话系统实战:Ollama私有部署+情感识别优化全解析
LangGraph多轮对话系统实战:Ollama私有部署+情感识别优化全解析 LanguageMentor 对话式训练系统架构与实现 关键词:多轮对话系统设计、场景化提示工程、情感识别优化、LangGraph 状态管理、Ollama 私有化部署 1. 对话训练系统技术架构 采用四层架构实现高扩展性的对话训练…...