考慮到模擬的逼真性,原本希望使用車流模擬器模擬,但由於車流模 擬器無法針對單一車輛控制,而且在函數被限定以及程式碼有限的狀況 下,採用最原始的程式語言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 距離判斷
要判斷 i1和 i2之間的距離(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 程式
程式撰寫如附表一