当前位置: 首页 > web >正文

导航路径优化(一)——平滑

文章目录

  • 一、路径需求
  • 二、路径优化
    • 1. 平滑代价
      • 1.1 三点路径平滑
        • 1.1.1 直接法
        • 1.1.2 海塞矩阵法
      • 1.2 N点路径平滑
        • 1.2.1 直接法
        • 1.2.2 海塞矩阵法

一、路径需求

一般地,对局部规划器生成的路径需要进行优化,我们希望传给机器人用于导航的路径有如下的需求:

  • 路径尽可能光滑,无拐点、无曲率突变(平滑);
  • 路径点间距尽可能均匀(均匀);
  • 平滑后的路径尽可能贴近原路径(几何相似性);

二、路径优化

针对路径优化的需求,从三个方面考虑:平滑均匀几何相似性,这三个方面用代价体现后,总代价最小即为我们需要的最优路径。即最优路径 c o s t m i n = c o s t s + c o s t l + c o s t g cost_{min}=cost_s + cost_l + cost_g costmin=costs+costl+costg

1. 平滑代价

1.1 三点路径平滑

以三个路径点为例:
在这里插入图片描述
如上图所示:原路径上存在三个路径点: A ( x 1 , y 1 ) A(x_1, y_1) A(x1,y1) B ( x 2 , y 2 ) B(x_2,y_2) B(x2,y2) C ( x 3 , y 3 ) C(x_3,y_3) C(x3,y3),以此三个点做两个向量 B A → \overrightarrow {BA} BA B C → \overrightarrow {BC} BC ,两向量相加即可得到向量 v ⃗ \vec{v} v ,那么向量 v ⃗ \vec {v} v 的范数越小则可以说明路径点 A 、 B 、 C A、B、C ABC 越接近于直线,当向量 v ⃗ \vec {v} v 的范数为0则路径点 A 、 B 、 C A、B、C ABC 共线。
v ⃗ = B A → + B C → = ( x 1 − x 2 , y 1 − y 2 ) + ( x 3 − x 2 , y 3 − y 2 ) = ( x 1 + x 3 − 2 x 2 , y 1 + y 3 − 2 y 2 ) \vec {v}=\overrightarrow {BA}+\overrightarrow {BC}=(x_1-x_2,y_1-y_2)+(x_3-x_2,y_3-y_2)=(x_1+x_3-2x_2,y_1+y_3-2y_2) v =BA +BC =(x1x2,y1y2)+(x3x2,y3y2)=(x1+x32x2,y1+y32y2)

向量指向谁,谁作为被减数

1.1.1 直接法

c o s t s = ∣ ∣ v ⃗ ∣ ∣ 2 = ( x 1 + x 3 − 2 x 2 ) 2 + ( y 1 + y 3 − 2 y 2 ) 2 = [ x 1 + x 3 − 2 x 2 y 1 + y 3 − 2 y 2 ] [ x 1 + x 3 − 2 x 2 y 1 + y 3 − 2 y 2 ] \begin{aligned} cost_s=||\vec {v}||^2&=(x_1+x_3-2x_2)^2+(y_1+y_3-2y_2)^2 \\[2ex] &=\left[ \begin{matrix} x_1+x_3-2x_2 & y_1+y_3-2y_2 \end{matrix} \right] \left[ \begin{matrix} x_1+x_3-2x_2\\ y_1+y_3-2y_2 \end{matrix} \right] \end{aligned} costs=∣∣v 2=(x1+x32x2)2+(y1+y32y2)2=[x1+x32x2y1+y32y2][x1+x32x2y1+y32y2]

