itstools.vplatoon package

Submodules

itstools.vplatoon.carfollow module

Car following model

class itstools.vplatoon.carfollow.CarFollowLaw(x0: float, v0: float, l0: float, veh_type: str = 'HDV', veh_lead=None, behavior: str = None, **kwargs)[source]

Bases: itstools.vplatoon.vehicles.Vehicle

Generic Car Following Behavior

property T

Reaction time

a
a_t
control
property dv

Determine current delta of speed

idx
property k_x

Jam density

l_t
register_control_speed(control)[source]

This registers an external control signal into the vehicle behavior

property s

Determine current spacing (X_n-1 - X_n)

property s0

Minimum spacing

set_traffic(**kwargs)[source]
step_evolution(control: float = 0) → None[source]

Use this method to a single step in the simulation

type
property u

Free flow speed

v_t
property vd

Vehicle desired speed

property vl

Leader speed

property w

Shockwave speed

x_t
property xl

Leader position

class itstools.vplatoon.carfollow.IDM(x0: float, v0: float, veh_lead=None, **kwargs)[source]

Bases: itstools.vplatoon.carfollow.CarFollowLaw

Intelligent Driver’s Model Car Following

property a_max

Comfortable decceleration

acel(vd) → float[source]

Vehicle acceleration

property b

Comfortable decceleration

break_strategy() → float[source]

BS: v * dv / (2 (a*b)^(1/2))

car_following(vd: float) → None[source]

Acceleration car following

Note:
if leader

min(cong_acc, free_acc) -> Tampere

else

manual acceleration

property delta

Acceleration exponent

property s0

Minimum distance

s_d() → float[source]

s0 + max(vT+BS)

set_parameters(a_max=3, b=1.67, delta=4) → None[source]

Set default parameters

t1(vd: float = 25) → float[source]

(v/vd)^d

t2() → float[source]

(sd(v,dv)/s)^2

class itstools.vplatoon.carfollow.OpenLoop(x0: float, v0: float, l0: float, veh_type: str, veh_lead=None, **kwargs)[source]

Bases: itstools.vplatoon.carfollow.CarFollowLaw

Open loop second order model

a
a_t
car_following() → None[source]

Acceleration car following

Note:
if leader

min(cong_acc, free_acc) -> Tampere

else

manual acceleration

control
idx
l_t
set_parameters(t_e=0.2) → None[source]

Set default parameters

property te

Speed difference coefficient

type
v_t
x_t
class itstools.vplatoon.carfollow.PlatoonFollowLaw(x0: float, v0: float, l0: float, veh_type: str = 'HDV', veh_lead=None, behavior: str = None, **kwargs)[source]

Bases: itstools.vplatoon.vehicles.RegularVehicle

Generic Platoon Following Behavior

property T

Reaction time

a
control
property dv

Determine current delta of speed

property e_s

Space error

property e_v

Speed error

g1
g2
g3
g4
idx
property k_x

Jam density

l_t
pos
register_control_space(control)[source]

This registers an external control signal into the vehicle behavior

register_control_speed(control)[source]

This registers an external control signal into the vehicle behavior

register_reference_space(reference)[source]

This registers an external reference signal into the vehicle behavior for spacing behavior (CACC)

register_reference_speed(reference)[source]

This registers an external reference signal into the vehicle behavior for speed behavior (ACC)

property s

Determine current spacing (X_n-1 - X_n)

property s0

Minimum spacing

s_d() → float[source]

Determine desired spacing (d + gamma * v )

series
set_traffic(**kwargs)[source]
spd
step_evolution(control: float = 0) → None[source]

Use this method to a single step in the simulation

property u

Free flow speed

v
property vd

Vehicle desired speed

property vl

Leader speed

property w

Shockwave speed

x
property xl

Leader position

class itstools.vplatoon.carfollow.Tampere(x0: float, v0: float, l0: float, veh_type: str, veh_lead=None, **kwargs)[source]

Bases: itstools.vplatoon.carfollow.CarFollowLaw

Tampere Car Following Model

acel() → float[source]

Acceleration term

property c1

Speed difference coefficient

property c2

Spacing coefficient

property c3

