Skip to content

Commit 63fd15b

Browse files
authored
Merge pull request commaai#170 from ShaneSmiskol/0510
Replaced 0.5.10 longitudinal MPC with 0.5.9 MPC to fix dynamic-follow
2 parents c9dc246 + c1bf45e commit 63fd15b

22 files changed

+4572
-3744
lines changed

selfdrive/controls/lib/longitudinal_mpc/generator.cpp

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,30 @@ int main( )
1818
DifferentialEquation f;
1919

2020
DifferentialState x_ego, v_ego, a_ego;
21-
OnlineData x_l, v_l;
21+
DifferentialState x_l, v_l, t;
22+
23+
OnlineData lambda, a_l_0;
2224

2325
Control j_ego;
2426

2527
auto desired = 4.0 + RW(v_ego, v_l);
2628
auto d_l = x_l - x_ego;
2729

30+
// Directly calculate a_l to prevent instabilites due to discretization
31+
auto a_l = a_l_0 * exp(-lambda * t * t / 2);
32+
2833
// Equations of motion
2934
f << dot(x_ego) == v_ego;
3035
f << dot(v_ego) == a_ego;
3136
f << dot(a_ego) == j_ego;
3237

38+
f << dot(x_l) == v_l;
39+
f << dot(v_l) == a_l;
40+
f << dot(t) == 1;
41+
3342
// Running cost
3443
Function h;
35-
h << exp(0.3 * NORM_RW_ERROR(v_ego, v_l, d_l));
44+
h << exp(0.3 * NORM_RW_ERROR(v_ego, v_l, d_l)) - exp(0.3 * NORM_RW_ERROR(v_ego, v_l, desired));
3645
h << (d_l - desired) / (0.05 * v_ego + 0.5);
3746
h << a_ego * (0.1 * v_ego + 1.0);
3847
h << j_ego * (0.1 * v_ego + 1.0);
@@ -42,7 +51,7 @@ int main( )
4251

4352
// Terminal cost
4453
Function hN;
45-
hN << exp(0.3 * NORM_RW_ERROR(v_ego, v_l, d_l));
54+
hN << exp(0.3 * NORM_RW_ERROR(v_ego, v_l, d_l)) - exp(0.3 * NORM_RW_ERROR(v_ego, v_l, desired));
4655
hN << (d_l - desired) / (0.05 * v_ego + 0.5);
4756
hN << a_ego * (0.1 * v_ego + 1.0);
4857

Binary file not shown.

selfdrive/controls/lib/longitudinal_mpc/lib_mpc_export/acado_common.h