X = [ x 1 y 1 x 2 y 2 x 3 y 3 ] T \begin{aligned} X=\left[ \begin{matrix} x_1 &y_1 & x_2&y_2&x_3&y_3 \end{matrix} \right]^T \end{aligned} X=[x1y1x2y2x3y3]T,则:
[ x 1 + x 3 − 2 x 2 y 1 + y 3 − 2 y 2 ] = [ x 1 y 1 x 2 y 2 x 3 y 3 ] [ 1 0 0 1 − 2 0 0 − 2 1 0 0 1 ] = X T A s \begin{aligned} \left[ \begin{matrix} x_1+x_3-2x_2 & y_1+y_3-2y_2 \end{matrix} \right]=\left[ \begin{matrix} x_1 &y_1 & x_2&y_2&x_3&y_3 \end{matrix} \right]\left[ \begin{array}{rr} 1 &0 \\ 0&1\\-2&0 \\ 0&-2 \\1&0 \\ 0 &1 \end{array} \right]=X^TA_s \end{aligned} [x1+x32x2y1+y32y2]=[x1y1x2y2x3y3] 102010010201 =XTAs

此时,

c o s t s = ∣ ∣ v ⃗ ∣ ∣ 2 = [ x 1 + x 3 − 2 x 2 y 1 + y 3 − 2 y 2 ] [ x 1 + x 3 − 2 x 2 y 1 + y 3 − 2 y 2 ] = X T A s ( X T A s ) T = X T A s A s T X = X T P s X \begin{aligned} cost_s=||\vec {v}||^2 &=\left[ \begin{matrix} x_1+x_3-2x_2 & y_1+y_3-2y_2 \end{matrix} \right] \left[ \begin{matrix} x_1+x_3-2x_2\\ y_1+y_3-2y_2 \end{matrix} \right]\\[2ex] &=X^TA_s(X^TA_s)^T\\[1.5ex] &=X^TA_sA_s^TX\\[1.5ex] &=X^TP_sX \end{aligned} costs=∣∣v 2=[x1+x32x2y1+y32y2][x1+x32x2y1+y32y2]=XTAs(XTAs)T=XTAsAsTX=XTPsX

1.1.2 海塞矩阵法