Tampere coefficient

car_following() → None[source]

Acceleration car following

Note:
if leader

min(cong_acc, free_acc) -> Tampere

else

manual acceleration

cong_acc() → float[source]

Breaking term c_1 (D V) + c_2 (s - s_d)

free_acc() → float[source]

Acceleration term (Tampere) c_3 (v_d - v)

property s_d

Determine desired spacing (d + gamma * v )

set_parameters(c1=0.5, c2=0.5, c3=0.5) → None[source]

Set default parameters

class itstools.vplatoon.carfollow.VehiclePlatoon(x0: float, v0: float, l0: float, veh_type: str, veh_lead=None, **kwargs)[source]

Bases: itstools.vplatoon.carfollow.PlatoonFollowLaw

Platoon Car Following Model (Autonomous)

property A

Predefined values for frontal area

property C_d

Drag coefficient

property Cdmax

Predefined values for frontal area

property M

Predefined values for frontal area

a
car_following() → None[source]

Acceleration car following

Note:
if leader

min(cong_acc, free_acc) -> Tampere

else

manual acceleration

control
g1
g2
g3
g4
idx
l_t
pos
series
set_parameters(**kwargs) → None[source]

Set default parameters

spd
u_control() → float[source]

Control call for ACC or CACC

v
x

itstools.vplatoon.pid module

class itstools.vplatoon.pid.PID(k_p, k_i, k_d)[source]

Bases: object

apply_control(error)[source]
time_update()[source]

time vector

class itstools.vplatoon.pid.PIDantiwindup(k_p, k_i, k_d, u_max=10)[source]

Bases: object

apply_control(error)[source]
time_update()[source]

time vector

class itstools.vplatoon.pid.PIDlim(k_p, k_i, k_d, u_max=10)[source]

Bases: object

apply_control(error)[source]
time_update()[source]

time vector

itstools.vplatoon.traffic module

Traffic information

class itstools.vplatoon.traffic.FundamentalDiagram(w=6.25, u=25, k_x=0.16)[source]

Bases: object

property C

Capacity

compute_flow(k)[source]
property k_c

Critical density

plot_diagram()[source]
property s_x

Critical spacing

itstools.vplatoon.vehicles module

Vehicle behavior

class itstools.vplatoon.vehicles.Derivator[source]

Bases: object

diff(val)[source]

Compute (x_k - x_{k-1})/T and updates the memory

time_update()[source]

time vector

class itstools.vplatoon.vehicles.Integrator(x0=0)[source]

Bases: object

integ(val)[source]

Compute (x_k - x_{k-1})/T and updates the memory

time_update()[source]

time vector

class itstools.vplatoon.vehicles.RegularVehicle(init_pos: float, init_spd: float, init_lane: float, veh_type: str = 'HDV', veh_lead=None)[source]

Bases: object

a
property a_t

Current accel

control
g1
g2
g3
g4
idx
l_t
lid = 0
pos
classmethod reset() → None[source]

This is a reset vehicle id.

series
set_leader(veh_lead) → None[source]

Set the leader of a vehicle

spd
property t

Time vector

v
property v_t

Current accel

property veh_lead

Retrieve the pointer towards this vehicle’s leader

x
property x_t

Current accel

class itstools.vplatoon.vehicles.System(K=1)[source]

Bases: object

time_update()[source]

time vector

update(control)[source]

Update x_[k+1] as a function of x[k]

class itstools.vplatoon.vehicles.Vehicle(init_pos: float, init_spd: float, init_lane: float, veh_type: str = 'HDV', veh_lead=None)[source]

Bases: object

This data implements the Car Following Law.

To initialize a vehicle

Vehicle(x0,v0)

a
a_t
control
idx
l_t
lid = 0
classmethod reset() → None[source]

This is a reset vehicle id.

set_leader(veh_lead) → None[source]

Set the leader of a vehicle

shift_state() → None[source]

Shift state

type
property v

Dynamic equation speed

v_t
property veh_lead

Retrieve the pointer towards this vehicle’s leader

property x

Dynamic equation position

x_t

itstools.vplatoon.vplatoon module

Main module.

Module contents

Top-level package for vplatoon.