Simulation and control of an autonomous car on a multilane highway in a (PO)MDP framework (implemented using POMDPs.jl).
The most recent set of experiments can be found in the thesis directory.
Simulation and control of an autonomous car on a multilane highway in a (PO)MDP framework
License: Other
plz do
I think it has to do with the consistency checking code
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.
Need to develop some tests for this
thx
Getting
ERROR: LoadError: AssertionError: yp >= 1.0 && yp <= pp.nb_lanes
idk why
They just disappear what's happening omg.
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.
they're psychic crashing or something.
Got something like -20.45 m/s2 >> the physical limit of ~ -10m/s2
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
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?
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)))])
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!
this check should be in actions(mdp, s)
I always thought this was lanes per second, but it appears that it is meters per second some places in the code
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
plz do
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
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
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.