DuSt-MPC: Introduction

Welcome! This is the code repository for the DuSt-MPC paper, published at Robotics: Science and Systems (RSS) 2021. This code is provided as an open-source package for Python 3 offering modules and examples to quickly setup and run experiments with the framework presented in our paper. This package is still under development.

Abstract: Model predictive control (MPC) schemes have a proven track record for delivering aggressive and robust performance in many challenging control tasks, coping with nonlinear system dynamics, constraints, and observational noise. Despite their success, these methods often rely on simple control distributions, which can limit their performance in highly uncertain and complex environments. MPC frameworks must be able to accommodate changing distributions over system parameters, based on the most recent measurements. In this paper, we devise an implicit variational inference algorithm able to estimate distributions over model parameters and control inputs on-the-fly. The method incorporates Stein Variational gradient descent to approximate the target distributions as a collection of particles, and performs updates based on a Bayesian formulation. This enables the approximation of complex multi-modal posterior distributions, typically occurring in challenging and realistic robot navigation tasks. We demonstrate our approach on both simulated and real-world experiments requiring real-time execution in the face of dynamically changing environments.

Installation

DuSt is built for Python (version 3.6 or later).

From source

The package can be installed from source by running the following commands:

  $ git clone https://github.com/lubaroli/dust
  $ cd dust
  $ python setup.py install

Using pip

Or directly from PyPi:

  $ pip install dust

Using Conda

Additionally, we offer a requirements file in case you want to create a Conda environment with the necessary dependencies:

  $ git clone https://github.com/lubaroli/dust
  $ cd dust
  $ conda create -n dust -f environment.yaml
  $ conda activate dust
  $ pip install dust

Running Experiments

For convenience, scripts for running the simulation experiments found on the paper are provided. These files are located on the demo/ folder.

The configuration of each experiment is controlled by a separate yaml file, located on the same folder. Although most variables are self explanatory, there are a few worth highlighting:

    INIT_STATE (required) The initial states for all episodes. A tensor of
                          appropriate dimensions.
    EPISODES   (required) The number of episodes executed in for each test case.
    WARM-UP    (required) The number of warm-up steps executed before the first
                          action is taken.
    RENDER     (optional) Controls whether the experiments should be rendered
                          by gym.
    VERBOSE    (optional) Controls whether progress messages are printed to the
                          console.

Once an example file is executed, output files will be saved to the ./data/local/<date-time> folder.

Please refer to each module documentation for details on the other arguments.