This repository contains a collection of thrust allocation methods and a ROS 2 node. Each method is implemented in both C++ and Python. The methods are implemented on milliAmpere1, which has four azimuth thrustersFor information about the theory, check out my thesis (link comes soon).
The following dependencies are needed:
There are five methods:
- Pseudoinverse: Simple unconstrained, fixed-angle thrust allocation.
- QP: The baseline method. Optimization-based.
- Maneuvering-based: A thrust allocation method based on the maneuvering-problem. Solves the thrust allocation problem as a tracking problem, and is able to handle secondary objectives.
- Power-aware maneuvering-based: An implementation of the maneuvering-based method where the secondary objective is to minimize the power consumption by utilizing the most power-efficient thrust direction of each thruster.
(It is assumed that the user is familiar with ROS 2 and the build system, if not check out the ROS 2 docs.)
Configure the parameters in config.
The Python node can be launched with
ros2 launch thrust_allocation thrust_allocation_py.launch.py allocator:=XXX
where allocator
can be pseudo_inverse, maneuvering, nlp, or qp, and it will default to pseudo_inverse.
The C++ node can be launched in a similar way
ros2 launch thrust_allocation thrust_allocation_cpp.launch.py allocator:=XXX