基于运动学的横向控制2

        谈到控制就离不开模型预测MPC,直观一点的意思就是在当下这个时刻我其实可以预测以后每个时刻的状态,从而决定未来到底给多少控制。我们可以定义二个函数,一个是预测的未来状态和期望的未来状态的距离,另一个是输入变化量的模长,显然,我们希望优化关于未来输入的损失函数,使得这两项最小,即预测状态最贴近期望状态,并且输入不会变化地太剧烈。与PID控制不同,可以明显看出MPC计算输入的过程,本质上是一个优化问题,既然是优化问题,那么就可以加上约束,这是PID做不到的。

车辆的运动模型上文已经给出,x\dot{} = vcos\varphi ,y\dot{} = vsin\varphi ,\varphi \dot{} = vtan\delta /L。一个标准的空间状态方程可以定义为 X\dot{} = AX+BU, X代表状态矩阵,U代表控制矩阵,我们对车辆的速度V以及车轮转角感兴趣,所以这个空间状态方程可以入下图所写:

 很明显发现这个非线性,根本找不到适合的A,B矩阵来构建空间状态方程。非线性的线性化往往要用泰勒公式去展开,假设在(Xr,Ur)已知,那么在这个点关于控制量和状态量的偏导就可以求出来 :

 那么两个式子相减,其实就可以得到一个新的线性化的空间状态方程:

 这个就是基于运动学的空间状态方程,那么拿到这个我们应该怎么处理呢,采用牛顿法进行矩阵离散化处理,就可以得到K+1时刻的方程:

 都这里完成一半目标,下面要讨论最初的问题,希望用有限的能量去让系统更快的趋近于稳定,所以最好让空间状态方程变成 增量控制的形式\Delta U。重新定义空间状态输入

 

暂时到这里,推不动了。

 

 

 

 

 

 

 

 

 

 

 

### 运动学横向控制概述 运动学横向控制的核心目标是对车辆的侧向偏差进行有效调节,使车辆能够沿着预定轨迹行驶。以下是几种常见的实现方法及其具体细节。 --- #### **Stanley 算法** Stanley 算法是一种基于几何路径的轨迹追踪控制器,其设计原理简单却高效,在实际应用中表现出色。该算法主要依赖于两个误差项来调整车辆的方向: 1. 前视距离误差:衡量当前车头方向与期望轨迹之间的角度差。 2. 交叉轨道误差:表示当前位置到期望轨迹的距离偏移。 通过这两个误差项,可以计算出所需的转向角输入,从而使车辆逐步逼近并跟踪给定的轨迹[^1]。 ```cpp // 计算 Stanley 控制器所需的角度修正量 delta double calculateSteeringAngle(double cte, double heading_error, double velocity) { const double k = 0.5; // 调节参数 double steering_angle = atan((k * cte + heading_error) / (velocity)); return steering_angle; } ``` 上述代码片段展示了如何根据交叉轨道误差 `cte` 和航向误差 `heading_error` 来动态调整方向盘转角 `steering_angle` 的过程。 --- #### **LQR 横向控制** 对于更复杂的场景,线性二次型调节器(Linear Quadratic Regulator, LQR)提供了一种优化的方法来进行轨迹跟踪。它通过对车辆动力学模型进行线性化和离散化处理,构建状态空间方程,并利用反馈增益矩阵最小化性能指标函数中的代价[^3]。 ##### 关键步骤如下: 1. 获取当前的状态变量(位置、速度等),即调用 `getState()` 函数; 2. 使用最近邻搜索找到最接近的目标点索引,执行 `calcTrackError()` 方法; 3. 对连续时间域下的非线性微分方程组实施泰勒展开近似操作完成建模工作; 4. 将所得结果进一步变换至离散形式以便后续数值运算方便快捷地开展下去——这一步骤由 `stateSpace()` 完成; 5. 应用 Riccati 方程式求解最优反馈律 K 并返回对应的最佳前轮转动幅度值 δ* ——此部分交予 lqrControl() 处理即可达成目的;最后再经 updateState 更新下一时刻的新系统响应数据用于迭代直至满足收敛条件为止[^2]。 ```matlab % MATLAB 中的一个简化版 LQR 设计流程示意程序 function u_star = compute_LQR_control(A,B,Q,R,x) P = dlqe(A', B', Q, R); % 解代数Riccati方程获得协方差阵 P K = inv(R)*B'*P; % 得到反馈增益矩阵 K u_star = -K*x'; % 输出最佳控制信号 u* end ``` 注意这里仅展示了一个高度抽象化的伪码框架结构供参考学习之用而非完整的工程级解决方案! --- #### **Kinematic Model 动力学模型** 无论是 Stanley 还是 LQR 方法都需要依托准确可靠的车辆运动学描述作为基础支撑材料之一。一般情况下会假设忽略轮胎变形效应以及悬架刚度等因素影响进而建立起较为理想简单的二维平面坐标系下表达式集合[^4]: \[ \begin{aligned} & \dot{x}=v_{x}\cos(\theta)-v_{y}\sin(\theta), \\ & \dot{y}=v_{x}\sin(\theta)+v_{y}\cos(\theta),\\ & \dot{\psi}=\frac{a}{l_r}(v_y+v_x\tan(\delta)), \end{aligned} \] 其中 \( v_x,v_y,\theta,l_r,a,\delta\) 分别代表纵向速度、侧滑速度、朝向角、后轴距长度系数还有前轮转角大小等等物理意义明确的各项参量定义说明文档链接地址待补充完善后再另行告知各位读者朋友们查阅了解详情内容吧谢谢配合支持理解哈😊🙏💕👋✨🎉👏💪👍👌🌟🌈💖💝💌🎁🎂🎈🎊🎶🎵🎧🎤🎨🎭🎬🎥📺📷📸💡🎯🎮🎲♠️♣️♥️♦️ --- ### 总结 综上所述,针对不同复杂程度的任务可以选择合适的横向控制策略。如果追求快速部署且硬件资源有限,则推荐使用 Stanley 算法;而对于高精度要求的应用场合则更适合采用基于 LQR 的先进控制手段。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值