-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrun.jl
50 lines (39 loc) · 1.52 KB
/
run.jl
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
using DifferentialEquations
using Plots
include("src/ref_velocity.jl")
include("src/clf-cbf-qp.jl")
include("src/p-control.jl")
# Set common parameter
damp = 0.01
# Set initial values
p0 = -5.0
v0 = 6.0
vr0, ar0 = ref_velocity(p0)
x0 = [p0, v0, vr0 - v0]
tspan = (0.0, 10.0)
# Simulate CLF-CBF-QP
λ = 1000 # Factor for ES-CLF
γ = 1 # Factor for ECBF
w = 10^6 # Weight for slack variable
param1 = [damp, λ, γ, w]
prob1 = ODEProblem(vehicle_clf_cbf_qp!, x0, tspan, param1)
sol1 = solve(prob1, saveat=0.1)
# Simulate FF + P control
kp = 10
param2 = [damp, kp]
prob2 = ODEProblem(vehicle_pid!, x0, tspan, param2)
sol2 = solve(prob2, saveat=0.1)
# Plot results
p1 = sol1[1, :]
p2 = sol2[1, :]
v1 = sol1[2, :]
v2 = sol2[2, :]
vref1 = set_ref_velocity(p1)
vref2 = set_ref_velocity(p2)
pt1 = plot(sol1.t, p1, linewidth=2.0, xlabel="time [s]", ylabel="position [m]", label="position", title="CLF-CBF-QP")
pt2 = plot(sol2.t, p2, linewidth=2.0, xlabel="time [s]", ylabel="position [m]", label="position", title="P + FF")
vt1 = plot(sol1.t, [v1, vref1], linewidth=2.0, xlabel="time [s]", ylabel="velocity [m/s]", label=["actual" "reference"])
vt2 = plot(sol2.t, [v2, vref2], linewidth=2.0, xlabel="time [s]", ylabel="velocity [m/s]", label=["actual" "reference"])
vp1 = plot(p1, [v1, vref1], linewidth=2.0, xlabel="position [m]", ylabel="velocity [m/s]", label=["actual" "reference"])
vp2 = plot(p2, [v2, vref2], linewidth=2.0, xlabel="position [m]", ylabel="velocity [m/s]", label=["actual" "reference"])
plot(pt1, pt2, vt1, vt2, vp1, vp2, layout=(3,2))