凸优化在路径优化中的应用

本文介绍了如何利用凸优化解决路径规划问题,通过生成初始路径、构造凸多边形区域以及设定目标函数来确保路径无碰撞且平滑。采用多项式曲线作为路径表示,并通过线性二次规划(QP)求解器找到最优解。实验结果显示了这种方法的有效性,但要注意目标函数的选择和优化变量的数量对结果的影响。该方法适用于质点化的路径优化问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总体思路

  凸优化虽然做为优化中的一个特例,但非常多的工程问题都可以转变为凸优化问题,因此应用需求比较多,被大量学者研究,成果颇丰。由于本文重点在应用,不讲解凸优化,如果感兴趣可以参考书籍《Convex Optimization》。
使用凸优化对路径进行优化的过程可以如下:

Created with Raphaël 2.2.0 开始 生成初始路径 生成凸多边形区域 构造优化问题 使用求解器求解优化问题 结束

  生成初始路径是为了更容易生成凸多边形,而凸多边形则是为了给优化的目标函数添加约束条件(保证无碰撞)。其中生成初始路径有非常多的方法,如A* 算法、hybirdA*、rrt等,此处不对这些算法进行讲解,以下将重点介绍生成凸多边形区域和构造优化问题上。具体程序可以参考这里

生成凸多边形

  在地图中生成凸多边形应当满足以下条件:

  1. 凸多边形与障碍物不相交;
  2. 相邻的两个凸多边形有重叠部分;
  3. 路径起点和终点包含在凸多边形中;

  由于使用栅格地图,可以选用矩形做为凸多边形可以减化一部分操作。由于初始路径已知,沿着初始路径进行搜索即可得到一系列凸多边形区域,由于方法多种多样,便不做详细说明。最终生成的凸多边形区域如下图所示。

构造目标函数

  当生成凸多边形区域后,只需要保证路径在凸多边形区域中即可保证路径与障碍物无碰撞,同时还有保证路径尽可能光滑,当然这样的路径存在无数条(目标函数不同,得到的路径就会不同)。
为了构造出凸的目标函数,可以使用特定的曲线表示路径,本文采用多条多项式曲线表示路径,将曲线的参数做为优化的变量,如下图所示。

  为了生成合适的路径,需要这些曲线满足如下条件:
  1. 每个凸多边形都对应一条曲线(体现在变量个数上);
  2. 每条曲线都在凸多边形中(可以不严格满足,体现在约束方程中);
  3. 曲线之间的交点在凸多边形的相交区域当中(体现在约束方程中);
  4. 相邻的两条曲线终点和起点的一阶导相等(体现在约束方程中);
  5. 所有曲线二阶导平方的积分尽可能小(体现在目标函数中);
  6. 第一条曲线的起点为路径起点,最后一条曲线的终点为路径的终点;

  其中,条件1确定优化变量个数,条件2保证路径无碰撞,条件3,4,5保证生成光滑的曲线。目标函数如式(1)所示。
J = ∑ i = 0 N ∫ 0 t f i x ¨ i 2 + y ¨ i 2 d t (1) J=\sum _{i=0} ^N \int _0 ^{t_{fi}} \ddot x _i ^2 + \ddot y _i ^2 dt \tag1 J=i=0N0tfix¨i2+y¨i2dt(1)

  式(1)中, t f i t_{fi} tfi可根据每个凸多边形的长度确定(方式不唯一),通过将多项式(4次多项式)代入式(1)中,得式(2)。

min ⁡ U J = U T H U = [ M M 1 M 0 0 … 0 M M 2 M 0 … 0 0 M M 3 M … ⋮ ⋮ ⋮ ⋱ ] U (2) \min _U J = U^THU = \begin{gathered} \begin{bmatrix} MM_1M & 0 & 0 & \dots \\ 0 & MM_2M & 0 & \dots \\ 0 & 0 & MM_3M & \dots \\ \vdots & \vdots & \vdots & \ddots \end{bmatrix} \quad \end{gathered} U \tag2 UminJ=UTHU=MM1M000MM2M000MM3MU(2)

  式(2)中, U U U为所有4次多项式的系数,总共有10n个系数(包括 x x x y y y方向), M = [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 12 ] M=\begin{gathered} \begin{bmatrix} 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 2 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 6 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 12 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 2 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 6 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 12 \\ \end{bmatrix} \quad \end{gathered} M=00000000000000000000002000000000060000000000120000000000000000000000200000000006000000000012 M i = [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 t i t i 2 / 2 t i 3 / 3 0 0 0 0 0 0 t i 2 / 2 t i 3 / 3 t i 4 / 4 0 0 0 0 0 0 t i 3 / 3 t i 4 / 4 t i 5 / 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 t i t i 2 / 2 t i 3 / 3 0 0 0 0 0 0 t i 2 / 2 t i 3 / 3 t i 4 / 4 0 0 0 0 0 0 t i 3 / 3 t i 4 / 4 t i 5 / 5 ] M_i=\begin{gathered} \begin{bmatrix} 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & t_i & t_i^2/2 & t_i^3/3 & 0 & 0 & 0 & 0 \\ 0 & 0 & t_i^2/2 & t_i^3/3 & t_i^4/4 & 0 & 0 & 0 & 0 \\ 0 & 0 & t_i^3/3 & t_i^4/4 & t_i^5/5 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & t_i & t_i^2/2 & t_i^3/3 \\ 0 & 0 & 0 & 0 & 0 & 0 & t_i^2/2 & t_i^3/3 & t_i^4/4 \\ 0 & 0 & 0 & 0 & 0 & 0 & t_i^3/3 & t_i^4/4 & t_i^5/5 \\ \end{bmatrix} \quad \end{gathered} Mi=0000000000000000000000titi2/2ti3/30000000ti2/2ti3/3ti4/40000000ti3/3ti4/4ti5/50000000000000000000000titi2/2ti3/30000000ti2/2ti3/3ti4/40000000ti3/3ti4/4ti5/5

  上述目标函数在没有约束条件的情况下,目标函数最小值和变量均为0。需要添加条件2、 3、 4、 5才能得到最终的曲线。约束条件方程如式(3)所示。
l b ≤ A U ≤ u b (3) lb \leq AU \leq ub \tag3 lbAUub(3)

  式(3)中, l b lb lb u b ub ub包含了起点、终点位置、凸多边形的边界等, A A A为相关的常数矩阵,具体内容可以参考github上的程序:https://github.com/Shenyii/navigation_1.git 。

  构造完目标函数后,可以发现这是一个线性QP问题,也是一个凸优化问题,因此可以使用相关工具对目标函数进行求解,如OSQP求解器。

实验效果

注意事项

  1. 目标函数的定义多种多样,不同的目标函数将得到不同的路径;
  2. 更高次的多项式增加了求解变量的个数,使得优化时间增加;
  3. 通过增加曲线中间点约束,使曲线尽可能在凸多边形中;
  4. 只适用与将机器人质点化处理的路径优化;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值