|
|
@ -3,6 +3,8 @@ import os |
|
|
|
import numpy as np |
|
|
|
import numpy as np |
|
|
|
|
|
|
|
|
|
|
|
from casadi import SX, vertcat, sin, cos |
|
|
|
from casadi import SX, vertcat, sin, cos |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from common.realtime import sec_since_boot |
|
|
|
from selfdrive.controls.lib.drive_helpers import LAT_MPC_N as N |
|
|
|
from selfdrive.controls.lib.drive_helpers import LAT_MPC_N as N |
|
|
|
from selfdrive.controls.lib.drive_helpers import T_IDXS |
|
|
|
from selfdrive.controls.lib.drive_helpers import T_IDXS |
|
|
|
|
|
|
|
|
|
|
@ -132,6 +134,7 @@ class LateralMpc(): |
|
|
|
self.solver.constraints_set(0, "ubx", x0) |
|
|
|
self.solver.constraints_set(0, "ubx", x0) |
|
|
|
self.solver.solve() |
|
|
|
self.solver.solve() |
|
|
|
self.solution_status = 0 |
|
|
|
self.solution_status = 0 |
|
|
|
|
|
|
|
self.solve_time = 0.0 |
|
|
|
self.cost = 0 |
|
|
|
self.cost = 0 |
|
|
|
|
|
|
|
|
|
|
|
def set_weights(self, path_weight, heading_weight, steer_rate_weight): |
|
|
|
def set_weights(self, path_weight, heading_weight, steer_rate_weight): |
|
|
@ -151,7 +154,10 @@ class LateralMpc(): |
|
|
|
self.solver.cost_set(i, "yref", self.yref[i]) |
|
|
|
self.solver.cost_set(i, "yref", self.yref[i]) |
|
|
|
self.solver.cost_set(N, "yref", self.yref[N][:2]) |
|
|
|
self.solver.cost_set(N, "yref", self.yref[N][:2]) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
t = sec_since_boot() |
|
|
|
self.solution_status = self.solver.solve() |
|
|
|
self.solution_status = self.solver.solve() |
|
|
|
|
|
|
|
self.solve_time = sec_since_boot() - t |
|
|
|
|
|
|
|
|
|
|
|
for i in range(N+1): |
|
|
|
for i in range(N+1): |
|
|
|
self.x_sol[i] = self.solver.get(i, 'x') |
|
|
|
self.x_sol[i] = self.solver.get(i, 'x') |
|
|
|
for i in range(N): |
|
|
|
for i in range(N): |
|
|
|