f = c o s t s = ∣ ∣ v ⃗ ∣ ∣ 2 = ( x 1 + x 3 − 2 x 2 ) 2 + ( y 1 + y 3 − 2 y 2 ) 2 \begin{aligned} f=cost_s=||\vec {v}||^2&=(x_1+x_3-2x_2)^2+(y_1+y_3-2y_2)^2 \\[2ex] \end{aligned} f=costs=∣∣v 2=(x1+x32x2)2+(y1+y32y2)2
一阶偏导数
∂ f ∂ x 1 = ∂ f ∂ x 3 = 2 ( x 1 + x 3 − 2 x 2 ) ∂ f ∂ x 2 = − 4 ( x 1 + x 3 − 2 x 2 ) ∂ f ∂ y 1 = ∂ f ∂ y 3 = 2 ( y 1 + y 3 − 2 y 2 ) ∂ f ∂ y 2 = − 4 ( y 1 + y 3 − 2 y 2 ) \begin{aligned} \frac{\partial f}{\partial x_1}=\frac{\partial f}{\partial x_3}&=2(x_1+x_3-2x_2) \\[2ex] \frac{\partial f}{\partial x_2}&=-4(x_1+x_3-2x_2)\\[2ex] \frac{\partial f}{\partial y_1}=\frac{\partial f}{\partial y_3}&=2(y_1+y_3-2y_2) \\[2ex] \frac{\partial f}{\partial y_2}&=-4(y_1+y_3-2y_2)\\[2ex] \end{aligned} x1f=x3fx2fy1f=y3fy2f=2(x1+x32x2)=4(x1+x32x2)=2(y1+y32y2)=4(y1+y32y2)
二阶偏导数
∂ 2 f ∂ x 1 2 = ∂ ( 2 ( x 1 + x 3 − 2 x 2 ) ) ∂ x 1 = 2 ∂ 2 f ∂ x 1 ∂ y 1 = ∂ ( 2 ( x 1 + x 3 − 2 x 2 ) ) ∂ y 1 = 0 ∂ 2 f ∂ x 1 ∂ x 2 = ∂ ( 2 ( x 1 + x 3 − 2 x 2 ) ) ∂ x 2 = − 4 ∂ 2 f ∂ x 1 ∂ y 2 = ∂ ( 2 ( x 1 + x 3 − 2 x 2 ) ) ∂ y 2 = 0 ∂ 2 f ∂ x 1 ∂ x 3 = ∂ ( 2 ( x 1 + x 3 − 2 x 2 ) ) ∂ x 3 = 2 ∂ 2 f ∂ x 1 ∂ y 3 = ∂ ( 2 ( x 1 + x 3 − 2 x 2 ) ) ∂ y 3 = 0 ⋮ ∂ 2 f ∂ y 3 ∂ x 1 = ∂ ( 2 ( y 1 + y 3 − 2 y 2 ) ) ∂ x 1 = 0 ∂ 2 f ∂ y 3 ∂ y 1 = ∂ ( 2 ( y 1 + y 3 − 2 y 2 ) ) ∂ y 1 = 2 ∂ 2 f ∂ y 3 ∂ x 2 = ∂ ( 2 ( y 1 + y 3 − 2 y 2 ) ) ∂ x 2 = 0 ∂ 2 f ∂ y 3 ∂ y 2 = ∂ ( 2 ( y 1 + y 3 − 2 y 2 ) ) ∂ y 2 = − 4 ∂ 2 f ∂ y 3 ∂ x 3 = ∂ ( 2 ( y 1 + y 3 − 2 y 2 ) ) ∂ x 3 = 0 ∂ 2 f ∂ y 3 2 = ∂ ( 2 ( y 1 + y 3 − 2 y 2 ) ) ∂ y 3 = 2 \begin{aligned} \frac{\partial^2 f}{\partial x_1^2}&=\frac{\partial (2(x_1+x_3-2x_2))}{\partial x_1}=2 \\[2ex] \frac{\partial^2 f}{\partial x_1\partial y_1}&=\frac{\partial (2(x_1+x_3-2x_2))}{\partial y_1}=0 \\[2ex] \frac{\partial^2 f}{\partial x_1\partial x_2}&=\frac{\partial (2(x_1+x_3-2x_2))}{\partial x_2}=-4 \\[2ex] \frac{\partial^2 f}{\partial x_1\partial y_2}&=\frac{\partial (2(x_1+x_3-2x_2))}{\partial y_2}=0 \\[2ex] \frac{\partial^2 f}{\partial x_1\partial x_3}&=\frac{\partial (2(x_1+x_3-2x_2))}{\partial x_3}=2 \\[2ex] \frac{\partial^2 f}{\partial x_1\partial y_3}&=\frac{\partial (2(x_1+x_3-2x_2))}{\partial y_3}=0 \\[2ex] & \vdots\\ \frac{\partial^2 f}{\partial y_3\partial x_1}&=\frac{\partial (2(y_1+y_3-2y_2) )}{\partial x_1}=0 \\[2ex] \frac{\partial^2 f}{\partial y_3\partial y_1}&=\frac{\partial (2(y_1+y_3-2y_2) )}{\partial y_1}=2 \\[2ex] \frac{\partial^2 f}{\partial y_3\partial x_2}&=\frac{\partial (2(y_1+y_3-2y_2) )}{\partial x_2}=0 \\[2ex] \frac{\partial^2 f}{\partial y_3\partial y_2}&=\frac{\partial (2(y_1+y_3-2y_2) )}{\partial y_2}=-4 \\[2ex] \frac{\partial^2 f}{\partial y_3\partial x_3}&=\frac{\partial (2(y_1+y_3-2y_2) )}{\partial x_3}=0 \\[2ex] \frac{\partial^2 f}{\partial y_3^2}&=\frac{\partial (2(y_1+y_3-2y_2) )}{\partial y_3}=2 \\[2ex] \end{aligned} x122fx1y12fx1x22fx1y22fx1x32fx1y32fy3x12fy3y12fy3x22fy3y22fy3x32fy322f=x1(2(x1+x32x2))=2=y1(2(x1+x32x2))=0=x2(2(x1+x32x2))=4=y2(2(x1+x32x2))=0=x3(2(x1+x32x2))=2=y3(2(x1+x32x2))=0=x1(2(y1+y32y2))=0=y1(2(y1+y32y2))=2=x2(2(y1+y32y2))=0=y2(2(y1+y32y2))=4=x3(2(y1+y32y2))=0=y3(2(y1+y32y2))=2
海塞矩阵
H = P s = [ ∂ 2 f ∂ x 1 2 ∂ 2 f ∂ x 1 ∂ y 1 … ∂ 2 f ∂ x 1 ∂ y 3 ∂ 2 f ∂ y 1 ∂ x 1 ∂ 2 f ∂ y 1 2 … ∂ 2 f ∂ y 1 ∂ y 3 ⋮ ⋮ ⋱ ⋮ ∂ 2 f ∂ y 3 ∂ x 1 ∂ 2 f ∂ y 3 ∂ x 2 … ∂ 2 f ∂ y 3 2 ] = [ 2 0 − 4 0 2 0 0 2 0 − 4 0 2 − 4 0 8 0 − 4 0 0 − 4 0 8 0 − 4 2 0 − 4 0 2 0 0 2 0 − 4 0 2 ] \begin{aligned} H=P_s= \left[ \begin{matrix} \frac{\partial^2 f}{\partial x_1^2} & \frac{\partial^2 f}{\partial x_1 \partial y_1} & \dots &\frac{\partial^2 f}{\partial x_1 \partial y_3} \\[3ex] \frac{\partial^2 f}{\partial y_1 \partial x_1} &\frac{\partial^2 f}{\partial y_1^2} & \dots &\frac{\partial^2 f}{\partial y_1 \partial y_3} \\[3ex] \vdots & \vdots & \ddots & \vdots\\[3ex] \frac{\partial^2 f}{\partial y_3 \partial x_1} &\frac{\partial^2 f}{\partial y_3 \partial x_2} & \dots &\frac{\partial^2 f}{\partial y_3^2}\\ \end{matrix} \right] =\left[ \begin{array}{rrrrrr} 2& 0 & -4 &0 &2 & 0 \\ 0& 2& 0 &-4 &0 & 2 \\ -4& 0 & 8 &0 &-4 & 0 \\ 0& -4 & 0 &8 &0 & -4 \\ 2& 0 & -4 &0 &2 & 0 \\ 0& 2 & 0 &-4 &0 & 2 \\ \end{array} \right] \end{aligned} H=Ps= x122fy1x12fy3x12fx1y12fy122fy3x22fx1y32fy1y32fy322f = 204020020402408040040804204020020402
I = [ 1 0 0 1 ] \begin{aligned} I=\left[ \begin{matrix} 1 &0\\0 & 1 \end{matrix} \right] \end{aligned} I=[1001],则:
P s = [ 2 I − 4 I 2 I 8 I − 4 I 2 I ] = 2 × [ I − 2 I I 4 I − 2 I I ] \begin{aligned} P_s= \left[ \begin{array}{rrr} 2I &-4I &2I \\ & 8I & -4I \\ & & 2I \end{array} \right] =2 \times \left[ \begin{array}{rrr} I &-2I &I \\ & 4I & -2I \\ & & I \end{array} \right] \end{aligned} Ps= 2I4I8I2I4I2I =2× I2I4II2II

