当前位置:网站首页>Faster Planner——Kinodynamic Astar详解
Faster Planner——Kinodynamic Astar详解
2022-06-10 17:39:00 【不懂音乐的欣赏者】
实际成本和启发式成本
实际成本 Actual Cost
每条轨迹的真实代价函数定义如下:
J ( T ) = ∫ 0 T ∥ u ( t ) ∥ 2 d t + ρ T \mathcal{J}(T)=\int_{0}^{T}\|\mathbf{u}(t)\|^{2} d t+\rho T J(T)=∫0T∥u(t)∥2dt+ρT
离散形式下:
启发成本 Heuristic Cost
论文里没有给出启发函数详细的推导过程,可以结合高飞老师在深蓝学院讲的《Motion Planning》的课程来你就饿。下面就详细介绍下我自己的理解,错误的话请大家指出。
论文中使用的无人机模型为二阶模型,控制输入为加速度,即:
p ˙ ( t ) = v ( t ) v ˙ ( t ) = u ( t ) \begin{aligned} \dot{p}(t) = v(t) \\ \dot{v}(t)=u(t) \end{aligned} p˙(t)=v(t)v˙(t)=u(t)
因此无人机的运动方程可以简写为:
s ˙ = f s ( s , u ) = ( v , a ) \dot{s}=f_s(s,u)=(v,a) s˙=fs(s,u)=(v,a)
其中状态为 s k = ( p k , v k ) s_k=(p_k,v_k) sk=(pk,vk),控制输入为 u k u_k uk。
根据上方PPT中的内容,此时系统中只有两个变量,因此系统的协态(costate)为 λ = ( λ 1 , λ 2 ) \lambda=(\lambda_1,\lambda_2) λ=(λ1,λ2)(系统状态中只有两项,所以只有 λ 1 \lambda_1 λ1和 λ 2 \lambda_2 λ2,分别对应状态中的 p p p和 v v v)。系统的哈密顿函数(Hamiltonian function)可以定义为:
H ( s , u , λ ) = 1 T a 2 + λ T f s ( s , u ) = 1 T a 2 + λ 1 v + λ 2 a λ ˙ = − ▽ s H ( s ∗ , u ∗ , λ ) = ( 0 , − λ 1 ) \begin{aligned} H(s,u,\lambda)&=\frac{1}{T}a^2+\lambda^Tf_s(s,u) \\ &=\frac{1}{T}a^2+\lambda_1v+\lambda_2a \end{aligned}\\ \dot{\lambda}=-\bigtriangledown_sH(s^*,u^*,\lambda)=(0,-\lambda_1) H(s,u,λ)=T1a2+λTfs(s,u)=T1a2+λ1v+λ2aλ˙=−▽sH(s∗,u∗,λ)=(0,−λ1)
上式中 λ ˙ \dot{\lambda} λ˙是在状态取得最优 s ∗ s^* s∗和控制输入取得最优 u ∗ u^* u∗时, H H H关于的 s s s的偏导, s s s中包含 p p p和 v v v,所以将 H H H分别对 p p p和 v v v求偏导,即
λ 1 = − ∂ H ∂ p = 0 λ 2 = − ∂ H ∂ v = − λ 1 \begin{aligned} &\lambda_1=-\frac{\partial{H}}{\partial{p}}=0 \\ &\lambda_2=-\frac{\partial{H}}{\partial{v}}=-\lambda_1 \end{aligned} λ1=−∂p∂H=0λ2=−∂v∂H=−λ1
所以得到了上面的 λ ˙ = − ▽ s H ( s ∗ , u ∗ , λ ) = ( 0 , − λ 1 ) \dot{\lambda}=-\bigtriangledown_sH(s^*,u^*,\lambda)=(0,-\lambda_1) λ˙=−▽sH(s∗,u∗,λ)=(0,−λ1)
根据这个可以得到一组 λ \lambda λ的可行解
λ = 1 T [ − 2 α μ 2 α μ t + 2 β μ ] \lambda=\frac{1}{T} \left[ \begin{aligned} &-2\alpha_{\mu} \\ &2\alpha_{\mu} t+2\beta_{\mu} \end{aligned} \right] λ=T1[−2αμ2αμt+2βμ]
由此可得,将上面的公式 λ \lambda λ带入 H ( s , u , λ ) H(s,u,\lambda) H(s,u,λ)可得到此时系统的控制输入 u ∗ u^* u∗为:
H ( s , u , λ ) = 1 T [ a 2 − 2 α μ v + ( 2 α μ t + 2 β μ ) a ] \begin{aligned} H(s,u,\lambda)=\frac{1}{T} \left[a^2-2\alpha_{\mu}v+(2\alpha_{\mu} t+2\beta_{\mu})a \right] \end{aligned} H(s,u,λ)=T1[a2−2αμv+(2αμt+2βμ)a]
上述公式中的变量为 a a a且 u = a u=a u=a,其他都是已知的,所以控制输入最优时, a = α μ t + β a=\alpha_{\mu}t+\beta a=αμt+β
因此系统中最优状态为(最优控制量 u ∗ u* u∗的积分):
s ∗ ( t ) = [ p ∗ v ∗ ] = [ 1 6 α μ t 3 + 1 2 β μ t 2 + v μ c t + p μ c 1 2 α μ t 2 + β μ t + v μ c ] s^*(t)=\left[ \begin{aligned} p^* \\ v^* \end{aligned} \right] = \left[ \begin{aligned} &\frac{1}{6} \alpha_{\mu}t^3+\frac{1}{2} \beta_{\mu}t^2+v_{\mu c}t+p_{\mu c} \\ &\frac{1}{2} \alpha_{\mu}t^2+\beta_{\mu}t+v_{\mu c} \end{aligned} \right] s∗(t)=[p∗v∗]=⎣⎢⎡61αμt3+21βμt2+vμct+pμc21αμt2+βμt+vμc⎦⎥⎤
原文中 p ∗ = 1 6 α μ t 3 + 1 2 β μ t 2 + v μ c + p μ c p^*=\frac{1}{6} \alpha_{\mu}t^3+\frac{1}{2} \beta_{\mu}t^2+v_{\mu c}+p_{\mu c} p∗=61αμt3+21βμt2+vμc+pμc的倒数第二项应该是少了个 t t t,应该是 p ∗ = 1 6 α μ t 3 + 1 2 β μ t 2 + v μ c t + p μ c p^*=\frac{1}{6} \alpha_{\mu}t^3+\frac{1}{2} \beta_{\mu}t^2+v_{\mu c}t+p_{\mu c} p∗=61αμt3+21βμt2+vμct+pμc。系统的cost function为:
J ( t ) = ∫ 0 t ∣ ∣ u ∣ ∣ 2 d t = ∫ 0 t ∣ ∣ α μ t + β ∣ ∣ 2 d t = ∫ 0 t α μ 2 t + 2 α μ β μ t + β μ 2 d t = 1 3 α μ 2 t 3 + α μ β μ t 2 + β μ 2 t \begin{aligned} J(t)=&\int_{0}^{t} {||u||^2dt} \\ =&\int_{0}^{t} {||\alpha_{\mu}t+\beta ||^2dt}\\ =&\int_{0}^{t} {\alpha_{\mu}^2t+2\alpha_{\mu}\beta _{\mu}t+\beta_{\mu}^2 dt} \\ =&\frac{1}{3} \alpha_{\mu}^2 t^3+\alpha_{\mu}\beta _{\mu}t^2+\beta_{\mu}^2 t \end{aligned} J(t)====∫0t∣∣u∣∣2dt∫0t∣∣αμt+β∣∣2dt∫0tαμ2t+2αμβμt+βμ2dt31αμ2t3+αμβμt2+βμ2t
cost function中只有时间 t t t是变量,因此可以通过对J(t)求导来获取最优的时间及对应的cost 。
p μ ∗ ( t ) = 1 6 α μ t 3 + 1 2 β μ t 2 + v μ c + p μ c = p μ c + v μ c + T 2 ∗ ( ( 2 ∗ v μ c − 2 ∗ v μ g ) / ( 2 ∗ T ) − ( 6 ∗ p μ c − 6 ∗ p μ g + 6 ∗ T ∗ v μ c ) / ( 2 ∗ T 2 ) ) − T 3 ∗ ( ( 6 ∗ v μ c − 6 ∗ v μ g ) / ( 6 ∗ T 2 ) − ( 12 ∗ p μ c − 12 ∗ p μ g + 12 ∗ T ∗ v μ c ) / ( 6 ∗ T 3 ) ) \begin{aligned} p_{\mu}^{*}(t) &=\frac{1}{6} \alpha_{\mu} t^{3}+\frac{1}{2} \beta_{\mu} t^{2}+v_{\mu c}+p_{\mu c} \\ &=p_{\mu c} + v_{\mu c} + T^2*((2*v_{\mu c} - 2*v_{\mu g})/(2*T) - (6*p_{\mu c} - 6*p_{\mu g} + 6*T*v_{\mu c})/(2*T^2)) - T^3*((6*v_{\mu c} - 6*v_{\mu g})/(6*T^2) - (12*p_{\mu c} - 12*p_{\mu g} + 12*T*v_{\mu c})/(6*T^3)) \end{aligned} pμ∗(t)=61αμt3+21βμt2+vμc+pμc=pμc+vμc+T2∗((2∗vμc−2∗vμg)/(2∗T)−(6∗pμc−6∗pμg+6∗T∗vμc)/(2∗T2))−T3∗((6∗vμc−6∗vμg)/(6∗T2)−(12∗pμc−12∗pμg+12∗T∗vμc)/(6∗T3))
α μ \alpha_{\mu} αμ和 β μ \beta_{\mu} βμ的确定依赖于终止条件,也就是经过时间 T T T以后无人机要到达 p μ g p_{\mu g} pμg和 v μ g v_{\mu g} vμg,可以得到下述关系:
[ 1 6 T 3 1 2 T 2 1 2 T 2 T ] [ α β γ ] = [ Δ p Δ v Δ a ] [ 1 6 T 3 1 2 T 2 1 2 T 2 T ] [ α β γ ] = [ p μ g − p μ c − v μ c T v μ g − v μ c ] \left[\begin{array}{ccc} \frac{1}{6} T^{3} & \frac{1}{2} T^{2} \\ \frac{1}{2} T^{2} & T \end{array}\right]\left[\begin{array}{l} \alpha \\ \beta \\ \gamma \end{array}\right]=\left[\begin{array}{c} \Delta p \\ \Delta v \\ \Delta a \end{array}\right] \\ \left[\begin{array}{ccc} \frac{1}{6} T^{3} & \frac{1}{2} T^{2} \\ \frac{1}{2} T^{2} & T \end{array}\right]\left[\begin{array}{l} \alpha \\ \beta \\ \gamma \end{array}\right]=\left[\begin{array}{c} p_{\mu g}-p_{\mu c}-v_{\mu c} T \\ v_{\mu g}-v_{\mu c} \end{array}\right] [61T321T221T2T]⎣⎡αβγ⎦⎤=⎣⎡ΔpΔvΔa⎦⎤[61T321T221T2T]⎣⎡αβγ⎦⎤=[pμg−pμc−vμcTvμg−vμc]
由此可以得到:
[ α μ β μ ] = 1 T 3 [ − 12 6 T 6 T − 2 T 2 ] [ p μ g − p μ c − v μ c T v μ g − v μ c ] \begin{aligned} {\left[\begin{array}{c} \alpha_{\mu} \\ \beta_{\mu} \end{array}\right] } &=\frac{1}{T^{3}}\left[\begin{array}{cc} -12 & 6 T \\ 6 T & -2 T^{2} \end{array}\right]\left[\begin{array}{c} p_{\mu g}-p_{\mu c}-v_{\mu c} T \\ v_{\mu g}-v_{\mu c} \end{array}\right] \end{aligned} [αμβμ]=T31[−126T6T−2T2][pμg−pμc−vμcTvμg−vμc]
将上式中的 α μ \alpha_{\mu} αμ和 β μ \beta_{\mu} βμ带入下式 J ∗ ( T ) \mathcal{J}^{*}(T) J∗(T)中,并将各项按照 T T T的阶次分解后可得:
J ∗ ( T ) = ∑ μ ∈ { x , y , z } ( 1 3 α μ 2 T 3 + α μ β μ T 2 + β μ 2 T ) = ∑ μ ∈ { x , y , z } ( ( 4 ∗ ( T 2 ∗ v μ c 2 + T 2 ∗ v μ c ∗ v μ g + T 2 ∗ v μ g 2 + 3 ∗ T ∗ p μ c ∗ v μ c + 3 ∗ T ∗ p μ c ∗ v μ g − 3 ∗ T ∗ p μ g ∗ v μ c − 3 ∗ T ∗ p μ g ∗ v μ g + 3 ∗ p μ c 2 − 6 ∗ p μ c ∗ p μ g + 3 ∗ p μ g 2 ) ) / T 3 ) = ∑ μ ∈ { x , y , z } ( ( 12 ∗ p μ c 2 ) / T 3 + ( 12 ∗ p μ g 2 ) / T 3 − ( 24 ∗ p μ c ∗ p μ g ) / T 3 ) + ∑ μ ∈ { x , y , z } ( ( 12 ∗ p μ c ∗ v μ c ) / T 2 + ( 12 ∗ p μ c ∗ v μ g ) / T 2 − ( 12 ∗ p μ g ∗ v μ c ) / T 2 − ( 12 ∗ p μ g ∗ v μ g ) / T 2 ) + ∑ μ ∈ { x , y , z } ( ( 4 ∗ v μ c 2 ) / T + ( 4 ∗ v μ g 2 ) / T + ( 4 ∗ v μ c ∗ v μ g ) / T ) = ∑ μ ∈ { x , y , z } ( 12 ( p μ c − p μ g ) 2 / T 3 − 12 ( v μ c + v μ g ) ( p μ g − p μ c ) / T 2 + 4 ( v μ c 2 + v μ c ∗ v μ g + v μ g 2 ) / T ) \begin{aligned} \mathcal{J}^{*}(T) &=\sum_{\mu \in\{x, y, z\}}\left(\frac{1}{3} \alpha_{\mu}^{2} T^{3}+\alpha_{\mu} \beta_{\mu} T^{2}+\beta_{\mu}^{2} T\right) \\ &=\sum_{\mu \in\{x, y, z\}}\left( (4*(T^2*v_{\mu c}^2 + T^2*v_{\mu c}*v_{\mu g} + T^2*v_{\mu g}^2 + 3*T*p_{\mu c}*v_{\mu c} + 3*T*p_{\mu c}*v_{\mu g} - 3*T*p_{\mu g}*v_{\mu c} - 3*T*p_{\mu g}*v_{\mu g} + 3*p_{\mu c}^2 - 6*p_{\mu c}*p_{\mu g} + 3*p_{\mu g}^2))/T^3\right) \\ &=\sum_{\mu \in\{x, y, z\}}\left((12*p_{\mu c}^2)/T^3 + (12*p_{\mu g}^2)/T^3 - (24*p_{\mu c}*p_{\mu g})/T^3 \right) + \sum_{\mu \in\{x, y, z\}}\left((12*p_{\mu c}*v_{\mu c})/T^2 + (12*p_{\mu c}*v_{\mu g})/T^2 - (12*p_{\mu g}*v_{\mu c})/T^2 - (12*p_{\mu g}*v_{\mu g})/T^2 \right) + \sum_{\mu \in\{x, y, z\}}\left((4*v_{\mu c}^2)/T + (4*v_{\mu g}^2)/T + (4*v_{\mu c}*v_{\mu g})/T \right) \\ &=\sum_{\mu \in\{x, y, z\}}\left(12(p_{\mu c}-p_{\mu g})^2/T^3 -12(v_{\mu c}+v_{\mu g})(p_{\mu g}-p_{\mu c})/T^2 + 4(v_{\mu c}^2 + v_{\mu c}*v_{\mu g} + v_{\mu g}^2)/T \right) \end{aligned} J∗(T)=μ∈{ x,y,z}∑(31αμ2T3+αμβμT2+βμ2T)=μ∈{ x,y,z}∑((4∗(T2∗vμc2+T2∗vμc∗vμg+T2∗vμg2+3∗T∗pμc∗vμc+3∗T∗pμc∗vμg−3∗T∗pμg∗vμc−3∗T∗pμg∗vμg+3∗pμc2−6∗pμc∗pμg+3∗pμg2))/T3)=μ∈{ x,y,z}∑((12∗pμc2)/T3+(12∗pμg2)/T3−(24∗pμc∗pμg)/T3)+μ∈{ x,y,z}∑((12∗pμc∗vμc)/T2+(12∗pμc∗vμg)/T2−(12∗pμg∗vμc)/T2−(12∗pμg∗vμg)/T2)+μ∈{ x,y,z}∑((4∗vμc2)/T+(4∗vμg2)/T+(4∗vμc∗vμg)/T)=μ∈{ x,y,z}∑(12(pμc−pμg)2/T3−12(vμc+vμg)(pμg−pμc)/T2+4(vμc2+vμc∗vμg+vμg2)/T)
上式是关于 T T T的多项式,为了求得最优的 J ∗ ( T ) \mathcal{J}^{*}(T) J∗(T)的闭式解,因此需要对其进行求关于时间 T T T的偏导,即 ∂ J ∗ ( T ) ∂ T \frac{\partial{\mathcal{J}^{*}(T)}}{\partial{T}} ∂T∂J∗(T),由此可以得到:
∂ J ∗ ( T ) ∂ T = ∑ μ ∈ { x , y , z } ( 36 ( p μ c − p μ g ) 2 / T − 4 − 24 ( v μ c + v μ g ) ( p μ g − p μ c ) / T − 3 + 4 ( v μ c 2 + v μ c ∗ v μ g + v μ g 2 ) / T − 2 ) \frac{\partial{\mathcal{J}^{*}(T)}}{\partial{T}} =\sum_{\mu \in\{x, y, z\}}\left(36(p_{\mu c}-p_{\mu g})^2/T^{-4} -24(v_{\mu c}+v_{\mu g})(p_{\mu g}-p_{\mu c})/T^{-3} + 4(v_{\mu c}^2 + v_{\mu c}*v_{\mu g} + v_{\mu g}^2)/T^{-2} \right) ∂T∂J∗(T)=μ∈{ x,y,z}∑(36(pμc−pμg)2/T−4−24(vμc+vμg)(pμg−pμc)/T−3+4(vμc2+vμc∗vμg+vμg2)/T−2)
这里的 36 ( p μ c − p μ g ) 36(p_{\mu c}-p_{\mu g}) 36(pμc−pμg)、 − 24 ( v μ c + v μ g ) ( p μ g − p μ c ) -24(v_{\mu c}+v_{\mu g})(p_{\mu g}-p_{\mu c}) −24(vμc+vμg)(pμg−pμc)、 4 ( v μ c 2 + v μ c ∗ v μ g + v μ g 2 ) 4(v_{\mu c}^2 + v_{\mu c}*v_{\mu g} + v_{\mu g}^2) 4(vμc2+vμc∗vμg+vμg2)分别对应四次项、三次项和二次项,也就是代码中的 c 1 c_1 c1 c 2 c_2 c2 c 3 c_3 c3;因为没有一次项,所以 c 4 = 0 c_4=0 c4=0;常数项 c 5 c_5 c5是自定义的,影响不大(可以联想下一个曲线,常数项只是让该曲线沿着Y轴上下移动)。
因为这里 J ∗ ( T ) \mathcal{J}^{*}(T) J∗(T)中的多项式是关于 T T T的,且是负的次幂,所以在代码中假设 t = 1 T t=\frac{1}{T} t=T1,然后求解四次多项式的根。这里的根为最优的时间 T ∗ T* T∗。需要注意的是,在最优的时间 T ∗ T* T∗时对应的cost J ∗ ( T ) \mathcal{J}^{*}(T) J∗(T)也是有大有小的,所以为了获得最优的时间 T ∗ T* T∗,需要对求得的多个根可进行判断,判断的过程后面再讲。
在求四次多项式的根时,调用了**quartic()**函数,该函数中使用费拉里方法来求解四次多项式的根。然后在求解三次多项式时,代码中使用了两种方法,当判别式大于0及等于0的情况利用了求根公式,判别式小于0的情况则是使用了三角函数解法。
double KinodynamicAstar::estimateHeuristic(Eigen::VectorXd x1, Eigen::VectorXd x2, double& optimal_time)
{
const Eigen::Vector3d dp = x2.head(3) - x1.head(3);
const Eigen::Vector3d v0 = x1.segment(3, 3);
const Eigen::Vector3d v1 = x2.segment(3, 3);
double c1 = -36 * dp.dot(dp);
double c2 = 24 * (v0 + v1).dot(dp);
double c3 = -4 * (v0.dot(v0) + v0.dot(v1) + v1.dot(v1));
double c4 = 0;
double c5 = w_time_;
std::vector<double> ts = quartic(c5, c4, c3, c2, c1);
double v_max = max_vel_ * 0.5;
double t_bar = (x1.head(3) - x2.head(3)).lpNorm<Eigen::Infinity>() / v_max;
ts.push_back(t_bar);
double cost = 100000000;
double t_d = t_bar;
for (auto t : ts)
{
if (t < t_bar)
continue;
double c = -c1 / (3 * t * t * t) - c2 / (2 * t * t) - c3 / t + w_time_ * t;
if (c < cost)
{
cost = c;
t_d = t;
}
}
optimal_time = t_d;
return 1.0 * (1 + tie_breaker_) * cost;
}
边栏推荐
- C language -- 13 loop statement while
- 基于业务沉淀组件 =&gt; manage-table
- 关于目前CIM(BIM+GIS)行业的一些看法
- c语言---4 初识常量
- IIS installation and deployment web site
- CUDA Programming (I): add two arrays
- One of the Taobao short video pit avoidance Guide Series -- thoroughly understand Taobao short video
- Postman interface test tool
- AOE network critical path
- Abbexa低样本量鸡溶菌酶 C (LYZ) ELISA 试剂盒
猜你喜欢

