日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > ChatGpt >内容正文

ChatGpt

Hybrid Astar 算法剖析和实现(五)

發布時間:2023/12/14 ChatGpt 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)\fracozvdkddzhkzd{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],iZ(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],kZ(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 個中間節點。

有人肯定會有新的疑問:不使用中間節點到底行不行?答案是不行,原因有兩個。

  • 如果將每個中間節點的身份都進行“提升”,提升為最終節點,那么產生的問題就是狀態柵格分辨率(參看Hybrid Astar 算法剖析和實現(二)_穿越臨界點的博客-CSDN博客)要相應的提升,這樣會增長搜索時間,并且增加內存使用量。
  • 每次拓展拋棄中間節點,直接取 t=Tnt=T_nt=Tn? 可不可以呢?也是不可以的。因為,如果每次拓展距離過長,只對最終的節點進行碰撞檢測是不可靠的——小體積的障礙物會被直接跳過去。
  • 因此,為了平衡狀態柵格的精度和碰撞檢測的可靠性,才不得不引入中間節點的概念。

    Tips:中間節點引入的原因對于初學者來說是很難理解的。我認為這也是Hybrid Astar算法與Astar算法最大的不同。那這種思想或技巧來自哪里呢?

    她實際上來自于RRT相關算法。這是搜索樹中經常遇到的問題。

    說到這里,想必大家對Hybrid的理解也更深刻了吧——就是Astar和RRT的混血。


    3 總結

    本篇主要介紹了節點拓展的核心思想,并給大家揭開了Hybrid這個字的神秘面紗。下一篇,我們對其進行代碼實現,敬請期待。

    恭喜你又堅持看完了一篇博客,又進步了一點點!如果感覺還不錯就點個贊再走吧,你的點贊和關注將是我持續輸出的噠噠噠動力~~

    總結

    以上是生活随笔為你收集整理的Hybrid Astar 算法剖析和实现(五)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。