Table of Contents
MaPPI is a lightweight Model Predictive Path Integral (MPPI) controller for autonomous navigation. It efficiently computes kinematically feasible trajectories by sampling control inputs and evaluating them based on multiple cost functions (critics). This controller is designed for real-time performance, obstacle avoidance and smooth motion planning, making it ideal for embedded systems and resource-constrained platforms.
✅ Kinematic Bicycle Model available for vehicle-alike robots (long. velocity + steering commands)
✅ Stand alone C++ library - MaPPI is implemented as a stand-alone C++ library in order to be used outside the ROS framework without changes, making it more portable.
✅ ROS Noetic compatibility - C++ plugin that integrates with move_base
nav_core::BaseLocalPlanner
ONA prototype navigating through El Born - Barcelona using MaPPI.
This project is based on the nav2 MPPI controller, originally developed by Alex in mppic and adapted by Steve Macenski for nav2. If you plan to use MaPPI
please make sure to give some love to nav2 and mppic projects, which greatly influenced this work.
MaPPI
has been developed with the sole purpose of being able to use MPPI within ROS Noetic with different motion models than the ones offered in nav2. If you plan to use MPPI in ROS2 please use the official nav2 controller, which is a much better implementation (now optimized using Eigen).
MaPPI C++14 library:
- xtensor
- xtl
- costmap_2d (To-Do: erase this dependency, make it a templated library)
ROS (Noetic) wrapper:
Build dependencies
git clone https://github.com/xtensor-stack/xtl.git # install x template library (xtl)
cd xtl
cmake -DCMAKE_INSTALL_PREFIX=/usr/local
sudo make install
git clone https://github.com/xtensor-stack/xtensor.git # install xtensor library
cd xtensor
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr/local ..
sudo make install
Clone the repository and build the package:
cd ~/catkin_ws/src
git clone https://gitlab.iri.upc.edu/mobile_robotics/botnet_project/vaive/mappi.git
cd ..
rosdep install --from-paths src --ignore-src -r -y
catkin_make
Make sure your move_base
configuration includes:
<param name="base_global_planner" value="mappi/MPPIPlannerROS"/>
This allows move_base
to call the MPPIPlannerROS plugin, which wraps around the stand-alone MaPPI
library.
Modify config/mappi_local_planner.yaml
to adjust the controller behavior. Remember to add this to your move_base
launch:
<rosparam file="$(find mappi)/config/mappi_local_planner.yaml" command="load"/>
To-Do
mappi/
│── cfg/ # Dynamic Reconfigure definition
│── include/ # Header files for ROS functionality
│── mappi/ # MaPPI stand-alone C++ library
│── src/ # nav_core::BaseLocalPlanner definition
│── CMakeLists.txt # Build system configuration
│── mappi_plugin.xml # nav_core pluginlib definition
│── package.xml # ROS package metadata
└── README.md # This file