系统的可控性
对于一个系统状态方程
X˙=AX+Bu\dot{X}=AX+Bu
X˙=AX+Bu
离散型与连续型是一样的
Xk+1=AXk+BukX_{k+1}=AX_k+Bu_k
Xk+1=AXk+Buk
X1=AX0+Bu0X2=AX1+Bu1=A2X0+ABu0+Bu1…Xn=AXn−1+Bun−1=AnX0+An−1Bu0+⋯+ABun−2+Bun−1X_{1}=AX_0+Bu_0\\\\
X_2=AX_1+Bu_1=A^2X_0+ABu_0+Bu_1\\\\
\dots\\\\
X_n=AX_{n-1}+Bu_{n-1}=A^nX_0+A^{n-1}Bu_0+\dots+ABu_{n-2}+Bu_{n-1}
X1=AX0+Bu0X2=AX1+Bu1=A2X0+ABu0+Bu1…Xn=AXn−1+Bun−1=AnX0+An−1Bu0+⋯+ABun−2+Bun−1
转化为矩阵形式
Xn=[BABAn−1BAn][un−1un−2…u0X0]X_n=\begin{bmatrix}B&AB&A^{n-1}B&A^n\end{bmatri ...
Hamilton Matrix and Equation
最优化问题求解中的汉密尔顿方程是最优控制方法解决动态优化问题的一阶必要条件
汉密尔顿方程(Hamilton Equation)
理论推导
首先看需要解决的问题
max∫t0t1f(x,u)dtx˙=g(x,u)x(t0)=x0x(t1):freemax\int_{t_0}^{t_1}f(x,u)dt\\\\
\dot{x}=g(x,u)\\\\
x(t_0)=x_0\\\\
x(t_1):free
max∫t0t1f(x,u)dtx˙=g(x,u)x(t0)=x0x(t1):free
引入一个函数 λ(t)\lambda (t)λ(t) 表示一个定义在 t0≤t≤t1t_0\leq t\leq t_1t0≤t≤t1 上的连续的可微函数,那么对于任何满足上述约束的 x(t),u(t)x(t),u(t)x(t),u(t) 有
∫t0t1f(x,u)dt=∫t0t1[f(x,u)+λg(x,u)−λx˙]dt\int_{t_0}^{t_1}f(x,u)dt=\int_{t_0}^{t_1}[f(x,u)+\lambda g(x,u)-\lambda \dot{x}]dt
∫t ...
Riccati方程
前言
第四讲:李群和李代数 - 知乎 (zhihu.com)
辛矩阵
数学中,辛矩阵是指存在一个 2n×2n2n\times 2n2n×2n 的矩阵 M,使之满足
MTΩM=ΩM^T\Omega M=\Omega
MTΩM=Ω
其中 MTM^TMT 为 M 的转置矩阵,而辛矩阵 Ω\OmegaΩ 是一个固定的可逆斜对称矩阵,这类矩阵在适当的变化后皆能表为
Ω=[0I−I0]\Omega=\begin{bmatrix}0&I\\-I&0\end{bmatrix}
Ω=[0−II0]
或者
Ω=[01−10...01−10]\Omega=\begin{bmatrix}0&1\\-1&0\\&&...\\&&&0&1\\&&&-1&0\\\end{bmatrix}
Ω=⎣⎢⎢⎢⎢⎢⎡0−110...0−110⎦⎥⎥⎥⎥⎥⎤
两者的差异仅在于基的排列,其中 III 是 n×nn\times nn×n 的单位矩阵,此外 detΩ=1\det\Omega=1detΩ= ...
矩阵求导和迹运算
求导
对与矩阵 XXX, AAA, UUU, VVV
dXTX=IdXXT=IdXTAX=AdAXXT=AdAXX=ATdXAX=ATdXTXX=2XdXTAXX=(A+AT)XdXTAXXXT=ddX(dXTAXdX)=AT+A∂U∂XT=(∂UT∂X)T∂UTV∂X=∂UT∂XV+∂VT∂XUT∂UVT∂X=∂U∂XVT+U∂VT∂X∂[(XU−V)T(XU−V)]∂X=2(XU−V)UT∂UTXV∂X=UVT∂UTXTXU∂X=2XUUT\frac{dX^T}{X}=I\\\\
\frac{dX}{X^T}=I\\\\
\frac{dX^TA}{X}=A\\\\
\frac{dAX}{X^T}=A\\\\
\frac{dAX}{X}=A^T\\\\
\frac{dXA}{X}=A^T\\\\
\frac{dX^TX}{X}=2X\\\\
\frac{dX^TAX}{X}=(A+A^T)X\\\\
\frac{dX^TAX}{XX^T}=\frac{d}{dX}(\frac{dX^TAX}{dX})=A^T+A\\\\
\frac{\partial U}{\partial X^T} ...
系统离散化
连续时间系统
一般来说系统的状态变化都是连续的
离散时间系统
数字控制器,有时候计算时需要将系统的状态离散化,控制器是离散的输出。这就需要将离散系统和连续系统结合起来,需要用到一些模块。首先是通过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)=eA(t−t0)X(t0)+∫t0teA(t−τ)Bu(τ)dτX(t)=e^{A(t-t_0)}X(t_0)+\int_{t_0}^t{e^{A(t-\tau)}Bu(\tau)}d\tau
X(t)=eA(t−t0)X(t0)+∫t0teA(t−τ)Bu(τ)dτ
其中 eA(t−t0)e^{A(t-t_0)}eA(t−t0) 是状态转移矩阵,表示系统状态转移变化的规律,是一个实时变化的矩阵,A 矩阵对其有着重要的作用,当 A 的特征值小于0时, X(t)X(t)X(t) 是不断趋近于 0 的,是系统稳定性分析的一个重要方式,但是 A 矩阵的特征值中含有虚数就表示该系统是有震荡的(根据欧拉公式,引入虚数相当于是 ...
深入理解计算机系统
快捷键
窗口操作
切换窗口: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开源仓库
注意方向问题!意方向问题!方向问题!向问题!问题!题!
机体解算时所用到的角度力矩方向都是顺时针为正(从右侧看),但是在 VMC 和腿部五连杆解算中,几乎都是逆时针为正,但是有一点,关节电机的转矩为顺时针为正,所以读者一定要注意这一点
单侧系统状态方程求解
首先双轮足式机器人可以将模型化简为一个倒立摆模型,如下
分块开始分析
轮子
水平方向上
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 得到
x¨=Twr−Nwr2Iw+mwr2 1\ddot{x}=\frac{T_wr-N_wr^2}{I_w+m_wr^2}~~~~{1}
x¨=Iw+mwr2Twr−Nwr2 1
摆杆
水平方向上
ml(x¨+∂2∂t2Lwsinθ)=Nw−Nb 2m_l(\ddot{x}+\frac{\partial^2}{\p ...