Lines changed: 67 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ extern "C"
7070
/** Number of control variables. */
7171
#define ACADO_NU 1
7272
/** Number of differential variables. */
73-
#define ACADO_NX 3
73+
#define ACADO_NX 6
7474
/** Number of algebraic variables. */
7575
#define ACADO_NXA 0
7676
/** Number of differential derivative variables. */
@@ -80,7 +80,7 @@ extern "C"
8080
/** Number of references/measurements on the last (N + 1)st node. */
8181
#define ACADO_NYN 3
8282
/** Total number of QP optimization variables. */
83-
#define ACADO_QP_NV 23
83+
#define ACADO_QP_NV 26
8484
/** Number of Runge-Kutta stages per integration step. */
8585
#define ACADO_RK_NSTAGES 4
8686
/** Providing interface for arrival cost. */
@@ -102,11 +102,11 @@ extern "C"
102102
typedef struct ACADOvariables_
103103
{
104104
int dummy;
105-
/** Matrix of size: 21 x 3 (row major format)
105+
/** Matrix of size: 21 x 6 (row major format)
106106
*
107107
* Matrix containing 21 differential variable vectors.
108108
*/
109-
real_t x[ 63 ];
109+
real_t x[ 126 ];
110110

111111
/** Column vector of size: 20
112112
*
@@ -138,11 +138,11 @@ real_t W[ 320 ];
138138
/** Matrix of size: 3 x 3 (row major format) */
139139
real_t WN[ 9 ];
140140

141-
/** Column vector of size: 3
141+
/** Column vector of size: 6
142142
*
143143
* Current state feedback vector.
144144
*/
145-
real_t x0[ 3 ];
145+
real_t x0[ 6 ];
146146

147147

148148
} ACADOvariables;
@@ -155,112 +155,115 @@ real_t x0[ 3 ];
155155
*/
156156
typedef struct ACADOworkspace_
157157
{
158+
/** Column vector of size: 10 */
159+
real_t rhs_aux[ 10 ];
160+
158161
real_t rk_ttt;
159162

160-
/** Row vector of size: 18 */
161-
real_t rk_xxx[ 18 ];
163+
/** Row vector of size: 51 */
164+
real_t rk_xxx[ 51 ];
162165

163-
/** Matrix of size: 4 x 15 (row major format) */
164-
real_t rk_kkk[ 60 ];
166+
/** Matrix of size: 4 x 48 (row major format) */
167+
real_t rk_kkk[ 192 ];
165168

166-
/** Row vector of size: 18 */
167-
real_t state[ 18 ];
169+
/** Row vector of size: 51 */
170+
real_t state[ 51 ];
168171

169-
/** Column vector of size: 60 */
170-
real_t d[ 60 ];
172+
/** Column vector of size: 120 */
173+
real_t d[ 120 ];
171174

172175
/** Column vector of size: 80 */
173176
real_t Dy[ 80 ];
174177

175178
/** Column vector of size: 3 */
176179
real_t DyN[ 3 ];
177180

178-
/** Matrix of size: 60 x 3 (row major format) */
179-
real_t evGx[ 180 ];
181+
/** Matrix of size: 120 x 6 (row major format) */
182+
real_t evGx[ 720 ];
180183

181-
/** Column vector of size: 60 */
182-
real_t evGu[ 60 ];
184+
/** Column vector of size: 120 */
185+
real_t evGu[ 120 ];
183186

184-
/** Column vector of size: 15 */
185-
real_t objAuxVar[ 15 ];
187+
/** Column vector of size: 30 */
188+
real_t objAuxVar[ 30 ];
186189

187-
/** Row vector of size: 6 */
188-
real_t objValueIn[ 6 ];
190+
/** Row vector of size: 9 */
191+
real_t objValueIn[ 9 ];
189192

190-
/** Row vector of size: 20 */
191-
real_t objValueOut[ 20 ];
193+
/** Row vector of size: 32 */
194+
real_t objValueOut[ 32 ];
192195

193-
/** Matrix of size: 60 x 3 (row major format) */
194-
real_t Q1[ 180 ];
196+
/** Matrix of size: 120 x 6 (row major format) */
197+
real_t Q1[ 720 ];
195198

196-
/** Matrix of size: 60 x 4 (row major format) */
197-
real_t Q2[ 240 ];
199+
/** Matrix of size: 120 x 4 (row major format) */
200+
real_t Q2[ 480 ];
198201

199202
/** Column vector of size: 20 */
200203
real_t R1[ 20 ];
201204

202205
/** Matrix of size: 20 x 4 (row major format) */
203206
real_t R2[ 80 ];
204207

205-
/** Column vector of size: 60 */
206-
real_t S1[ 60 ];
208+
/** Column vector of size: 120 */
209+
real_t S1[ 120 ];
207210

208-
/** Matrix of size: 3 x 3 (row major format) */
209-
real_t QN1[ 9 ];
211+
/** Matrix of size: 6 x 6 (row major format) */
212+
real_t QN1[ 36 ];
210213

211-
/** Matrix of size: 3 x 3 (row major format) */
212-
real_t QN2[ 9 ];
214+
/** Matrix of size: 6 x 3 (row major format) */
215+
real_t QN2[ 18 ];
213216

214-
/** Column vector of size: 3 */
215-
real_t Dx0[ 3 ];
217+
/** Column vector of size: 6 */
218+
real_t Dx0[ 6 ];
216219

217-
/** Matrix of size: 3 x 3 (row major format) */
218-
real_t T[ 9 ];
220+
/** Matrix of size: 6 x 6 (row major format) */
221+
real_t T[ 36 ];
219222

220-
/** Column vector of size: 630 */
221-
real_t E[ 630 ];
223+
/** Column vector of size: 1260 */
224+
real_t E[ 1260 ];
222225

223-
/** Column vector of size: 630 */
224-
real_t QE[ 630 ];
226+
/** Column vector of size: 1260 */
227+
real_t QE[ 1260 ];
225228

226-
/** Matrix of size: 60 x 3 (row major format) */
227-
real_t QGx[ 180 ];
229+
/** Matrix of size: 120 x 6 (row major format) */
230+
real_t QGx[ 720 ];
228231

229-
/** Column vector of size: 60 */
230-
real_t Qd[ 60 ];
232+
/** Column vector of size: 120 */
233+
real_t Qd[ 120 ];
231234

232-
/** Column vector of size: 63 */
233-
real_t QDy[ 63 ];
235+
/** Column vector of size: 126 */
236+
real_t QDy[ 126 ];
234237

235-
/** Matrix of size: 20 x 3 (row major format) */
236-
real_t H10[ 60 ];
238+
/** Matrix of size: 20 x 6 (row major format) */
239+
real_t H10[ 120 ];
237240

238-
/** Matrix of size: 23 x 23 (row major format) */
239-
real_t H[ 529 ];
241+
/** Matrix of size: 26 x 26 (row major format) */
242+
real_t H[ 676 ];
240243

241-
/** Matrix of size: 20 x 23 (row major format) */
242-
real_t A[ 460 ];
244+
/** Matrix of size: 20 x 26 (row major format) */
245+
real_t A[ 520 ];
243246

244-
/** Column vector of size: 23 */
245-
real_t g[ 23 ];
247+
/** Column vector of size: 26 */
248+
real_t g[ 26 ];
246249

247-
/** Column vector of size: 23 */
248-
real_t lb[ 23 ];
250+
/** Column vector of size: 26 */
251+
real_t lb[ 26 ];
249252

250-
/** Column vector of size: 23 */
251-
real_t ub[ 23 ];
253+
/** Column vector of size: 26 */
254+
real_t ub[ 26 ];
252255

253256
/** Column vector of size: 20 */
254257
real_t lbA[ 20 ];
255258

256259
/** Column vector of size: 20 */
257260
real_t ubA[ 20 ];
258261

259-
/** Column vector of size: 23 */
260-
real_t x[ 23 ];
262+
/** Column vector of size: 26 */
263+
real_t x[ 26 ];
261264

262-
/** Column vector of size: 43 */
263-
real_t y[ 43 ];
265+
/** Column vector of size: 46 */
266+
real_t y[ 46 ];
264267

265268

266269
} ACADOworkspace;

0 commit comments

Comments
 (0)