赞
踩
Motion Plan之搜索算法笔记
Motion Plan之基于采样的路径规划算法笔记
前面几章介绍的路径规划,我们只是认为机器人是质点,这节课要说的就是,如何在考虑机器人的运动学模型下再去找一个安全可行的路径。考虑了机械运动学模型以后,路径规划方法仍然可以分为像前两课一样归为基于搜索的和基于采样的。KINODYNAMIC是运动学和动力学两部分组成的,机器人不是简单的一个质点,可以随意运动的一个质点;它的高阶模型受到一个微分的约束。Kinodynamic Path Finding是一种在机器人和运动规划中的问题类别,其中必须满足速度、加速度和力/扭矩界限,以及如避免障碍物等运动约束。这是一种解决运动规划问题的方法,它考虑了机器人的动力学约束。这意味着,kinodynamic规划算法输出的引导轨迹不仅要对机器人的环境避免碰撞,而且还要对机器人的连续时间动力学的代表模型可行。
传统规划算法生成的路径无法准确匹配机器人的运动约束,使得规划与控制脱节。例如汽车的非完全约束限制其侧方移动,但传统算法可能生成需要急转的最短路径,很难优化成可行解。 尤其是高速运动场景下,初态末态间的精确运动学建模和控制求解至关重要,这需要求解两点边界值问题。 混合A*等算法试图在规划层面加入约束,但仍面临启发函数设计、离散化、连续性等困难,说明了这是一个 layer 上的系统性问题,而不是简单扩展现有方法就能完美解决。 更准确地对运动学建模,直接在规划层面加入约束,不仅能生成更优路径,也能减轻后续轨迹优化负担,改善整体规划控制系统的协同性。由于系统的微分约束,状态对之间的直线连接通常不是有效的轨迹。找到的路径越平滑,优化它就越容易。 综上,动力学规划为使机器人运动更符合自身约束条件、实现更流畅高效的规划与控制提供了可能。与损失函数设计等其他问题一样,这也是实现复杂机器人功能必需解决的基本问题。
总计一下之所以要在Front end阶段就做KINODYNAMIC path find原因如下:
所谓的动力学建模其实就是在对移动机器人做刚体形状建模,然后利用数学方程对建模出来的移动机器人刚体做动力学的建模。得到一个可以通过调整控制变量向量来控制移动机器人做状态变化的过程。
建模流程
各部分介绍
KINODYNAMIC控制数学形式
牛顿第二定律
$m\dot{v}{e}=G{e}+T^{b} $
式中
v
˙
\dot{v}
v˙, 与G右上角的e代表这是地面坐标系下的向量,T右上角的b代表这是机体坐标系下的向量。由于拉力是由螺旋桨产生的,与四旋翼飞行器固连,故在机体坐标系下表示。
等式两边同时除以m:
v
˙
e
=
g
e
+
T
b
m
\dot{v}^{e}=g^{e}+\frac{T^{b}}{m}
v˙e=ge+mTb
将机体坐标系下的拉力转换到地面坐标系,左乘旋转矩阵即可:
$ot{v}{e}=g{e}+R_{b}{e}\frac{T{b}}{m} \$
展开成矩阵形式,其中g与T都是标量,g为重力加速度,T为四个螺旋桨产生的总升力:
[
v
˙
x
v
˙
y
v
˙
z
]
=
g
[
0
0
1
]
+
1
m
∗
[
c
o
s
θ
c
o
s
ψ
;
c
o
s
ψ
s
i
n
θ
s
i
n
ϕ
−
s
i
n
ψ
c
o
s
ϕ
c
o
s
ψ
s
i
n
θ
c
o
s
ϕ
+
s
i
n
ψ
s
i
n
ϕ
c
o
s
θ
s
i
n
ψ
;
s
i
n
ψ
s
i
n
θ
s
i
n
ϕ
+
c
o
s
ψ
c
o
s
ϕ
s
i
n
ψ
s
i
n
θ
c
o
s
ϕ
−
c
o
s
ψ
s
i
n
ϕ
−
s
i
n
θ
;
s
i
n
ϕ
c
o
s
θ
c
o
s
ϕ
c
o
s
θ
]
∗
[
0
0
−
T
]
[˙vx˙vy˙vz]=g[001]+\frac{1}{m}\ast [cosθcosψ;cosψsinθsinϕ−sinψcosϕcosψsinθcosϕ+sinψsinϕcosθsinψ;sinψsinθsinϕ+cosψcosϕsinψsinθcosϕ−cosψsinϕ−sinθ;sinϕcosθcosϕcosθ]\ast[00−T]
v˙xv˙yv˙z
=g
001
+m1∗
cosθcosψ;cosψsinθsinϕ−sinψcosϕcosψsinθcosϕ+sinψsinϕcosθsinψ;sinψsinθsinϕ+cosψcosϕsinψsinθcosϕ−cosψsinϕ−sinθ;sinϕcosθcosϕcosθ
∗
00−T
整理得:
$\left{\begin{array}{l} \dot{v}{x}=-\frac{T}{m}(\cos \psi \sin \theta \cos \phi+\sin \psi \sin \phi) \ \dot{v}{y}=-\frac{T}{m}(\sin \psi \sin \theta \cos \phi-\cos \psi \sin \phi) \ \dot{v}_{z}=g-\frac{T}{m} \cos \phi \cos \theta \end{array}\right. \$
由欧拉方程可得
J
ω
˙
b
+
ω
b
×
J
ω
b
=
G
a
b
+
τ
b
{J} \dot{{\omega}}^{b}+{\omega}^{b} \times {J} {\omega}^{b}={G}_{a}^b+{\tau}^b
Jω˙b+ωb×Jωb=Gab+τb
式中,
ω
˙
b
\dot{{\omega}}^{b}
ω˙b 表示在机体坐标系下的角速度;
G
a
b
{G}_{a}^b
Gab表示陀螺力矩;
τ
b
{\tau}^b
τb 表示螺旋桨在机体轴上产生的力矩 。
角速度
ω
b
=
[
ω
x
b
ω
y
b
ω
z
b
]
=
[
p
q
r
]
\boldsymbol{\omega}^{b}=\left[ωbxωbyωbz\right]=\left[pqr\right]
ωb=
ωxbωybωzb
=
pqr
陀螺力矩 Ga :当电机高速旋转的时候,相当于一个陀螺。高速旋转的陀螺是非常稳定的个体,具有保持自身轴向不变的能力
G
a
=
[
G
a
,
ϕ
G
a
,
θ
G
a
,
ψ
]
=
[
J
1
q
(
ϖ
1
−
ϖ
2
+
ϖ
3
−
ϖ
4
)
J
1
p
(
−
ϖ
1
+
ϖ
2
−
ϖ
3
+
ϖ
4
)
0
]
{G}_{\boldsymbol{a}}=\left[Ga,ϕGa,θGa,ψ\right]=\left[J1q(ϖ1−ϖ2+ϖ3−ϖ4)J1p(−ϖ1+ϖ2−ϖ3+ϖ4)0\right]
Ga=
Ga,ϕGa,θGa,ψ
=
J1q(ϖ1−ϖ2+ϖ3−ϖ4)J1p(−ϖ1+ϖ2−ϖ3+ϖ4)0
基于假设1惯性矩阵 J可表示为:
J
=
[
I
x
x
a
m
p
;
−
I
x
y
a
m
p
;
−
I
x
z
−
I
x
y
a
m
p
;
I
y
y
a
m
p
;
−
I
y
z
−
I
x
z
a
m
p
;
−
I
y
z
a
m
p
;
I
z
z
]
=
[
I
x
x
a
m
p
;
a
m
p
;
a
m
p
;
I
y
y
a
m
p
;
a
m
p
;
a
m
p
;
I
z
z
]
\boldsymbol{J}=\left[Ixxamp;−Ixyamp;−Ixz−Ixyamp;Iyyamp;−Iyz−Ixzamp;−Iyzamp;Izz\right]=\left[Ixxamp;amp;amp;Iyyamp;amp;amp;Izz\right]
J=
Ixx−Ixy−Ixzamp;−Ixyamp;Iyyamp;−Iyzamp;−Ixzamp;−Iyzamp;Izz
=
Ixxamp;amp;Iyyamp;amp;amp;amp;Izz
可得:
[
I
x
x
a
m
p
;
a
m
p
;
a
m
p
;
I
y
y
a
m
p
;
a
m
p
;
a
m
p
;
I
z
z
]
[
p
˙
q
˙
r
˙
]
+
[
p
a
m
p
;
q
a
m
p
;
r
I
x
x
p
a
m
p
;
I
y
y
q
a
m
p
;
I
z
z
r
i
a
m
p
;
j
a
m
p
;
k
]
=
[
J
1
q
(
ϖ
1
−
ϖ
2
+
ϖ
3
−
ϖ
4
)
J
1
p
(
−
ϖ
1
+
ϖ
2
−
ϖ
3
+
ϖ
4
)
0
]
+
[
τ
x
τ
y
τ
z
]
\left[Ixxamp;amp;amp;Iyyamp;amp;amp;Izz\right]\left[˙p˙q˙r\right]+[pamp;qamp;rIxxpamp;Iyyqamp;Izzriamp;jamp;k]=\left[J1q(ϖ1−ϖ2+ϖ3−ϖ4)J1p(−ϖ1+ϖ2−ϖ3+ϖ4)0\right]+[τxτyτz]
Ixxamp;amp;Iyyamp;amp;amp;amp;Izz
p˙q˙r˙
+
pIxxpiamp;qamp;Iyyqamp;jamp;ramp;Izzramp;k
=
J1q(ϖ1−ϖ2+ϖ3−ϖ4)J1p(−ϖ1+ϖ2−ϖ3+ϖ4)0
+
τxτyτz
整理得:
{
p
˙
=
1
I
x
x
[
τ
x
+
q
r
(
I
y
y
−
I
z
z
)
−
J
1
q
Ω
]
q
˙
=
1
I
y
y
[
τ
y
+
p
r
(
I
z
z
−
I
x
x
)
+
J
1
p
Ω
]
r
˙
=
1
I
z
z
[
τ
z
+
p
q
(
I
x
x
−
I
y
y
)
]
\left\{˙p=1Ixx[τx+qr(Iyy−Izz)−J1qΩ]˙q=1Iyy[τy+pr(Izz−Ixx)+J1pΩ]˙r=1Izz[τz+pq(Ixx−Iyy)]\right.
⎩
⎨
⎧p˙=Ixx1[τx+qr(Iyy−Izz)−J1qΩ]q˙=Iyy1[τy+pr(Izz−Ixx)+J1pΩ]r˙=Izz1[τz+pq(Ixx−Iyy)]
运动学模型的输入为速度和角速度,输出为位置和姿态
速度与位置的方程:
{
p
˙
e
=
v
e
p
e
=
[
x
a
m
p
;
y
a
m
p
;
z
]
T
[
x
˙
a
m
p
;
y
˙
a
m
p
;
z
˙
]
T
=
[
v
x
a
m
p
;
v
y
a
m
p
;
v
z
]
T
\left\{\right]^{T} \\ \left[\right]^{T}=\left[\right]^{T} \end{array}\right.
⎩
⎨
⎧p˙e=vepe=[xamp;yamp;z]T[x˙amp;y˙amp;z˙]T=[vxamp;vyamp;vz]T
姿态角的变化率与机体的旋转角速度有如下关系:
{
Θ
˙
=
W
⋅
ω
b
Θ
˙
=
[
ϕ
˙
a
m
p
;
θ
˙
a
m
p
;
ψ
˙
]
T
ω
b
=
[
p
a
m
p
;
q
a
m
p
;
r
]
T
W
=
[
1
a
m
p
;
tan
θ
sin
ϕ
a
m
p
;
tan
θ
cos
ϕ
0
a
m
p
;
cos
ϕ
a
m
p
;
−
sin
ϕ
0
a
m
p
;
sin
ϕ
/
cos
θ
a
m
p
;
cos
ϕ
/
cos
θ
]
\left\{\right]^{T} \\ \omega^b = \left[\right]^{T} \\ \boldsymbol{W}=\left[\right] \end{array}\right.
⎩
⎨
⎧Θ˙=W⋅ωbΘ˙=[ϕ˙amp;θ˙amp;ψ˙]Tωb=[pamp;qamp;r]TW=
100amp;tanθsinϕamp;cosϕamp;sinϕ/cosθamp;tanθcosϕamp;−sinϕamp;cosϕ/cosθ
整理可得:
[
ϕ
˙
θ
˙
ψ
˙
]
=
[
1
a
m
p
;
tan
θ
sin
ϕ
a
m
p
;
tan
θ
cos
ϕ
0
a
m
p
;
cos
ϕ
a
m
p
;
−
sin
ϕ
0
a
m
p
;
sin
ϕ
/
cos
θ
a
m
p
;
cos
ϕ
/
cos
θ
]
[
p
q
r
]
\left[\right]=\left[\right]\left[\right]
ϕ˙θ˙ψ˙
=
100amp;tanθsinϕamp;cosϕamp;sinϕ/cosθamp;tanθcosϕamp;−sinϕamp;cosϕ/cosθ
pqr
车辆动力学建模是指通过数学模型描述车辆在不同运动和操控情况下的行为。这种建模是车辆动力学控制的基础,能够帮助设计控制系统以优化车辆性能和稳定性。
车辆动力学模型及其控制的数学形式通常通过一系列微分方程来表示,这些方程描述了车辆在运动过程中的各种物理量随时间的演变。
车辆动力学控制的目标是通过调整操纵输入,使车辆达到期望的运动性能。典型的车辆动力学控制系统包括横向和纵向控制。
车辆动力学模型有很多种,以下是一些常见的模型:
首先要简化汽车运动,其中自行车模型就是简单且有效的简化方式。自行车模型基于如下几个假设:
车辆在垂直方向的运动被忽略掉了,也就是说我们描述的车辆是一个二维平面上的运动物体(可以等价与我们是站在天空中的俯视视角)
车辆自行车模型是一种常用的车辆动力学模型,它将车辆简化为一个自行车,只考虑车辆的横向运动和转向运动。这种模型主要用于研究车辆的稳定性和操控性。
在自行车模型中,车辆的运动状态可以由以下几个变量表示:
车辆的动力学行为则可以通过以下的微分方程来描述:
其中 θ是其在 Yaw 方向的偏转角度,它是相对于 x 轴的逆时针方向的角度,v 是 θ 方向的速度,L是车辆的轴距(前后轮胎的距离), (x,y) 是车辆的坐标。
可以通过以下的微分方程来描述:
这些方程描述了车辆在给定控制输入(如油门、刹车和转向)下的运动行为。
(
x
.
y
.
θ
.
)
=
(
v
c
o
s
θ
v
s
i
n
θ
r
L
t
a
n
ϕ
)
=
x.y.θ.
=
vcosθvsinθLrtanϕ
( x . y . θ . ) = ( c o s θ s i n θ 0 ) . v + ( 0 0 1 ) . ω = .v + .\omega x.y.θ. = cosθsinθ0 .v+ 001 .ω
(
x
.
y
.
θ
.
)
=
(
r
2
(
μ
l
+
μ
r
)
c
o
s
θ
r
2
(
μ
l
+
μ
r
)
s
i
n
θ
r
L
(
μ
r
−
μ
l
)
)
=
x.y.θ.
=
2r(μl+μr)cosθ2r(μl+μr)sinθLr(μr−μl)
经过动力学建模得到了一个控制方程,前面几章也介绍了如何把移动机器人当成质点得到了一条质点轨迹路径。那么接下来的事情就是如何把动力学建模得到的控制方程融合到质点轨迹路径中。然后把各种约束融合进代价函数,通过求解代价函数最小化得到符合约束的满足动力学控制要求的轨迹。
那么动力学控制方程融入质点轨迹主流有两种方法:控制离散化、状态离散化。
1.控制离散化就是说我们已经知道动力学控制方程了,那么我们能不能把质点轨迹上每个质点出了坐标信息还带上控制向量信息,控制向量是一个连续的向量不好表示,所以为了更方便求解减少求解空间我们就把控制向量离散化变成有限的可选项。这样可以更方便的写出代价函数,也更容易求解得出代动力学约束的可行解。
2.状态离散,意思就是我们把质点轨迹上每个质点带上移动机器人在这个质点的状态信息。然而状态也是一个连续的向量,解空间大不利于求解。所以我们把状态离散成有限的状态表示,这样在求解时候知道每个质点的状态,求解问题就变成在如何求解状态间转移矩阵符合代价函数最小化问题。
下面章节就会具体介绍如何求解带状态约束的路径问题。
状态栅格,顾名思义就在在普通的栅格化地图的基础上,多加了机器人运动学模型的约束,确保机器人能沿着相邻两点之间生成的路径运动,并且能够具有状态连续性(速度连续等)。
状态栅格图中,每个顶点的连线都是根据机器人的运动学模型生成的,都是切实可行的路径,而普通栅格 (grid)的方法并没有结合模型。在构建状态栅格图(State Lattice Search)之前,需要对被控对象进行运动学分析,即建立对应的运动学模型。运动学模型主要描述了位置、速度、加速度、转向角度等等状态量在时间上的状态转移,以及对所关心的这些状态量的边界条件进行约束。
从控制空间和状态空间中进行采样,对于机器人模型:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。