Skip to content

Repository files navigation

Model Predictive Path Integral Controller

CUDA version of mppi_controller_ros, a ROS1 port of nav2_mppi_controller, based on the MPPI-Generic. Applicable for both move_base and move_base_flex.

For ROS2-Jazzy, see the jazzy branch.

For ROS2-Humble, see the humble branch.

Installation

Requires NVIDIA GPU + CUDA toolkit. Tested with ROS Noetic, Ubuntu 20.04, CUDA 12.4, an AMD Ryzen 5 5500H (8 threads) + RTX 2050 (compute capability 8.6).

  • Install CUDA toolkit (see NVIDIA's install guide) and move_base_flex
    sudo apt install ros-noetic-mbf-costmap-nav
  • Clone code and build
    cd your_ws/src
    git clone https://github.com/datledoan/mppi_controller_cuda.git
    catkin build mppi_controller_cuda

Result

Demo

Run the example with turtlebot3

Benchmark

Benchmark with CPU version mppi_controller_ros.

Real-run move_base_flex CPU usage while navigating a goal in Gazebo (turtlebot3 burger), sampled with benchmark/run_live_cpu_test.sh (10s window, 0.2s interval, 5 runs x 50 samples each). Both sides run the same critic set/per-rollout compute cost, same batch_size/controller_frequency/goal/map:

Controller CPU usage (of 1 core, mean ± std across 5 runs)
mppi_controller_ros (CPU) 33.9% ± 0.6
mppi_controller_cuda (GPU) 21.9% ± 0.2

~35% less move_base_flex CPU load with the GPU plugin (RTX 2050).

Reference

@misc{vlahov2024mppi,
      title={MPPI-Generic: A CUDA Library for Stochastic Trajectory Optimization},
      author={Bogdan Vlahov and Jason Gibson and Manan Gandhi and Evangelos A. Theodorou},
      year={2024},
      eprint={2409.07563},
      archivePrefix={arXiv},
      primaryClass={cs.MS},
      url={https://arxiv.org/abs/2409.07563},
}

About

CUDA-accelerated MPPI controller for ROS

Resources

Stars

10 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages