基于B样条曲线和LQR的跟踪策略

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

在简历里我写了“采用B样条曲线和LQR的弧线转弯策略”,在此整理一下具体内容。


无代码

一、基于B样条曲线的路径生成

上层调度层给的目标路径通常只有极少几个点,尤其在转弯过程,此时就需要使用某种策略生成一段连续平滑的路径,常用的有B样条曲线和贝塞尔约束曲线等。
在此我们选择B样条曲线作为我们的路径生成策略。

1.B样条曲线基本概念(复制的gpt)

B样条(B-spline)是一种用于生成平滑曲线的数学方法,可以灵活地通过控制点创建不同形状的曲线。B样条曲线具有连续的曲率,因此适合在需要平滑路径的场景(如机器人路径规划)中使用。

B样条曲线由一组控制点和一个称为基函数的数学函数共同定义,主要参数包括:
控制点:决定了B样条曲线的形状。曲线不会严格通过这些点,但会在这些点周围生成平滑曲线。
阶数:B样条的阶数决定了曲线的平滑度。常用的三阶B样条曲线(立方B样条)具有平滑的曲率变化。
节点向量:定义了控制点在曲线生成中的位置权重,决定了曲线在控制点附近的形状和光滑度。
在这里插入图片描述使用B样条的步骤
选择控制点:确定曲线的控制点,这些点决定了曲线的形状。在机器人路径规划中,控制点通常由关键位置组成。

设定阶数:一般使用三阶B样条(立方B样条)来生成平滑曲线。

生成节点向量:节点向量可以均匀生成,也可以在需要的地方增加密集节点以控制曲线形状。在最简单的均匀B样条中,可以设置节点向量为等间隔的数列。

计算基函数:使用递归定义计算每个控制点的基函数。

生成曲线点:根据参数𝑢从曲线起点到终点的变化,计算每个点的位置𝐶(𝑢),从而生成完整的B样条曲线。

2.B样条曲线最终输出

一段离散的平滑路径点,计算其每一点的曲率获得机器人目标航向角。

3.B样条曲线相较贝塞尔约束曲线的优势(gpt)

B样条和贝塞尔曲线在路径规划中都可以生成平滑曲线,但在一些特定的应用中,B样条相比贝塞尔曲线更具优势。以下几点阐述了在路径规划中选择B样条而不使用贝塞尔曲线的原因:

1. 局部控制能力

  • B样条具有较强的局部控制能力。调整某个控制点时,只会影响曲线的局部区域,而不会改变整条曲线的形状。这对于路径规划尤其重要,因为局部调整路径(例如避障或实时调整)时,不会对整体路径产生影响。
  • 贝塞尔曲线的局部控制能力较差。调整一个控制点会影响整条曲线的形状。对于复杂路径或动态调整的场景,贝塞尔曲线不够灵活。

2. 高阶曲线的控制点数量

  • B样条在构造高阶曲线时可以增加控制点数目,同时仍保持平滑的形状,且不会引起曲线大幅波动。控制点越多,曲线的可调节性越高,适合复杂路径规划。
  • 贝塞尔曲线在控制点较多的情况下会产生较大的计算复杂度,并且曲线会出现“膨胀”或不受控制的波动。高阶贝塞尔曲线的控制点对曲线的形状影响较为显著,容易导致曲线过度弯曲或产生波动,不利于生成自然的路径。

3. 平滑过渡与连续性

  • B样条可以通过设置节点向量和阶数来控制平滑度和连续性。三阶B样条(立方B样条)能够保证曲线的连续性和平滑的曲率变化,尤其适合机器人路径规划中的平滑转弯。
  • 贝塞尔曲线在复杂曲线路径的过渡上,曲率的变化不如B样条平滑。尤其是多段贝塞尔曲线拼接时,会产生突兀的转折点,除非精确调整每段的切线方向,但这会增加实现复杂度。

4. 节点插值

  • B样条曲线可以控制在靠近控制点的区域,并且可以进行节点插值,使曲线更加接近控制点。对于需要精确经过某些点的路径规划,B样条更为灵活。
  • 贝塞尔曲线无法直接在曲线中插值控制点。增加控制点会改变曲线的整体形状,这对于路径规划中的精确定位控制来说是个缺点。

5. 复杂路径生成的灵活性

  • B样条适用于生成复杂的、多段的平滑路径,可以通过增加控制点和调节节点向量来生成复杂曲线,在路径规划中非常灵活。
  • 贝塞尔曲线适合用于生成简单的曲线,通常在控制点较少、需要控制简单曲线路径的场景下更适合。

6. 计算复杂度

  • 在B样条和贝塞尔曲线的基础实现上,两者的计算复杂度相近,但B样条在高阶时仍能保持稳定,而贝塞尔曲线在控制点数增多时复杂度显著增加,因此在更高阶的复杂路径上,B样条的计算更高效。

总结

综上所述,虽然贝塞尔曲线在设计简单曲线路径时很方便,但在机器人路径规划或自动驾驶等复杂路径场景中,B样条的局部控制能力、灵活性和平滑度让它成为更适合的选择。

面试官问起来的时候,需要首先根据项目解释B样条曲线,然后说明其优势,最后与下面的LQR路径跟踪策略做衔接。

二、LQR路径跟踪策略

在使用B样条曲线得到目标路径后,跟踪策略采用的是LQR控制算法。

1.LQR基本概念(GPT)

