simulate_idm: Simulate Intelligent Driver Model

Description Usage Arguments Value Examples

View source: R/simulate_idm.R

Description

This function takes in the lead vehicle trajectory and calculates speed, spacing and acceleration of the following vehicle using the Intelligent Driver Model.

Usage

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
simulate_idm(
  resolution,
  N,
  dfn1,
  xn1,
  vn1,
  xn_first,
  vn_first,
  ln,
  a,
  v_0,
  small_delta,
  s_0,
  Tg,
  b
)

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.

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.

a

Acceleration rate starting from zero speed m/s2. Double.

v_0

Desired speed m/s. Double.

small_delta

Acceleration exponent. Double.

s_0

standstill bumper-to-bumper spacing m. Double.

Tg

Bumper-to-bumper time gap. Double.

b

Comfortable maximum deceleration rate m/s2. Double and Positive.

Value

A dataframe with lead and following vehicle(s) trajectories

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
# 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 IDM function:
simulate_idm(

resolution=0.1,
N=5,

dfn1=ldf,
xn1="xn1_complete",
vn1="vn1_complete",

xn_first=list(85, 70, 55, 40, 25),
vn_first=list(12, 12, 12, 12, 12),
ln=list(5, 5, 5, 5, 5),

a=2,
v_0=14.4,
small_delta=1,
s_0=4,
Tg=1,
b=1.5
)

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