Giter Site home page Giter Site logo

multilane.jl's Introduction

Multilane

Build Status

Simulation and control of an autonomous car on a multilane highway in a (PO)MDP framework (implemented using POMDPs.jl).

POMCPOW Planning

The most recent set of experiments can be found in the thesis directory.

multilane.jl's People

Contributors

cho3 avatar raunakbh92 avatar zsunberg avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

multilane.jl's Issues

get_adj_cars efficiency

So after doing the pruning on is_crash, the next fattest function is get_adj_cars(::Array{CarState,1}). The main reason I can think of for it being bad is that its a very naive approach. I'm fairly certain there's some smart dynamic programming style way to get the adjacent cars for all of the cars in one shot instead of the O(n^2) way that it's operating at now.

cars stop in between lanes

Cars stop in between lanes and cause the simulator to crash. I think the consistency checking logic or the is_dangerous logic is being dumb.

actions not allowing some lane changes

using Multilane
using POMDPs

mdp = Multilane.MLMDP{Multilane.MLState,Multilane.MLAction,Multilane.NoCrashIDMMOBILModel,Multilane.NoCrashRewardModel}(Multilane.NoCrashIDMMOBILModel(10,Multilane.PhysicalParam(0.75,2.0,4.0,31.0,4.0,4.0,35.0,27.0,31.0,35.0,27.0,20.0,4,100.0),Multilane.BehaviorModel[Multilane.IDMMOBILBehavior(Multilane.IDMParam(1.0,1.0,2.0,27.5,4.0,4.0),Multilane.MOBILParam(0.5,4.0,0.2),1.0,1),Multilane.IDMMOBILBehavior(Multilane.IDMParam(1.5,1.5,1.4,27.5,4.0,4.0),Multilane.MOBILParam(0.25,4.0,0.2),1.0,2),Multilane.IDMMOBILBehavior(Multilane.IDMParam(2.0,2.0,0.8,27.5,4.0,4.0),Multilane.MOBILParam(0.0,4.0,0.2),1.0,3),Multilane.IDMMOBILBehavior(Multilane.IDMParam(1.0,1.0,2.0,31.0,4.0,4.0),Multilane.MOBILParam(0.5,4.0,0.2),1.0,4),Multilane.IDMMOBILBehavior(Multilane.IDMParam(1.5,1.5,1.4,31.0,4.0,4.0),Multilane.MOBILParam(0.25,4.0,0.2),1.0,5),Multilane.IDMMOBILBehavior(Multilane.IDMParam(2.0,2.0,0.8,31.0,4.0,4.0),Multilane.MOBILParam(0.0,4.0,0.2),1.0,6),Multilane.IDMMOBILBehavior(Multilane.IDMParam(1.0,1.0,2.0,35.0,4.0,4.0),Multilane.MOBILParam(0.5,4.0,0.2),1.0,7),Multilane.IDMMOBILBehavior(Multilane.IDMParam(1.5,1.5,1.4,35.0,4.0,4.0),Multilane.MOBILParam(0.25,4.0,0.2),1.0,8),Multilane.IDMMOBILBehavior(Multilane.IDMParam(2.0,2.0,0.8,35.0,4.0,4.0),Multilane.MOBILParam(0.0,4.0,0.2),1.0,9)],StatsBase.WeightVec{Float64,Array{Float64,1}}([1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0],9.0),1.0,1.3333333333333333,0.5,20.0,0.5,[1.0,1.0,1.0,1.0],2.0),Multilane.NoCrashRewardModel(100.0,10.0,5.0,4),1.0)

s = MLState(false, CarState[CarState(50.0,3.0,31.22970781020354,0.0,Nullable{BehaviorModel}(),1),CarState(99.24797069990433,4.0,27.167643727404155,0.0,Multilane.IDMMOBILBehavior(Multilane.IDMParam(2.0,2.0,0.8,27.5,4.0,4.0),Multilane.MOBILParam(0.0,4.0,0.2),1.0,3),2)])

as = actions(mdp, s, actions(mdp))

Should allow the car to change into lane 4, but it does not

lane snap back commented out

Hey Chris, I noticed that you had the code that stops the car when it gets to the middle of a lane commented out. Was it not working or producing some sort of bad side effect?

idmmobil cars lane change into ego car

Example:

nb_lanes = 4
pp = PhysicalParam(nb_lanes,lane_length=100.) #2.=>col_length=8
_discount = 1.
nb_cars=10

rmodel = NoCrashRewardModel()

dmodel = NoCrashIDMMOBILModel(nb_cars, pp)

mdp = NoCrashMDP(dmodel, rmodel, _discount);

