Ian McInerney photo

Ian McInerney

Research software engineer, Vibration UTC at Imperial College London

Email Google Scholar Arxiv ORCID dblp Zotero LinkedIn Github Gitlab Mastodon

Academic Software


View on GitHub

PredictiveControl.jl is a Julia package to construct and solve Model Predictive Control problems. Currently, it allows for the specification of linear MPC problems, the formation of the condensed QP, and some some analysis of the problem/solvers. It also includes an implementation of the Fast Gradient Method as a solver backend.

This package is under constant development, with the following improvements planned:

  • Real-time iteration solver for nonlinear MPC
  • Additional optimization solvers (e.g. dual fast gradient, dual gradient projection, etc.)
  • Additional analysis methods
  • Additional condensing schemes
  • Tube-based robust MPC


View on GitHub

ControlBenchmarks.jl is a Julia package containing various pre-made control problems that can be used as benchmarks when doing design and analysis. These benchmarks are taken from the literature, and also include various example systems such as mass-spring-damper chains.

MATLAB Toolboxes

These MATLAB toolboxes have been developed over several years and contain various useful functions and algorithms from the research literature.

The various toolboxes are:

OSQP - The Operator Splitting Quadratic Program Solver

View on GitHub

The OSQP solver is an operator splitting solver for convex quadratic programs with sparse matrix structure written in C. The solver can be built library-free, and generate standalone C code for problems that is suitable for use in embedded systems. It can be interfaced to from several other languages, including MATLAB/Simulink.

My main contribution to this sofware has been software engineering on the core solver, maintaining the embedded implementation, and building a Simulink S-function interface.

Other Software


View on GitLab

KiCad is an open-source electronics design suite, encompassing schematic capture, circuit simulation and circuit board design. I am a member of the lead development team, and am responsible for designing/implementing new features, triaging issue reports from users, implementing bug fixes, and reviewing contributions from other developers.