本辆小车是以STM32F103C8T6作为主控芯片,使用LQR算法作为小车的自控算法, 区别于传统PID算法,LQR控制器(Linaer Quadratic Regulator 线性二次型调节器)是一种在现代控制理论中设计状态反馈控制器的方法,在这里引入了反馈增益K的概念来使系统稳定。我们可以通过选择反馈增益K的值来改变闭环矩阵的特征值,从而改变系统的表现。 与经典PID系统相比,经典PID是依靠误差反馈来消除误差,这种系统存在一定的惯性,不能发生跳变,而目标值是外部给定,可以跳变,这就导致了PID系统会发生超调的现象, 而LQR中通过建立系统模型,来得到最优控制解,比PID具有更好的线性调节能力,这也是为什么选择LQR算法作为控制算法的主要原因。 如上图是对小车LQR控制系统建立的Siumlink模型,系统收敛可控,通过不断调节参数使得响应得到最优 LQR求解过程: 1 选取合适的Q和R 2 解 Riccati方程 3 计算出K 如图是LQR判断系统是否可控,是基于已经得到的物理模型上建立而来的。 车轮的运动可分解为平动和转动,则 由牛顿第二定律可得 mxr’’= Hfr-Hr 根据刚体转动定律可得 Iwr=TR-HfRr 其中m为车轮质量 r车轮半径,Xr右轮水平位移,Hfr右轮收到地面的摩擦力大小,Hr右轮收到的车体作用力的水平分力大小,Tr右轮电机输出转矩大小 I 右轮转动惯量,WR是右轮角速度大小 联立方程 得关联函数 (m+I/r2)xr’’= TR/r-HR 以上是针对控制算法做的一些简述,接下来是软件部分 源码中注释已经相对完善, 如图是LQR控制的相关代码,通过MPU6050测量的俯仰角度 来转换为小车前进速度,保持系统平衡状态始终为“0” LQR 控制器的效果是使得所有的状态变量都变为 0,为了实现 App 控制的 便捷,这里引入了 “Target_x_speed”,“Target_angle_x”,“Target_gyro_z”三个量, 分别表示目标前进速度,校正后的平衡中值,目标转向速度。(以 App 控制小 车前进为例,此时,我们的目标是使得 x_speed=Target_x_speed≠0,而 LQR 控制 器的效果是使得所有的状态变量都变为 0,那么,可以把“x_speed-Target_x_speed” 作为新的状态变量,使它变为0 . 硬件部分 主控芯片采用ST的STM32F103C8T6,72Mhz主频足够小车进行基本运算,同时还有CAN2.0外设接口 小车硬件选择MPU6050作为六轴传感器,用来测量三个轴向的加速度和角速度,代码中还可以根据温度来补偿陀螺仪的YAW轴角度偏移, 电机驱动部分使用TB6612 最大输入电压为15V,峰值电流可以达到3.2A,足以满足小车控制,同时带有多种保护功能,是小车驱动的最佳选择。 同时为了主板的简洁性,主板上除了屏幕均采用芯片, 如图示MPU6050模块的原理图部分 降压部分使用LM2596, 实际测试效率不高,纹波较大 如图示电压测量部分 |