总结:

  • 直接法:预处理简单,后期处理复杂 A s A s T A_s{A_s}^T AsAsT 计算维数高,计算消耗大;
  • 海塞矩阵法:预处理繁琐,需求解二阶偏导数;

1.2 N点路径平滑

1.2.1 直接法

对于路径存在N个路径点:
c o s t s = ∑ i = 1 n − 2 ∣ ∣ v ⃗ i + 1 ∣ ∣ 2 = ∑ i = 1 n − 2 [ ( x i + x i + 2 − 2 x i + 1 ) 2 + ( y i + y i + 2 − 2 y i + 1 ) 2 ] = [ x 1 + x 3 − 2 x 2 y 1 + y 3 − 2 y 2 x 2 + x 4 − 2 x 3 … x n − 2 + x n − 2 x n − 1 y n − 2 + y n − 2 y n − 1 ] [ x 1 + x 3 − 2 x 2 y 1 + y 3 − 2 y 2 x 2 + x 4 − 2 x 3 ⋮ x n − 2 + x n − 2 x n − 1 y n − 2 + y n − 2 y n − 1 ] \begin{aligned} cost_s=\sum_{i=1}^{n-2}||\vec{v}_{i+1}||^2&=\sum_{i=1}^{n-2}[(x_i+x_{i+2}-2x_{i+1})^2+(y_i+y_{i+2}-2y_{i+1})^2] \\[2ex] &=\left[ \begin{matrix} x_1+x_3-2x_2 & y_1+y_3-2y_2 & x_2+x_4-2x_3 & \dots & x_{n-2}+x_n-2x_{n-1} & y_{n-2}+y_n-2y_{n-1} \end{matrix} \right] \left[ \begin{matrix} x_1+x_3-2x_2 \\ y_1+y_3-2y_2 \\ x_2+x_4-2x_3 \\ \vdots \\ x_{n-2}+x_n-2x_{n-1} \\ y_{n-2}+y_n-2y_{n-1} \end{matrix} \right] \end{aligned} costs=i=1n2∣∣v i+12=i=1n2[(xi+xi+22xi+1)2+(yi+yi+22yi+1)2]=[x1+x32x2y1+y32y2x2+x42x3xn2+xn2xn1yn2+yn2yn1] x1+x32x2y1+y32y2x2+x42x3xn2+xn2xn1yn2+yn2yn1

