基于PID-bang-bang控制算法的卫星姿态控制matlab仿真

目录

1.课题概述

2.系统仿真结果

3.核心程序与模型

4.系统原理简介

5.完整工程文件


1.课题概述

       基于PID-bang-bang控制算法的卫星姿态控制。仿真输出控制器的控制收敛曲线,卫星姿态调整过程的动画。

2.系统仿真结果

3.核心程序与模型

版本:MATLAB2022a

...........................................................%动画绘制部分if mod(t(i),3/Fcycle) < Tglobal  % 每隔一段时间绘制一次图形(降低绘图频率以提高效率)  % 计算卫星位置[x_sat, y_sat]            = func_satellite(x(1,i),Len1,Len2); % 计算推力向量位置[x1_th,y1_th,x2_th,y2_th] = func_thrust(u(i),x(1,i),Len1,Len2,Len3,Len4); figure(1); % 创建或激活图形窗口1  subplot(2,2,[1,3]); % 在2x2的子图布局中选择第1和第3个位置进行绘图  fill(x_sat,y_sat,'g'); % 绘制卫星位置(绿色填充)  hold on; % 保持当前图形,以便在同一张图上绘制更多内容  fill(r*cos(0:.1:2*pi),r*sin(0:.1:2*pi),'b'); % 绘制一个蓝色的圆(可能是表示卫星轨迹或参考圆)  fill(x1_th,y1_th,'r'); % 绘制推力向量的起点(红色填充)  fill(x2_th,y2_th,'r'); % 绘制推力向量的终点(红色填充)  hold off; % 释放当前图形,不再在同一张图上绘制更多内容  pbaspect([1 1 1]); % 设置绘图区域的宽高比和深度比为1:1:1,确保图形不会变形  axis([-4 4 -4 4]); % 设置坐标轴范围  subplot(2,2,2); % 在2x2的子图布局中选择第2个位置进行绘图  plot(t(1:i),x(1,1:i),'-b',... % 绘制角度随时间变化的曲线(蓝色实线)  'LineWidth',1,... % 设置线宽为1  'MarkerSize',6,... % 设置标记点大小为6  'MarkerEdgeColor','k',... % 设置标记点边缘颜色为黑色  'MarkerFaceColor',[0.9,0.0,0.0]); % 设置标记点填充颜色为红色(但这里实际上并不会显示标记点,因为plot函数没有添加标记点的选项)  hold on; % 保持当前图形,以便在同一张图上绘制更多内容  plot(t(1:i),x(2,1:i),'-r',... % 绘制角度速率随时间变化的曲线(红色实线)(注意:这里应该使用新的变量或不同的线型来区分两条曲线)  'LineWidth',1,... % 设置线宽为1(与上一条曲线相同,可能会覆盖)  'MarkerSize',6,... % 设置标记点大小为6(同上)  'MarkerEdgeColor','k',... % 设置标记点边缘颜色为黑色(同上)  'MarkerFaceColor',[0.9,0.9,0.0]); % 设置标记点填充颜色为黄色(同上)(但这里实际上并不会显示标记点)  title('状态'); % 设置子图标题为“状态”  legend('角度','角度速率'); % 添加图例,说明两条曲线分别代表什么  xlim([0 SimuTime]); % 设置x轴范围(时间范围)  ylim([-1.5 1.5]); % 设置y轴范围(角度和角度速率范围)(注意:这个范围可能不适合角度速率的显示)  subplot(2,2,4); % 在2x2的子图布局中选择第4个位置进行绘图(但实际上这里应该是第3个位置,因为上面只用了两个位置)  plot(t(1:i),u(1:i)); % 绘制控制器输出随时间变化的曲线  title('控制器输出'); % 设置子图标题为“控制器输出”  xlim([0 SimuTime]); % 设置x轴范围(时间范围)  ylim([-1.1 1.1]); % 设置y轴范围(控制器输出范围)  xlabel('时间'); % 设置x轴标签为“时间”  end  % 积分累积(注意:这里可能有一个逻辑错误,因为每次循环都在累积误差,但没有在pwm更新时刻重置或调整累积值)  Errsum = Errsum + Ref_pos - x(1,i); % 累积位置误差(但这里实际上是在累积位置误差的差值)  % 状态传播(更新下一个时刻的状态)  x(:,i+1) = x(:,i) + (Astate*x(:,i) + Bstate*u(i))/Fcycle; % 使用离散时间状态空间方程更新状态(但这里可能存在数组越界问题,因为当i=end时,x(:,i+1)会超出数组范围)  i = i + 1; % 循环计数器加1(但这里实际上存在一个问题:当i=end时,上面的代码会导致数组越界错误)  end
33

