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()

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Linux系统中pts和tty会话删除

一、背景 一台CentOS6.7主机存在iscsi盘,为了正常卸载此iscsi盘,需要先将所有相关会话退出使用该iscsi盘。 检查发现存在多个系统用户登录的情况。 二、问题 无法使用kill -9删除linux会话,提示信息为“-bash: kill: (16680) - Operation not…

java项目之企业资产管理系统(springboot+vue+mysql)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的企业资产管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 管理员功能有个人中心&…

【全开源】JAVA红娘婚恋相亲交友系统源码支持微信小程序+微信公众号+H5+APP

红娘婚恋相亲交友系统:遇见你的命中注定 在快节奏的现代生活中,许多单身男女都在寻找一个平台,希望能遇见那个能与自己携手共度一生的伴侣。红娘婚恋相亲交友系统正是为了满足这一需求而诞生的,它旨在为广大单身男女提供一个安全…

咒语和药水的成功对数

题目链接 咒语和药水的成功对数 题目描述 注意点 一个咒语和药水的能量强度相乘如果大于等于 success ,那么它们视为一对成功的组合 解答思路 先将药水进行排序,然后二分查找找到某个咒语i和药水的能量强度相乘大于等于success的左边界left&#xf…

A股股息率最高的十个行业,哪些高股息可持续?

2023年以来,银行不断调低存款利率。目前,六大行5年定期存款(整存整取)挂牌利率约为2%。随着存款收益下降,那些股息率较高的上市公司和行业受到了关注。 数据分析显示,一部分行业的高股息可以持续&#xff…

JAVA云HIS医院管理系统源码 云HIS系统源码 SaaS模式 采用Java+Spring,SpringBoot开发的云HIS医院管理系统

云HIS采用JavaSpring,SpringBoot,SpringMVC,SpringSecurity,MyBatisPlus技术开发。可满足诊所业务中预约、看诊、收费、发药、药库管理、经营分析等多环节的工作需要。和传统医院系统相比,云HIS的操作简单,…

【Python】使用requests采集数据存入mysql或文件

一、什么是requests requests包是一个使用Python编写的HTTP请求库,使得发送HTTP请求和处理HTTP响应变得更加简单。以下是对requests包的详细介绍: 用途: requests包主要用于与HTTP交互,能够发送HTTP请求和处理HTTP响应。它支持处…

uni-app:音频播放 uni.createInnerAudioContext()

uni.createInnerAudioContext() 创建并返回内部 audio 上下文 innerAudioContext 对象 简单实现音频播放: let innerAudioContext uni.createInnerAudioContext(); innerAudioContext.src ../../../../static/ok.MP3;//音频地址 innerAudioContext.play(); inn…

SL3038 48V/60V电动车里程增程器电源驱动芯片 大电流3A

在电动车领域中,电池续航能力一直是制约其广泛应用的关键因素之一。为了提高电动车的续航能力和使用效率,各大厂商纷纷投入研发,寻求更为先进的电源驱动芯片解决方案。其中,SL3038 48V/60V电动车里程增程器电源驱动芯片以其卓越的…

我是如何利用AI提高内容生产效率的

文章目录 如何利用AI提高内容生产效率?自动化内容生成内容推荐与个性化数据分析与内容优化自动化编辑与翻译虚拟助手与自动化排版智能内容管理与版本控制情感分析与内容优化实时反馈与即时调整跨平台内容适配智能内容生成工具总结 如何利用AI提高内容生产效率? 简介&#xff…

JAVA二手车交易二手车市场系统源码支持微信小程序+微信公众号+H5+APP

二手车交易二手车市场系统:重塑购车新体验 随着汽车消费市场的日益成熟,二手车交易逐渐成为消费者购车的新选择。为了提供更加便捷、透明、安全的二手车交易环境,我们推出了“二手车交易二手车市场系统”,旨在为买卖双方搭建一个…

Stable Diffusion基础界面介绍

SD是stable diffusion的简称,AI绘画的一个开源应用,(不需要科学上网),目前使用的版本是B站UP秋葉aaaki整理的最终版。 安装教程详见 B站up主 秋葉aaaki,教程下有提供stable diffusion的下载链接。 安装必要的三个基础…

【python数据预处理系列】使用Pandas的factorize()函数进行类别编码(整数编码)

在Pandas中,factorize()函数主要用于将分类变量转换为整数编码,这对于减少内存使用或准备数据进行某些统计分析非常有用。 它实际上是将列的唯一值映射到从0开始的整数序列上。 假设有一个DataFrame,其中一列包含一些类别值,你希望…

AIGC行业现在适合进入吗

简介 进入人工智能(AI)与游戏行业整合(AIGC)领域需要考虑当前的市场需求和行业发展阶段: 1、市场需求:目前,人工智能和游戏行业都在不断发展壮大,并且两者的结合也逐渐成为一个热门领…

【吊打面试官系列】Java高并发篇 - 并发编程三要素?

大家好,我是锋哥。今天分享关于 【并发编程三要素?】面试题,希望对大家有帮助; 并发编程三要素? 1、原子性 原子性指的是一个或者多个操作,要么全部执行并且在执行的过程中不被其他操作打断,要…

杭州首场!ClickHouse技术沙龙来了,NineData架构师周金义将分享《ClickHouse 数据管理与同步的关键技术》

2024年 5 月 18 日,ClickHouse官方首届杭州 Meetup 活动即将举行。本次活动由 ClickHouse 和阿里云主办,NineData 和云数据库技术社区协办。本次技术沙龙将围绕ClickHouse的核心技术、应用案例、最佳实践、数据管理、以及迁移同步等方面,和行…

四.Ubuntu安装postgresql数据库

四.Ubuntu安装postgresql数据库 1.安装postgresql数据库命令:apt install postgresql postgresql-contrib 依次回车,等待安装完成。 2.以postgres用户登录PostgreSQL,命令:sudo -u postgres psql 修改postgres密码命令&#x…

「AIGC」Python实现tokens算法

本文主要介绍通过python实现tokens统计,避免重复调用openai等官方api,开源节流。 一、设计思路 初始化tokenizer使用tokenizer将文本转换为tokens计算token的数量二、业务场景 2.1 首次加载依赖 2.2 执行业务逻辑 三、核心代码 from transformers import AutoTokenizer imp…

【LeetCode:23. 合并 K 个升序链表 + 链表 + 归并 + 递归】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

安泰ATA-7015高压放大器在材料极化中的应用研究

材料极化是材料科学中一个重要的研究领域,它涉及到材料内部电荷和极化性质的调控和分析。高压放大器在材料极化研究中起着至关重要的作用,通过提供高压力和高电场条件,研究人员可以深入探讨材料的电子结构、相变行为以及许多其他关键性质。 材…