https://github.com/jaeyoung-lim/px4-mpc
MPC implementation using acados integrated with with PX4 on ROS2
https://github.com/jaeyoung-lim/px4-mpc
drones mpc px4 robotics ros2
Last synced: 3 months ago
JSON representation
MPC implementation using acados integrated with with PX4 on ROS2
- Host: GitHub
- URL: https://github.com/jaeyoung-lim/px4-mpc
- Owner: DISCOWER
- License: bsd-3-clause
- Created: 2022-05-29T13:41:25.000Z (about 3 years ago)
- Default Branch: master
- Last Pushed: 2025-03-07T13:50:57.000Z (4 months ago)
- Last Synced: 2025-03-29T14:09:30.047Z (3 months ago)
- Topics: drones, mpc, px4, robotics, ros2
- Language: Python
- Homepage:
- Size: 138 KB
- Stars: 89
- Watchers: 6
- Forks: 20
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# px4-mpc
This package contains an MPC integrated with with [PX4 Autopilot](https://px4.io/) and [ROS 2](https://ros.org/).The MPC uses the [acados framework](https://github.com/acados/acados)

## Paper
If you find this package useful in an academic context, please consider citing the paper- Roque, Pedro, Sujet Phodapol, Elias Krantz, Jaeyoung Lim, Joris Verhagen, Frank Jiang, David Dorner, Roland Siegwart, Ivan Stenius, Gunnar Tibert, Huina Mao, Jana Tumova, Christer Fuglesang, Dimos V. Dimarogonas. "Towards Open-Source and Modular Space Systems with ATMOS." arXiv preprint arXiv:2501.16973 (2025).
. [[preprint](https://arxiv.org/abs/2501.16973)]```
@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}
}
```## Setup
The MPC formulation uses acados. In order to install acados, follow the following [instructions](https://docs.acados.org/installation/)
To build the code, clone the following repositories into a ros2 workspace
Dependencies
- [px4_msgs](https://github.com/PX4/px4_msgs/pull/15)
- [px4-offboard](https://github.com/Jaeyoung-Lim/px4-offboard) (Optional): Used for RViz visualization```
colcon build --packages-up-to px4_mpc
```## Running MPC with PX4 SITL
In order to run the SITL(Software-In-The-Loop) simulation, the PX4 simulation environment and ROS2 needs to be setup.
For instructions, follow the [documentation](https://docs.px4.io/main/en/ros/ros2_comm.html)Run PX4 SITL
```
make px4_sitl gazebo
```Run the micro-ros-agent
```
micro-ros-agent udp4 --port 8888
```### Quadrotor Example
In order to launch the mpc quadrotor in a ros2 launchfile,
```
ros2 launch px4_mpc mpc_quadrotor_launch.py
```### Spacecraft Example
First, make sure that you have followed the instructions in the [ATMOS guide](https://atmos.discower.io/pages/Simulation/). To control the vehicle with this package, make sure to switch the vehicle to Offboard mode in QGroundControl (see [QGroundControl in ATMOS guide](https://atmos.discower.io/pages/PX4/#building-qgroundcontrol-for-spacecraft).The mpc_spacecraft_launch.py file includes optional arguments:
- **mode**: Control mode (wrench by default). Options: wrench, rate, direct_allocation.
- **namespace**: Spacecraft namespace ('' by default).
- **setpoint_from_rviz**: Use RViz for setpoints (True by default).**Example with no namespace:**
```bash
ros2 launch px4_mpc mpc_spacecraft_launch.py mode:=wrench setpoint_from_rviz:=False
```**Example with namespace:**
For this example to work, make sure you have run the PX4 SITL with the same namespace. Here goes an example
```bash
PX4_UXRCE_DDS_NS=pop make px4_sitl gz_spacecraft_2d
```
On another terminal, run
```
micro-ros-agent udp4 --port 8888
```Lastly, start PX4-MPC
```bash
ros2 launch px4_mpc mpc_spacecraft_launch.py mode:=wrench namespace:=pop setpoint_from_rviz:=False
```