赞
踩
Motion Plan之搜索算法笔记
Motion Plan之基于采样的路径规划算法笔记
Motion Plan之带动力学约束路径搜索
Optimization-Based Trajectory Planning(基于优化的轨迹规划)是一种常用的方法,用于生成自动化系统(如自动驾驶车辆和机器人)的最优运动路径。该方法将轨迹规划问题描述为一个最优控制问题(OCP),通过优化方法来找到最优的运动轨迹。具体流程包括问题建模、约束建模、优化求解和轨迹生成。
下面将详细介绍Optimization-Based Trajectory Planning的流程,并提供一些实例以帮助理解。
1. 问题建模
首先,需要将轨迹规划问题建模为一个最优控制问题。这包括定义系统状态变量、控制变量和目标函数,以及约束条件。
2. 约束建模
在问题建模的基础上,需要将约束条件具体化,以便进行数值优化求解。约束条件可以分为硬约束和软约束。
3. 优化求解
在约束建模完成后,可以将轨迹规划问题转化为一个优化问题。常见的优化方法包括非线性规划(NLP)和数值优化算法。
优化求解的目标是找到一个最优解,使得目标函数达到最小或最大值,同时满足约束条件。
4. 轨迹生成
通过优化求解得到的最优解,可以生成最优的运动轨迹。根据系统模型和控制变量的设定,可以计算出每个时间点上的状态和控制量,从而得到连续的运动轨迹。
示例
下面是一些Optimization-Based Trajectory Planning的示例:
总之,Optimization-Based Trajectory Planning是一种常用的方法,可以通过建模、约束建模、优化求解和轨迹生成来实现自动化系统的最优运动轨迹规划。该方法可以适用于各种不同的应用场景,如自动驾驶车辆、机器人路径规划等。
为什么需要基于优化生成平滑轨迹:
• 在轨迹规划中的平滑性不是一个几何概念,许多高质量的轨迹具有非平滑的形状。一个平滑的轨迹至少应该:
之所以要生成平滑轨迹是因为:
移动机器人的能源是有限的,如何通过平滑轨迹来提高能源效率是很重要的;比如机器人在转弯时不应停止,这样可以极大节省能源消耗提高能力效率。
移动机器人执行器是受到限制的,速度/高阶动力学是不能立即改变的,所以在路径生成时候需要考虑到,生成平滑轨迹适配移动机器人执行器的需求。
在一些移动任务中,移动机器人需要在经过指定的轨迹点之行特定任务需求,所以轨迹生成时候需要经过这些轨迹点生成平滑轨迹,例如:无人机指定点电缆破损巡检。
• 边界条件:起始点,目标点的位置(朝向)
• 中间条件:路径点的位置(朝向)
• 路径点可以通过路径规划(A*、RRT*等)找到
• 在之前的三堂课中介绍过
• 平滑性标准
• 通常转化为最小化“输入”的变化率
是一种控制系统设计中的概念,它旨在简化非线性系统的控制问题。微分平坦性是一个概念,指在确定的条件下,可以用有限个变量及其导数来描述系统的所有状态变量以及控制变量,从而简化复杂的微分系统。利用微分平坦性,可以消除系统的微分约束条件,简化轨迹生成等过程。这种平坦性使得系统的非线性动态可以通过代数方程来描述,从而简化了控制器的设计和分析。可以通过操纵平坦输出来实现对系统的控制。
一个简单的例子是飞行器动力学系统。如果该系统是微分平坦的,那么通过适当的控制输入,可以使得飞行器的状态(例如位置、速度、姿态等)直接映射到期望的轨迹,而无需解决复杂的微分方程。
差分平坦度(Differential Flatness) 是一种在优化式轨迹规划中常用的技术,它利用系统的差分平坦输出来简化轨迹生成问题。一个系统在差分平坦度意义上是平坦的,意味着系统的状态和控制输入可以被一组平坦输出表达。这些平坦输出是可以通过积分得到的,从而使得轨迹规划问题的复杂性降低到一维问题。
x
=
Ψ
x
(
z
,
z
˙
.
.
.
.
z
s
−
1
)
μ
=
Ψ
μ
(
z
,
z
˙
.
.
.
.
z
s
−
1
)
x = \Psi_x(z,\dot{z}....z^{s-1}) \\ \mu = \Psi_\mu(z,\dot{z}....z^{s-1})
x=Ψx(z,z˙....zs−1)μ=Ψμ(z,z˙....zs−1)
微分平坦性可以消除微分系统中的微分约束条件。
差分平坦度的主要步骤:
示例:二次系统的差分平坦度轨迹规划
考虑一个简单的连续时间二次系统:
[
x
¨
=
u
]
[ \ddot{x} = u ]
[x¨=u]
其中 (x) 是系统的位置, (u) 是控制输入。
[
x
=
1
2
u
τ
2
]
[ x = \frac{1}{2}u\tau^2 ]
[x=21uτ2]
其中,
(
τ
)
(\tau)
(τ)是时间。
[ x ( t ) = 1 2 u ( t ) t 2 ] [ x(t) = \frac{1}{2}u(t)t^2 ] [x(t)=21u(t)t2]
这个简单的例子展示了如何使用差分平坦度方法对一个系统进行轨迹规划。在实际中,系统的动力学可能更为复杂,但通过利用差分平坦度,可以将轨迹规划问题变得更易处理。这种方法常见于机器人、飞行器等控制系统的轨迹规划中。
是一种用于轨迹规划的优化方法。它旨在生成具有最小挠曲(snap)的轨迹,以实现飞行器或机器人的平滑运动。在此答案中,我将详细介绍Minimum Snap优化的流程,并提供一个例子来帮助您更好地理解。
Minimum Snap优化通常涉及光滑多段轨迹的生成。以下是Minimum Snap优化的详细流程:
这是Minimum Snap优化的一个简单例子,以飞行器的路径规划为例:
假设我们希望将无人机从起始位置飞到目标位置,并要求无人机在飞行过程中保持平滑的运动。
通过以上流程,我们可以生成满足约束条件的平滑轨迹,使无人机从起始位置飞行到目标位置。
希望这个例子能够帮助您理解Minimum Snap优化的流程。通过选择合适的多项式表示和设计适当的目标函数和约束条件,可以在路径规划和轨迹生成中实现更加平滑和高效的运动。
多旋翼飞行器的动力学建模经历了几次改进,改进点如下:
不考虑阻力的动力学模型精度较低。用欧拉角或投影定义的偏航存在奇异性。微分平坦的多旋翼飞行器动力学模型应当考虑阻力但减少奇异性。
**多旋翼飞行器状态
x
=
{
r
,
v
,
R
,
w
}
∈
R
3
×
R
3
×
S
O
(
3
)
×
R
3
x = \{r,v,R,w\} \in \mathbb{R^3 \times R^3}\times SO(3) \times \mathbb{R^3}
x={r,v,R,w}∈R3×R3×SO(3)×R3
位置、速度、姿态、体轴角速率
多旋翼飞行器控制输入(映射后)
u
=
{
f
,
τ
}
∈
R
≥
0
×
R
3
u = \{f,\tau\} \in \mathbb{R_{\geq 0} \times R^3}
u={f,τ}∈R≥0×R3
总推力、扭矩
多旋翼飞行器非线性动力学
{
r
˙
=
v
,
m
v
˙
=
−
m
g
e
3
−
R
D
R
T
σ
(
∣
∣
v
∣
∣
)
v
+
R
f
e
3
,
R
˙
=
R
ω
^
,
M
ω
˙
=
τ
−
ω
×
M
ω
−
A
(
ω
)
−
B
(
R
T
v
)
.
{˙r=v,m˙v=−mge3−RDRTσ(||v||)v+Rfe3,˙R=Rˆω,M˙ω=τ−ω×Mω−A(ω)−B(RTv).
⎩
⎨
⎧r˙=v,mv˙=−mge3−RDRTσ(∣∣v∣∣)v+Rfe3,R˙=Rω^,Mω˙=τ−ω×Mω−A(ω)−B(RTv).
z
=
{
r
,
ψ
}
∈
R
3
×
S
O
(
2
)
z = \{r,\psi\} \in \mathbb{{R^3}}\times SO(2)
z={r,ψ}∈R3×SO(2)
位置、偏航角
其中:
平坦化转化
z
=
{
r
,
ψ
}
∈
R
3
×
S
O
(
2
)
∣
∣
x
=
Ψ
x
(
z
,
z
˙
.
.
.
.
z
s
−
1
)
∣
∣
μ
=
Ψ
μ
(
z
,
z
˙
.
.
.
.
z
s
−
1
)
⇓
x
=
{
r
,
v
,
R
,
w
}
∈
R
3
×
R
3
×
S
O
(
3
)
×
R
3
u
=
{
f
,
τ
}
∈
R
≥
0
×
R
3
z = \{r,\psi\} \in \mathbb{{R^3}}\times SO(2) \\ || x = \Psi_x(z,\dot{z}....z^{s-1}) \\ ||\mu = \Psi_\mu(z,\dot{z}....z^{s-1}) \\ \Downarrow \\ x = \{r,v,R,w\} \in \mathbb{R^3 \times R^3}\times SO(3) \times \mathbb{R^3} \\ u = \{f,\tau\} \in \mathbb{R_{\geq 0} \times R^3}
z={r,ψ}∈R3×SO(2)∣∣x=Ψx(z,z˙....zs−1)∣∣μ=Ψμ(z,z˙....zs−1)⇓x={r,v,R,w}∈R3×R3×SO(3)×R3u={f,τ}∈R≥0×R3
上面的平坦转化是如何完成的。
显然,我们知道
r
=
r
v
=
r
˙
r = r \\ v = \dot{r}
r=rv=r˙
飞行器的机体坐标系的X轴和Y轴进行了牛顿方程的点积:
x
b
=
R
e
1
,
y
b
=
R
e
2
(
R
e
i
)
T
m
v
˙
=
(
R
e
i
)
T
(
−
m
g
e
3
−
R
D
R
T
σ
(
∣
∣
v
∣
∣
)
v
+
R
f
e
3
)
,
∀
i
∈
{
1
,
2
}
x_b = Re_1,y_b = Re_2\\ (Re_i)^Tm\dot{v} = (Re_i)^T(-mge_3 -RDR^T\sigma(||v||)v +Rfe_3),\forall i \in \{1,2\}
xb=Re1,yb=Re2(Rei)Tmv˙=(Rei)T(−mge3−RDRTσ(∣∣v∣∣)v+Rfe3),∀i∈{1,2}
得到的结果是
(
R
e
i
)
T
(
v
˙
+
d
h
m
σ
(
∣
∣
v
∣
∣
+
g
e
3
)
=
0
,
∀
i
∈
{
1
,
2
}
(Re_i)^T(\dot{v} + \frac{d_h}{m} \sigma(||v||+ge_3) = 0,\forall i \in \{1,2\}
(Rei)T(v˙+mdhσ(∣∣v∣∣+ge3)=0,∀i∈{1,2}
从几何角度来看,我们有
x
b
⊥
(
v
˙
+
d
h
m
σ
(
∣
∣
v
∣
∣
v
)
+
g
e
3
)
y
b
⊥
(
v
˙
+
d
h
m
σ
(
∣
∣
v
∣
∣
v
)
+
g
e
3
)
x_b \perp (\dot{v} + \frac{d_h}{m} \sigma(||v||v)+ge_3) \\ y_b \perp (\dot{v} + \frac{d_h}{m} \sigma(||v||v)+ge_3)
xb⊥(v˙+mdhσ(∣∣v∣∣v)+ge3)yb⊥(v˙+mdhσ(∣∣v∣∣v)+ge3)
因为推力和机体Z轴共享相同的方向
z
b
=
N
(
(
v
˙
+
d
h
m
σ
(
∣
∣
v
∣
∣
v
)
+
g
e
3
)
)
,
N
(
x
)
:
=
x
/
∣
∣
x
∣
∣
2
z_b = N((\dot{v} + \frac{d_h}{m} \sigma(||v||v)+ge_3) ),N(x):=x/||x||_2
zb=N((v˙+mdhσ(∣∣v∣∣v)+ge3)),N(x):=x/∣∣x∣∣2
对牛顿方程在机体坐标系的Z轴上进行点积:
(
R
e
3
)
T
m
v
˙
=
(
R
e
3
)
T
(
−
m
g
e
3
−
R
D
R
T
σ
(
∣
∣
v
∣
∣
)
v
+
R
f
e
3
)
(Re_3)^Tm\dot{v} =(Re_3)^T(-mge_3-RDR^T\sigma(||v||)v+Rfe_3)
(Re3)Tmv˙=(Re3)T(−mge3−RDRTσ(∣∣v∣∣)v+Rfe3)
得到
f
=
z
b
T
(
m
v
˙
+
d
v
σ
(
∣
∣
v
∣
∣
)
v
+
m
g
e
3
)
f = z_b^T(m\dot{v} +d_v\sigma(||v||)v+mge_3)
f=zbT(mv˙+dvσ(∣∣v∣∣)v+mge3)
现在我们有偏航航向和机体Z轴都是已知的,偏航旋转四元数是
q
ψ
=
(
c
o
s
(
ψ
/
2
)
,
0
,
0
s
i
n
(
ψ
/
2
)
)
T
q_\psi = (cos(\psi/2),0,0sin(\psi/2))^T
qψ=(cos(ψ/2),0,0sin(ψ/2))T
倾斜旋转四元数是
q
z
=
1
2
(
1
+
z
b
(
3
)
)
(
1
+
z
b
(
3
)
,
−
z
b
(
2
)
,
z
b
(
1
)
,
0
)
T
q_z = \frac{1}{\sqrt{2(1+z_b(3))}}(1+z_b(3),-z_b(2),z_b(1),0)^T
qz=2(1+zb(3))
1(1+zb(3),−zb(2),zb(1),0)T
倾斜旋转没有惯性坐标系Z轴的分量,因为它是使用霍普夫纤维分解的。飞行器的姿态四元数因此是
q
=
q
z
⊗
q
ψ
q =q_z \otimes q_\psi
q=qz⊗qψ
展开它得到
q
z
=
1
2
(
1
+
z
b
(
3
)
)
(
(
1
+
z
b
(
3
)
c
o
s
(
ψ
/
2
)
−
z
b
(
2
)
c
o
s
(
ψ
/
2
)
+
z
b
(
1
)
s
i
n
(
ψ
/
2
)
z
b
(
1
)
c
o
s
(
ψ
/
2
)
+
z
b
(
2
)
s
i
n
(
ψ
/
2
)
(
1
+
z
b
(
3
)
)
s
i
n
(
ψ
/
2
)
)
q_z = \frac{1}{\sqrt{2(1+z_b(3))}}((1+zb(3)cos(ψ/2)−zb(2)cos(ψ/2)+zb(1)sin(ψ/2)zb(1)cos(ψ/2)+zb(2)sin(ψ/2)(1+zb(3))sin(ψ/2))
qz=2(1+zb(3))
1
(1+zb(3)cos(ψ/2)−zb(2)cos(ψ/2)+zb(1)sin(ψ/2)zb(1)cos(ψ/2)+zb(2)sin(ψ/2)(1+zb(3))sin(ψ/2)
因此,姿态旋转矩阵是唯一确定的
R
=
R
q
u
a
t
(
q
)
R = R_quat(q)
R=Rquat(q)
现在旋转是已知的
R
˙
=
R
w
^
\dot{R} = R\hat{w}
R˙=Rw^
这意味着
w
=
(
R
T
R
˙
)
∨
w = (R^T\dot{R})^\vee
w=(RTR˙)∨
等效地
w
=
2
(
q
z
⊗
q
ψ
)
−
1
(
q
˙
z
⊗
q
ψ
+
q
z
⊗
q
˙
ψ
)
w =2(q_z \otimes q_{\psi})^{-1}(\dot{q}_z \otimes q_{\psi}+q_z \otimes \dot{q}_{\psi})
w=2(qz⊗qψ)−1(q˙z⊗qψ+qz⊗q˙ψ)
代入倾斜旋转四元数和偏航旋转四元数给出
w
=
(
z
˙
b
(
1
)
s
i
n
(
ψ
)
−
z
˙
(
2
)
c
o
s
(
ψ
)
−
z
˙
(
3
)
(
z
b
(
1
)
s
i
n
(
ψ
)
−
z
b
(
2
)
c
o
s
(
ψ
)
)
/
(
1
+
z
b
(
3
)
)
z
˙
b
(
1
)
c
o
s
(
ψ
)
−
z
˙
(
2
)
s
i
n
(
ψ
)
−
z
˙
(
3
)
(
z
b
(
1
)
c
o
s
(
ψ
)
−
z
b
(
2
)
s
i
n
(
ψ
)
)
/
(
1
+
z
b
(
3
)
)
(
z
b
(
2
)
z
˙
b
(
1
)
−
z
b
(
1
)
z
˙
b
(
2
)
)
/
(
1
+
z
b
(
3
)
)
+
ψ
,
)
w = (˙zb(1)sin(ψ)−˙z(2)cos(ψ)−˙z(3)(zb(1)sin(ψ)−zb(2)cos(ψ))/(1+zb(3))˙zb(1)cos(ψ)−˙z(2)sin(ψ)−˙z(3)(zb(1)cos(ψ)−zb(2)sin(ψ))/(1+zb(3))(zb(2)˙zb(1)−zb(1)˙zb(2))/(1+zb(3))+ψ, )
w=
z˙b(1)sin(ψ)−z˙(2)cos(ψ)−z˙(3)(zb(1)sin(ψ)−zb(2)cos(ψ))/(1+zb(3))z˙b(1)cos(ψ)−z˙(2)sin(ψ)−z˙(3)(zb(1)cos(ψ)−zb(2)sin(ψ))/(1+zb(3))(zb(2)z˙b(1)−zb(1)z˙b(2))/(1+zb(3))+ψ,
对机身Z轴进行微分得到
z
˙
b
=
d
h
m
D
N
(
v
˙
+
d
h
m
σ
(
∣
∣
V
∣
∣
)
v
+
g
e
3
)
T
(
m
d
h
v
¨
+
σ
(
∣
∣
v
∣
∣
)
v
˙
+
σ
˙
(
∣
∣
v
∣
∣
)
v
T
v
˙
∣
∣
v
∣
∣
v
)
,
D
N
(
x
)
:
=
1
x
(
I
−
x
x
T
x
T
x
)
.
\dot{z}_b = \frac{d_h}{m}DN(\dot{v}+\frac{d_h}{m}\sigma(||V||)v+ge_3)^T(\frac{m}{d_h}\ddot{v}+\sigma(||v||)\dot{v}+\dot{\sigma}(||v||)\frac{v^T\dot{v}}{||v||}v),\\ DN(x) := \frac{1}{x}(I-\frac{xx^T}{x^Tx}).
z˙b=mdhDN(v˙+mdhσ(∣∣V∣∣)v+ge3)T(dhmv¨+σ(∣∣v∣∣)v˙+σ˙(∣∣v∣∣)∣∣v∣∣vTv˙v),DN(x):=x1(I−xTxxxT).
现在我们已经用平面输出的有限导数表示了体轴速率。
现在所有的状态和输入都已知,除了扭矩。我们通过对体轴速率进行微分来得到它的表达式,使用
r
(
4
)
,
ψ
(
2
)
r^{(4)},\psi^{(2)}
r(4),ψ(2)
因此,
τ
=
M
w
˙
+
w
×
M
w
+
A
(
w
)
+
B
(
R
T
v
)
\tau = M\dot{w} +w\times Mw+A(w) +B(R^Tv)
τ=Mw˙+w×Mw+A(w)+B(RTv)
最后,我们完成了平面输出变换的推导。规划高阶连续性的平面输出轨迹就足以满足动力学要求。
非线性动力学与反馈前馈控制中的微分平坦变换。
{
r
˙
=
v
,
m
v
˙
=
−
m
g
e
3
−
R
D
R
T
σ
(
∣
∣
v
∣
∣
)
v
+
R
f
3
3
,
R
˙
=
R
w
^
,
M
w
˙
=
τ
−
w
×
M
w
−
A
(
w
)
−
B
(
R
T
v
)
.
{˙r=v,m˙v=−mge3−RDRTσ(||v||)v+Rf33,˙R=Rˆw,M˙w=τ−w×Mw−A(w)−B(RTv).
⎩
⎨
⎧r˙=v,mv˙=−mge3−RDRTσ(∣∣v∣∣)v+Rf33,R˙=Rw^,Mw˙=τ−w×Mw−A(w)−B(RTv).
微分平坦输出
z
=
r
,
ψ
∈
R
3
×
S
O
(
2
)
z = {r,\psi} \in \mathbb{R^3} \times SO(2)
z=r,ψ∈R3×SO(2)
在微分平坦输出空间中的轨迹
z
(
t
)
:
[
0
,
T
]
→
R
3
×
S
O
(
2
)
z(t):[0,T] \rightarrow \mathbb{R^3} \times SO(2)
z(t):[0,T]→R3×SO(2)
对多旋翼飞行器控制动力学方程做了微分平坦化转变后,接下来就是通过样条曲线参数化生成行动轨迹,为什么要样条曲线参数化平面输出轨迹呢?优势如下:
• 易于确定平滑性标准
• 导数的简单闭式计算
• 在三个维度上解耦的轨迹生成
• 高数值稳定性
轨迹生成约束包括:
1.局部约束:必须要经过哪些点、到哪些点的状态如何(位置、位姿、速度、角速度)
2.全局约束:整体平滑(衡量平滑有轨迹的jerk、snap…值总和平均代价)、耗时、平均能耗…
然而不管是哪种约束都是和轨迹形态有关系,因为求解约束代价用的是离散化采样方式求解,对应的也就是轨迹上的采样点。相当于是轨迹函数可行的定义域空间。
那么就会涉及到我们如何用前面带动力学约束的采样点来如何构建轨迹,也就是说我们用什么函数来拟合轨迹。这个拟合函数会决定轨迹的采样点会影响到代价函数的求值,所以这部分我们需要先介绍下我们选取什么函数来拟合轨迹。
平滑的一维轨迹
5阶多项式轨迹:
x
t
=
p
5
t
5
+
p
4
x
4
+
p
3
x
3
+
p
2
x
2
+
p
1
t
+
p
0
⟹
轨迹参数化
x_t =p_5t^5+p_4x^4+p_3x^3+p_2x^2+p_1t+p_0 \Longrightarrow 轨迹参数化
xt=p5t5+p4x4+p3x3+p2x2+p1t+p0⟹轨迹参数化
• 边界条件 没有中间条件
位置 | 速度 | 加速度 | |
---|---|---|---|
t=0 | a | 0 | 0 |
t=T | b | 0 | 0 |
求解:
[
a
b
0
0
0
0
]
=
[
0
0
0
0
0
1
T
5
T
4
T
3
T
2
T
1
0
0
0
0
1
0
5
T
4
4
T
3
3
T
2
T
2
1
1
0
0
0
0
2
0
0
20
T
3
12
T
2
6
T
1
2
0
0
]
[
c
5
c
4
c
3
c
2
c
1
c
0
]
[ab0000] = [000001T5T4T3T2T10000105T44T33T2T211000020020T312T26T1200] [c5c4c3c2c1c0]
ab0000
=
0T505T4020T30T404T3012T20T303T206T10T20T21220T1100110000
c5c4c3c2c1c0
平滑的多段一维轨迹
• 每个段都是一个多项式。
• 不需要固定阶数,但保持相同的阶数可以使问题更简单。
• 每个段的时间持续必须是已知的!
位置 | 速度 | 加速度 | |
---|---|---|---|
t=0 | a | v0 | 0 |
t=T | b | vT | 0 |
求解:
[
a
v
0
0
b
v
T
0
]
=
[
1
0
0
0
0
0
0
1
0
0
0
0
0
0
2
0
0
0
1
T
T
2
T
3
T
4
T
5
0
1
T
2
1
3
T
2
4
T
3
5
T
4
0
0
2
6
T
1
12
T
2
20
T
3
]
[
c
5
c
4
c
3
c
2
c
1
c
0
]
,
d
=
A
F
(
T
)
c
f
(
t
)
=
{
f
1
(
t
)
=
∑
i
=
0
N
p
1
,
i
t
i
T
0
≤
t
≤
T
1
f
2
(
t
)
=
∑
i
=
0
N
p
2
,
i
t
i
T
1
≤
t
≤
T
2
⋮
f
M
(
t
)
=
∑
i
=
0
N
p
M
,
i
t
i
T
M
−
1
≤
t
≤
T
M
[av00bvT0] = [1000000100000020001TT2T3T4T501T213T24T35T40026T112T220T3] [c5c4c3c2c1c0] , d=A_F(T)c\\ f(t) ={f1(t)=∑Ni=0p1,itiT0≤t≤T1f2(t)=∑Ni=0p2,itiT1≤t≤T2⋮fM(t)=∑Ni=0pM,itiTM−1≤t≤TM
av00bvT0
=
100100010T10002T2T212000T33T26T1000T44T312T2000T55T420T3
c5c4c3c2c1c0
,d=AF(T)cf(t)=⎩
⎨
⎧f1(t)=∑i=0Np1,itif2(t)=∑i=0Np2,iti⋮fM(t)=∑i=0NpM,itiT0≤t≤T1T1≤t≤T2TM−1≤t≤TM
• 边界条件:起始点,目标位置(方向)
• 中间条件:途中位置(方向)
• 途中位置可以通过路径规划(A*、RRT*等)找到,在前面的三文章中介绍过
• 平滑度标准,最小化“输入”变化率
约束条件:
• 导数约束:
{
f
j
(
k
)
(
t
j
)
=
x
0
(
j
)
,
f
j
(
k
)
(
t
j
)
=
x
T
(
j
)
{f(k)j(tj)=x(j)0,f(k)j(tj)=x(j)T
{fj(k)(tj)=x0(j),fj(k)(tj)=xT(j)
• 连续性约束:
f
j
(
k
)
(
t
j
)
=
f
j
+
1
(
k
)
(
t
j
)
\mathbf{f}_j^{(k)}(t_j) = \mathbf{f}_{j+1}^{(k)}(t_j)
fj(k)(tj)=fj+1(k)(tj)
贝塞尔曲线通过控制点的选取来改变曲线的形 状,具有轨迹曲率连续可导、易于跟踪、满足移动机器人动力学约束且仅需少量控制点就可生成轨迹等优点 。 根据控制点的个数,贝塞尔曲线被分为一阶贝塞尔曲线(0个控制点)、二阶贝塞尔曲线(1个控制点)、三阶贝塞尔曲线(2个控制点)等等。
贝塞尔曲线特点:
至少需要三阶贝赛尔曲线(四个控制点)才能表示生成曲率连续的曲线.通常定义n+1个控制点组成n阶贝塞尔曲线,其表达式如下 :
p
(
t
)
=
∑
i
n
p
i
B
i
,
n
(
t
)
,
t
∈
[
0
,
1
]
p(t) =\sum_i^np_i B_{i,n}(t),t \in [0,1]
p(t)=∑inpiBi,n(t),t∈[0,1]
式中,
p
i
p_i
pi与 t 分别是控制点的坐标值与参数,
B
i
,
n
(
t
)
B_{i,n}(t)
Bi,n(t)为Bernstein多项式,其表达式如式:
B
i
,
n
(
t
)
=
C
n
i
t
i
(
1
−
t
)
n
−
i
,
i
=
0
,
1
…
n
B_{i,n}(t) =C_n^i t^i(1-t)^{n-i},i =0,1 \dots n
Bi,n(t)=Cniti(1−t)n−i,i=0,1…n
式中,
C
n
i
C_n^i
Cni为二次项系数。 3次贝塞尔曲线的参数方程表达式可以表述为式 :
p
(
t
)
=
p
0
(
1
−
t
)
3
+
3
p
1
(
1
−
t
)
2
t
+
3
p
2
(
1
−
t
)
2
+
p
3
t
3
p(t) = p_0(1-t)^3+3p_1(1-t)^2t +3p_2(1-t)^2+p_3t^3
p(t)=p0(1−t)3+3p1(1−t)2t+3p2(1−t)2+p3t3
式中,
p
i
(
x
i
,
y
i
)
p_i(x_i ,y_i)
pi(xi,yi);
x
i
x_i
xi和
y
i
y_i
yi分别代表控制点的横纵坐标。
曲线定义:起始点、终止点(也称锚点)、控制点
数据点: 指一条路径的起始点和终止点。
控制点:控制点决定了一条路径的弯曲轨迹
在平面输出空间中显式地最小化某些导数
• 最小Jerk:最小化角速度,适用于视觉跟踪
• 最小Snap:最小化差分推力,节省能量
**导数 ** | **平移 ** | **旋转 ** | 推力 |
---|---|---|---|
0 | 位置 | ||
1 | 速度 | ||
2 | 加速度 | 旋转 | |
3 | 加加速度 | 角速度 | 推力 |
4 | 捏角 | 角加速度 | 差分推力 |
如何确定轨迹的阶数?
• 在某个阶数上保证平滑性。• 在某个阶数上保证连续性。• 在某个阶数上最小化控制输入。
平滑性意味着其导数是连续的。为确保单段轨迹的平滑性的最小次数多项式:
最小 jerk:N = 2 * 3(jerk) - 1 = 5
最小 snap:N = 2 * 4(snap) - 1 = 7
为确保 k 段轨迹的平滑性的最小次数多项式:
最小 jerk:
约束数量:3 + 3 + (k-1) = k + 5
未知数数量:(N+1) * k
(声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/879163
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。