• 沒有找到結果。

考慮到模擬的逼真性,原本希望使用車流模擬器模擬,但由於車流模 擬器無法針對單一車輛控制,而且在函數被限定以及程式碼有限的狀況 下,採用最原始的程式語言C 語言做動態模擬,期望達到 ITS 需要的動態 化、即時化、隨機化的目標。

5.1.1 程式撰寫流程

程式希望藉由自動車之前的手動車輛隨機變動速度或是藉由給定的 加速度,讓在後面的自動車輛能夠經由程式,判斷跟車所要使用的模式,

以及用給定的拋物線加速度跟車,且要動態表現出車輛的行為,流程圖如 (圖 5.3),解說如下:

1. 建立高速公路及事故系統:撰寫副程式 road(void ),繪出高速公路三 車道的圖形,詳見5.1.2。

2. 設定車輛初始位置:藉由 int vehicle_location()函數,分別在不同情境,

以顏色區隔自動車和手動車的差別,並且讓車輛由不同位置出發,詳 見5.1.2。

3. 車輛相關資料輸入:已經有車輛的位置,輸入手動車輛的相關數據,

車速,加速度,和計算一秒鐘會行走的位移,由副程式Vehicle2()表示。

4. 模擬時間:藉由迴圈的設計,跑ㄧ次程式為間隔一秒鐘,一直到設定 的秒數n 秒才會終止迴圈。

5. 計算自動車輛的末速:計算末速之後,可以決定要加速度,或是減速 度,並求出如果執行拋物線加速度或是拋物線減速度的時間,也就是 模式加速度的係數 β。求出 β 後就可以間接求出 α。(為了滿足衝度要 求要小於等於2,α*β 必須等於 2),計算時間的副程式為 float beta( )。

6. 模式選擇:由於已經有前方車輛的資訊,判斷距離、相對車速,選擇 四種狀況之一種應該使用的模式,確定模式後,計算此模式的Dmin

是Dmax

7. 再判斷自動車和前車距離是否小於或是大於 Dmin或是Dmax:如果在範 圍內,則選擇等速度前進,如果大於或是小於,則使用拋物線加速度 加速或者是減速。

8. 資料蒐集:每一秒鐘執行的兩車速度、兩車距離、位移、Dmin 或是 Dmax ,可以回傳到記事本上,加以分析

9. 執行下一秒:跑下一圈迴圈。

圖5.3 程式流程圖 模擬開始

車輛相關資料輸入 Vehicle2()

建立高速公路及事故系統 void road(void )

建立車輛初始位置 int vehicle_location()

計算加減速度執行的時間 float beta()

v

vD Dhuman

2 1

23

<

< 模式判斷 for(i=0;i<n;i++)

n 為模擬時間

決定適用的Dmin()以及 Dmax()

d(兩車距離)<Dmin

d(兩車距離)>Dmax

是 否

決定速度v 以及位移 x 決定速度v 以及位移 x

當i=40 模擬結束

5.1.2 繪圖程式

模擬所需要用到的背景在高速公路,使用C 語言中的<graphics.h>函式 庫繪出三車道的高速公路,其中內側車道為自動控制車輛車道,並且此車 道上有事故發生,以條紋斜線表示事故,一個像素長度假設為一公尺,螢 幕可以放置最大圖形為 640*480,故按比例,整條公路路徑為 640 公尺,

事故位置位於左邊數來五百八十公尺至六百公尺處,如(圖 5.1):

圖5.1 車道

除此之外,自動車輛我們以黃色作為表示,人為操縱車輛以綠色作為 表示,初始以三輛車作為模擬對象,試驗模式在三輛車時的正確性,故三 輛車在混合車道上,設定在第二車道,車與車的距離暫時不設定,車長占 圖形五個點,為五公尺,寬占兩個點,如圖5.2 示:

圖5.2 車輛 5.1.3 距離判斷

要判斷 i1i2之間的距離(D12)是否少於 Dmin或是大於 Dmax,要判斷 Dmin或是 Dmax需要計算拋物線加速度位移S,S 要有加速的總時間(β)來計 算,所以要先求出β,求 β 需要知道自動車輛(i1)的末速,求出末速後, 利 用公式v(t) = α3 t3 αβ2 t2 γt+v0,知道v(t)v0解聯立方程式求出t,也就是 β;

如果求出的末速度和初速度相同時,這時求出的 β 會等於 0,此時求不出 位移 S,S 的使用時機主要是針對前車速度較慢,為了使用拋物線減速而 設定,減速度最大值是 2m/s2(一般緊急煞車減速度是 7m/s2),固計算出 S 其實是相當大的(加速度大小和位移多寡成反比)。所以如果前車速度較 快,Dmin或是Dmax則不放入S 變數。也就是(圖 4.1)中的第三和第四象限。

黃色 藍色 藍色

將四種象限的自動車輛判斷距離使用四個函數在程式中表示:

n 假設為 0.002,D23是(20+average-decrease),i2車輛車尾所在位置為圖形 (105+decrease)處,i3車頭所在位置為圖形(125+average)處,其中”decrease”

變數初始為零,隨時間而增加,代表i2每一走秒之後的位移,”average” 變

Dmin4=0.05*v11+pow(v1,2)-0.002*(20+average-decrease); (5.7) (5.6)是原先設定的公式,在程式中(5.7)的函數則不加入 S,因為前車 的速度較快。m 和 n 依然使用 0.05 和 0.002。此為(圖 4.1)的第四象限。

5.1.4 程式

程式撰寫如附表一