|
4 | 4 | from common.ffi_wrapper import suffix |
5 | 5 |
|
6 | 6 | mpc_dir = os.path.join(os.path.dirname(os.path.abspath(__file__))) |
7 | | -libmpc_fn = os.path.join(mpc_dir, "libmpc"+suffix()) |
8 | 7 |
|
9 | | -ffi = FFI() |
10 | | -ffi.cdef(""" |
11 | | -const int MPC_N = 32; |
| 8 | +def _get_libmpc(mpc_id): |
| 9 | + libmpc_fn = os.path.join(mpc_dir, "libmpc%d%s" % (mpc_id, suffix())) |
12 | 10 |
|
13 | | -typedef struct { |
14 | | -double x_ego, v_ego, a_ego; |
15 | | -} state_t; |
| 11 | + ffi = FFI() |
| 12 | + ffi.cdef(""" |
| 13 | + const int MPC_N = 32; |
16 | 14 |
|
| 15 | + typedef struct { |
| 16 | + double x_ego, v_ego, a_ego; |
| 17 | + } state_t; |
17 | 18 |
|
18 | | -typedef struct { |
19 | | -double x_ego[MPC_N+1]; |
20 | | -double v_ego[MPC_N+1]; |
21 | | -double a_ego[MPC_N+1]; |
22 | | -double t[MPC_N+1]; |
23 | | -double j_ego[MPC_N]; |
24 | | -double cost; |
25 | | -} log_t; |
26 | 19 |
|
| 20 | + typedef struct { |
| 21 | + double x_ego[MPC_N+1]; |
| 22 | + double v_ego[MPC_N+1]; |
| 23 | + double a_ego[MPC_N+1]; |
| 24 | + double t[MPC_N+1]; |
| 25 | + double j_ego[MPC_N]; |
| 26 | + double cost; |
| 27 | + } log_t; |
27 | 28 |
|
28 | | -void init(double xCost, double vCost, double aCost, double jerkCost, double constraintCost); |
29 | | -int run_mpc(state_t * x0, log_t * solution, |
30 | | - double target_x[MPC_N+1], double target_v[MPC_N+1], double target_a[MPC_N+1], |
31 | | - double min_a, double max_a); |
32 | | -""") |
33 | 29 |
|
34 | | -libmpc = ffi.dlopen(libmpc_fn) |
| 30 | + void init(double xCost, double vCost, double aCost, double jerkCost, double constraintCost); |
| 31 | + int run_mpc(state_t * x0, log_t * solution, |
| 32 | + double target_x[MPC_N+1], double target_v[MPC_N+1], double target_a[MPC_N+1], |
| 33 | + double min_a, double max_a); |
| 34 | + """) |
| 35 | + |
| 36 | + return (ffi, ffi.dlopen(libmpc_fn)) |
| 37 | + |
| 38 | +mpcs = [_get_libmpc(0), _get_libmpc(1)] |
| 39 | + |
| 40 | +def get_libmpc(mpc_id): |
| 41 | + return mpcs[mpc_id] |
0 commit comments