## **震荡的产生**
首先我们假设如下情况
> 在一维情况下,飞船需要飞往100位置。飞船与目标位置的误差可以实时获得(+表示目标在前方,-表示目标在后方),设推进器推力等于误差(推力+表示向前推进,推力-表示向后推进)。
> `$ 推力 = 误差 $`
> 飞船初始位于0位置,分析飞船的运动情况?
飞船的运动情况大致如下图:

飞船不可避免的会越过目标点,因为在抵达目标点之前,误差永远是正值,虽然它会随着接近目标点越来越小。
因此在抵达目标点之前,推进器的推力也一直是正值,所产生的速度同样一直是正值。<br>
在越过目标点后的一瞬间,误差变为负值,而推力也同时变为负值。
而此时的速度仍然是正值,它需要一定的时间来减速直到停止。<br>
我们想要的结果当然是飞行过程不要越过目标,例如在停泊的时候,越过目标意味着撞击和毁灭。
<br>
## **动态误差的产生**
动态误差是指当误差不停变化的时候,所产生的一种追尾效应。
简而言之就是如果目标不是确定的100位置,而是另一艘飞船,它在不停的前进,自己的飞船要不停的追赶。
我们假定目标在以一定的加速度加速前进。
目标(蓝色)和自己飞船(红色)的运动情况大致如下图:

为什么最后会两条线会趋近平行呢?
因为推进器出力只与误差有关,误差表示的是当前自己飞船与目标的距离差。
刚开始的时候两者距离为50,所以推力较大,自己飞船会追赶目标,导致两者的距离降低。
当距离降低到一定程度时,例如距离是10的时候,自己推进器产生的加速度是10,而目标也在以10的加速度前进,此时两者运动同步,结果就是飞船永远落后目标10的距离。
这种效应在某些情况下我们也是非常不愿意看到的,例如导弹、自动瞄准(陀螺仪控制瞄准时的转动速度也同理)。
<br>
*****
说到底震荡和动态误差都是由于我们能直接控制的参数需要经过两层运算才能作用在结果参数上。
即:我们控制加速度,加速度影响速度,速度影响位移。
精确求解固然是最完美的方法,但它抗干扰能力差,运算复杂。
我们最终的目的是找到一个“万能”公式来解决各种运动情况下对所需的控制输出求解,并且最大程度的减少震荡和动态误差。
- 序言
- 写在前面的话
- 太空工程师
- MEA小组
- 一、入门
- 1.1 基础概念
- 1.2 编程工具
- 1.3 变量
- 1.4 函数 Function
- 1.5 基本语法
- 1.5.1 运算符
- 1.5.2 if
- 1.5.3 for
- 1.5.4 其他语法
- 1.3 类 Class
- 二、编程块
- 2.1 方块的概念
- 2.2 List<T>结构
- 2.3 获取方块
- 2.4 方块的使用
- 三、Ship 类
- 3.1 简介
- Ship v0.5
- 代码
- 手册(待更新)
- 例子(待更新)
- Ship v1.0
- 代码
- 例子
- 文档
- 实例化
- 内置变量
- 内置方法
- Target类
- 四、运动控制算法在SE中的应用
- 4.1 运动控制介绍
- 4.2 过程控制
- 4.3 震荡和动态误差
- 4.4 误差累加方案
- 4.5 PID算法
- 4.6 对PID算法的一点点简化
- 4.7 一阶惯性系统的PID算法优化的研究
- 五、MEA方块类
- 5.0 核心代码目录
- v1.0核心代码
- v1.1 核心代码
- v2.0 核心代码
- 5.1 类的概念
- 5.2 MEA的方块类(Block)
- 5.3 方块类文档
- 5.4 方块类2.0 全教程
- 5.4.1 安装和使用
- 5.4.2 方块类(Block)
- 5.4.3 显示屏类(DisplayScreen)
- 5.4.4 LCD类(LCD)
- 5.4.5 主控座椅类(Cockpit)
- 六、疯猴的编程笔记
- 第一个程序
- 获取和控制其他块
- 物流与生产
- 界面与通信
- 运动与姿态
- 侦测与导航
- 七、SteamZhou的笔记
- 有趣而花里胡哨的IDEA
- 八、质子对撞炮的笔记
- 属性 Property
- 接口 interface