Skip to content

Commit

Permalink
remove Scene,SceneRecord,Trajdata
Browse files Browse the repository at this point in the history
  • Loading branch information
MaximeBouton committed Mar 20, 2020
1 parent 01f1296 commit 1e49ef0
Show file tree
Hide file tree
Showing 13 changed files with 91 additions and 178 deletions.
11 changes: 0 additions & 11 deletions src/AutomotiveDrivingModels.jl
Original file line number Diff line number Diff line change
Expand Up @@ -175,17 +175,6 @@ export
include("states/interface.jl")
include("states/vehicle_state.jl")

export Trajdata

include("states/trajdatas.jl")

export
Scene,
SceneRecord

include("states/scenes.jl")


## Collision Checkers

export
Expand Down
10 changes: 10 additions & 0 deletions src/agent-definitions/agent_definitions.jl
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,16 @@ function Base.read(io::IO, ::MIME"text/plain", ::Type{VehicleDef})
return VehicleDef(class, length, width)
end

"""
Base.convert(::Type{Entity{S, VehicleDef, I}}, veh::Entity{S, D, I}) where {S,D<:AbstractAgentDefinition,I}
Converts the definition of an entity
"""
function Base.convert(::Type{Entity{S, VehicleDef, I}}, veh::Entity{S, D, I}) where {S,D<:AbstractAgentDefinition,I}
vehdef = VehicleDef(class(veh.def), length(veh.def), width(veh.def))
return Entity{S, VehicleDef, I}(veh.state, vehdef, veh.id)
end

"""
BicycleModel
BicycleModel(def::VehicleDef; a::Float64 = 1.5, b::Float64 = 1.5)
Expand Down
22 changes: 10 additions & 12 deletions src/behaviors/tim_2d_driver.jl
Original file line number Diff line number Diff line change
Expand Up @@ -10,26 +10,20 @@ Driver that combines longitudinal driver and lateral driver into one model.
- `mlat::LateralDriverModel = ProportionalLaneTracker()` Lateral driving model
- `mlane::LaneChangeModel =TimLaneChanger` Lane change model
"""
mutable struct Tim2DDriver <: DriverModel{LatLonAccel}
mlon::LaneFollowingDriver
mlat::LateralDriverModel
mlane::LaneChangeModel
end
function Tim2DDriver(
timestep::Float64;
mlon::LaneFollowingDriver=IntelligentDriverModel(),
mlat::LateralDriverModel=ProportionalLaneTracker(),
mlane::LaneChangeModel=TimLaneChanger(timestep),
)
return Tim2DDriver(mlon, mlat, mlane)
@with_kw mutable struct Tim2DDriver <: DriverModel{LatLonAccel}
mlon::LaneFollowingDriver = IntelligentDriverModel()
mlat::LateralDriverModel = ProportionalLaneTracker()
mlane::LaneChangeModel = TimLaneChanger()
end

get_name(::Tim2DDriver) = "Tim2DDriver"

function set_desired_speed!(model::Tim2DDriver, v_des::Float64)
set_desired_speed!(model.mlon, v_des)
set_desired_speed!(model.mlane, v_des)
model
end