s = Multilane.MLState(false,[Multilane.CarState(50.0,4.0,28.125,0.0,Nullable{Multilane.BehaviorModel}()),Multilane.CarState(45.63831155736089,3.0,29.959029299309613,0.6666666666666666,Nullable(Multilane.IDMMOBILBehavior(Multilane.IDMParam(1.0,1.0,2.0,31.0,4.0,4.0),Multilane.MOBILParam(0.5,4.0,0.2),1.0,4))),Multilane.CarState(7.169470572976412,1.0,30.675116224204793,0.0,Nullable(Multilane.IDMMOBILBehavior(Multilane.IDMParam(1.5,1.5,1.4,35.0,4.0,4.0),Multilane.MOBILParam(0.25,4.0,0.2),1.0,8))),Multilane.CarState(98.01576224720353,4.0,27.245023469032592,0.0,Nullable(Multilane.IDMMOBILBehavior(Multilane.IDMParam(1.5,1.5,1.4,27.5,4.0,4.0),Multilane.MOBILParam(0.25,4.0,0.2),1.0,2))),Multilane.CarState(0.42803785502447056,3.0,27.924225639837424,0.6666666666666666,Nullable(Multilane.IDMMOBILBehavior(Multilane.IDMParam(1.5,1.5,1.4,31.0,4.0,4.0),Multilane.MOBILParam(0.25,4.0,0.2),1.0,5))),Multilane.CarState(100.0,2.0,28.125,0.0,Nullable(Multilane.IDMMOBILBehavior(Multilane.IDMParam(1.5,1.5,1.4,27.5,4.0,4.0),Multilane.MOBILParam(0.25,4.0,0.2),1.0,2)))])

Do you update this code for Julia 0.6?

Dear authors,
Thanks for your work and codes. It's helpful for me.
However, it cannot work on both Julia 0.5 and 0.6 now.
Have you updated it? If yes, could you share it on the github?
Thanks so much!

cars lane changing into one another

case:

nb_lanes = 4
pp = PhysicalParam(nb_lanes,lane_length=100.) #2.=>col_length=8
_discount = 1.
nb_cars=10

rmodel = NoCrashRewardModel()

dmodel = NoCrashIDMMOBILModel(nb_cars, pp)

mdp = NoCrashMDP(dmodel, rmodel, _discount);

rng = MersenneTwister(5)

s = Multilane.MLState(false,[Multilane.CarState(50.0,2.5,30.75,0.0,Nullable{Multilane.BehaviorModel}(),1),Multilane.CarState(99.56731292388635,3.0,34.36785842369873,0.0,Nullable(Multilane.IDMMOBILBehavior(Multilane.IDMParam(2.0,2.0,0.8,35.0,4.0,4.0),Multilane.MOBILParam(0.0,4.0,0.2),1.0,9)),4),Multilane.CarState(88.9857138446193,4.0,29.878676022074934,0.0,Nullable(Multilane.IDMMOBILBehavior(Multilane.IDMParam(1.5,1.5,1.4,31.0,4.0,4.0),Multilane.MOBILParam(0.25,4.0,0.2),1.0,5)),12),Multilane.CarState(83.55003341854245,1.0,27.45737686175689,0.0,Nullable(Multilane.IDMMOBILBehavior(Multilane.IDMParam(1.5,1.5,1.4,27.5,4.0,4.0),Multilane.MOBILParam(0.25,4.0,0.2),1.0,2)),13),Multilane.CarState(5.833404602969644,1.5,31.164522812071382,0.6666666666666666,Nullable(Multilane.IDMMOBILBehavior(Multilane.IDMParam(2.0,2.0,0.8,35.0,4.0,4.0),Multilane.MOBILParam(0.0,4.0,0.2),1.0,9)),14),Multilane.CarState(6.364105400258811,3.0,30.995876598243825,0.0,Nullable(Multilane.IDMMOBILBehavior(Multilane.IDMParam(2.0,2.0,0.8,31.0,4.0,4.0),Multilane.MOBILParam(0.0,4.0,0.2),1.0,6)),15),Multilane.CarState(95.2814275010719,2.0,27.0,0.0,Nullable(Multilane.IDMMOBILBehavior(Multilane.IDMParam(1.5,1.5,1.4,31.0,4.0,4.0),Multilane.MOBILParam(0.25,4.0,0.2),1.0,5)),17),Multilane.CarState(98.12572985780923,2.0,29.049513872117117,0.0,Nullable(Multilane.IDMMOBILBehavior(Multilane.IDMParam(1.0,1.0,2.0,27.5,4.0,4.0),Multilane.MOBILParam(0.5,4.0,0.2),1.0,1)),18),Multilane.CarState(0.0,4.0,31.09003055824878,0.0,Nullable(Multilane.IDMMOBILBehavior(Multilane.IDMParam(1.5,1.5,1.4,27.5,4.0,4.0),Multilane.MOBILParam(0.25,4.0,0.2),1.0,2)),19)])

car 5 and car 6 are moving into one another

Car runs into ego

The cars seem to be not giving the ego vehicle enough room. Sometimes they are running into the ego, or causing him to slam on the brakes

v0.7.3 for StatsPlots.jl; Draft installGuide

  • We need to use v0.7.3 for StatsPlots.jl
  • Probably also should confirm that the correct version of POMDPs is installed by build.jl

Here is a draft install guide

Pkg.clone("https://github.com/sisl/Multilane.jl")

# Assuming we fixed the above in build.jl, the next step
# should be enough
Pkg.build("Multilane")

# Test
using Multilane

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.