2017-09-30 03:07:27 -07:00
|
|
|
import os
|
|
|
|
|
import subprocess
|
|
|
|
|
|
|
|
|
|
from cffi import FFI
|
|
|
|
|
|
|
|
|
|
mpc_dir = os.path.dirname(os.path.abspath(__file__))
|
2018-09-25 00:13:41 -07:00
|
|
|
libmpc_fn = os.path.join(mpc_dir, "libmpc.so")
|
2018-03-17 00:01:50 -07:00
|
|
|
subprocess.check_call(["make", "-j4"], cwd=mpc_dir)
|
2017-09-30 03:07:27 -07:00
|
|
|
|
|
|
|
|
ffi = FFI()
|
|
|
|
|
ffi.cdef("""
|
|
|
|
|
typedef struct {
|
|
|
|
|
double x, y, psi, delta, t;
|
|
|
|
|
} state_t;
|
|
|
|
|
|
|
|
|
|
typedef struct {
|
2018-03-19 23:40:24 -07:00
|
|
|
double x[21];
|
|
|
|
|
double y[21];
|
|
|
|
|
double psi[21];
|
|
|
|
|
double delta[21];
|
2019-06-28 21:11:30 +00:00
|
|
|
double rate[20];
|
2018-03-19 23:40:24 -07:00
|
|
|
double cost;
|
2017-09-30 03:07:27 -07:00
|
|
|
} log_t;
|
|
|
|
|
|
2018-03-17 00:01:50 -07:00
|
|
|
void init(double pathCost, double laneCost, double headingCost, double steerRateCost);
|
2017-10-31 02:27:39 -07:00
|
|
|
int run_mpc(state_t * x0, log_t * solution,
|
2019-08-13 01:36:45 +00:00
|
|
|
double l_poly[4], double r_poly[4], double d_poly[4],
|
|
|
|
|
double l_prob, double r_prob, double curvature_factor, double v_ref, double lane_width);
|
2017-09-30 03:07:27 -07:00
|
|
|
""")
|
|
|
|
|
|
|
|
|
|
libmpc = ffi.dlopen(libmpc_fn)
|