function track_longitudinal!(driver::LaneFollowingDriver, scene::Frame{Entity{VehicleState, D, I}}, roadway::Roadway, vehicle_index::Int64, fore::NeighborLongitudinalResult) where {D, I}
v_ego = vel(scene[vehicle_index].state)
if fore.ind != nothing
Expand All @@ -39,6 +33,7 @@ function track_longitudinal!(driver::LaneFollowingDriver, scene::Frame{Entity{Ve
end
return track_longitudinal!(driver, v_ego, v_oth, headway)
end

function observe!(driver::Tim2DDriver, scene::Frame{Entity{S, D, I}}, roadway::Roadway, egoid::I) where {S, D, I}

observe!(driver.mlane, scene, roadway, egoid)
Expand Down Expand Up @@ -68,6 +63,9 @@ function observe!(driver::Tim2DDriver, scene::Frame{Entity{S, D, I}}, roadway::R

driver
end

Base.rand(rng::AbstractRNG, driver::Tim2DDriver) = LatLonAccel(rand(rng, driver.mlat), rand(rng, driver.mlon).a)

Distributions.pdf(driver::Tim2DDriver, a::LatLonAccel) = pdf(driver.mlat, a.a_lat) * pdf(driver.mlon, a.a_lon)

Distributions.logpdf(driver::Tim2DDriver, a::LatLonAccel) = logpdf(driver.mlat, a.a_lat) * logpdf(driver.mlon, a.a_lon)
44 changes: 12 additions & 32 deletions src/behaviors/tim_lane_changer.jl
Original file line number Diff line number Diff line change
Expand Up @@ -8,54 +8,33 @@ Has not been published anywhere, so first use in a paper would have to describe
See MOBIL if you want a lane changer you can cite.
# Constructors
TimLaneChanger(timestep::Float64;v_des::Float64=29.0,rec::SceneRecord=SceneRecord(2,timestep),threshold_fore::Float64 = 50.0,threshold_lane_change_gap_fore::Float64 = 10.0, threshold_lane_change_gap_rear::Float64 = 10.0,dir::Int=DIR_MIDDLE)
TimLaneChanger(timestep::Float64;v_des::Float64=29.0,rec::QueueRecord=QueueRecord(2,timestep),threshold_fore::Float64 = 50.0,threshold_lane_change_gap_fore::Float64 = 10.0, threshold_lane_change_gap_rear::Float64 = 10.0,dir::Int=DIR_MIDDLE)
# Fields
- `dir::Int = DIR_MIDDLE` the desired lane to go to eg: left,middle (i.e. stay in same lane) or right
- `rec::SceneRecord` TODO
- `rec::QueueRecord` TODO
- `v_des::Float64 = 29.0` desired velocity
- `threshold_fore::Float64 = 50.0` Distance from lead vehicle
- `threshold_lane_change_gap_fore::Float64 = 10.0` Space in front
- `threshold_lane_change_gap_rear::Float64 = 10.0` Space rear
"""
mutable struct TimLaneChanger <: LaneChangeModel{LaneChangeChoice}
dir::Int
rec::SceneRecord

v_des::Float64
threshold_fore::Float64
threshold_lane_change_gap_fore::Float64
threshold_lane_change_gap_rear::Float64

function TimLaneChanger(
timestep::Float64;
v_des::Float64=29.0,
rec::SceneRecord=SceneRecord(2,timestep),
threshold_fore::Float64 = 50.0,
threshold_lane_change_gap_fore::Float64 = 10.0,
threshold_lane_change_gap_rear::Float64 = 10.0,
dir::Int=DIR_MIDDLE,
)

retval = new()
retval.dir = dir
retval.rec = rec
retval.v_des = v_des
retval.threshold_fore = threshold_fore
retval.threshold_lane_change_gap_fore = threshold_lane_change_gap_fore
retval.threshold_lane_change_gap_rear = threshold_lane_change_gap_rear
retval
end
@with_kw mutable struct TimLaneChanger <: LaneChangeModel{LaneChangeChoice}
dir::Int = DIR_MIDDLE
v_des::Float64 = 29.0
threshold_fore::Float64 = 50.0
threshold_lane_change_gap_fore::Float64 = 10.0
threshold_lane_change_gap_rear::Float64 = 10.0
end

get_name(::TimLaneChanger) = "TimLaneChanger"

function set_desired_speed!(model::TimLaneChanger, v_des::Float64)
model.v_des = v_des
model
end

function observe!(model::TimLaneChanger, scene::Frame{Entity{S, D, I}}, roadway::Roadway, egoid::I) where {S, D, I}

rec = model.rec
update!(rec, scene)
vehicle_index = findfirst(egoid, scene)

veh_ego = scene[vehicle_index]
Expand Down Expand Up @@ -117,4 +96,5 @@ function observe!(model::TimLaneChanger, scene::Frame{Entity{S, D, I}}, roadway:

model
end

Base.rand(rng::AbstractRNG, model::TimLaneChanger) = LaneChangeChoice(model.dir)
4 changes: 2 additions & 2 deletions src/feature-extraction/features.jl
Original file line number Diff line number Diff line change
Expand Up @@ -59,12 +59,12 @@ The row correspond to the feature value for each scene (time history).
```julia
roadway = gen_straight_roadway(4, 100.0)
scene_0 = Scene([
scene_0 = Frame([
Entity(VehicleState(VecSE2( 0.0,0.0,0.0), roadway, 10.0), VehicleDef(AgentClass.CAR, 5.0, 2.0), 1),
Entity(VehicleState(VecSE2(10.0,0.0,0.0), roadway, 10.0), VehicleDef(AgentClass.CAR, 5.0, 2.0), 2),
])
scene_1 = Scene([
scene_1 = Frame([
Entity(VehicleState(VecSE2( 10.0,0.0,0.0), roadway, 10.0), VehicleDef(AgentClass.CAR, 5.0, 2.0), 1),
Entity(VehicleState(VecSE2(20.0,0.0,0.0), roadway, 10.0), VehicleDef(AgentClass.CAR, 5.0, 2.0), 2),
])
Expand Down
35 changes: 0 additions & 35 deletions src/states/scenes.jl

This file was deleted.

13 changes: 0 additions & 13 deletions src/states/trajdatas.jl

This file was deleted.

49 changes: 20 additions & 29 deletions test/test_behaviors.jl
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ struct FakeDriverModel <: DriverModel{FakeDriveAction} end

model = FakeDriverModel()
@test_throws MethodError reset_hidden_state!(model)
@test_throws MethodError observe!(model, Scene(), roadway, 1)
@test_throws MethodError observe!(model, Frame(), roadway, 1)
@test_throws MethodError prime_with_history!(model, trajdata, roadway, 1, 2, 1)

@test action_type(model) <: FakeDriveAction
Expand All @@ -31,13 +31,11 @@ end
veh_state = VehicleState(Frenet(roadway[LaneTag(1,1)], 70.0), roadway, 5.)
veh2 = Entity(veh_state, VehicleDef(), 2)

scene = Scene()
push!(scene, veh1)
push!(scene, veh2)
scene = Frame([veh1, veh2])

n_steps = 40
dt = 0.1
rec = SceneRecord(n_steps, dt)
rec = QueueRecord(typeof(veh1), n_steps, dt)
@test_deprecated simulate!(rec, scene, roadway, models, n_steps)
simulate(scene, roadway, models, n_steps, dt)

Expand All @@ -51,7 +49,7 @@ end
@test logpdf(models[1], LaneFollowingAccel(0.0)) < 0.0
n_steps = 40
dt = 0.1
rec = SceneRecord(n_steps, dt)
rec = QueueRecord(typeof(veh1), n_steps, dt)
@test_deprecated simulate!(rec, scene, roadway, models, n_steps)
simulate(scene, roadway, models, n_steps, dt)

Expand All @@ -65,11 +63,9 @@ end
veh_state = VehicleState(Frenet(roadway[LaneTag(1,1)], 3.0), roadway, 5.)
veh2 = Entity(veh_state, VehicleDef(), 2)

scene = Scene()
push!(scene, veh1)
push!(scene, veh2)
scene = Frame([veh1, veh2])

rec = SceneRecord(n_steps, dt)
rec = QueueRecord(eltype(scene), n_steps, dt)
@test_deprecated simulate!(rec, scene, roadway, models, 1)
simulate(scene, roadway, models, 1, dt)
end
Expand All @@ -86,7 +82,7 @@ struct FakeLaneChanger <: LaneChangeModel{LaneChangeChoice} end

model = FakeLaneChanger()
@test_throws MethodError reset_hidden_state!(model)
@test_throws MethodError observe!(model, Scene(), roadway, 1)
@test_throws MethodError observe!(model, Frame(), roadway, 1)

@test_throws MethodError set_desired_speed!(model, 0.0)
@test_throws ErrorException rand(model)
Expand All @@ -108,12 +104,12 @@ end
dt = 0.5
n_steps = 10
models = Dict{Int, DriverModel}()
models[1] = Tim2DDriver(dt, mlane=MOBIL(dt))
models[1] = Tim2DDriver(mlane=MOBIL(dt))
set_desired_speed!(models[1], 10.0)
models[2] = Tim2DDriver(dt, mlane=MOBIL(dt))
models[2] = Tim2DDriver(mlane=MOBIL(dt))
set_desired_speed!(models[2], 2.0)

scene = Scene([veh1, veh2])
scene = Frame([veh1, veh2])
scenes = simulate(scene, roadway, models, n_steps, dt)

@test posf(last(scenes)[1]).roadind.tag == LaneTag(1, 3)
Expand All @@ -123,7 +119,7 @@ end

@testset "Tim2DDriver" begin
timestep = 0.1
drivermodel = Tim2DDriver(timestep)
drivermodel = Tim2DDriver()

set_desired_speed!(drivermodel,20.0)
@test drivermodel.mlon.v_des == 20.0
Expand All @@ -138,14 +134,14 @@ end
dt = 0.5
n_steps = 10
models = Dict{Int, DriverModel}()
models[1] = Tim2DDriver(dt)
models[1] = Tim2DDriver()
set_desired_speed!(models[1], 10.0)
models[2] = Tim2DDriver(dt)
models[2] = Tim2DDriver()
set_desired_speed!(models[2], 2.0)

scene = Scene([veh1, veh2])
scene = Frame([veh1, veh2])

rec = SceneRecord(n_steps, dt)
rec = QueueRecord(typeof(veh1), n_steps, dt)
@test_deprecated simulate!(rec, scene, roadway, models, n_steps)
simulate(scene, roadway, models, n_steps, dt)

Expand Down Expand Up @@ -178,14 +174,11 @@ end
veh_state = VehicleState(Frenet(roadway[LaneTag(1,1)], 130.0), roadway, 5.)
veh3 = Entity(veh_state, VehicleDef(), 3)

scene = Scene()
push!(scene, veh1)
push!(scene, veh2)
push!(scene, veh3)
scene = Frame([veh1, veh2, veh3])

n_steps = 40
dt = 0.1
rec = SceneRecord(n_steps, dt)
rec = QueueRecord(typeof(veh1), n_steps, dt)
@test_deprecated simulate!(rec, scene, roadway, models, n_steps)
simulate(scene, roadway, models, n_steps, dt)

Expand All @@ -206,7 +199,7 @@ end

n_steps = 40
dt = 0.1
rec = SceneRecord(n_steps, dt)
rec = QueueRecord(typeof(veh1), n_steps, dt)
@test_deprecated simulate!(rec, scene, roadway, models, n_steps)
simulate(scene, roadway, models, n_steps, dt)

Expand Down Expand Up @@ -271,9 +264,7 @@ end
car_initial_state = VehicleState(VecSE2(0.0, 0., 0.), roadway.segments[1].lanes[1],roadway, 8.0)
car = Entity(car_initial_state, VehicleDef(), 2)

scene = Scene()
push!(scene, ped)
push!(scene, car)
scene = Frame([ped, car])

# Define a model for each entity present in the scene
models = Dict{Int, DriverModel}()
Expand All @@ -294,7 +285,7 @@ end
)

nticks = 300
rec = SceneRecord(nticks+1, timestep)
rec = QueueRecord(typeof(car), nticks+1, timestep)
# Execute the simulation
@test_deprecated simulate!(rec, scene, roadway, models, nticks)
simulate(scene, roadway, models, nticks, timestep)
Expand Down
Loading

0 comments on commit 1e49ef0

Please sign in to comment.