LQR(Linear Quadratic Regulator)是一种常用的线性二次型最优控制算法,广泛应用于控制系统优化。它的目的是在满足稳定性条件下,最小化给定状态和控制的加权代价函数,从而获得最优的控制输入。在项目中,如果LQR用于控制机器人路径的跟踪,它可以用于平衡路径跟踪中的位置误差和控制能量,确保平稳的运动效果。
LQR原理概述
LQR控制器的核心目标是找到一个反馈增益矩阵,使系统能够在稳定性和控制成本之间达到最优平衡。控制律为:u=−Kx。
其中,𝐾 是反馈增益矩阵,𝑢 是控制输入,𝑥是状态向量。
反馈增益矩阵𝐾的求解过程是通过最小化一个二次代价函数来实现的,该代价函数通常表示为:
在这里插入图片描述
其中:
𝑄是状态误差的权重矩阵,表示对系统状态偏离目标的惩罚。
𝑅是控制输入的权重矩阵,表示对控制能量的惩罚。

2.系统模型和输入输出

LQR适用于线性时不变系统,其状态空间表示为:𝑥’(𝑡)=Ax(t)+Bu(t)
其中:
𝐴:系统矩阵,表示系统动力学。
𝐵:控制矩阵,表示控制输入对状态的影响。

在一个机器人路径跟踪项目中,LQR的输入与输出可以具体表示如下:

输入:

状态向量𝑥:通常包含机器人的位姿误差(位置和角度误差),可以从位置传感器(如激光雷达、相机、IMU等)测得当前位姿,然后与目标位姿进行对比得到误差。
目标位姿 𝑥target :期望的位姿,由路径规划模块提供。
权重矩阵𝑄:用来设定对位置误差和姿态误差的重视程度。
权重矩阵𝑅:用来设定对控制输入(如轮速)的重视程度,通常用于平衡对系统稳定性的需求和对控制能耗的要求。
输出:
控制输入𝑢:通常包含两个轮子的速度差(若为差速机器人),用于实现机器人的运动控制。
LQR具体的解释可以看我另外一篇博客。
https://blog.csdn.net/weixin_48386130/article/details/142924438?spm=1001.2014.3001.5501

3.求解过程(gpt)

在这里插入图片描述

4.为什么不选PID或者MPC

选择LQR的原因:LQR适合实时性要求高、已知模型、线性系统或已线性化系统的场景,例如路径跟踪和姿态控制等。LQR的计算效率高,适合嵌入式实现,不需要复杂约束管理。
PID的局限性:对于简单的系统,PID控制表现很好,但在多变量、耦合或高阶系统中无法满足性能需求,且调参难度较大。
MPC的局限性:MPC虽然具有良好的控制效果和预测能力,但实时计算开销较大,不适合实时性要求高的场景,尤其是在计算资源有限的情况下。
在实际应用中,PID控制器常用于简单的系统,而LQR和MPC则适合复杂的路径规划和姿态控制。在复杂多变量或多约束的场景中,MPC会更有优势,而LQR适合在已知线性系统或线性化系统中实现简单、高效的最优控制。

面试问起的话,先将两句LQR是什么,再将项目中实际输入输出,再将怎么计算说一下。


总结

其中有很多是gpt中的内容,还是需要理解后才能进行实际运用和面试。

### 基于自适应观测器的LQR控制策略的研究与应用 #### 自适应观测器简介 自适应观测器是一种能够实时估计系统状态并调整自身参数以匹配实际系统的动态行为的技术。这类观测器特别适用于那些具有不确定性变化特性的复杂控制系统。 #### LQR控制原理概述 线性二次型调节器(LQR)是一种优化控制技术,旨在最小化由状态变量输入量构成的成本函数。该方法通过求解黎卡提方程获得最优反馈增益矩阵K,从而实现稳定性性能指标的最佳平衡[^1]。 #### 结合自适应观测器的LQR控制方案 当将自适应观测器应用于LQR框架内时,整个控制系统不仅具备了传统LQR的良好稳态特性,还增强了对未知扰动及结构不确定性因素的鲁棒处理能力。具体来说: - **状态预测**:利用自适应算法不断更新内部模型参数,使得即使面对非理想条件下的对象也能提供较为精确的状态预估; - **误差补偿机制**:引入额外项用于修正由于建模偏差所引起的输出跟踪失误; - **增强学习过程中的自我改进功能**:随着运行时间的增长,系统会积累更多经验数据,并据此进一步调优各环节间的协作关系。 #### 实现步骤说明 以下是构建基于自适应观测器的LQR控制器的一个简化流程描述(注意这里不使用指示顺序的具体词汇): 定义目标成本函数J(x,u),其中x表示状态向量而u代表控制输入。接着设定期望闭环极点位置以及相应的权重系数Q,R来表征不同维度的重要性差异。之后计算出满足上述约束条件下使J达到最小值的理想控制律形式\[ u=-K\hat{x} \] ,此处\( K=R^{-1}B^{T}P \), P为离散/连续时间版本下对应的代数Riccati方程解。与此同时,在线调整观测器内的可变参数集θ以便更好地逼近真实情况。最后经过多次迭代循环直至收敛至满意精度为止。 ```matlab % MATLAB伪代码片段展示如何设置基本架构 A = ...; B = ...; C = ...; Q = eye(size(A)); R = 0.1*eye(1); % 定义代价矩阵 [K,~,~] = lqr(A,B,Q,R); theta_hat = zeros(numel(sys_params),1); % 初始化待辨识参量初值 for t=1:Tmax y_meas = measure_output(); % 获取当前时刻测量值 x_est = observer_update(y_meas, theta_hat); % 更新估计状态 u_control = -K*x_est'; apply_input(u_control); % 计算并施加控制作用 theta_hat = adapt_param(theta_hat,x_est,y_meas); % 调整参数估值 end ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不断学习加努力

俺会努力的,一直免费的!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值