系统离散化
连续时间系统
一般来说系统的状态变化都是连续的
离散时间系统
数字控制器,有时候计算时需要将系统的状态离散化,控制器是离散的输出。这就需要将离散系统和连续系统结合起来,需要用到一些模块。首先是通过ADC将传感器信号采样并转化为离散输出,同时其他的参数都将是离散的形式。随后控制器的输出将会通过DAC转化为连续的系统输出,控制量的输出需要使用到保持器来保证在一个控制周期之内的控制量保持不变。
对于采样,采样频率太快会使数据堆积,需要大量的存储数据,采样频率太小,小于控制周期,会产生误差,采样频率一般采用被采样数据频率的2倍甚至是5-10倍,如果在中断中采样并且处理数据的话,采样周期一定要大于处理所用的时间,否则这段期间内的采样就没有了意义。
有时候会把连续系统近似为离散的系统之后设计算法来控制系统,连续系统与离散系统的转换
采样周期的选取
一般来说肯定是采样周期越小越好 T→0⇒y[k]→y(t)T→0 \Rightarrow y[k]\rightarrow y(t)T→0⇒y[k]→y(t),需要存储大量数据,内存占用多
T↑T\uparrowT↑ 会导致产生混叠,根据采样定理,采样频 ...
传递函数和状态空间方程
状态空间
对于一个系统的状态空间方程,可以使用 Laplace 变换来得到系统的运行状态方程
状态空间方程——一个包含输入,输出,状态变量的集合的一阶微分方程,但是对于高阶的系统,可以选择合适的状态量来消除高阶的系数
根据下式求出的状态空间方程中,对于矩阵 A 的特征值是决定系统极点的位置,可能会决定系统的稳定性
状态空间方程的解
对于一个状态空间方程
{x˙(t)=Ax(t)+Bu(t)y(t)=Cx(t)+Du(t)\left\{\begin{aligned}\dot{x}(t)=Ax(t)+Bu(t)\\y(t)=Cx(t)+Du(t)\end{aligned}\right.
{x˙(t)=Ax(t)+Bu(t)y(t)=Cx(t)+Du(t)
对上述第一个式子求解,可以将状态空间方程的解写作如下的形式,解分为两个部分,第一项为零输入响应,第二项为零状态响应。对于零输入响应,当输入 u(t)=0u(t)=0u(t)=0 时,系统的状态仅由初始状态 X(t0)X(t_0)X(t0) 驱动,其中 eA(t−t0)e^{A(t-t_0)}eA(t−t0) 是矩阵指数。对于零状态响 ...
深入理解计算机系统
快捷键
窗口操作
切换窗口:Alt+Tab
窗口移动:Win+↑/↓/←/→
文件操作
保存:Ctrl+S
关闭文件:Ctrl+W
撤销:Ctrl+Z
恢复:Ctrl+Shift+Z
复制/粘贴:Ctrl+C/V
向上/向下翻页:PageUp/PageDown
切换到左/右边的文件:Ctrl+PageUp/PageDown
选择操作
全选:Ctrl+A
选中:Shift+各种移动/跳转
光标操作
上/下/左/右移动光标:↑/↓/←/→
向上/下插入光标:Ctrl+Alt+↑/↓
在下一个匹配项处插入光标:Ctrl+D
查找/替换匹配项:Ctrl+F/H
全局查找/替换匹配项:Ctrl+Shift+F/H
更改操作
行删除:Shift+Delete
行上/下交换:Alt+↑/↓
跳转操作
跳转到上/下个光标位置:Alt+←/→
跳转到词首/尾:Ctrl+←/→
跳转到行首/尾:Home/End
跳转到列首/尾:Ctrl+Home/End
跳转到行:Ctrl+G
跳转到括号:Ctrl+Shift+
跳到定义:F12
查看定义:Alt+F12
VSCode 其他操作
向右拆分编辑器:Ctrl ...
代码整洁之道
时刻保持初心,保持代码整洁
变量命名规则
名副其实,见名知意
避免误导
做有意义的区分
使用读的出来的名称
使用可以搜索的名称
避免使用编码
成员前缀
匈牙利语标记法
避免思维映射
类名
类名和对象名应该是名词或名词短语
类名不应当是动词
方法名
方法名应当是动词或动词短语
别扮可爱
每个概念对应一个词
别用双关语
使用解决方案领域的名称
给这些事取个技术性的名称,通常是最靠谱的做法。
使用源自所涉问题领域的名称
添加有意义的语境,不要添加没用的语境
函数的定义规则
短小 函数的第一规则是要短小。第二条规则是还要更短小。
只做一件事
每个函数一个抽象层级
switch语句
使用描述性的名称
函数参数
最理想的参数数量是零(零参数函数),其次是一(单参数函数),再次是二(双参数函数),应尽量避免三(三参数函数)。有足够特殊的理由才能用三个以上参数(多参数函数)—所以无论如何也不要这么做。
标识参数丑陋不堪。向函数传入布尔值简直就是骇人听闻的做法。这样做,方法签名立刻变得复杂起来,大声宣布本函数不止做一件事。如果标识为 true 将会这样做,标识为 fals ...
git
前言
git 是一个十分强大的远程项目管理的系统,对于开发者来说十分重要,它的版本管理功能也十分强大,而且存储空间也有 1GB,还算挺大的。
本人曾在一次事故中磁盘损坏导致丢失了自己做的项目,熬夜半年多完成的心血,很心痛。。。
所以在这里告诫大家, 一定要做好备份
SSH与github
SSH(安全外壳协议,Secure Shell 的缩写)是建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议,利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。简单来说,SSH就是保障你的账户安全,将你的数据加密压缩,不仅防止其他人截获你的数据,还能加快传输速度。
一般来说,安装 git bash 之后实际上是自带 SSH 的,所以可以检验一下,在终端输入指令 ssh 会显示出 usage 的内容,那就是装好了,有问题的话,可以自行百度一下。
没问题了就可以输入指令 ssh-keygen -t rsa ,使用 RSA 算法生成密钥,然后,如下
其中 红色圈里面是输入保存的地址,蓝色圈里输入的是 passphrase,可以不输入,直接回车就行。最 ...
双轮足式机器人控制器设计
github开源仓库
注意方向问题!意方向问题!方向问题!向问题!问题!题!,以下所有分析皆是顺时针为正
单侧系统状态方程求解
首先双轮足式机器人可以将模型化简为一个倒立摆模型,如下
分块开始分析
轮子
水平方向上
mwx¨=f−Nwm_w\ddot{x}=f-N_w
mwx¨=f−Nw
竖直方向上
FN=Pw+GF_N=P_w+G
FN=Pw+G
转矩
Iwx¨r=Tw−frI_w\frac{\ddot{x}}{r}=T_w-fr
Iwrx¨=Tw−fr
联立消去 fff 得到
\ddot{x}=\frac{T_wr-N_wr^2}{I_w+m_wr^2}~~~~\textcircled{1}
摆杆
水平方向上
m_l(\ddot{x}+\frac{\partial^2}{\partial t^2}L_w\sin\theta)=N_w-N_b~~~~\textcircled{2}
竖直方向上
m_l\frac{\partial^2}{\partial t^2}L_w\cos\theta=P_w-P_b-m_lg~~~~\textcircled{3}
转矩
I ...
MPC模型预测控制
github仓库
最优化控制
研究动机
在一定的约束条件下达到最优的系统表现,最优是综合分析的最优
代价函数与评判标准
对于单输入单输出系统控制,e(t)为误差, u(t)为输入
当 ∫0te2dt\int_0^te^2dt∫0te2dt 最小时,就可以保证系统的追踪性很好
当 ∫1tu2dt\int_1^tu^2dt∫1tu2dt 最小时,可以保证系统的输入最小,能耗最低
控制过程的代价函数
J=∫1t(qe2+ru2)dtJ = \int_1^t(qe^2+ru^2)dt
J=∫1t(qe2+ru2)dt
目的就是设计一个u使J达到最小值
q和r就是我们可以调节的参数,如果 q>>rq>>rq>>r 那么就是设计过程更加注重误差,如果 r>>qr>>qr>>q的话,就是设计过程更加注重能耗最低
对于多输入多输出的系统控制中
dxdt=Ax+Bu\frac{dx}{dt} = Ax +Budtdx=Ax+Bu x是系统的状态变量
Y=CxY=CxY=Cx Y就是系统的输出
代价 ...