Skip to content

Latest commit

 

History

History
67 lines (52 loc) · 2.44 KB

README.md

File metadata and controls

67 lines (52 loc) · 2.44 KB

px4-mpc

This package contains an MPC integrated with with PX4 Autopilot and ROS 2.

The MPC uses the acados framework

px4-mpc

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]
@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 To build the code, clone the following repositories into a ros2 workspace Dependencies

colcon build --packages-up-to px4_mpc

Testing demos

ros2 run px4_mpc quadrotor_demo

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

Run PX4 SITL

make px4_sitl gazebo

Run the micro-ros-agent

micro-ros-agent udp4 --port 8888

In order to launch the mpc quadrotor in a ros2 launchfile,

ros2 launch px4_mpc mpc_quadrotor_launch.py 

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:

ros2 launch px4_mpc mpc_spacecraft_launch.py mode:=wrench namespace:=<namespace> setpoint_from_rviz:=False