No version for distro humble showing github. Known supported distros are highlighted in the buttons above.
Repo symbol

px4-mpc repository

mpc_msgs px4_mpc

ROS Distro
github

Repository Summary

Description
Checkout URI https://github.com/discower/px4-mpc.git
VCS Type git
VCS Version master
Last Updated 2026-09-27
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
mpc_msgs 0.0.0
px4_mpc 0.0.0

README

PX4 MPC

Model Predictive Control (MPC) for spacecraft and multirotors running on PX4 Autopilot, integrated with ROS 2.

px4-mpc

This package runs MPC controllers as ROS 2 nodes that talk to PX4 through the uXRCE-DDS bridge. The controllers read vehicle states from PX4 and send setpoints back in offboard mode. The optimal control problems are built and solved with the acados framework.

The main vehicle is the ATMOS free-flyer spacecraft. Its controller has several control modes, from body rates and wrench commands down to direct thruster allocation. A quadrotor (x500) example is also included. Setpoints can be set interactively in RViz or come from a predefined setpoint node.

Citation

If you find this package useful in academic work, please cite:

P. Roque, S. Phodapol, E. Krantz, J. Lim, J. Verhagen, F. Jiang, D. Dorner, R. Siegwart, I. Stenius, G. Tibert, H. Mao, J. Tumova, C. Fuglesang and D. V. Dimarogonas, “Towards Open-Source and Modular Space Systems with ATMOS,” arXiv preprint arXiv:2501.16973, 2025.

arXiv

BibTeX
@article{roque2025towards,
  title={Towards Open-Source and Modular Space Systems with ATMOS},
  author={Roque, Pedro and Phodapol, Sujet and Krantz, Elias and Lim, Jaeyoung and Verhagen, Joris and Jiang, Frank and Dorner, David and Siegwart, Roland and Stenius, Ivan and Tibert, Gunnar and others},
  journal={arXiv preprint arXiv:2501.16973},
  year={2025}
}

Quick Start

Prerequisites

Install

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
git clone https://github.com/PX4/px4_msgs.git              # PX4 messages for communication with PX4 DDS
git clone https://github.com/DISCOWER/px4-offboard.git     # RViz interface and setpoint generation
git clone https://github.com/DISCOWER/px4-mpc.git          # this package
cd ..

Install the remaining dependencies (ROS 2 packages, NumPy, SciPy, CasADi, python-control, …) with rosdep. If you have never used rosdep before, run sudo rosdep init first.

rosdep update
rosdep install --from-paths src --ignore-src -y

Build the workspace:

colcon build --packages-up-to px4_mpc
source install/setup.bash  # use setup.zsh for zsh users

Note: rosdep does not install acados. Install it and its Python interface as described in Prerequisites.

For the propeller control mode, also clone atmos_propeller_plate_interface into ~/ros2_ws/src, rerun the rosdep install command above, and build it:

colcon build --packages-up-to px4_mpc propeller_plate_iface

PX4 Setup

DDS topics: the PX4 topics exposed to ROS 2 are configured in PX4-Autopilot/src/modules/uxrce_dds_client/dds_topics.yaml. Edit this file if you need additional topics.

Arming and mode switching: by default, PX4 expects RC inputs and a QGroundControl (QGC) connection before it allows arming and mode switching. These are the recommended settings for real deployments. Set up either QGC or a headless configuration before running the examples. Both options below describe how to switch to offboard mode and arm the vehicle.

