MPC模型预测控制
假设系统的模型为x(k+1)=Ax(k)+Bu(k)(离散形式状态空间方程)即下一时刻的状态量由本时刻的状态量和输入量决定
其中u(k+i|k)表示在k时刻预测k+i时刻的输入为做简化,设误差E即为状态x:
此时的J是关于x和u的二元函数,为了得到二次规划的标准形式,我们至少需要消去变量x或u之一,由于控制器由输入u决定,故我们决定消去变量x。其中Q为误差加权矩阵,R为输入加权矩阵,F为终端误差加权矩阵。
由于x(k|k)即为k时刻下预测k时刻的状态,也就是当前状态作为的初始条件,这是一个已知量。那么根据模型函数就可以进行以下递推:
写作矩阵形式即:
注意这里右边黑色的xk是k时刻的初始状态向量,而左边绿色的Xk量矩阵则是k时刻下预测的N区间内的状态变量值矩阵。回到J,我们将误差加权和展开结合终端误差得到以下矩阵形式:
同理我们也将输入加权和展开,则J可以写作:
其中bar{R}为R的一个对角阵。我们看到第二项和第三项,由于J为一个数(1*1矩阵),由矩阵相加原则,第二项和第三项也必然为一个数,而一个数的转置即为它本身,故事实上第二项与第三项相等。
勘误:这里的结果应该是2倍的第二项或 ...
VESC学习
VESC的上位机使用手册// 1.本手册对应vesc_tool版本为0.95,vesc_tool 3.00版本类似,仅做简单介绍// 2.一切内容都可点击对应栏目尾端的显示详情// 3.使用时相对重要的部分会加粗标红提示,其他在初学阶段可仅作了解,以后再深入学习// 4.如果只想先了解整定流程请直接参阅“整定流程”部分/*左侧参数栏*/零、Welcome&Wizard:左键为连接VESC,中键为开始整定电机的向导。
一、 Connection:正确接线硬件设备查看((USB-)Serial)部分,Port将显示串口端口,Baud为波特率一般设置为115200bps不用更改,TCP和Bluetooth LE部分不用管。之后点击 Welcome&Wizards界面的或右边栏的,连接成功则在底部栏右侧显示信息
二、 Firmware:vesc的固件信息,简单了解即可三、 Motor Setting: ①. General:
1. General:Motor Type表示控制方式,一般选择FOC(关于FOC算法的相关知识可以自己找点资料,但现阶段还不用了解的太深) ...
大疆电调
首先要明确一个概念,控制大疆电机我们只能控制其给定的电流,即我们只能将要设置的电流以CAN报文的形式发送给大疆电机的电调(DJ_CurrentTransmit)电流对电机的作用是给他一个恒定的速度,电流越大速度越大。大疆电机采用三环嵌套:电流环->速度环->位置环
大疆DJMotor结构体里定义了两个PID结构体分别控制位置环PID和速度环PID:typedef struct{ vs32 SetVal; //要PID调节参数的目标值vs32 CurVal; //要PID调节参数的当前值 float Kp; //PID参数 float Ki; float Kd; vs32 delta; //PID增量 vs32 midVal[3]; //本次偏差,上次偏差,上上次偏差}Inc_PIDTypedef;Inc_PIDTypedef PID_POS,PID_RPM;
在PID初始化中赋值要调整参数的目标值Set和PID参数Kp/Ki/Kd:void Inc_PID_Init(I ...
FOC电机控制算法
直流无刷电机的工作原理:由于没有一般直流电机的换向刷,故控制直流无刷电机实质上就是对其硬件mos管开关规律的控制。假设Q0、Q1代表A相,Q2、Q3代表B相,Q4、Q5代表C相。以打开Q1,Q2为例,此时A线圈上S下N,B线圈左S右N,所以转子磁铁会转到图中的状态。以此类推,我们依序将AB->AC->BC->BA->CA->CB->AB……通电,则转子便可以以一定的速度循环转动起来。而要让mos管按照我们的要求开闭,就需要编写单片机程序来实现高速规律控制。这种程序就是FOC算法,FOC算法就是对电机的运动建立数学模型,把电机的运动抽象化,使单片机能够根据这个算法控制电机产生我们想要的力矩和速度。
我们知道,直流无刷电机由三相线接入三股相位相差120°的电流分别作用于ABC三相,用相量法将其写作向量形式即如下图所示,同时我们将三相电流利用矢量分解合成到α-β坐标系下:
写作矩阵形式即:
这个变换就是所谓的克拉克变换,利用克拉克变换,我们就可以把三相电流降维成两个向量Iα和Iβ,由基尔霍夫电流定律和电机的对称性,如果我们假设电流从A相流入,我们可以得到两 ...
Keil学习
Keil+vscode联合开发:https://www.yisu.com/zixun/607208.html字体问题:Edit->Configuration->Encoding 可以选择ANSI,UTF-8或GB2312有时透过vscode打开时中文会出现乱码,此时一定要先把vscode的字体改成GB2312再保存,否则keil工程的中文会全部变成乱码当然,上面这个博客写的很详细了,直接参照博客的方法也可以
卡尔曼滤波器
卡尔曼滤波器的主要作用是估计系统的状态,并根据未来的预测值来对系统进行控制。它可以帮助我们从含有噪声和误差的传感器数据中提取出准确的信息,并且具有良好的实时性和可靠性。
Hat{xk}为第k次取平均得到的对真实数据的估计,zk为第k次的测量结果
新的估计值与上一次的估计值有关,这是一个递推式。卡尔曼滤波器不需要追溯很久以前的数据,而只需要上一次的数据结果即可,这是一种递归的思想。估计误差eest=估计值-真实值,估计误差是变化的。测量误差emea=max(测量值-真实值),测量误差是固定的,由测量仪器决定。这也决定了测量结果必然是在真实值附近的,以测量误差为阈值的随机波动(且通常呈现正态分布),且只有满足这一输入情况的测量数据才能应用卡尔曼滤波器滤波。
当k-1次的估计误差远大于k次的测量误差时,当k-1次的估计误差远小于k次的测量误差时,卡尔曼滤波器的循环递归过程如下所示:
协方差Cov描述了两个变量之间的相关性,在数学意义下,认为当Cov>0时两变量呈现正相关,即X增大Y也增大,当Cov>0时两变量呈现正相关,当Cov<0时认为两变量不相关。协方差的公式为:Cov ...
底盘运动学解算
全向轮:参考视频:https://www.bilibili.com/video/BV1rX4y1p7n7
舵轮:注意:解算图中各个轮子的w反了。V1、V2、V3、V4为行进轮的速度,θ1、θ2、θ3、θ4为舵轮的转向角。知道了这八个参数,就可以确定车体的运动。
ifdef OMNI_3 //全向等边三轮chassis.wheel[0].v = (speed_wantset.vx - speed_wantset.vw * chassis.omni_wheel2center * PI / 180.f);
chassis.wheel[1].v = (-cos_60 * speed_wantset.vx + cos_30 * speed_wantset.vy - speed_wantset.vw * chassis.omni_wheel2center * PI / 180.f);
chassis.wheel[2].v = (-cos_60 * speed_wantset.vx - cos_30 * speed_wantset.vy - speed_wantset.vw * chassis.om ...
曲线插值与拟合算法
贝赛尔曲线相关知识:https://zhuanlan.zhihu.com/p/366678047
B样条曲线相关知识:https://www.guyuehome.com/37024https://www.bilibili.com/video/BV1Qz4y1m7dS
1.贝赛尔曲线可知每个点的生成方式与t的关系。下图的显示的t是均匀流逝的。若把下图的黑点当作智能体在二维平面上运动,而最终的贝塞尔曲线(红色曲线)为智能体最终的行驶轨迹,我们可以看到智能体在不同的时间的速度是不相等。大致的感觉是:弯度越大时,行驶速度越慢;越平直,速度越快。对比几组实验,发现贝塞尔曲线上第个点的速度是有差异的。但是,每个点的速度与曲线的弯度(曲率)没有直接关系,而是与控制点间距离有关。从第四组实验可以看到,四个控制点共线,曲率在每处都为零,但是速度先增大后减小,这与头两个点距离最短,中间两个点距离最大有直接关系。
在实际速度规划中,我们期望在曲率(绝对值)大的地方,以较小的行驶速度行驶;在曲率(绝对值)小的地方,以较大的行驶速度行驶,从而在效率与安全之间达到一个很好平衡。贝塞尔曲线经常被用来设计或生成无人车 ...
路径规划算法学习
路径规划:蚁群算法:
信息素浓度函数是一个全局特征,它是之前的蚂蚁给当前蚂蚁的经验;启发函数是一个局部特征,它是当前蚂蚁在当前城市前往可前往城市最短距离的一个预计
其中Q是一只蚂蚁携带的信息素总量,Lk是第k只蚂蚁从城市i走到城市j的长度,于是信息素浓度函数就是蚂蚁在路径上释放信息素的浓度,表征了该蚂蚁对该路径长度的测定。
动态规划算法:采用逆向寻优的思路,其基本思路是将路径分为若干个阶段,离起点或是终点距离相同的中间点为同一阶段。对于每一个阶段的每一个点,都找出该点前往下一个阶段的最优路径(指到达终点距离最近);如此这般,当逆推到上一个阶段的任意点经过该点到达终点的局部最优路径必定是该点的最优路径+任意点到该点的距离,而上一阶段某一点到达该阶段的最优路径必然是上一阶这点到达该阶段任意点的这些局部最优路径的最小值,逆推回起点确定了每一阶段前往下一阶段的最优路径后,从起点沿最优路径顺推回终点即为全过程的最优路径,这是一个很典型的最优化原理方法,以下面这个问题为例:阶段4:从D1到阶段5的最优路径是5,D2到阶段5的最优路径是2
阶段3:从C1到阶段5的最优路径是C1->P5=min ...
vim学习
安装与配置vimVscode插件搜素vim
将settings下的内容拷贝赋值到settings.json中,首位可能要给个逗号
普通模式与插入模式的切换:
ESC:从插入模式返回普通模式普通模式到可视模式:V,可视模式到普通模式:ESC,V普通模式到命令模式:V,命令模式到普通模式:ESC
普通模式提供了除键入代码外几乎所有的基本功能,插入模式下可以键入代码,可视模式下可以快速而高自由度的框选代码,命令模式下可以使用命令对文件操作(例如:12是跳转文件到12行)
普通模式下的光标移动:h光标前移,l光标后移,j光标下移,k光标上移
普通模式动作:(光标要位于操作对象内部)
普通模式操作符:
p粘贴,u撤销,ctrl+R重做dd删除整行,cc修改整行,xdd/cc删除/修改x行P8还要再看看
Operator+Motion 操作符+动作在框选时,U能将框选内容改大写,u能将框选内容改小写gd转到函数定义,gh查看函数格式gT往前选择文件,gt往后选择文件切换光标分屏ctrl+n(目录为0)easy motion:+命令vim-surround:
‘foo’->ds’->fo ...