gdb使用
前言gdb 功能
动态改变程序的执行环境。
自定义启动运行需要调试的程序。
在指定位置使用条件表达式设置断点。
在程序暂停时观察代码内变量值的变化。
开始前准备主要是生成调试信息,在编译的时候,添加 -g 选项来生成调试信息,以此来使用 gdb 的调试
gdb 外部指令
gdb 可执行文件名 启动 gdb 调试
gdb --help 查看指令帮助
man gdb 查看 gdb 手册
gdb -x xxx 在 gdb 启动时运行一些脚本
gdb --version 查看 gdb 版本
gdb 内部指令开始运行
r/run 开始运行,会一直运行,直到断点
start 开始运行,在 main 处会停下来
starti 开始运行,在第一条指令处停下来
r/run param 开始运行,会一直运行,直到断点,后面的 param 就是可执行文件后面需要跟的参数
运行中指令
c/continue 继续运行,一直运行,直到下一个断点
c/continue n 继续运行,一直运行,会忽略 n 个断点
s/step 单步,不进入函数内部
si/stepi 单步进入,进入函数内部,是在机器层面的,单步 ...
gcc使用
前言介绍GCC(英文全拼:GNU Compiler Collection)是 GNU 工具链的主要组成部分,是一套以 GPL 和 LGPL 许可证发布的程序语言编译器自由软件,由 Richard Stallman 于 1985 年开始开发。
GCC 原名为 GNU C语言编译器,因为它原本只能处理 C 语言,但如今的 GCC ,不仅可以编译 C、C++ 和 Objective-C,还可以通过不同的前端模块支持各种语言,包括 Java、Fortran、Ada、Pascal、Go 和 D 语言等等。
GCC支持多种硬件开发平台,还能进行跨平台交叉编译。此外,GCC是按模块化设计的,可以加入新语言和新CPU架构的支持。
GCC、gcc、g++三者之间的关系gcc(GUN C Compiler)是GCC中的c编译器,而g++(GUN C++ Compiler)是GCC中的c++编译器。
gcc和g++两者都可以编译c和cpp文件,但存在差异。gcc在编译cpp时语法按照c来编译但默认不能链接到c++的库(gcc默认链接c库,g++默认链接c++库)。g++编译.c和.cpp文件都统一按cpp的 ...
PF粒子滤波器
前言对于一般的非线性/非高斯系统,解析求解的途径是行不通的。在数值近似方法中,蒙特卡罗仿真是一种最为通用、有效的手段,粒子滤波就是建立在蒙特卡罗仿真基础之上的,它通过利用一组带权值的系统状态采样来近似状态的统计分布。由于蒙特卡罗仿真方法具有广泛的适用性,由此得到的粒子滤波算法也能适用于一般的非线性/非高斯系统。但是,这种滤波方法也面临几个重要问题,如有效采样(粒子)如何产生、粒子如何传递以及系统状态的序贯估计如何得到等。
简单的理解,粒子滤波就是使用了大量的随机样本,采用 蒙特卡洛(MonteCarlo,MC)仿真技术完成 贝叶斯递推滤波 (Recursive Bayesian Filter) 过程。
一阶矩 mean一阶矩是随机变量的期望值
\mu=E[X]=\sum p(x_i)x_i
二阶矩 variance二阶矩是随机变量偏离其期望值的平方的期望值,表示随机变量的离散程度
\sigma^2=E[(X-\mu)^2]=\sum p(x_i)(x_i-\mu)^2
三阶矩 skewness三阶矩是随机变量偏离其期望值的立方的期望值,表示随机变量分布的偏斜程度
\gamma= ...
数字滤波器
数字滤波器数字滤波器按照最佳逼近特性可以分为巴特沃斯Butterworth,切比雪夫Chebyshev,贝塞尔Bessel,椭圆Elliptic滤波器。按照频带又可以分为低通,高通,带通,带阻滤波器,其中高通,带通和带阻滤波器都可以由低通滤波器由频率变换得到。
低通滤波器当输入信号频率小于某一截止频率时,低通滤波器能够通过信号,使其保留低频分量,而将高于截止频率的部分信号阻止或者减弱
传递函数为
G(s)=\frac{G_0w_c^n}{(s+w_c)^n}这就是 n 阶低通滤波的传递函数,其中 $w_c$ 就是截至频率, $G_0$ 是通带增益或零频增益
高通滤波器当输入信号频率大于某一截止频率时,高通滤波器能够通过信号,使其保留高频分量,而将低于截止频率的部分信号阻止或者减弱
传递函数为
G(s)=\frac{G_0w_c^ns^n}{(s+w_c)^n}这就是 n 阶高通滤波的传递函数,其中 $w_c$ 就是截至频率, $G_0$ 是通带增益或零频增益
带通滤波器当输入信号在某个频率的范围內时,带通滤波器能够通过该信号,使其保留,对于高于或低于这个频率一定范围的频率的信号阻止 ...
QP二次规划
一些定义对于一个函数 $F:R^n→R^m$ 是一个将欧式 n 维空间的函数,该函数由 m 个实函数构成, $y_1(x_1,…,x_n),…,y_m(x_1,…,x_n)$
Jacobian 矩阵函数 F 的偏导数组成一个 m 行 n 列的矩阵,就是 Jacobian 矩阵
J_F(x_1,...,x_n)=\begin{bmatrix}\frac{\partial y_1}{\partial x_1}&...&\frac{\partial y_1}{\partial x_n}\\...&...&...\\\frac{\partial y_m}{\partial x_1}&...&\frac{\partial y_m}{\partial x_n}\end{bmatrix}也可以表示为 $\frac{\partial(y_1,…,y_m)}{\partial (x_1,…,x_n)}$。如果对于一个 $p\in R^n$ ,函数 F 在 p 点可微,则 F 在这一点的导数由 $J_F(p)$ 给出
Hessian 矩阵如果 F 的所有二阶导数都存在,则 F 的 Hessian 矩阵为 ...
贝叶斯滤波
前言在时移系统中通过对带有噪声的观测来估计隐状态的处理方法,滤波专门是指利用前面 k 个观测 $y_1,y_2,…,y_k$ 来估计第 k 个隐状态 $x_k$ 的方法,记作 $x_k|y_{1:k}$
如果利用前 d 个观测 (d<k) 来估计第 k 个状态,称为预报
如果利用前 d 个观测 (d>k) 来估计第 k 个状态。则称为平滑或内插
所以实际的滤波是 $d=k$ 的情形,本质上就是观测 $y_k$ 已知并且带有噪声,用它来估计未知隐状态 $x_k$
马尔可夫过程贝叶斯滤波状态空间模型对于一个可观测的系统,可以得到
x_k=Ax_{k-1}+Bu_k+Gw_k\\y_k=Cx_k+v_k其中 $w_k,v_k$ 分别是过程噪声和观测噪声,并且上式为状态空间方程的状态方程,下式为测量方程
模型假设由于跟踪设备获得的量测信息和我们根据控制信息得到的预测信息都不是完全准确的(否则也就没有进行估计的必要了),但其一定在真值附近的一定范围内,因此我们可以假设这两个信息服从一定的概率分布来表征二者在真值附近的不确定性。考虑的是随机动态系统,自然要用概率来刻画,所以需要 ...
PR比例谐振控制器
github仓库
比例谐振控制算法分析 - 百度文库 (baidu.com)
前言在传统的矢量控制系统中,广泛的采用了坐标变换技术,将三相静止坐标系下的电流电压等正弦量转化为同步旋转坐标系下的直流量,这个实现了简化系统,并且能够很好的使电机实现解耦控制。这么做的原因就是 PI 控制器无法对正弦量实现无静差控制,坐标变换简化了系统外环控制的设计,却造成内环结构复杂,设计困难。而且在电机运行中,电机的电感,电阻等电机参数会随着磁路的饱和,温度的升高而发生改变,从而使交叉耦合项不准确,进而使系统的控制精度下降。
PR 控制器可以实现对交流的无静差控制,将 PR 控制器用于网侧变换器的控制系统中,可以在两个相对静止的坐标系下对电流进行调节,可以简化控制过程中的坐标变换,消除电流 d,q 轴分量之间的耦合关系,并且可以忽略电网电压对系统的扰动作用。并且使用 PR 控制器更容易实现低次滤波补偿,这些都有利于简化系统的结构
傅里叶变换
F(\omega)=\int_{-\infty}^{\infty}f(t)e^{-j\omega t}dt\\f(t)=\frac{1}{2\pi}\int_{-\i ...
卡尔曼滤波
github仓库
卡尔曼滤波 KF
公式
\hat{x}_{k|k-1}=F_k\hat{x}_{k-1|k-1}\\P_{k|k-1}=F_kP_{k-1|k-1}F_k^T+Q_k\\K_k=P_{k|k-1}H_k^T(H_kP_{k|k-1}H_k^T+R_k)^{-1}\\\hat{x}_{k|k}=\hat{x}_{k|k-1}+K_k(z_k-H_k\hat{x}_{k|k-1})\\P_{k|k}=(I-K_kH_k)P_{k|k-1}基本假设卡尔曼滤波模型假设k时刻的真实状态是从(k − 1)时刻的状态演化而来
状态估计方程
x_k=F_kx_{k-1}+B_ku_k+w_k其中
$F_k$ 是状态变换模型(矩阵/向量),运动学一般是矩阵(状态转移矩阵)
$B_k$ 是作用在控制器向量 $u_k$ 上的输入-控制模型,一般运动学中没有这一项,因对于检测的目标的是无法测量其内部的控制量的,所以简化为0
$w_k-N(0,Q_k)$ 是过程噪声。均值为 0, $x_k$ 对应的就是高斯分布的均值,因此这项可以简化为 0
状态估计转移方程
z_k=H_kx_k+v_ ...
最优控制
一个最优的控制策略是无论最初状态和最初的决策是什么,剩余的控制策略一定符合最优控制策略
需要考虑的问题性能指标假设一个系统中的状态量分别为 $x_1,…,x_n$,并且期望值 $x_{1d},…,x_{nd}$ ,可以得到性能指标,这里的状态量指的是一个状态在不同的时间下的具体表现
J=(x_1-x_{1d})^2+...+(x_n-x_{nd})^2体现的是每个状态变量的代价,也就是代价函数,当 $J→0$ 也就是说明状态与期望状态越接近,上式还可以写作另一种形式,令 $e_n=x_{nd}-x_n$
J=\begin{bmatrix}e_1&...&e_n\end{bmatrix}\begin{bmatrix}e_1\\...\\e_n\end{bmatrix}由于对于不同的变量都有不同的权重系数,所以引入权重系数 $s$
J=\begin{bmatrix}e_1&...&e_n\end{bmatrix}\begin{bmatrix}s_1\\&...\\&&s_n\end{bmatrix}\begin{bmatrix}e_1\\...\\e_n\end{bmatrix}=E ...
ADRC自抗扰控制器
github仓库
前言
为了解决快速性和超调的矛盾,在控制器设计过程中引入了过渡过程,通俗的讲就是输入信号从初始值到目标值并不是阶跃的,而是平滑过渡的,并且这个过渡过程的时间长短是可以调节的。将过渡过程和微分器在一个模块中实现,称为跟踪-微分器(TD),单独的过渡过程和速度规划并没有本质区别。但是TD和速度规划不是一回事,TD将输入过渡和微分器统一为一个模块,它一边尽可能快地跟踪输入信号,同时给出输入信号近似的微分。
自抗扰控制对扰动和不确定性的处理是自抗扰控制最突出的特征,它把作用于被控对象的所有不确定因素都归结为“未知扰动”,而用被控对象的输入输出数据对它进行估计,并给予补偿。“自抗扰”的名称也来源于此,即主动抵抗干扰,不需要直接测量外扰的作用,也不需要实现知道扰动的规律(能知道更好)。构建观测器,利用被控对象的输入、输出和所施加的控制输入来估计作用于系统的总扰动(包括内扰和外扰,可以粗浅地理解为所有的影响因素),实现这一功能的模块被称为扩展状态观测器(Extended State Observer,ESO)。这个名字也与观测器的形式十分匹配,因为在设计ESO时,首先构造一个扩张的 ...
LQG线性二次高斯
github仓库
前言Linear Quadratic Gaussian
在实际系统中,噪声是不可避免的,在噪声的影响下,系统状态方程可以写作
\left\{\begin{aligned}&\dot{X}=AX+Bu+Gw\\&y=CX+Du+Hw+v\end{aligned}\right.其中 $w,v$ 均被当作为白噪声
如果我们假设噪声是均值为0高斯分布(事实上很多时候确实近似服从高斯分布,想想为什么呢?)由于系统噪声和输出噪声的存在,状态不能完美的衰减为0。我们就希望优化损失函数的期望,即
J=E\{\underset{T\rightarrow\infty}{\lim}\frac{1}{T}\int_0^T[X^TQX+U^TRU]dt\}LQG 控制器实际上就是一个最优二次型线性调节器+一个最优状态估计器(卡尔曼滤波器)而得到的一个控制器,即 LQR+KF
而 LQG 控制器相当于是将两个系统分离,LQR 与 KF 分离,而 LQR 是依旧是依据原系统所建立的一个控制系统,不过系统的观测值需要经过 KF 预估
KF在 LQG 框观测器架中的卡尔曼滤波器,指的是一个最优状态 ...
WBC全身控制器
前言概述在 WBC 的各种功能中,任务层次结构很重要,因为它提供了一个保证,即较高的优先级任务不会由于与较低优先级任务的冲突而失败。 该方法类似于资源分配问题,其中一些资源(即机器人附件或部件)比其他部件更重要,同时试图实现多个目标。
伪逆矩阵伪逆矩阵又叫做广义逆矩阵,是线性代数中针对矩阵的一种运算,指的是拥有部分逆矩阵的特性,但是不一定具有逆矩阵的所有特性的另一种矩阵。
假设
A\in R^{n\times m}\\A^g\in R^{m\times n}并且满足
AA^gA=A则 $A^g$ 就是 $A$ 的广义逆矩阵。
建构广义逆阵的目的是针对可逆矩阵以外的矩阵(例如非方阵的矩阵)可以找到一矩阵有一些类似逆矩阵的特性。任意的矩阵都存在广义逆阵,若一矩阵存在逆矩阵,逆矩阵即为其唯一的广义逆阵。
伪逆矩阵的性质
AA^gA=A\\A^gAA^g=A^g\\AA^g=(AA^g)^T\\A^gA=(A^gA)^T零空间在数学中,一个算子 $A$ 的零空间是方程 $A\vec{v}=\vec{0}$ 的所有解的集合,也叫做 $A$ 的核)。用集合构建符号表示为
Null(A)=\ ...
鲁棒控制理论
前言一种典型的不确定系统模型的基本形式是
y=(P+\Delta)u+n其中,y 是系统输出,u 是系统输入,P 是标称对象的传递函数,模型的不确定性以两种形式展现:n 是未知噪声或者干扰, $\Delta$ 是位置的对象摄动(未建模动态)
一般地说,鲁棒性概念是指反馈控制系统的某项性能对于某集合中的每一个对象都是成立的。具体地说,我们有如下鲁棒性定义。
鲁棒稳定性:设计一个控制器,使对每一个摄动后的对象,都能保证闭环系统的稳定性。
鲁棒性能:设计一个控制器,使对每一个摄动后的对象,闭环系统都满足稳定性和某种特定的系统性能。
上述鲁棒性的概念是指定给定一个控制器,如果某集合中的每一个对象都能保持某种特性成立,则称控制器对此特性是鲁棒的。因此鲁棒性必须包含一个控制器,有一个对象的集合和某些系统的特性
$H_\infty$ 控制器一些定义首先说明一些定义
$sup$:一个集合最小的上界,不小于它最大值的值,都是它的上界
$inf$:一个集合最大的下界,不大于它最小值的值,都是它的下界
$max$:最大值
$min$:最小值
$Im~f$:相当于 f 的值域
$Ker~f$ ...
PID控制理论
github仓库
完整计算公式
output=k_perr_{now}+k_i\sum_{j=0}^{k}e_j+k_d(err_{now} - err_{last})含义:
P: $kperr_{now}$
就是 kp 乘以此次误差,理论值与当前值的差值,作用是主动减小误差,使测量值主动贴近理论值。但是如果只有P的话,响应可能会非常剧烈,不好把控,P太大会导致超调
I: $ki\sum_{j = 0}^{k} e_j$
只要存在误差(稳态误差),不论误差有多小,i的输出也会越来越大
作用是消除稳态误差,当系统误差已经接近0时,p 的输出会很小,起不到继续减小误差的作用了,导致误差没有办法减小到0,这个时候就需要用到 I 算法,让误差值不断累积,并且累加到输出中
D: $kd(err_{now} - err_{last})$
就是 kd 乘以此次误差减上次误差,如果只有 P+D,那相当于是一个弹簧系统,阻尼。当变化越剧烈D的效果就会比较大。可以用来抑制系统过冲,更好的控制在理论值范围内,但是kd过大会导致系统产生一些不必要的震荡,所以可以在系统输出保持平稳的条件 ...
数字信号和模拟信号
模拟信号(Analog signal)简称 A
模拟信号是连续的信号,如下图中红色的曲线
优点
更容易处理
最适合音频和视频传输
具有更高的密度,可以传输更精细的信息
需要的带宽比数字信号少
可以准确的表达物理现象的变化
电气容差敏感度较低
缺点
长距离传输可能会产生意外干扰信号
容易产生耗损
数字信号抗扰性更高,模拟信号更容易受到噪声和失真的影响
信号质量较低
数字信号(Digital signal)简称 D
数字信号是离散的信号,如下图中黑色的阶梯型曲线
优点
能以更小的噪声,失真和干扰传递信息
数字电路能以较低的成本更容易大量复制
数字信号处理更加灵活,因为通过数字可编程系统可以改动DSP的操作
数字信号处理更加安全,数字信号可以被轻易加密和压缩
数字系统更加精确,而且通过错误检测和矫正代码可以降低错误发生的几率
数字信号可以通过半导体芯片存储在任何磁性介质或者光学介质上
数字信号可以远距离传输
缺点
与传输相同信息的模拟信号相比,数字通信需要更高的带宽
DSP以更高的速率处理信号,而且包含更多上层内部硬件资源,这将导致更高的功耗,而模拟信号处理因为包含消耗更少能量 ...
FOC磁场定向控制
电机场向量调制是一种用于控制感应电机的方法。它使用三相电流控制来调制电机的转矩和转速。在FOC控制中,电机的转子位置和速度被监测和估计,以提供准确的电流控制。这使得电机能够以高效率和低噪音运行。
FOC控制是现代驱动器系统的标准,用于控制感应电机、同步电机和永磁电机。它提供了高度可预测的电机控制,并且可以在不同负载条件下实现高效率。
电机类型
步进电机
步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。您可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到准确定位的目的;同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
永磁式 一般为2相,转矩和体积比较小,步进角为7.5或者15度
反应式 一般为3相,可实现大扭矩,步进角1.5度,噪声振动较大
混合式 结合以上两者优点,分为2相和5相,步进角为1.8度和0.72度
直流电机 通入直流旋转,反向电流就反向转
交流电机 输入或者输出为 ...
阻抗和导纳控制
机器人交互控制
直接力控 直接对完成任务所需要的力做一个设定,利用力或者转矩的传感器实时对力进行反馈,从而达到控制
存在的一些问题:使用的一些力的传感器一般会比较贵,也会出现精度和噪声的情况,其次就是不容易对力进行设定
间接力控
柔顺控制
被动柔顺 使用一些机械的设备,例如弹簧之类的设备使机器人在与外界交互中出现一些柔顺性
主动柔顺 通过软件使机器人对外界的环境做出一些柔顺性
阻抗/导纳控制 让机器人在与外界交互的过程中,包含有质量,弹簧,阻尼这样一个二阶阻抗系统的性质
关节空间
笛卡尔空间 也就是三维空间坐标系
力位混合控制
机器人在某个方向上做力的控制,在正交的方向上做位移的控制
阻抗控制关节空间内的阻抗控制目标:让机器人的每一个关节能体现出由弹簧-阻尼-质量组成的二阶系统的动态特性,其中 $q_d$ 是对关节角度的设定值, $q$ 是实际测量值,那么 $\overline{q}$ 就是一个控制误差,左边就是对这个控制的动态误差的描述,M, D, K 就是三个矩阵,表示质量,阻尼和弹性系数,这个q矩阵的大小是和关节数自由度量有关的,一般会设计为对角阵, ...
VMC虚拟模型控制
一点点小补充
M3508 转矩常数0.3,也就是每增加1A电流力矩增加0.3牛米
AK80-6 转矩常数 0.09 这个好像不用管
对于四足,电机相对,力矩Tp由TB和TF共同提供,会比以上计算更简单
五连杆正运动学解算
以杆 $L_5$ 的中心为原点,可以得到
A=(-\frac{L_5}{2}, 0)\\B=(-\frac{L_5}{2}+L_1\cos\varphi_1,L_1\sin\varphi_1)\\D=(\frac{L_5}{2}+L_4\cos\varphi_4,L_4\sin\varphi_4)\\E=(\frac{L_5}{2},0)通过五连杆左右两部分列写 C 点坐标,可以得到下列等式
\left\{\begin{aligned}&x_B+L_2\cos\varphi_2=x_D+L_3\cos\varphi_3\\&y_B+L_2\sin\varphi_2=y_D+L_3\sin\varphi_3\end{aligned}\right.求解得到
\varphi_2=2\arctan(\frac{B+\sqrt{A^2+B^2-C^2}}{A+C})\ ...


















