simulate_wiedemann74_driver: Simulate Wiedemann74 Model with single driver data

Description Usage Arguments Value Examples

View source: R/simulate_wiedemann74_driver.R

Description

This function takes in the lead vehicle trajectory and calculates speed, spacing and acceleration of the following vehicle using the Wiedemann74 Model.It also estimates the car-following state in each time frame.

Usage

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
simulate_wiedemann74_driver(
  resolution,
  N,
  dfn1,
  xn1,
  vn1,
  bn1,
  xn_first,
  vn_first,
  ln,
  D_MAX,
  V_MAX,
  V_DESIRED,
  FAKTORVmult,
  BMAXmult,
  BNULLmult,
  BMIN,
  CX,
  AXadd,
  BXadd,
  EXadd,
  OPDVadd
)

Arguments

resolution

Duration of a time frame. Typical values are 0.1, 0.5, 1.0 s. Double. Must match with the resolution of the observed lead vehicle data dfn1 defined below

N

Number of Following Vehicles in the same lane. Integer.

dfn1

Unquoted name of the dataframe that contains lead vehicle data.

xn1

Name of the column in dfn1 that contains lead vehicle position. Character.

vn1

Name of the column in dfn1 that contains lead vehicle speed. Character.

bn1

Name of the column in dfn1 that contains lead vehicle acceleration. Character.

xn_first

First value of vehicle position of each of the following vehicles. A list of doubles with size equal to N.

vn_first

First value of vehicle speed of each of the following vehicles. A list of doubles with size equal to N.

ln

Length of each of the lead vehicles. A list of doubles with size equal to N.

D_MAX

Upper limit of reaction spacing. Double. Typical value is 150 m.

V_MAX

Maximum speed of the following vehicle model. Double. Typical values are 40 m/s, 60 m/s.

V_DESIRED

Desired speed of the following driver. Double.

FAKTORVmult

Controls acceleration in Free-driving state. Double. Higher values will result in large acceleration.

BMAXmult

Controls acceleration in Free-driving state. Double. It can be calculated as the maximum acceleration of the following vehicle model divided by V_MAX.

BNULLmult

Controls oscillation in speed in Following state. Double. Typical value is 0.25 m/s2.

BMIN

Controls maximum deceleration in Approaching and Emergency-braking states. Double.

CX

Calibration parameter. Double. It is a function of width of the lead vehicle and the angular velocity threshold at which driver slows down during Approaching state. Typical values are 20 - 75.

AXadd

Calibration parameter. Double. It is the bumper-to-bumper distance when both vehicles are stopped. Typical values are 2 - 4 m.

BXadd

Calibration parameter. Double. It controls the speed dependent spacing to the lead vehicle. Typical value is 2.

EXadd

Calibration parameter. Double. It controls the maximum spacing to the lead vehicle, as well as the speed difference in perception of closing in. Typical value is 2.

OPDVadd

Calibration parameter. Double. It controls the speed difference in perception of the opening process. Typical value is 1.5.

Value

A dataframe with lead and following vehicle(s) trajectories. It also returns all the pereception thresholds.

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# Time
last_time <- 3000 ## s
time_frame <- 0.1 ## s
Time <- seq(from = 0, to = last_time, by = time_frame)
time_length <- length(Time)



## Lead vehicle
vn1_first <- 13.9 ## first speed m/s
xn1_first <- 100 ## position of lead vehicle front center m
bn1_complete <- c(rep(0, 29500),
                 rep(-5, time_length - 29500))



#############################################
### Complete speed trajectory of Lead vehicle
#############################################

vn1_complete <- rep(NA_real_, time_length) ### an empty vector
xn1_complete <- rep(NA_real_, time_length) ### an empty vector

vn1_complete[1] <- vn1_first
xn1_complete[1] <- xn1_first

for (t in 2:time_length) {

 ### Lead vehicle calculations
 vn1_complete[t] <- vn1_complete[t-1] + (bn1_complete[t-1] * time_frame)

 vn1_complete[t] <- ifelse(vn1_complete[t] < 0, 0, vn1_complete[t])


xn1_complete[t] <- ifelse(
 vn1_complete[t] > 0,
 xn1_complete[t-1] + (vn1_complete[t-1] * time_frame) +
   (0.5 * bn1_complete[t-1] * (time_frame)^2),
 xn1_complete[t-1]
)

}



ldf <- data.frame(Time, bn1_complete, xn1_complete, vn1_complete)

# Run the Wiedemann function:
simulate_wiedemann74_driver(
 resolution=0.1,
 N=5,
 dfn1=ldf,
 xn1="xn1_complete",
 vn1="vn1_complete",
 bn1="bn1_complete",
 xn_first=list(85, 70, 55, 40, 25),
 vn_first=list(12, 12, 12, 12, 12),
 ln=list(5, 5, 5, 5, 5),
 D_MAX=150,
 V_MAX=44,
 V_DESIRED=14.4,
 FAKTORVmult=0.001,
 BMAXmult=0.08,
 BNULLmult=0.25,
 BMIN=-5,
 CX=50,
 AXadd=2,
 BXadd=2,
 EXadd=2,
 OPDVadd=1.5
)

durraniu/CarFollowingModels documentation built on Dec. 20, 2021, 2:15 a.m.