X = [ x 1 y 1 x 2 y 2 … x n y n ] T \begin{aligned} X=\left[ \begin{matrix} x_1 &y_1 & x_2&y_2&\dots&x_n&y_n \end{matrix} \right]^T \end{aligned} X=[x1y1x2y2xnyn]T,则:
[ x 1 + x 3 − 2 x 2 y 1 + y 3 − 2 y 2 x 2 + x 4 − 2 x 3 … x n − 2 + x n − 2 x n − 1 y n − 2 + y n − 2 y n − 1 ] = [ x 1 y 1 x 2 y 2 … x n y n ] [ 1 0 0 0 1 0 − 2 0 1 0 0 − 2 0 1 1 0 − 2 0 0 1 0 − 2 1 0 0 1 … ⋮ ] { 2 n } × { 2 n − 4 } = X T A s \begin{aligned} &\left[ \begin{matrix} x_1+x_3-2x_2 & y_1+y_3-2y_2 & x_2+x_4-2x_3 & \dots & x_{n-2}+x_n-2x_{n-1} & y_{n-2}+y_n-2y_{n-1} \end{matrix} \right] \\[3ex] &=\left[ \begin{matrix} x_1 &y_1 & x_2&y_2&\dots&x_n&y_n \end{matrix} \right]\left[ \begin{array}{rrrr} 1 &0 &0\\ 0&1&0\\-2&0 &1&0\\ 0&-2 &0&1\\1&0 &-2&0\\ 0&1&0&-2\\ &&1&0\\ &&0&1&\dots \\ &&&\vdots \end{array} \right]_{\{2n\}\times\{2n-4\} }\\[3ex] &=X^TA_s \end{aligned} [x1+x32x2y1+y32y2x2+x42x3xn2+xn2xn1yn2+yn2yn1]=[x1y1x2y2xnyn] 10201001020100102010010201 {2n}×{2n4}=XTAs

