Hybrid Astar 算法剖析和实现(五)
在學習資料滿天飛的大環境下,知識變得非常零散,體系化的知識并不多,這就導致很多人每天都努力學習到感動自己,最終卻收效甚微,甚至放棄學習。我的使命就是過濾掉大量的無效信息,將知識體系化,以短平快的方式直達問題本質,把大家從大海撈針的痛苦中解脫出來。
文章目錄
- 0 前言
- 1 什么是節點拓展
- 2 基于自行車模型拓展
- 2.1 連續拓展
- 2.2 離散拓展
- 2.3 中間節點
 
- 3 總結
 
0 前言
上兩篇對Hybrid Astar算法的主體搜索流程做了剖析和實現,本節詳細介紹節點拓展。
1 什么是節點拓展
節點拓展就是基于當前節點狀態空間向量推導下一個節點狀態空間向量。
關于狀態空間的介紹可以參看這篇文章:Hybrid Astar 算法剖析和實現(二)_穿越臨界點的博客-CSDN博客
2 基于自行車模型拓展
2.1 連續拓展
設當前節點 NodecurrentNode_{current}Nodecurrent? 中記錄著車輛當前的位姿 [x0,y0,θ0][x_0,y_0,\theta_0][x0?,y0?,θ0?] (狀態量)。求在控制量[v,?][v,\phi][v,?] 的控制下,ttt時刻后車輛的位姿。
簡易自行車模型如下式,其中 LwL_wLw? 代表wheel base,?\phi? 為前輪轉角。
ddt[x(t)y(t)θ(t)]=[v(t)?cosθ(t)v(t)?sinθ(t)v(t)?tan?(t)/Lw],?t.(1)\fracze8trgl8bvbq{dt} \begin{bmatrix} x(t) \\ y(t) \\ \theta(t) \end{bmatrix} = \begin{bmatrix} v(t)\cdot cos\theta(t) \\ v(t) \cdot sin\theta(t) \\ v(t) \cdot tan\phi(t)/L_w \end{bmatrix} ,\forall t. \tag1 dtd????x(t)y(t)θ(t)????=???v(t)?cosθ(t)v(t)?sinθ(t)v(t)?tan?(t)/Lw?????,?t.(1)
設當前時刻 t=0t=0t=0,則有,
 {x(0)=x0y(0)=y0θ(0)=θ0(2)\begin{cases} x(0)=x_0\\ y(0) = y_0 \\ \theta(0) = \theta_0 \end{cases} \tag2 ??????x(0)=x0?y(0)=y0?θ(0)=θ0??(2)
 ttt 時刻后有,
 {x(t)=x(0)+∫τ=0tv(τ)?cosθ(τ)?dτ=x0+∫τ=0tv(τ)?cosθ(τ)?dτy(t)=y(0)+∫τ=0tv(τ)?sinθ(τ)?dτ=y0+∫τ=0tv(τ)?sinθ(τ)?dτθ(t)=θ(0)+∫τ=0tv(τ)?tan?(τ)/Lw?dτ=θ0+∫τ=0tv(τ)?tan?(τ)/Lw?dτ(3)\begin{cases} x(t)&=x(0)+\int_{\tau=0}^t v(\tau)\cdot cos\theta(\tau) \cdot d\tau \\[2ex] &=x_0+\int_{\tau=0}^t v(\tau)\cdot cos\theta(\tau) \cdot d\tau\\[3ex] y(t)&=y(0)+\int_{\tau=0}^t v(\tau)\cdot sin\theta(\tau)\cdot d\tau \\[2ex] &=y_0+\int_{\tau=0}^t v(\tau)\cdot sin\theta(\tau)\cdot d\tau \\[3ex] \theta(t) &= \theta(0) +\int_{\tau=0}^t v(\tau) \cdot tan\phi(\tau)/L_w \cdot d\tau \\[2ex] &= \theta_0 +\int_{\tau=0}^t v(\tau) \cdot tan\phi(\tau)/L_w \cdot d\tau \end{cases}\tag3 ??????????????????????????????????????x(t)y(t)θ(t)?=x(0)+∫τ=0t?v(τ)?cosθ(τ)?dτ=x0?+∫τ=0t?v(τ)?cosθ(τ)?dτ=y(0)+∫τ=0t?v(τ)?sinθ(τ)?dτ=y0?+∫τ=0t?v(τ)?sinθ(τ)?dτ=θ(0)+∫τ=0t?v(τ)?tan?(τ)/Lw??dτ=θ0?+∫τ=0t?v(τ)?tan?(τ)/Lw??dτ?(3)
上式中的 [xt,yt,θt][x_t,y_t,\theta_t][xt?,yt?,θt?] 即為t時刻后車輛的位姿,也就是新的狀態節點向量。
2.2 離散拓展
實際使用時不可能進行連續的狀態節點拓展。需要離散化以便減少計算量。
首先,對前輪轉角?\phi?進行離散化
 ?i∈{Φ0,Φ1,…,Φm},i∈[0,m?1],i∈Z(4)\phi_i\in\{\Phi_0,\Phi_1,\ldots,\Phi_m\},\quad i\in[0,m-1],i\in Z \tag4 ?i?∈{Φ0?,Φ1?,…,Φm?},i∈[0,m?1],i∈Z(4)
 然后,對速度vvv進行離散化
 vj∈{?Vmax,Vmax}(5)v_j\in\{-V_{max},V_{max}\}\tag5 vj?∈{?Vmax?,Vmax?}(5)
最后,對時間ttt進行離散化
 tk∈{T0,T1,…,Tn},k∈[0,n?1],k∈Z(6)t_k\in\{T_0,T_1,\ldots,T_n\},\quad k\in[0,n-1],k\in Z \tag6 tk?∈{T0?,T1?,…,Tn?},k∈[0,n?1],k∈Z(6)
根據式(4)-(6)進行離散化之后,每次拓展的節點狀態個數為 (m+1)×2(m+1)\times2(m+1)×2。
有同學肯定會提出疑問:拓展的節點個數不應該是 (m+1)×2×(k+1)(m+1)\times2\times(k+1)(m+1)×2×(k+1)嗎?這就引出了下個話題——中間節點。
2.3 中間節點
我們之前所說的節點狀態指的都是最終節點狀態。為什么會有最終節點這個名稱出現呢?因為引入了中間節點。
那是怎么引入的中間節點呢?是通過對單次拓展時間ttt進行離散化引入的。所以,每個最終節點包含了k+1k+1k+1 個中間節點。
有人肯定會有新的疑問:不使用中間節點到底行不行?答案是不行,原因有兩個。
因此,為了平衡狀態柵格的精度和碰撞檢測的可靠性,才不得不引入中間節點的概念。
Tips:中間節點引入的原因對于初學者來說是很難理解的。我認為這也是Hybrid Astar算法與Astar算法最大的不同。那這種思想或技巧來自哪里呢?
她實際上來自于RRT相關算法。這是搜索樹中經常遇到的問題。
說到這里,想必大家對Hybrid的理解也更深刻了吧——就是Astar和RRT的混血。
3 總結
本篇主要介紹了節點拓展的核心思想,并給大家揭開了Hybrid這個字的神秘面紗。下一篇,我們對其進行代碼實現,敬請期待。
恭喜你又堅持看完了一篇博客,又進步了一點點!如果感覺還不錯就點個贊再走吧,你的點贊和關注將是我持續輸出的噠噠噠動力~~
總結
以上是生活随笔為你收集整理的Hybrid Astar 算法剖析和实现(五)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Itext学习(一)----官方网站学习
- 下一篇: 计算机的使用编码,计算机中使用的编码