With QGC (recommended) 1. Open QGroundControl. 2. Click the QGroundControl icon in the top left corner and open "Application Settings". 3. Under the "Fly View" tab, scroll down to "Virtual Joysticks" and enable them by clicking the slider to the right of "Enabled". 4. Make sure that auto-center throttle is disabled. 5. Click "Exit Application Settings" in the top left corner to return to the Fly View screen. To start the MPC, select "Offboard" in the flight mode menu in the top toolbar, then arm the vehicle. > **Important:** Before arming the vehicle, make sure that the throttle (left vertical joystick) is at the lowest position.
Headless (no QGC) > **Warning:** Do this at your own risk. We recommend using QGC to keep hardware and software setups consistent. Disable the RC check and the QGC connection requirement by setting the following parameters in the PX4 SITL terminal: File truncated at 100 lines [see the full file](https://github.com/discower/px4-mpc/tree/master/README.md)
No version for distro jazzy showing github. Known supported distros are highlighted in the buttons above.
Repo symbol

px4-mpc repository

mpc_msgs px4_mpc

ROS Distro
github

Repository Summary

Description
Checkout URI https://github.com/discower/px4-mpc.git
VCS Type git
VCS Version master
Last Updated 2026-09-27
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
mpc_msgs 0.0.0
px4_mpc 0.0.0

README

PX4 MPC

Model Predictive Control (MPC) for spacecraft and multirotors running on PX4 Autopilot, integrated with ROS 2.

px4-mpc

This package runs MPC controllers as ROS 2 nodes that talk to PX4 through the uXRCE-DDS bridge. The controllers read vehicle states from PX4 and send setpoints back in offboard mode. The optimal control problems are built and solved with the acados framework.

The main vehicle is the ATMOS free-flyer spacecraft. Its controller has several control modes, from body rates and wrench commands down to direct thruster allocation. A quadrotor (x500) example is also included. Setpoints can be set interactively in RViz or come from a predefined setpoint node.

Citation

If you find this package useful in academic work, please cite:

P. Roque, S. Phodapol, E. Krantz, J. Lim, J. Verhagen, F. Jiang, D. Dorner, R. Siegwart, I. Stenius, G. Tibert, H. Mao, J. Tumova, C. Fuglesang and D. V. Dimarogonas, “Towards Open-Source and Modular Space Systems with ATMOS,” arXiv preprint arXiv:2501.16973, 2025.

arXiv

BibTeX
@article{roque2025towards,
  title={Towards Open-Source and Modular Space Systems with ATMOS},
  author={Roque, Pedro and Phodapol, Sujet and Krantz, Elias and Lim, Jaeyoung and Verhagen, Joris and Jiang, Frank and Dorner, David and Siegwart, Roland and Stenius, Ivan and Tibert, Gunnar and others},
  journal={arXiv preprint arXiv:2501.16973},
  year={2025}
}

Quick Start

Prerequisites

Install

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
git clone https://github.com/PX4/px4_msgs.git              # PX4 messages for communication with PX4 DDS
git clone https://github.com/DISCOWER/px4-offboard.git     # RViz interface and setpoint generation
git clone https://github.com/DISCOWER/px4-mpc.git          # this package
cd ..

Install the remaining dependencies (ROS 2 packages, NumPy, SciPy, CasADi, python-control, …) with rosdep. If you have never used rosdep before, run sudo rosdep init first.

rosdep update
rosdep install --from-paths src --ignore-src -y

Build the workspace:

colcon build --packages-up-to px4_mpc
source install/setup.bash  # use setup.zsh for zsh users

Note: rosdep does not install acados. Install it and its Python interface as described in Prerequisites.

For the propeller control mode, also clone atmos_propeller_plate_interface into ~/ros2_ws/src, rerun the rosdep install command above, and build it:

colcon build --packages-up-to px4_mpc propeller_plate_iface

PX4 Setup

DDS topics: the PX4 topics exposed to ROS 2 are configured in PX4-Autopilot/src/modules/uxrce_dds_client/dds_topics.yaml. Edit this file if you need additional topics.

Arming and mode switching: by default, PX4 expects RC inputs and a QGroundControl (QGC) connection before it allows arming and mode switching. These are the recommended settings for real deployments. Set up either QGC or a headless configuration before running the examples. Both options below describe how to switch to offboard mode and arm the vehicle.

With QGC (recommended) 1. Open QGroundControl. 2. Click the QGroundControl icon in the top left corner and open "Application Settings". 3. Under the "Fly View" tab, scroll down to "Virtual Joysticks" and enable them by clicking the slider to the right of "Enabled". 4. Make sure that auto-center throttle is disabled. 5. Click "Exit Application Settings" in the top left corner to return to the Fly View screen. To start the MPC, select "Offboard" in the flight mode menu in the top toolbar, then arm the vehicle. > **Important:** Before arming the vehicle, make sure that the throttle (left vertical joystick) is at the lowest position.
Headless (no QGC) > **Warning:** Do this at your own risk. We recommend using QGC to keep hardware and software setups consistent. Disable the RC check and the QGC connection requirement by setting the following parameters in the PX4 SITL terminal: File truncated at 100 lines [see the full file](https://github.com/discower/px4-mpc/tree/master/README.md)
No version for distro kilted showing github. Known supported distros are highlighted in the buttons above.
Repo symbol

px4-mpc repository

mpc_msgs px4_mpc

ROS Distro
github

Repository Summary

Description
Checkout URI https://github.com/discower/px4-mpc.git
VCS Type git
VCS Version master
Last Updated 2026-09-27
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
mpc_msgs 0.0.0
px4_mpc 0.0.0

README

PX4 MPC

Model Predictive Control (MPC) for spacecraft and multirotors running on PX4 Autopilot, integrated with ROS 2.

px4-mpc

This package runs MPC controllers as ROS 2 nodes that talk to PX4 through the uXRCE-DDS bridge. The controllers read vehicle states from PX4 and send setpoints back in offboard mode. The optimal control problems are built and solved with the acados framework.

The main vehicle is the ATMOS free-flyer spacecraft. Its controller has several control modes, from body rates and wrench commands down to direct thruster allocation. A quadrotor (x500) example is also included. Setpoints can be set interactively in RViz or come from a predefined setpoint node.

Citation

If you find this package useful in academic work, please cite:

P. Roque, S. Phodapol, E. Krantz, J. Lim, J. Verhagen, F. Jiang, D. Dorner, R. Siegwart, I. Stenius, G. Tibert, H. Mao, J. Tumova, C. Fuglesang and D. V. Dimarogonas, “Towards Open-Source and Modular Space Systems with ATMOS,” arXiv preprint arXiv:2501.16973, 2025.

arXiv

BibTeX
@article{roque2025towards,
  title={Towards Open-Source and Modular Space Systems with ATMOS},
  author={Roque, Pedro and Phodapol, Sujet and Krantz, Elias and Lim, Jaeyoung and Verhagen, Joris and Jiang, Frank and Dorner, David and Siegwart, Roland and Stenius, Ivan and Tibert, Gunnar and others},
  journal={arXiv preprint arXiv:2501.16973},
  year={2025}
}

Quick Start

Prerequisites

Install

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
git clone https://github.com/PX4/px4_msgs.git              # PX4 messages for communication with PX4 DDS
git clone https://github.com/DISCOWER/px4-offboard.git     # RViz interface and setpoint generation
git clone https://github.com/DISCOWER/px4-mpc.git          # this package
cd ..

Install the remaining dependencies (ROS 2 packages, NumPy, SciPy, CasADi, python-control, …) with rosdep. If you have never used rosdep before, run sudo rosdep init first.

rosdep update
rosdep install --from-paths src --ignore-src -y

Build the workspace:

colcon build --packages-up-to px4_mpc
source install/setup.bash  # use setup.zsh for zsh users

Note: rosdep does not install acados. Install it and its Python interface as described in Prerequisites.

For the propeller control mode, also clone atmos_propeller_plate_interface into ~/ros2_ws/src, rerun the rosdep install command above, and build it:

colcon build --packages-up-to px4_mpc propeller_plate_iface

PX4 Setup

DDS topics: the PX4 topics exposed to ROS 2 are configured in PX4-Autopilot/src/modules/uxrce_dds_client/dds_topics.yaml. Edit this file if you need additional topics.

Arming and mode switching: by default, PX4 expects RC inputs and a QGroundControl (QGC) connection before it allows arming and mode switching. These are the recommended settings for real deployments. Set up either QGC or a headless configuration before running the examples. Both options below describe how to switch to offboard mode and arm the vehicle.

With QGC (recommended) 1. Open QGroundControl. 2. Click the QGroundControl icon in the top left corner and open "Application Settings". 3. Under the "Fly View" tab, scroll down to "Virtual Joysticks" and enable them by clicking the slider to the right of "Enabled". 4. Make sure that auto-center throttle is disabled. 5. Click "Exit Application Settings" in the top left corner to return to the Fly View screen. To start the MPC, select "Offboard" in the flight mode menu in the top toolbar, then arm the vehicle. > **Important:** Before arming the vehicle, make sure that the throttle (left vertical joystick) is at the lowest position.
Headless (no QGC) > **Warning:** Do this at your own risk. We recommend using QGC to keep hardware and software setups consistent. Disable the RC check and the QGC connection requirement by setting the following parameters in the PX4 SITL terminal: File truncated at 100 lines [see the full file](https://github.com/discower/px4-mpc/tree/master/README.md)
No version for distro lyrical showing github. Known supported distros are highlighted in the buttons above.
Repo symbol

px4-mpc repository

mpc_msgs px4_mpc

ROS Distro
github

Repository Summary

Description
Checkout URI https://github.com/discower/px4-mpc.git
VCS Type git
VCS Version master
Last Updated 2026-09-27
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
mpc_msgs 0.0.0
px4_mpc 0.0.0

README

PX4 MPC

Model Predictive Control (MPC) for spacecraft and multirotors running on PX4 Autopilot, integrated with ROS 2.

px4-mpc

This package runs MPC controllers as ROS 2 nodes that talk to PX4 through the uXRCE-DDS bridge. The controllers read vehicle states from PX4 and send setpoints back in offboard mode. The optimal control problems are built and solved with the acados framework.

The main vehicle is the ATMOS free-flyer spacecraft. Its controller has several control modes, from body rates and wrench commands down to direct thruster allocation. A quadrotor (x500) example is also included. Setpoints can be set interactively in RViz or come from a predefined setpoint node.

Citation

If you find this package useful in academic work, please cite:

P. Roque, S. Phodapol, E. Krantz, J. Lim, J. Verhagen, F. Jiang, D. Dorner, R. Siegwart, I. Stenius, G. Tibert, H. Mao, J. Tumova, C. Fuglesang and D. V. Dimarogonas, “Towards Open-Source and Modular Space Systems with ATMOS,” arXiv preprint arXiv:2501.16973, 2025.

arXiv

BibTeX
@article{roque2025towards,
  title={Towards Open-Source and Modular Space Systems with ATMOS},
  author={Roque, Pedro and Phodapol, Sujet and Krantz, Elias and Lim, Jaeyoung and Verhagen, Joris and Jiang, Frank and Dorner, David and Siegwart, Roland and Stenius, Ivan and Tibert, Gunnar and others},
  journal={arXiv preprint arXiv:2501.16973},
  year={2025}
}

Quick Start

Prerequisites

Install

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
git clone https://github.com/PX4/px4_msgs.git              # PX4 messages for communication with PX4 DDS
git clone https://github.com/DISCOWER/px4-offboard.git     # RViz interface and setpoint generation
git clone https://github.com/DISCOWER/px4-mpc.git          # this package
cd ..

Install the remaining dependencies (ROS 2 packages, NumPy, SciPy, CasADi, python-control, …) with rosdep. If you have never used rosdep before, run sudo rosdep init first.

rosdep update
rosdep install --from-paths src --ignore-src -y

Build the workspace:

colcon build --packages-up-to px4_mpc
source install/setup.bash  # use setup.zsh for zsh users

Note: rosdep does not install acados. Install it and its Python interface as described in Prerequisites.

For the propeller control mode, also clone atmos_propeller_plate_interface into ~/ros2_ws/src, rerun the rosdep install command above, and build it:

colcon build --packages-up-to px4_mpc propeller_plate_iface

PX4 Setup

DDS topics: the PX4 topics exposed to ROS 2 are configured in PX4-Autopilot/src/modules/uxrce_dds_client/dds_topics.yaml. Edit this file if you need additional topics.

Arming and mode switching: by default, PX4 expects RC inputs and a QGroundControl (QGC) connection before it allows arming and mode switching. These are the recommended settings for real deployments. Set up either QGC or a headless configuration before running the examples. Both options below describe how to switch to offboard mode and arm the vehicle.

With QGC (recommended) 1. Open QGroundControl. 2. Click the QGroundControl icon in the top left corner and open "Application Settings". 3. Under the "Fly View" tab, scroll down to "Virtual Joysticks" and enable them by clicking the slider to the right of "Enabled". 4. Make sure that auto-center throttle is disabled. 5. Click "Exit Application Settings" in the top left corner to return to the Fly View screen. To start the MPC, select "Offboard" in the flight mode menu in the top toolbar, then arm the vehicle. > **Important:** Before arming the vehicle, make sure that the throttle (left vertical joystick) is at the lowest position.
Headless (no QGC) > **Warning:** Do this at your own risk. We recommend using QGC to keep hardware and software setups consistent. Disable the RC check and the QGC connection requirement by setting the following parameters in the PX4 SITL terminal: File truncated at 100 lines [see the full file](https://github.com/discower/px4-mpc/tree/master/README.md)
No version for distro rolling showing github. Known supported distros are highlighted in the buttons above.
Repo symbol

px4-mpc repository

mpc_msgs px4_mpc

ROS Distro
github

Repository Summary

Description
Checkout URI https://github.com/discower/px4-mpc.git
VCS Type git
VCS Version master
Last Updated 2026-09-27
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
mpc_msgs 0.0.0
px4_mpc 0.0.0

README

PX4 MPC

Model Predictive Control (MPC) for spacecraft and multirotors running on PX4 Autopilot, integrated with ROS 2.

px4-mpc

This package runs MPC controllers as ROS 2 nodes that talk to PX4 through the uXRCE-DDS bridge. The controllers read vehicle states from PX4 and send setpoints back in offboard mode. The optimal control problems are built and solved with the acados framework.

The main vehicle is the ATMOS free-flyer spacecraft. Its controller has several control modes, from body rates and wrench commands down to direct thruster allocation. A quadrotor (x500) example is also included. Setpoints can be set interactively in RViz or come from a predefined setpoint node.

Citation

If you find this package useful in academic work, please cite:

P. Roque, S. Phodapol, E. Krantz, J. Lim, J. Verhagen, F. Jiang, D. Dorner, R. Siegwart, I. Stenius, G. Tibert, H. Mao, J. Tumova, C. Fuglesang and D. V. Dimarogonas, “Towards Open-Source and Modular Space Systems with ATMOS,” arXiv preprint arXiv:2501.16973, 2025.

arXiv

BibTeX
@article{roque2025towards,
  title={Towards Open-Source and Modular Space Systems with ATMOS},
  author={Roque, Pedro and Phodapol, Sujet and Krantz, Elias and Lim, Jaeyoung and Verhagen, Joris and Jiang, Frank and Dorner, David and Siegwart, Roland and Stenius, Ivan and Tibert, Gunnar and others},
  journal={arXiv preprint arXiv:2501.16973},
  year={2025}
}

Quick Start

Prerequisites

Install

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
git clone https://github.com/PX4/px4_msgs.git              # PX4 messages for communication with PX4 DDS
git clone https://github.com/DISCOWER/px4-offboard.git     # RViz interface and setpoint generation
git clone https://github.com/DISCOWER/px4-mpc.git          # this package
cd ..

Install the remaining dependencies (ROS 2 packages, NumPy, SciPy, CasADi, python-control, …) with rosdep. If you have never used rosdep before, run sudo rosdep init first.

rosdep update
rosdep install --from-paths src --ignore-src -y

Build the workspace:

colcon build --packages-up-to px4_mpc
source install/setup.bash  # use setup.zsh for zsh users

Note: rosdep does not install acados. Install it and its Python interface as described in Prerequisites.

For the propeller control mode, also clone atmos_propeller_plate_interface into ~/ros2_ws/src, rerun the rosdep install command above, and build it:

colcon build --packages-up-to px4_mpc propeller_plate_iface

PX4 Setup

DDS topics: the PX4 topics exposed to ROS 2 are configured in PX4-Autopilot/src/modules/uxrce_dds_client/dds_topics.yaml. Edit this file if you need additional topics.

Arming and mode switching: by default, PX4 expects RC inputs and a QGroundControl (QGC) connection before it allows arming and mode switching. These are the recommended settings for real deployments. Set up either QGC or a headless configuration before running the examples. Both options below describe how to switch to offboard mode and arm the vehicle.

With QGC (recommended) 1. Open QGroundControl. 2. Click the QGroundControl icon in the top left corner and open "Application Settings". 3. Under the "Fly View" tab, scroll down to "Virtual Joysticks" and enable them by clicking the slider to the right of "Enabled". 4. Make sure that auto-center throttle is disabled. 5. Click "Exit Application Settings" in the top left corner to return to the Fly View screen. To start the MPC, select "Offboard" in the flight mode menu in the top toolbar, then arm the vehicle. > **Important:** Before arming the vehicle, make sure that the throttle (left vertical joystick) is at the lowest position.
Headless (no QGC) > **Warning:** Do this at your own risk. We recommend using QGC to keep hardware and software setups consistent. Disable the RC check and the QGC connection requirement by setting the following parameters in the PX4 SITL terminal: File truncated at 100 lines [see the full file](https://github.com/discower/px4-mpc/tree/master/README.md)
Repo symbol

px4-mpc repository

mpc_msgs px4_mpc

ROS Distro
github

Repository Summary

Description
Checkout URI https://github.com/discower/px4-mpc.git
VCS Type git
VCS Version master
Last Updated 2026-09-27
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
mpc_msgs 0.0.0
px4_mpc 0.0.0

README

PX4 MPC

Model Predictive Control (MPC) for spacecraft and multirotors running on PX4 Autopilot, integrated with ROS 2.

px4-mpc

This package runs MPC controllers as ROS 2 nodes that talk to PX4 through the uXRCE-DDS bridge. The controllers read vehicle states from PX4 and send setpoints back in offboard mode. The optimal control problems are built and solved with the acados framework.

The main vehicle is the ATMOS free-flyer spacecraft. Its controller has several control modes, from body rates and wrench commands down to direct thruster allocation. A quadrotor (x500) example is also included. Setpoints can be set interactively in RViz or come from a predefined setpoint node.

Citation

If you find this package useful in academic work, please cite:

P. Roque, S. Phodapol, E. Krantz, J. Lim, J. Verhagen, F. Jiang, D. Dorner, R. Siegwart, I. Stenius, G. Tibert, H. Mao, J. Tumova, C. Fuglesang and D. V. Dimarogonas, “Towards Open-Source and Modular Space Systems with ATMOS,” arXiv preprint arXiv:2501.16973, 2025.

arXiv

BibTeX
@article{roque2025towards,
  title={Towards Open-Source and Modular Space Systems with ATMOS},
  author={Roque, Pedro and Phodapol, Sujet and Krantz, Elias and Lim, Jaeyoung and Verhagen, Joris and Jiang, Frank and Dorner, David and Siegwart, Roland and Stenius, Ivan and Tibert, Gunnar and others},
  journal={arXiv preprint arXiv:2501.16973},
  year={2025}
}

Quick Start

Prerequisites

Install

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
git clone https://github.com/PX4/px4_msgs.git              # PX4 messages for communication with PX4 DDS
git clone https://github.com/DISCOWER/px4-offboard.git     # RViz interface and setpoint generation
git clone https://github.com/DISCOWER/px4-mpc.git          # this package
cd ..

Install the remaining dependencies (ROS 2 packages, NumPy, SciPy, CasADi, python-control, …) with rosdep. If you have never used rosdep before, run sudo rosdep init first.

rosdep update
rosdep install --from-paths src --ignore-src -y

Build the workspace:

colcon build --packages-up-to px4_mpc
source install/setup.bash  # use setup.zsh for zsh users

Note: rosdep does not install acados. Install it and its Python interface as described in Prerequisites.

For the propeller control mode, also clone atmos_propeller_plate_interface into ~/ros2_ws/src, rerun the rosdep install command above, and build it:

colcon build --packages-up-to px4_mpc propeller_plate_iface

PX4 Setup

DDS topics: the PX4 topics exposed to ROS 2 are configured in PX4-Autopilot/src/modules/uxrce_dds_client/dds_topics.yaml. Edit this file if you need additional topics.

Arming and mode switching: by default, PX4 expects RC inputs and a QGroundControl (QGC) connection before it allows arming and mode switching. These are the recommended settings for real deployments. Set up either QGC or a headless configuration before running the examples. Both options below describe how to switch to offboard mode and arm the vehicle.

With QGC (recommended) 1. Open QGroundControl. 2. Click the QGroundControl icon in the top left corner and open "Application Settings". 3. Under the "Fly View" tab, scroll down to "Virtual Joysticks" and enable them by clicking the slider to the right of "Enabled". 4. Make sure that auto-center throttle is disabled. 5. Click "Exit Application Settings" in the top left corner to return to the Fly View screen. To start the MPC, select "Offboard" in the flight mode menu in the top toolbar, then arm the vehicle. > **Important:** Before arming the vehicle, make sure that the throttle (left vertical joystick) is at the lowest position.
Headless (no QGC) > **Warning:** Do this at your own risk. We recommend using QGC to keep hardware and software setups consistent. Disable the RC check and the QGC connection requirement by setting the following parameters in the PX4 SITL terminal: File truncated at 100 lines [see the full file](https://github.com/discower/px4-mpc/tree/master/README.md)
No version for distro galactic showing github. Known supported distros are highlighted in the buttons above.
Repo symbol

px4-mpc repository

mpc_msgs px4_mpc

ROS Distro
github

Repository Summary

Description
Checkout URI https://github.com/discower/px4-mpc.git
VCS Type git
VCS Version master
Last Updated 2026-09-27
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
mpc_msgs 0.0.0
px4_mpc 0.0.0

README

PX4 MPC

Model Predictive Control (MPC) for spacecraft and multirotors running on PX4 Autopilot, integrated with ROS 2.

px4-mpc

This package runs MPC controllers as ROS 2 nodes that talk to PX4 through the uXRCE-DDS bridge. The controllers read vehicle states from PX4 and send setpoints back in offboard mode. The optimal control problems are built and solved with the acados framework.

The main vehicle is the ATMOS free-flyer spacecraft. Its controller has several control modes, from body rates and wrench commands down to direct thruster allocation. A quadrotor (x500) example is also included. Setpoints can be set interactively in RViz or come from a predefined setpoint node.

Citation

If you find this package useful in academic work, please cite:

P. Roque, S. Phodapol, E. Krantz, J. Lim, J. Verhagen, F. Jiang, D. Dorner, R. Siegwart, I. Stenius, G. Tibert, H. Mao, J. Tumova, C. Fuglesang and D. V. Dimarogonas, “Towards Open-Source and Modular Space Systems with ATMOS,” arXiv preprint arXiv:2501.16973, 2025.

arXiv

BibTeX
@article{roque2025towards,
  title={Towards Open-Source and Modular Space Systems with ATMOS},
  author={Roque, Pedro and Phodapol, Sujet and Krantz, Elias and Lim, Jaeyoung and Verhagen, Joris and Jiang, Frank and Dorner, David and Siegwart, Roland and Stenius, Ivan and Tibert, Gunnar and others},
  journal={arXiv preprint arXiv:2501.16973},
  year={2025}
}

Quick Start

Prerequisites

Install

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
git clone https://github.com/PX4/px4_msgs.git              # PX4 messages for communication with PX4 DDS
git clone https://github.com/DISCOWER/px4-offboard.git     # RViz interface and setpoint generation
git clone https://github.com/DISCOWER/px4-mpc.git          # this package
cd ..

Install the remaining dependencies (ROS 2 packages, NumPy, SciPy, CasADi, python-control, …) with rosdep. If you have never used rosdep before, run sudo rosdep init first.

rosdep update
rosdep install --from-paths src --ignore-src -y

Build the workspace:

colcon build --packages-up-to px4_mpc
source install/setup.bash  # use setup.zsh for zsh users

Note: rosdep does not install acados. Install it and its Python interface as described in Prerequisites.

For the propeller control mode, also clone atmos_propeller_plate_interface into ~/ros2_ws/src, rerun the rosdep install command above, and build it:

colcon build --packages-up-to px4_mpc propeller_plate_iface

PX4 Setup

DDS topics: the PX4 topics exposed to ROS 2 are configured in PX4-Autopilot/src/modules/uxrce_dds_client/dds_topics.yaml. Edit this file if you need additional topics.

Arming and mode switching: by default, PX4 expects RC inputs and a QGroundControl (QGC) connection before it allows arming and mode switching. These are the recommended settings for real deployments. Set up either QGC or a headless configuration before running the examples. Both options below describe how to switch to offboard mode and arm the vehicle.

With QGC (recommended) 1. Open QGroundControl. 2. Click the QGroundControl icon in the top left corner and open "Application Settings". 3. Under the "Fly View" tab, scroll down to "Virtual Joysticks" and enable them by clicking the slider to the right of "Enabled". 4. Make sure that auto-center throttle is disabled. 5. Click "Exit Application Settings" in the top left corner to return to the Fly View screen. To start the MPC, select "Offboard" in the flight mode menu in the top toolbar, then arm the vehicle. > **Important:** Before arming the vehicle, make sure that the throttle (left vertical joystick) is at the lowest position.
Headless (no QGC) > **Warning:** Do this at your own risk. We recommend using QGC to keep hardware and software setups consistent. Disable the RC check and the QGC connection requirement by setting the following parameters in the PX4 SITL terminal: File truncated at 100 lines [see the full file](https://github.com/discower/px4-mpc/tree/master/README.md)
No version for distro iron showing github. Known supported distros are highlighted in the buttons above.
Repo symbol

px4-mpc repository

mpc_msgs px4_mpc

ROS Distro
github

Repository Summary

Description
Checkout URI https://github.com/discower/px4-mpc.git
VCS Type git
VCS Version master
Last Updated 2026-09-27
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
mpc_msgs 0.0.0
px4_mpc 0.0.0

README

PX4 MPC

Model Predictive Control (MPC) for spacecraft and multirotors running on PX4 Autopilot, integrated with ROS 2.

px4-mpc

This package runs MPC controllers as ROS 2 nodes that talk to PX4 through the uXRCE-DDS bridge. The controllers read vehicle states from PX4 and send setpoints back in offboard mode. The optimal control problems are built and solved with the acados framework.

The main vehicle is the ATMOS free-flyer spacecraft. Its controller has several control modes, from body rates and wrench commands down to direct thruster allocation. A quadrotor (x500) example is also included. Setpoints can be set interactively in RViz or come from a predefined setpoint node.

Citation

If you find this package useful in academic work, please cite:

P. Roque, S. Phodapol, E. Krantz, J. Lim, J. Verhagen, F. Jiang, D. Dorner, R. Siegwart, I. Stenius, G. Tibert, H. Mao, J. Tumova, C. Fuglesang and D. V. Dimarogonas, “Towards Open-Source and Modular Space Systems with ATMOS,” arXiv preprint arXiv:2501.16973, 2025.

arXiv

BibTeX
@article{roque2025towards,
  title={Towards Open-Source and Modular Space Systems with ATMOS},
  author={Roque, Pedro and Phodapol, Sujet and Krantz, Elias and Lim, Jaeyoung and Verhagen, Joris and Jiang, Frank and Dorner, David and Siegwart, Roland and Stenius, Ivan and Tibert, Gunnar and others},
  journal={arXiv preprint arXiv:2501.16973},
  year={2025}
}

Quick Start

Prerequisites

Install

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
git clone https://github.com/PX4/px4_msgs.git              # PX4 messages for communication with PX4 DDS
git clone https://github.com/DISCOWER/px4-offboard.git     # RViz interface and setpoint generation
git clone https://github.com/DISCOWER/px4-mpc.git          # this package
cd ..

Install the remaining dependencies (ROS 2 packages, NumPy, SciPy, CasADi, python-control, …) with rosdep. If you have never used rosdep before, run sudo rosdep init first.

rosdep update
rosdep install --from-paths src --ignore-src -y

Build the workspace:

colcon build --packages-up-to px4_mpc
source install/setup.bash  # use setup.zsh for zsh users

Note: rosdep does not install acados. Install it and its Python interface as described in Prerequisites.

For the propeller control mode, also clone atmos_propeller_plate_interface into ~/ros2_ws/src, rerun the rosdep install command above, and build it:

colcon build --packages-up-to px4_mpc propeller_plate_iface

PX4 Setup

DDS topics: the PX4 topics exposed to ROS 2 are configured in PX4-Autopilot/src/modules/uxrce_dds_client/dds_topics.yaml. Edit this file if you need additional topics.

Arming and mode switching: by default, PX4 expects RC inputs and a QGroundControl (QGC) connection before it allows arming and mode switching. These are the recommended settings for real deployments. Set up either QGC or a headless configuration before running the examples. Both options below describe how to switch to offboard mode and arm the vehicle.

With QGC (recommended) 1. Open QGroundControl. 2. Click the QGroundControl icon in the top left corner and open "Application Settings". 3. Under the "Fly View" tab, scroll down to "Virtual Joysticks" and enable them by clicking the slider to the right of "Enabled". 4. Make sure that auto-center throttle is disabled. 5. Click "Exit Application Settings" in the top left corner to return to the Fly View screen. To start the MPC, select "Offboard" in the flight mode menu in the top toolbar, then arm the vehicle. > **Important:** Before arming the vehicle, make sure that the throttle (left vertical joystick) is at the lowest position.
Headless (no QGC) > **Warning:** Do this at your own risk. We recommend using QGC to keep hardware and software setups consistent. Disable the RC check and the QGC connection requirement by setting the following parameters in the PX4 SITL terminal: File truncated at 100 lines [see the full file](https://github.com/discower/px4-mpc/tree/master/README.md)
No version for distro melodic showing github. Known supported distros are highlighted in the buttons above.
Repo symbol

px4-mpc repository

mpc_msgs px4_mpc

ROS Distro
github

Repository Summary

Description
Checkout URI https://github.com/discower/px4-mpc.git
VCS Type git
VCS Version master
Last Updated 2026-09-27
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
mpc_msgs 0.0.0
px4_mpc 0.0.0

README

PX4 MPC

Model Predictive Control (MPC) for spacecraft and multirotors running on PX4 Autopilot, integrated with ROS 2.

px4-mpc

This package runs MPC controllers as ROS 2 nodes that talk to PX4 through the uXRCE-DDS bridge. The controllers read vehicle states from PX4 and send setpoints back in offboard mode. The optimal control problems are built and solved with the acados framework.

The main vehicle is the ATMOS free-flyer spacecraft. Its controller has several control modes, from body rates and wrench commands down to direct thruster allocation. A quadrotor (x500) example is also included. Setpoints can be set interactively in RViz or come from a predefined setpoint node.

Citation

If you find this package useful in academic work, please cite:

P. Roque, S. Phodapol, E. Krantz, J. Lim, J. Verhagen, F. Jiang, D. Dorner, R. Siegwart, I. Stenius, G. Tibert, H. Mao, J. Tumova, C. Fuglesang and D. V. Dimarogonas, “Towards Open-Source and Modular Space Systems with ATMOS,” arXiv preprint arXiv:2501.16973, 2025.

arXiv

BibTeX
@article{roque2025towards,
  title={Towards Open-Source and Modular Space Systems with ATMOS},
  author={Roque, Pedro and Phodapol, Sujet and Krantz, Elias and Lim, Jaeyoung and Verhagen, Joris and Jiang, Frank and Dorner, David and Siegwart, Roland and Stenius, Ivan and Tibert, Gunnar and others},
  journal={arXiv preprint arXiv:2501.16973},
  year={2025}
}

Quick Start

Prerequisites

Install

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
git clone https://github.com/PX4/px4_msgs.git              # PX4 messages for communication with PX4 DDS
git clone https://github.com/DISCOWER/px4-offboard.git     # RViz interface and setpoint generation
git clone https://github.com/DISCOWER/px4-mpc.git          # this package
cd ..

Install the remaining dependencies (ROS 2 packages, NumPy, SciPy, CasADi, python-control, …) with rosdep. If you have never used rosdep before, run sudo rosdep init first.

rosdep update
rosdep install --from-paths src --ignore-src -y

Build the workspace:

colcon build --packages-up-to px4_mpc
source install/setup.bash  # use setup.zsh for zsh users

Note: rosdep does not install acados. Install it and its Python interface as described in Prerequisites.

For the propeller control mode, also clone atmos_propeller_plate_interface into ~/ros2_ws/src, rerun the rosdep install command above, and build it:

colcon build --packages-up-to px4_mpc propeller_plate_iface

PX4 Setup

DDS topics: the PX4 topics exposed to ROS 2 are configured in PX4-Autopilot/src/modules/uxrce_dds_client/dds_topics.yaml. Edit this file if you need additional topics.

Arming and mode switching: by default, PX4 expects RC inputs and a QGroundControl (QGC) connection before it allows arming and mode switching. These are the recommended settings for real deployments. Set up either QGC or a headless configuration before running the examples. Both options below describe how to switch to offboard mode and arm the vehicle.

With QGC (recommended) 1. Open QGroundControl. 2. Click the QGroundControl icon in the top left corner and open "Application Settings". 3. Under the "Fly View" tab, scroll down to "Virtual Joysticks" and enable them by clicking the slider to the right of "Enabled". 4. Make sure that auto-center throttle is disabled. 5. Click "Exit Application Settings" in the top left corner to return to the Fly View screen. To start the MPC, select "Offboard" in the flight mode menu in the top toolbar, then arm the vehicle. > **Important:** Before arming the vehicle, make sure that the throttle (left vertical joystick) is at the lowest position.
Headless (no QGC) > **Warning:** Do this at your own risk. We recommend using QGC to keep hardware and software setups consistent. Disable the RC check and the QGC connection requirement by setting the following parameters in the PX4 SITL terminal: File truncated at 100 lines [see the full file](https://github.com/discower/px4-mpc/tree/master/README.md)
No version for distro noetic showing github. Known supported distros are highlighted in the buttons above.
Repo symbol

px4-mpc repository

mpc_msgs px4_mpc

ROS Distro
github

Repository Summary

Description
Checkout URI https://github.com/discower/px4-mpc.git
VCS Type git
VCS Version master
Last Updated 2026-09-27
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
mpc_msgs 0.0.0
px4_mpc 0.0.0

README

PX4 MPC

Model Predictive Control (MPC) for spacecraft and multirotors running on PX4 Autopilot, integrated with ROS 2.

px4-mpc

This package runs MPC controllers as ROS 2 nodes that talk to PX4 through the uXRCE-DDS bridge. The controllers read vehicle states from PX4 and send setpoints back in offboard mode. The optimal control problems are built and solved with the acados framework.

The main vehicle is the ATMOS free-flyer spacecraft. Its controller has several control modes, from body rates and wrench commands down to direct thruster allocation. A quadrotor (x500) example is also included. Setpoints can be set interactively in RViz or come from a predefined setpoint node.

Citation

If you find this package useful in academic work, please cite:

P. Roque, S. Phodapol, E. Krantz, J. Lim, J. Verhagen, F. Jiang, D. Dorner, R. Siegwart, I. Stenius, G. Tibert, H. Mao, J. Tumova, C. Fuglesang and D. V. Dimarogonas, “Towards Open-Source and Modular Space Systems with ATMOS,” arXiv preprint arXiv:2501.16973, 2025.

arXiv

BibTeX
@article{roque2025towards,
  title={Towards Open-Source and Modular Space Systems with ATMOS},
  author={Roque, Pedro and Phodapol, Sujet and Krantz, Elias and Lim, Jaeyoung and Verhagen, Joris and Jiang, Frank and Dorner, David and Siegwart, Roland and Stenius, Ivan and Tibert, Gunnar and others},
  journal={arXiv preprint arXiv:2501.16973},
  year={2025}
}

Quick Start

Prerequisites

Install

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
git clone https://github.com/PX4/px4_msgs.git              # PX4 messages for communication with PX4 DDS
git clone https://github.com/DISCOWER/px4-offboard.git     # RViz interface and setpoint generation
git clone https://github.com/DISCOWER/px4-mpc.git          # this package
cd ..

Install the remaining dependencies (ROS 2 packages, NumPy, SciPy, CasADi, python-control, …) with rosdep. If you have never used rosdep before, run sudo rosdep init first.

rosdep update
rosdep install --from-paths src --ignore-src -y

Build the workspace:

colcon build --packages-up-to px4_mpc
source install/setup.bash  # use setup.zsh for zsh users

Note: rosdep does not install acados. Install it and its Python interface as described in Prerequisites.

For the propeller control mode, also clone atmos_propeller_plate_interface into ~/ros2_ws/src, rerun the rosdep install command above, and build it:

colcon build --packages-up-to px4_mpc propeller_plate_iface

PX4 Setup

DDS topics: the PX4 topics exposed to ROS 2 are configured in PX4-Autopilot/src/modules/uxrce_dds_client/dds_topics.yaml. Edit this file if you need additional topics.

Arming and mode switching: by default, PX4 expects RC inputs and a QGroundControl (QGC) connection before it allows arming and mode switching. These are the recommended settings for real deployments. Set up either QGC or a headless configuration before running the examples. Both options below describe how to switch to offboard mode and arm the vehicle.

With QGC (recommended) 1. Open QGroundControl. 2. Click the QGroundControl icon in the top left corner and open "Application Settings". 3. Under the "Fly View" tab, scroll down to "Virtual Joysticks" and enable them by clicking the slider to the right of "Enabled". 4. Make sure that auto-center throttle is disabled. 5. Click "Exit Application Settings" in the top left corner to return to the Fly View screen. To start the MPC, select "Offboard" in the flight mode menu in the top toolbar, then arm the vehicle. > **Important:** Before arming the vehicle, make sure that the throttle (left vertical joystick) is at the lowest position.
Headless (no QGC) > **Warning:** Do this at your own risk. We recommend using QGC to keep hardware and software setups consistent. Disable the RC check and the QGC connection requirement by setting the following parameters in the PX4 SITL terminal: File truncated at 100 lines [see the full file](https://github.com/discower/px4-mpc/tree/master/README.md)