XML & XPath parsing

Linear mobile chess

(CVPR 2020) RandLA-Net: Efficient Semantic Segmentation of Large-Scale Point Clouds

MYSQL开窗函数详解

The short ticket hypothesis: finding sparse, trainable neural networks

mmcv之Config类介绍

mmdetection之dataloader构建

正斜杠“/”、反斜杠“\、”转义字符“\”、文件路径分割符傻傻记不清楚

盛最多水得容器

Domestic cosmetics, lost 618
随机推荐
LeetCode 321. Maximum number of splices***
Leetcode 321. Nombre maximum de raccords
C语言---1 C语言认知
Generate XML based on annotations and reflection
c语言学习回顾---1 基础知识回顾
pwnable start
Library for adding progress bar during training --tqdm
基于注解和反射生成xml
字符串的分析和使用 上
LeetCode树经典题目(一)
Abbexa AML1 DNA 结合 ELISA 试剂盒说明书
mmcv之Config类介绍
领导提拔你的原因,只有这点最真实,其他都是瞎扯!
c语言---9 初识宏、指针
c语言---12 分支语句switch
Talk about those things about telecommuting, participate in the essay solicitation, receive the contribution fee and win the grand prize!
Abbexa 无细胞 DNA 试剂盒说明书
Unity stepping on the pit record: if you inherit monobehavior, the constructor of the class may be called multiple times by unity. Do not initialize the constructor
待办事项桌面插件,办公族的桌面好帮手
High number_ Chapter 6 infinite series__ Absolute convergence_ Conditional convergence