4.系统原理简介

       PID(比例-积分-微分)控制器是一种广泛使用的控制算法,它通过计算误差信号的比例、积分和微分项来调整系统的输出,以减小误差并达到期望的控制目标。Bang-Bang控制则是一种简单的双模态控制策略,其中控制器输出在两个极值之间切换,通常用于实现快速响应。

        在卫星姿态控制中,PID-Bang-Bang控制算法可能结合了两者的特点:当误差较大时,采用Bang-Bang控制以快速减小误差;当误差较小时,切换到PID控制以实现更精细的调整。在卫星姿态控制系统中,PID控制器(比例-积分-微分控制器)与bang-bang控制结合使用,能够有效克服单一控制策略的局限性,实现对卫星姿态的精确、快速调节。

  1. PID控制器: 基于误差(e(t))进行工作,误差为期望姿态角(θ_d)与实际姿态角(θ)之差,即 e(t) = θ_d - θ。PID控制器输出(u(t))由以下三部分组成:

    u(t) = K_p * e(t) + K_i * ∫e(t)dt + K_d * de(t)/dt

    其中:

    • K_p是比例增益,它直接影响系统对当前误差的响应速度。
    • K_i是积分增益,用于消除稳态误差,防止误差累积。
    • K_d是微分增益,通过预测未来误差变化趋势,提高系统的动态性能和稳定性。
  2. Bang-Bang控制: Bang-Bang控制是一种开关型控制策略,其输出要么是最大值U_max,要么是最小值U_min,取决于当前误差是否超出设定的阈值。在卫星姿态控制中,当卫星姿态偏差超出预定范围时,bang-bang控制器会立即输出最大或最小控制力矩,以尽快纠正姿态。

  3. PID-bang-bang混合控制: 在实际应用中,PID控制可提供连续且平滑的控制输出,但可能在某些极端条件下反应不足;而bang-bang控制虽然反应迅速,但易导致系统震荡。因此,将两者结合,通常会在正常状态下采用PID控制,而在姿态偏差过大、需要快速响应时切换至bang-bang控制。

       综合以上,PID-bang-bang混合控制的具体实施可能是:当卫星姿态误差e(t)在一定范围内时,采用PID控制输出u_PID(t);当误差超出预设阈值时,则切换为bang-bang控制,输出u_BB(t)。这样既能保证姿态控制的稳定性和精确性,又能应对突发的大偏差情况,实现对卫星姿态的有效控制。

5.完整工程文件

v

v

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前后端联调可能出现的问题

调不到后端数据 前后端传参方式不一样 --- formdata 主要接收文件 或者有文件和数据 --- json 纯数据

springboot+vue项目部署配置开机自启动

1.前端部属 下载nginx解压&#xff0c;在nginx\conf下找到nginx.conf 添加如下代码 server {listen 8081;server_name localhost;charset utf-8;location / {root F:/1ceshi/dist; #前端打包路径try_files $uri $uri/ /index.html;index index.html index.htm;}l…

本地创建Git仓库

在 Windows 下&#xff0c;可以通过以下步骤在本地创建一个 并模拟远程Git 仓库。 1、在命令行中打开模拟远程Git 仓库目标文件夹&#xff1a; 打开命令提示符或 PowerShell。例如&#xff1a; 创建裸仓库&#xff08;模拟远程仓库&#xff09;&#xff1a;创建一个裸仓库&am…

Redis进阶篇

Redis线程模型 redis是基于内存运行的高性能k-v数据库&#xff0c;6.x之前是单线程, 对外提供的键值存储服务的主要流程 是单线程&#xff0c;也就是网络 IO 和数据读写是由单个线程来完成&#xff0c;6.x之后引入多线程而键值对读写命 令仍然是单线程处理的&#xff0c;所以 …

【PX4SimulinkGazebo联合仿真】在Simulink中使用ROS2控制无人机进入Offboard模式起飞悬停并在Gazebo中可视化

在Simulink中使用ROS2控制无人机进入Offboard模式起飞悬停并在Gazebo中可视化 系统架构Matlab官方例程Control a Simulated UAV Using ROS 2 and PX4 Bridge运行所需的环境配置PX4&Simulink&Gazebo联合仿真实现方法建立Simulink模型并完成基本配置整体框架各子系统实现…

一分钟 由浅入深 学会Navigation

