# 進度報告(2024/11/18) ## 論文閱讀 **Review of Pedestrian Trajectory Prediction Methods: Comparing Deep Learning and Knowledge-Based Approaches**[^1]這篇review主要介紹了現今用於預測行人路徑的各種方法,主要分成兩大領域,KB和DL: ### Knowledge Based (KB): * **社會力模型Social Force Model (SFM):** 模擬行人在受到周圍環境和其他行人的影響下的運動。琮祐學長使用的指數機率分布之碰撞風險可以算是這個領域的延伸。 * **ORCA:** 將速度障礙法(VO)的限制作線性簡化,可以用於模擬預測短期內行人之速度與位置。 ### Deep learning (DL): * 長短期記憶網絡LSTM * 卷積神經網絡CNN * 生成對抗網絡GAN 文章分析到: KB模型較適合短期的路人軌跡預測,或是應用於解釋高密度的擁擠環境;相對之下,DL模型在低密度的場景下依然能維持更高的的準確性,也能學習一些個體複雜的走路模式,但是這種模型依賴大量的訓練,且可能缺乏參數的解釋性。此外,這篇文章還提到**混合模型 (Hybrid Approach)** 試圖結合前兩種方法的優點並消除缺點。 我認為無論是這篇論文中提到的任一種方法,目的都是要將人類的走路行為做建模。並依照此模型做該行人的未來軌跡之預測。 ## 行人環境的建置 正如同作車輛行為分析需要有道路模型,我應該也要做個行人模型。由於我的研究可能比較偏向讓機器人閃避環境裡的人類(或其他動態障礙),因此,在模擬中讓機器人閃避的那些節點,不能僅是做單純的直線運動、圓周運動或任何預先規畫好的路徑。那些節點應概要被假設為人類,會自己朝目標前進,並有能力對其他節點作出反應,例如: 1. 行人A與行人B應有能力在相遇時進互相避讓 2. 行人面對機器人時應該也要作出閃避的反應 因為這部分並不是我研究的重點,所以目前架設一個簡易的行人環境即可。參考上面論文後,我決定先套用ORCA或是SFM在我的障礙物節點上。而用SFM做行人行為模擬一直有論文在討論,相較之下ORCA並不能完全適用於行人的走路行為,因此現階段的環境可能會先從一個簡易的SFM開始。 一般來說,基本的社會力模型Social Force Model(SFM)假設形人的移動模式受到三種力牽引: 1. $\mathbf{f}_{driven}$: 朝向目標的吸引力 2. $\mathbf{f}_{interaction}$: 與其他行人(或移動障礙物)的排斥力 3. $\mathbf{f}_{wall}$: 與牆壁的斥力 $$ m\frac{d\mathbf{v}}{dt}=\mathbf{f}_{driven}+\mathbf{f}_{interaction}+\mathbf{f}_{wall} $$ 假設行人質量為$m$,則行人的加速度向量,可以被寫為上述的公式。在我初步的模擬環境中,並沒有靜態障礙,因此,$\mathbf{f}_{wall}$可以被暫時拿掉,而剩下的兩種力的公式如下: $$ \begin{aligned} &\mathbf{f}_{driven} = m\frac{v_{id}\mathbf{e}-\mathbf{v}_c}{\tau}\\ &\mathbf{f}_{interaction}=\sum_{j=1}^{k}A\exp(\frac{D-d_j}{B})\mathbf{n}_j \end{aligned} $$ * $v_{id}$: 行人前進的理想速度 * $\mathbf{e}=\frac{\mathbf{p}_c-\mathbf{p}_g}{\|\mathbf{p}_c-\mathbf{p}_g\|}$: 行人當前位置$\mathbf{p}_c$朝向目標點$\mathbf{p}_g$的單位向量 * $\mathbf{v}_c$: 行人當前的速度向量 * $A$: 行人間的排斥力 * $B$: 排斥範圍 * $D$: 行人中心間的安全距離 * $d_j=\|\mathbf{p}_c-\mathbf{p}_j\|$: 行人與$j$行動障礙物的中心距離 * $\mathbf{n}_j=\frac{\mathbf{p}_c-\mathbf{p}_j}{\|\mathbf{p}_c-\mathbf{p}_j\|}$: 行人到$j$行動障礙物的單位向量 ### 測試 目前測試的參數為: * $v_{id}=1(m)$ * $A = 3\times10^2(N)$ * $B = 0.6(m)$ * $D = 0.11 + r_1 + r_2(m)$,r為節點半徑 * 情境: 兩顆節點(行人) {%youtube eNH9C-r0a6g%} ## 預測節點位置 再重看了一遍10/21號進度報告提到的那篇論文**Real time trajectory prediction for collision risk estimation between vehicles[^2]**。他採用的預測法,是建立移動障礙物的線性模型,並量測動態障礙的當前位置及速度,利用線性的Kalman Filter獲得該障礙的狀態(位置、速度、加速度)估測值,再使用此估測狀態基於線性模型預測短時間的障礙物未來位置。我認為這種不需要太多障礙物參數,且短期內有效的預測法,應該適合我那種看不遠的MPC,所以想要套用該論文的方法在我的情境中。 首先是障礙物的線性模型: $$ \mathbf{x}_i = \begin{bmatrix}x\\y\\v_x\\v_y\\a_x\\a_y\end{bmatrix}_i\ \mathbf{A} = \begin{bmatrix}1&0&\delta t&0&0&0\\0&1&0&\delta t&0&0\\0&0&1&0&\delta t&0\\0&0&0&1&0&\delta t\\0&0&0&0&1&0\\0&0&0&0&0&1\end{bmatrix} $$ $$ \mathbf{x}_{i+1}=\mathbf{A}\mathbf{x}_i + \mathbf{w}_k $$ * $\mathbf{A}$: prediction matrix * $\mathbf{x}$: model state * $\mathbf{w}_k$: process noise 接著是觀測模型: $$ \mathbf{z}_i = \begin{bmatrix}x\\y\\v_x\\v_y\end{bmatrix}\ \mathbf{H} = \begin{bmatrix}1&0&0&0&0&0\\0&1&0&0&0&0\\0&0&1&0&0&0\\0&0&0&1&0&0\end{bmatrix} $$ $$ \mathbf{z}_i = \mathbf{H}\mathbf{x}_i + \mathbf{v}_k $$ * $\mathbf{H}$: observation matrix * $\mathbf{x}$: measured state * $\mathbf{w}_k$: measurement noise Kalman Filter 的4步驟: ### 1. prediction step: $$ \begin{aligned} &\hat{\mathbf{x}}_k^-=\mathbf{A}\hat{\mathbf{x}}_{k-1}\\ &\mathbf{P}_k^-=\mathbf{A}\mathbf{P}_{k-1}\mathbf{A}^T+\mathbf{Q} \end{aligned} $$ * $\hat{\mathbf{x}}_k^-$: 預測$k$時段的估測狀態 * $\hat{\mathbf{x}}_{k-1}$: 上一時刻的估測狀態 * $\mathbf{P}$: covariance matrix of estimated state * $\mathbf{Q}$: covariance matrix of process noise($\mathbf{w}_k$) ### 2. caculating kalman gain: $$ \mathbf{K}_k = \mathbf{P}_k^-\mathbf{H}^T(\mathbf{H}\mathbf{P}_k^-\mathbf{H}^T+\mathbf{R})^{-1} $$ * $\mathbf{R}$: covariance matrix of measurement noise ### 3. estimation: $$ \hat{\mathbf{x}}_k=(\mathbf{I}-\mathbf{K}_k\mathbf{H})\hat{\mathbf{x}}_k^- + \mathbf{K}_k\mathbf{z}_k $$ ### 4. update: $$ \mathbf{P}_k = (\mathbf{I}-\mathbf{K}_k\mathbf{H})\mathbf{P}_k^- $$ $\mathbf{Q}$和$\mathbf{R}$都是依情況調整的參數,而開啟Kalman Filter前,需要初始猜值$\hat{\mathbf{x}}_0$與$\mathbf{P}_0$。接下來的每一步都可以得到障礙物模型的估測狀態$\hat{\mathbf{x}}_k$與該估測狀態的變異數矩陣$\mathbf{P}_k$(開根後可得標準差$\sigma_k$)。我們可以將這個估測狀態$\hat{\mathbf{x}}_k$多次套入障礙物的線性模型,得到未來一段時間的障礙物位置$(\hat{\mathbf{x}}_{k+1}^-,\hat{\mathbf{x}}_{k+2}^-,\cdots)$。 $$ \begin{aligned} &\hat{\mathbf{x}}_{k+1}^-=\mathbf{A}\hat{\mathbf{x}}_{k}\\ &\hat{\mathbf{x}}_{k+2}^-=\mathbf{A}\hat{\mathbf{x}}_{k+1}\\ &\ \ \vdots\\ &\hat{\mathbf{x}}_{k+n}^-=\mathbf{A}\hat{\mathbf{x}}_{k+n-1} \end{aligned} $$ 假設該障礙物的未來位置皆為高斯分佈,那麼$k+1, k+2, \cdots$時段後的位置依然為高斯分佈,模型參數的$\mu$設為依照線性模型預估的位置,$\sigma$則設為$\sigma_k$。因此未來幾步的標準差,一樣可以用線性模型得到 $$ \begin{aligned} &\vec{\sigma^2}_{k+1} = \mathbf{A}\vec{\sigma^2}_{k}\\ &\vec{\sigma^2}_{k+2} = \mathbf{A}\vec{\sigma^2}_{k+1}\\ &\ \ \vdots\\ &\vec{\sigma^2}_{k+n} = \mathbf{A}\vec{\sigma^2}_{k+n-1} \end{aligned} $$ ![image](https://hackmd.io/_uploads/Hykuct_Gye.png) 如圖,假設藍線為未來$k$時段障礙物位置的機率分布,黃線為未來$k$時段障礙物速度的機率分布。依照前面的線性模型$x_{k+1} = x_k + v_k * \delta t$,代表障礙物$k+1$時段的位置依然是常態分佈,且是一個更胖的鐘型曲線(綠線)。 可以預想,將預測的障礙物依其未來的位置加上一個標準差的範圍,繪製於圖上,大概會呈現越來越大的趨勢,如圖: ![image](https://hackmd.io/_uploads/r1DIk5OM1l.png) ### 測試 * 分別有藍、紅、綠三顆行人節點 * 較大的透明圓形為預測未來0.5秒內節點之位置 讓三位行人彼此交會,中間還有一個不會互相禮讓的機器人通過。可以看到藍色的節點雖然有嘗試閃掉機器人,但還是被撞到了。這至少可以證明,如果日後讓配有MPC的GBM無碰撞通過此情境,並不完全是SFM的功勞。 {%youtube asJ2sPhaGVM%} 可以看到,雖然使用線性模型加上Kalman Filter並沒辦法預測節點甚麼時候去改變行為,但是每當節點採取不同行動後,此方法都能馬上去修正節點的未來預測位置。 :::spoiler 行人節點"B1"的x-t,v-t,a-t圖(包含實際值與估計值+正負1個標準差) ![Kalman_Filter_predictor_simple_SFM](https://hackmd.io/_uploads/Hy7kO1tGJx.png) ::: ## 研究方向 ![image](https://hackmd.io/_uploads/rk4F4cOfkl.png) 目前的想法,是將我的研究分為三項領域: 1. **行人環境**: 採用SFM,創建各種工況給機器人,看要是一人一機、多人一機,或多人多機 2. **動態障礙預測**: 使用Kalman Filter做為短期預測的工具,提供障礙物未來的可能位置,讓MPC依此建立constraints 3. **MPC**: 發出motion command給GBM。原本使用VO法,不過目前正在嘗試柯琮祐學長一樣的風險場,說不定此方法更適合GBM。 ## 實驗室設備 - [ ] 買GBM用電池 - [x] 修理兩台3D列印機 ## Reference [^1]: Korbmacher, Raphael, and Antoine Tordeux. "Review of pedestrian trajectory prediction methods: Comparing deep learning and knowledge-based approaches." IEEE Transactions on Intelligent Transportation Systems 23.12 (2022): 24126-24144. [^2]: Ammoun, Samer, and Fawzi Nashashibi. "Real time trajectory prediction for collision risk estimation between vehicles." 2009 IEEE 5Th international conference on intelligent computer communication and processing. IEEE, 2009.