Skip to content

Infrastructure-free Multidimensional Scaling (MDS) for drones swarm localization. Performances comparison with trilateration algorithm

License

Notifications You must be signed in to change notification settings

oselin/drone-pose-estimation

Repository files navigation

Infrastructure-free Multidimensional Scaling (MDS) for drones swarm localization

Project developed for the course Design Methods for Unmanned Vehicles [146040] of the master's degree in Autonomous System (EIT), University of Trento.

The project aims to estimate the location of a fleet of drones via Multi-Dimensional Scaling (MDS) algorithm.

The performances are compared with standard trilateration algorithm, solved via numerical approach (Least Square Minimization - LSM)

The project has been developed as ROS2 package (distribution: Humble), mainly developed in Python3.

Authors: @muttigiacomo @oselin, @riccardoperiotto

The theoretical explanation and analysis can be found in report

MDS visualization Trilateration visualization

Structure of the software

After a first initialization, the measurement procedure starts and the motion of the anchor follows. Since both the algorithms require at least 4 measurements, an initial loop verifies that 4 measurements are taken before executing them.

Once achieved that, a measurement-motion cycle occurs, while the swarm of drones moves at constant velocity in space.

The logical structure of the code can be observed in the following figure.

Numerical simulation

A numerical simulation was run to collect data and further estimate some metrics for performance analysis.

The collected data is stored in ./data_analysis folder, as well as some Python and Jupyter Notebook scripts to compute both graphs and results.

The numerical simulation runs thanks to three main scripts, called test.py, hub.py and main.py.

The scripts are automatically started if the launch procedure (see next sections) is followed.

The software replicates the Software-in-the-loop (SITL) approach, by relying on a ArduPilot+Mavros emulation. The used topics can be seen in the following picture.

Gazebo simulation

Additionally, a proper SITL is achieved by introducing the combined usage of

  • Gazebo: to simulate the physics
  • ArduPilot: to introduce MavLink commands
  • Mavros: to allow MavLink-ROS2 communication

The SILT is computationally heavy and require high-performance hardware. Please do use it with few drones, even though it can support unlimited ones.

In the following picture, the Gazebo environment along with the used drones can be observed

Build and install the project

DISCLAMER: the project was developed on Ubuntu 22.04 and ROS2 Humble, updated on August 2023. The authors are not responsible for possible upgrades of either the OS or the tools used. Please verify yourself possible issues

WARNING: ROS2 is a very complex software and has compatibility problems with new OS versions

In order to install the software and make it work, few steps are needed.

  1. Download this repository. You can save it in any folder, but $HOME is preferred.

    cd ~
    git clone git@github.com:oselin/drone-pose-estimation.git
  2. If ROS2 Humble is not installed, please install it by running

    cd ~/drone-pose-estimation
    chmod +x install/install_ros2_humble.sh
    ./install/install_ros2_humble.sh
  3. Install all the tools and requirements needed for running the project, by running

    cd ~/drone-pose-estimation
    chmod +x install/install_tools.sh
    ./install/install_tools.sh

Run the project

To run the simulation using Gazebo, i.e. software-in-the-loop (SITL), please run

cd ~/drone-pose-estimation
chmod +x launch/launch_gazebo # only the first time, to provide permissions
./launch/launch_gazebo TYPE_NUMBER_OF_DESIRED_DRONES

An example can be

./launch/launch_gazebo 3

To run the simulation using the dynamic (numerical) model, please run

cd ~/drone-pose-estimation
chmod +x launch/launch_gazebo # only the first time, to provide permissions
./launch/launch_test TYPE_NUMBER_OF_DESIRED_DRONES

An example can be

./launch/launch_test 20