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

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的系统学习&#xff0…...

【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 原理分析

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

Ansys Mechanical|屈曲分析技术

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

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

Golang——7、包与接口详解

包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

《Docker》架构

文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器&#xff0c;docker&#xff0c;镜像&#xff0c;k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...

边缘计算网关提升水产养殖尾水处理的远程运维效率

一、项目背景 随着水产养殖行业的快速发展&#xff0c;养殖尾水的处理成为了一个亟待解决的环保问题。传统的尾水处理方式不仅效率低下&#xff0c;而且难以实现精准监控和管理。为了提升尾水处理的效果和效率&#xff0c;同时降低人力成本&#xff0c;某大型水产养殖企业决定…...