此时,同 1.1.1 直接法
c o s t s = X T A s ( X T A s ) T = X T A s A s T X = X T P s X \begin{aligned} cost_s =X^TA_s(X^TA_s)^T =X^TA_sA_s^TX =X^TP_sX \end{aligned} costs=XTAs(XTAs)T=XTAsAsTX=XTPsX

I = [ 1 0 0 1 ] O = [ 0 0 0 0 ] \begin{aligned} I=\left[ \begin{matrix} 1 &0\\0 & 1 \end{matrix} \right] \end{aligned} \quad \begin{aligned} O=\left[ \begin{matrix} 0 &0\\0 & 0 \end{matrix} \right] \end{aligned} I=[1001]O=[0000],则:
A s = [ I − 2 I I I − 2 I I … ⋮ ] A_s= \begin{aligned} \left[ \begin{array}{rrrr} I \\ -2I & I \\ I & -2I \\ & I & \dots \\ & \vdots \end{array} \right] \end{aligned} As= I2III2II

n = 3 n=3 n=3 时,
P s = A s A s T = [ I − 2 I I 4 I − 2 I I ] P_s=A_sA_s^T= \begin{aligned} \left[ \begin{array}{rrrr} I & -2I & I \\ & 4I &-2I\\ && I \end{array} \right] \end{aligned} Ps=AsAsT= I2I4II2II
n ⩾ 4 n\geqslant4 n4 时,
P s = A s A s T = [ I − 2 I I O O … O 5 I − 4 I I O … O 6 I − 4 I I … O ⋮ ⋮ ⋮ 6 I − 4 I I 5 I − 2 I I ] P_s=A_sA_s^T= \begin{aligned} \left[ \begin{array}{rrrrrrr} I & -2I & I & O&O& \dots &O\\ & 5I&-4I &I&O&\dots & O\\ && 6I&-4I & I &\dots&O\\ && & & \vdots &\vdots&\vdots\\ &&&& 6I&-4I & I\\ &&&&& 5I&-2I\\ &&&&&&I\\ \end{array} \right] \end{aligned} Ps=AsAsT= I2I5II4I6IOI4IOOI6I4I5IOOOI2II

1.2.2 海塞矩阵法

同 1.1.2 海塞矩阵法

http://www.xdnf.cn/news/12335.html

相关文章:

  • Docker MCP 目录和工具包简介:使用 MCP 为 AI 代理提供支持的简单安全方法
  • Java 中比较两个 long 类型变量大小的方法
  • 从Gartner报告看Atlassian在生成式AI领域的创新路径与实践价值
  • Compose Multiplatform 实现自定义的系统托盘,解决托盘乱码问题
  • 电路设计基础-3
  • C# 委托UI控件更新例子,何时需要使用委托
  • leetcode1519. 子树中标签相同的节点数- medium
  • Python文件读取漏洞深度解析与防护指南
  • P10909 [蓝桥杯 2024 国 B] 立定跳远
  • 《涨停28式》速读笔记
  • 数据分析Agent构建
  • Word文档重新打开后标题自动缩进的解决方法
  • 基于eclipse进行Birt报表开发
  • 亲测解决grad can be implicitly created only for scalar outputs
  • 不同类型的语义相似度损失函数(SentenceTransformerLoss)
  • windows环境Google-sparsehash安装
  • Python语法进阶篇 --- 封装、继承、多态
  • ObservableRecipient与ObservableObject
  • 基于rpc框架Dubbo实现的微服务转发实战
  • Android实现轮播图
  • Vue---vue使用AOS(滚动动画)库
  • 深度学习习题2
  • c++ 基于OpenSSL的EVP接口进行SHA3-512和SM3哈希计算
  • 广州邮科:引领嵌入式通信电源系统创新与发展
  • CMake指令:add_definitions
  • Profinet转CAN网关与西门子PLC的互联互通基础操作流程
  • 二叉树的遍历总结
  • 统信桌面专业版如何使用python开发平台jupyter
  • Kotlin 2.1 一元二次方程(顺序结构版)
  • three.js中使用tween.js的chain实现动画依次执行