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

news2024/12/24 0:56:52

目录

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.coloradmin.cn/o/1467615.html

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

相关文章

CSRF攻击和防御

CSRF:Cross Site Request Forgery 跨站请求伪造 攻击&#xff1a; 攻击者盗用你的身份&#xff0c;以你的名义发送恶意请求&#xff08;邮件&#xff0c;消息&#xff0c;盗取账号&#xff0c;购买物品&#xff09; GET请求的伪造方式 POST请求的伪造方式 防御&#xff1a…

SpringBoot -【SmartInitializingSingleton】基础使用及应用场景

SmartInitializingSingleton 在继续深入探讨 SmartInitializingSingleton接口之前&#xff0c;让我们先了解一下 Spring Framework 的基本概念和背景。Spring Framework 是一个开源的 JavaEE&#xff08;Java Enterprise Edition&#xff09;全栈&#xff08;full-stack&#x…

javaEE图书馆自习室订座系统信用springmvc+springboot+mybatis

研究的内容是设计和实现图书馆自习室系统&#xff0c;便捷广大师生对自习室的使用&#xff0c;协助图书馆自习室管理。在设计过程中&#xff0c;系统的用户角色和权限分配如下&#xff1a; &#xff08;1&#xff09;馆长 用户管理&#xff1a;拥有自习室管理员、普通用户的所有…

29. 【Linux教程】Linux 用户介绍

本小节介绍 Linux 用户的基础知识&#xff0c;了解 Linux 系统中有哪些用户&#xff0c;如何查看当前 Linux 系统中有哪些用户&#xff0c;每一个 Linux 用户的权限取决于这些账号登录时获取到的权限。 1. Linux 用户类型 Linux 系统是一个多用户多任务的操作系统&#xff0c;…

前后端分离PHP+vue+mysql城市轨道交通线路公交查询系统

医院、厕所、药店、派出所、学校、营业厅、快递、银行 开发语言&#xff1a;php 后端框架&#xff1a;Thinkphp 前端框架&#xff1a;vue.js 服务器&#xff1a;apache 数据库&#xff1a;mysql 运行环境:phpstudy/wamp/xammp等 A.美食 快餐、中餐、自助餐、火锅、烧烤、奶…

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

一、需求分析 当我们从多个层次来详细分析后台管理系统时&#xff0c;可以将其功能和定义进一步细分&#xff0c;以便更好地理解其在不同方面的作用和实际运作。 1. 结构层次 在结构层次上&#xff0c;后台管理系统可以分为以下几个部分&#xff1a; a. 核心功能模块&#…

目标检测新SOTA:YOLOv9 问世,新架构让传统卷积重焕生机

在目标检测领域&#xff0c;YOLOv9 实现了一代更比一代强&#xff0c;利用新架构和方法让传统卷积在参数利用率方面胜过了深度卷积。 继 2023 年 1 月 YOLOv8 正式发布一年多以后&#xff0c;YOLOv9 终于来了&#xff01; 我们知道&#xff0c;YOLO 是一种基于图像全局信息进行…

【大厂AI课学习笔记NO.50】2.3深度学习开发任务实例(3)任务背景与目标

我们经常在做项目的时候&#xff0c;觉得分析背景和目标是浪费时间&#xff0c;觉得不过如此。 其实目标梳理特别重要&#xff0c;直接决定你数据的需求分析&#xff0c;模型的选择&#xff0c;决定你交付的质量。 人工智能项目也和其他项目一样&#xff0c;不要想当然&#…

js实现鼠标拖拽改变div大小的同时另一个div宽度也变化

实现效果如下图所示 源码如下 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>.box {width: 100%;height: 300px; display: flex;}/*左侧div样式*/.left {width: calc(30% - 5px); /*左侧初始…

SQL注入漏洞解析

什么是SQL注入 原理&#xff1a; SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严&#xff0c;攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句&#xff0c;在管理员不知情的情况下实现非法操作&#xff0c;以此来实现欺骗数据库服…

贪心/树形dp

思路&#xff1a; 因为如果红色节点的子树中如果有红色节点的话&#xff0c;那么该子树对其不会造成影响&#xff0c;不用考虑&#xff0c;因此我们在考虑每个红色节点时&#xff0c;不考虑其红色子树。那么如图&#xff0c;对每个红色节点答案有贡献的就是其所有非红色子节点…

入侵检测系统的设计与实现

入侵检测系统&#xff08;Intrusion Detection System&#xff0c;简称IDS&#xff09;是一种能够监视网络或计算机系统活动的安全工具&#xff0c;旨在识别并响应可能的恶意行为或安全事件。这些事件可能包括未经授权的访问、恶意软件、拒绝服务攻击等。入侵检测系统通过不同的…

刘雯井柏然植物园漫步,情侣裙超养眼,甜蜜穿搭亮了。

♥ 为方便您进行讨论和分享&#xff0c;同时也为能带给您不一样的参与感。请您在阅读本文之前&#xff0c;点击一下“关注”&#xff0c;非常感谢您的支持&#xff01; 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 刘雯井柏然漫步永州植物园&#xff0c;情侣裙惊艳亮相&#x…

算法沉淀——记忆化搜索(leetcode真题剖析)

算法沉淀——记忆化搜索 01.斐波那契数02.不同路径03.最长递增子序列04.猜数字大小 II05.矩阵中的最长递增路径 记忆化搜索算法&#xff08;Memoization&#xff09;是一种通过存储已经计算过的结果来避免重复计算的优化技术&#xff0c;通常应用于递归算法中。这种技术旨在提高…

Jenkins中Publish Over SSH插件使用(1)

SSH插件 前言Publish Over SSH插件是jenkins里面必不可少的插件之一&#xff0c;主要的功能有两个把jenkins服务器上的文件&#xff0c;传输到远程nginx&#xff0c; 远程执行shell命令和脚本。 1. SSH插件下载与配置 1.1 下载Publish over SSH插件 系统管理—》管理插件 …

stm32单片机的智能手环-心率-步数-距离-体温-蓝牙监控

一.硬件方案 随着社会的发展&#xff0c;人们的物质生活水平日渐提高&#xff0c;人们也越来越关注自己的健康。智能手环作为一种测量仪器&#xff0c;可以计算行走的步数和消耗的能量&#xff0c;所以人们可以定量的制定运动方案来健身&#xff0c;并根据运行情况来分析人体的…

javaweb day3 day4 day5

js 引入方式 写法 基础语法 写法 变量 写法 数据类型 运算符 与java相同 会判断类型是否相同 循环控制语句 和java相同 函数&#xff08;方法&#xff09; 写法 Array数组 写法 string字符串 写法 js自定义对象 写法 JSON 写法 BOM window 写法 location 写法 DOM 案例…

蓝桥杯DP算法——区间DP(C++)

根据题意要求的是将石子合并的最小权值&#xff0c;我们可以根据DP思想使用二维数组f[i,j]来存放所有从第i堆石子到第j堆石子合并成一堆石子的合并方式。 然后由第二个图所示&#xff0c;我们可以将i到j区间分成两个区间&#xff0c;因为将i到j合并成一个区间的前一步一定是合…

C++中的STL数据结构

内容来自&#xff1a;代码随想录&#xff1a;哈希表理论基础 1.常见的三种哈希结构 当我们想使用哈希法来解决问题的时候&#xff0c;我们一般会选择如下三种数据结构 数组 set &#xff08;集合&#xff09; map(映射) 在C中&#xff0c;set 和 map 分别提供以下三种数据结构…