摘要:
在不知道系统模型的情况下,如果想要使用模型的方法控制系统,可以先用系统辨识求得系统的状态空间参数,然后设计控制器。 下面根据已知状态参数设计了一个系统,再利用控制量得到系统响应。 然后结合控制量和系统响应,利用matlab自带的子空间迭代方法辨识得到系统的状态方程。 再比较一下原始响应和辨识结果响应 阅读全文
摘要:
对于一组数据,通常可以用多项式来拟合,当然对于有周期规律的数据,我们也可以用傅里叶级数来拟合。 傅里叶级数公式形式如下: 当我们确定好n之后,关键就是求出A0、an、bn和w即可。 由于有待求系数在非线性函数cos和sin中,我们用非线性最优化方法来求解。 matlab代码如下: clear all 阅读全文
摘要:
可以参考之前的B样条曲线插值的方法。 要想利用控制点进行B样条曲面插值,前提是控制点不能是类似点云一样的无序点,一定要是分布在UV坐标空间中的栅格点。 方法就是首先对U方向进行B样条曲线插值,然后利用插值的结果再在V方向上进行B样条曲线插值即可。 下面用matlab自带的Peaks函数作为控制点为例 阅读全文
摘要:
方法示意图: 控制率公式: 其中theta是当前航向角与路径航向角之差,e为横向误差,v为车辆速度,lambda为控制参数。 算法步骤如下: 1. 根据当前定位结果找到路径最邻近点。 2. 计算该点与定位结果横向误差e与航线误差theta。 3. 根据控制率公式计算出前轮转角。 4. 将前轮转角转化 阅读全文
摘要:
首先要确定反馈量和控制量,这里反馈量用的是车和最近路径点的横向误差,控制量用的是前轮转角。 算法如下: 1. 根据当前定位结果找到路径最邻近点。 2. 计算该点与定位结果横向误差。 3. 以该误差作为反馈测量值通过pid生成控制量即前轮转角。 4. 将前轮转角转化为航向角,带入运动模型计算出下一时刻 阅读全文
摘要:
代数黎卡提方程通常会在求解最优控制时有所应用,比如LQR控制。 标准形式有以下两种: 1.连续代数黎卡提方程: 2.离散代数黎卡提方程: 其中P是未知量,A、B、Q、R为已知量。 离散代数黎卡提方程可以迭代求解。 matlab代码如下: clear all;close all;clc; A = [0 阅读全文
摘要:
数值雅克比本质就是对函数的每一维分别做数值微分,再组合为雅克比矩阵即可。 通常我们做最优化的时候要计算函数的雅克比矩阵,但是如果函数的解析式比较复杂,求其偏导解析解会非常麻烦。 虽然可以利用Mathematica或者Matlab的符号运算进行求解,不过有时候得到的解析解也是很复杂的,再转写成代码如果 阅读全文
摘要:
可以根据状态量(位置,速度,加速度)的起始和结束值列出6个方程,组成方程组解该问题。 1. 列出起始状态: 2. 列出终止状态: 3. 写成矩阵形式: 求解c即可。 下面是从横向-5米到5米的生成的路径。 代码如下: clear all;close all;clc; ts = 0;te = 10; 阅读全文
摘要:
如果要准确反求B样条的控制点,有几个参数还是要事先知道的: 1. 样条的控制点个数。 2. B样条曲线的所有点坐标和个数。 3. B样条基函数。 一般条件2容易知道一些,1和3还是比较难事先知道的。 如果待求控制点为四个,B样条曲线点个数为n个,并且已知基函数形式如下面代码中[b0 b1 b2]。 阅读全文
摘要:
可以通过.bashrc或/etc/profile进行配置,不过其启动条件还是有所区别,有时候可能无法达到真正想要的效果。 这里主要利用systemctl工具进行配置。 首先编写开机自启脚本,如在/home/xxx/下编写start.sh。 #!/bin/bash echo "111111" > /h 阅读全文