MPC using various optimisation algorithms
-
Clone the repository:
git clone https://github.com/susiejojo/Model_predictive_control.git -
cdinto the directory and make a new/datadirectory. This can be done by:mkdir data -
Open in MATLAB and execute
run.m. -
The simulation images are saved under
/data. -
To generate videos, copy
mkmovie.shinto the/datafolder and execute the shell script by:./mkmovie.sh.
run.m: main code to generate simulations, and run the optimisation routine.getPreds.m: used to return predictions based on waypoints for a prediction horizon. Uses L2 norm for cost, L2 regularisation of w.nonhn_pts.m: used to generate the x,y coordinates given a set of linear and angular velocities.plot_figs.m: used to plot the simulation frame by frame. Adjusts the heading and position of the agent as given by the optimiser.colnfn.m: returns collision constraints and lane constraints. Contains flagshas_obstacleandhas_lane_conto toggle constraints.mkmovie.sh: used to generate video from the image frames obtained from MATLAB./data: stores the images frame by frame for the simulation. Also on running the video generator code, generatessimulation.mp4./results: stores the simulations obtained during testing.
- All the results below have been obtained with
planning_horizon = 50andcontrol_horizon = 10. - The green points denote the positions returned by the planner over the planning horizon.
- The blue trajectory is the actual path followed by the bot.
- The black dashed lines denote lane constraints.
- Obstacle has been assumed to be a circle of a given radius.
- Initial w and v: v = 1, w = uniform(-0.06,0.06)
vmin = 0,vmax = 20,wmin = -0.1wmax = 0.1. (Till Video7),wmin = -0.5,wmax = 0.5for Videos 8,9.MaxFunctionEvaluations = 30000,MaxIterations = 10000for Videos 8 and 9.- Lane Constraints(where applicable in case of y=x): left => y = x+25, right => y = x-25
| Scenario | Initial heading | Waypoints | End orientation constraint | Obstacle | Lane Constraint | Video |
|---|---|---|---|---|---|---|
| Move from (0,0) to (125,125) | pi/4 | 50 waypoints, equally spaced | None | None | None | Video1 |
| Move from (0,0) to (80,80) | 0 | 1 waypoint at goal | None | None | None | Video2 |
| Move from (0,0) to (80,80) | pi/4 | 1 waypoint at goal | None | None | None | Video3 |
| Move from (0,0) to (50,0) | 0 | 1 waypoint at goal | None | None | None | Video4 |
| Move from (0,0) to (50,0) | 0 | 1 waypoint at goal | None | (30,0) | None | Video5 |
| Move from (0,0) to (80,80) | pi/4 | 1 waypoint at goal | 0 | None | None | Video6 |
| Move from (0,0) to (80,80) | pi/4 | 1 waypoint at goal | None | (30,30) | None | Video8 |
| Move from (0,0) to (80,80) | pi/4 | 1 waypoint at goal | None | (30,30) | As in video | Video9 |
| Move from (0,0) to (50,50) | pi/4 | 1 waypoint at goal | 0 | (30,30) | As in video | Video10 |
- Uniformly distributed w vs fixed positive and negative w.
- Norm of vector vs norm of matrix
- Adjusting values of vmax and plotting v w.r.t time to ensure a smooth graph
- Setting acceleration constraints to ensure smoothness of v.
- Removing collision constraint once the bot has passed the obstacle and is ahead of it.
- Fine-tuning weights for end orientation constraint
- Adjusting values of wmax for making achieving end orientation constraints feasible.
- Feasilibity of reaching goal vs values of vmax and vmin, time step and planning horizon
- Difference between multiple waypoints and a single waypoint
- fmincon requires manual tuning of MaxIterations and MaxFunctionEvaluations to be able to complete the optimization routine.
- Learnt about fmincon exit codes, and read up fmincon documentation for options parameters.