目录 1.官网正式概念 1.1 初认知 2.导入依赖 2.1 使用navigation 2.2 safe Args插件-> 传递数据时用 3.使用Navigation 3.1 搭建初始框架 3.2 确定action箭头的属性 3.3 为Activity添加NavHostFragment控件 3.4 NavController 管理应用导航的对象 3.5 数据传递(单…

Linux——基础IO

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、C语言IO1、写文件2、读文件3、stdin & stdout & stderr 二、系统文件I/O1、写文件…

常用显示屏学习——LCD12864(含高级驱动程序)

LCD12864液晶显示屏 屏幕介绍 ① 可显示四行字符&#xff0c;每行可显示8个汉字或者16个数字和字母&#xff1b; ②可串行通信和并行通信&#xff1b; ③ 串口接口管脚信号 通信方法 &#xff08;一&#xff09;八位并行通信方法 &#xff08;二&#xff09;串行通信方法 用…

超实用,分享PostgreSQL和mysql的几点区别

前言 今天是元宵节&#xff0c;首先祝大伙元宵快乐&#xff01;上一篇文章&#xff0c;给大家讲解了一下MySQL和PostgreSQL性能上的差别。这篇文章主要是记录一下日常应用中&#xff0c;两者常见的一些语法以及一些区别。 PostgreSQL的数据类型 数值类型 字符串类型 日期|时…

Linux--shell编程中分区表常用操作 全面且详细

文章中关于分区表常用操作目录&#xff1a; 一、概念 二、​​​​​​​创建分区表语法 ​​​​​​​三、创建一个表带多个分区 四、​​​​​​​加载数据到分区表中 五、加载数据到一个多分区的表中去 ​​​​​​​六、查看分区 七、​​​​​​​添加一个分区…

机器学习:逻辑回归原理

逻辑回归模型是一种广泛应用于分类问题的统计方法。尽管名为“回归”&#xff0c;但它实际上是一种分类算法&#xff0c;主要用于预测观察对象属于某个类别的概率。逻辑回归模型特别适用于二分类问题&#xff0c;但也可以通过一些策略扩展到多分类问题。 逻辑回归的应用与优化…

让C语言代码变抽象(二)

目录 前言&#xff1a; 代码&#xff1a; 前言&#xff1a; 在今天写代码的时候&#xff0c;我又想到一个更抽象的代码。 我在写注释的时候突然想想到条件编译的东西&#xff0c;好像也能用来注释东西。 代码&#xff1a; 我们在这直接上干货 我们知道在条件编译中有一个叫…

【前端素材】推荐优质后台管理系统Acara平台模板(附源码)

一、需求分析 后台管理系统在多个层次上提供了丰富的功能和细致的管理手段&#xff0c;帮助管理员轻松管理和控制系统的各个方面。其灵活性和可扩展性使得后台管理系统成为各种网站、应用程序和系统不可或缺的管理工具。 后台管理系统是一种用于管理和控制网站、应用程序或系…

Map集合特点、遍历方式、TreeMap排序及Collections和Arrays

目录 ​编辑 一、集合框架 二、 Map集合 特点 遍历方式 HashMap与Hashtable的区别 TreeMap Collections Arrays 一、集合框架 二、 Map集合 Map集合是一种键值对的集合&#xff0c;其中每个键对应一个值。在Java中&#xff0c;Map接口定义了一种将键映射到值的数据结…

嵌入式学习-qt-Day3

嵌入式学习-qt-Day3 一、思维导图 二、作业 完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳…

「Java开发指南」MyEclipse如何支持Spring Scaffolding?(三)

在上文中&#xff08;点击这里回顾>>&#xff09;&#xff0c;主要为大家介绍了CRUD Scaffolding&#xff0c;本文将继续介绍应用程序的分层、代码助手等。 MyEclipse v2023.1.2离线版下载 3. 应用程序的分层 应用程序分层是应用程序开发领域中非常常见的体系结构方法…

C++之类作用域

目录 1、全局作用域 2、类作用域 2.1、设计模式之Pimpl 2.2、单例模式的自动释放 2.2.0、检测内存泄漏的工具valgrind 2.2.1、可以使用友元形式进行设计 2.2.2、内部类加静态数据成员形式 2.2.3、atexit方式进行 2.2.4、pthread_once形式 作用域可以分为类作用域、类名…

c++学习记录 STL基本概念

1、STL基本概念 STL&#xff08;Standard Template Library&#xff0c;标准模板库&#xff09;STL广义上分为&#xff1a;容器&#xff08;container&#xff09;算法&#xff08;algorithm&#xff09;迭代器&#xff08;iterator&#xff09;容器和算法之间通过迭代器进行无…

线程共享和非共享的资源及线程优缺点

注意&#xff1a;共享的内存地址空间中不包括栈&#xff1b;共享文件描述符表&#xff0c;表示&#xff0c;同一进程中线程可以操作同一文件。

猫头虎分享已解决Bug || TypeError: Cannot read property ‘props‘ of undefined (React)

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …