Giter Site home page Giter Site logo

imc22-remote-piloting's Introduction

Analyzing Real-time Video Delivery over Cellular Networks for Remote Piloting Aerial Vehicles

Aygün Baltaci1,2, Hendrik Cech1, Nitinder Mohan1, Fabien Geyer2, Vaibhav Bajpai3, Jörg Ott1, Dominic Schupke2

1Technical University of Munich, 2Airbus, 3CISPA Helmholtz Center for Information Security


This repository contains the scripts and programs that we developed for our publication “Analyzing Real-time Video Delivery over Cellular Networks for Remote Piloting Aerial Vehicles” that was presented at the ACM Internet Measurement Conference 2022. It contains scripts to generate the figures contained in our paper, the scripts that drove our measurements, and the parsers to assemble the reported metrics.

Video delivery pipeline

The application that we used to deliver video with an adaptive bitrate over LTE is available at hendrikcech/imc22-video-pipeline along with setup and usage instructions. It makes use of the gst-timecode GStreamer element.

Dataset

The dataset that we built by conducting drone flights is available for download at mediaTUM. It contains an SQLite database where we aggregated the collected metrics. We ask you to cite our IMC'22 paper upon use.

@inproceedings{uavIMC2022,
    author={Baltaci, Ayg{\"u}n and Cech, Hendrik and Mohan, Nitinder and Geyer, Fabien and Bajpai, Vaibhav and Ott, J{\"o}rg and Schupke, Dominic},
    title={{Analyzing Real-time Video Delivery over Cellular Networks for Remote Piloting Aerial Vehicles}},
    booktitle={Proceedings of Internet Measurement Conference},
    publisher={Association for Computing Machinery},
    address={New York, NY, USA},
    url={https://doi.org/10.1145/3517745.3561465},
    doi={10.1145/3517745.3561465},
    year={2022},
    series={IMC '22}
}

Paper Figures

Example figure Example figure legend

The figures contained in our paper can be generated with the following steps.

Step 1: Download the dataset

Please visit our mediaTUM publication and download our dataset. It contains a SQLite database from which the plotted data is retrieved. The dataset can be conveniently downloaded using rsync:

export RSYNC_PASSWORD=m1687221
rsync -r –-info=progress2 rsync://[email protected]/m1687221/ imc22-dataset/

Step 2: Set up Python

We used Python version 3.10.5 to generate the plots. Install the required packages listed in requirements.txt either system-wide or in a virtual environment as described below.

pip3 -m venv venv
source venv/bin/activate
pip3 install -r requirements.txt

Step 3: Run the scripts

Each plot is generated by a separate script contained in figures/. To generate all figures, run plot_all.sh with the location of the extracted SQLite database as the first argument. You will find the generated figures in a new directory called figures_pdf.

Measurement scripts

The directory measurements/ contains the scripts that we used to collect data during our UAV flights. Some scripts open a SSH connection to the remote server, using the SSH alias aws. The unique measurement device id is read from /boot/pi_id which is a text file containing a number.

measurements/
├── helpers
│   ├── info.sh
│   ├── iso_date.sh
│   └── tcpdump.sh
├── iperf_server.sh 
├── iperf.sh         # Executed on the client. Uses SSH to execute# iperf_server.sh on the server.
│
├── ping.sh          # Executes ICMP or TCP pings.
├── roq_play.sh
├── roq_serve.sh     # Executed on the client. Starts roq_play.sh on the server.
├── test-roq.sh      # Starts tcpdump and roq_serve.sh with the selected # CC algorithm (static, GCC, or SCReAM).
└── test-utils.sh

Measurement log processing

The folder parsers contains scripts to parse the measurement artifacts that are available at mediaTUM. The tool GNU parallel can be useful to speed up the computation of metrics. By following the listed steps, the relevant metrics are computed and finally compiled into a SQLite database that can be queried easily.

In the following examples, we use two environment variables:

DATASET=./imc22-dataset  # Path to the downloadeded mediaTUM dataset
SCRIPTS=./imc22-scripts  # Path to this repository

Compute SSIM

The SSIM is computed by comparing the source video and the received video. The computation can take a while so we recommend to run multiple computations in parallel. While running, the SSIM results are written next to the receiver video file.

parallel -j 20 --eta "$SCRIPTS/parsers/ssim.py" "$DATASET/video/train_30.mp4" "{}" --method qr --save ::: "$DATASET"/220*/*/*server.avi

Compute latency of RTP and ping packets

ping_pcaps() {
    PCAPS_PI="$(find "$DATASET"/220* -iname '*ping*pi.pcap')"
    for PCAP_PI in $PCAPS_PI; do
        cd "$(dirname "$PCAP_PI")"
        PCAPS_SERVER=( *server*pcap ) # use first pcap
        echo "$PCAP_PI"
        echo "$(pwd)/$PCAPS_SERVER"
    done
}
export -f ping_pcaps

parallel -N 2 "$SCRIPTS/parsers/pcap_latency_loss.py" "{1}" "{2}" ::: \
    $(ping_pcaps)

parallel -N 2 "$SCRIPTS/parsers/pcap_latency_loss.py" "{1}" "{2}" ::: \
    "$DATASET"/220*/*/*roq*rtp.pcap

Populate the SQLite database

Import all csv files into a new SQLite database db.sqlite3.

find "$DATASET"/220* -type f -iname '*csv' \
    -exec "$SCRIPTS/parsers/roq.py" "{}" db.sqlite3 \;

# Populate table 'ping'
find "$DATASET"/220* -type f -iname '*ping*txt' \
    -exec "$SCRIPTS/parsers/roq.py" "{}" db.sqlite3 \;

# Populate table 'flight'
find "$DATASET/flight_logs" -type f -iname '*csv' \
    -exec "$SCRIPTS/parsers/flight.py" "{}" db.sqlite3 \;

# Populate table 'modem'
for PI in 1 2 3 4 5 6; do
    find "$DATASET/lte_ue_logs" -type f -iname "*_${PI}_*log" \
        -exec "$SCRIPTS/parsers/modem_log.py" db.sqlite3 "$PI" "{}" \;
done

# Populate table 'handovers'
for PI in 1 2 3 4 5 6; do
    for MNO in P1 P2; do
        find "$DATASET/lte_ue_logs" -type f -iname "*${PI}_${MNO}.pcap" \
            -exec "$SCRIPTS/parsers/modem_pcap.py" "$PI" "$MNO" "{}" db.sqlite3 \;
    done
done

Add information to the “notes” column of the static tests.

UPDATE `index` SET notes = '5 Mbps'  WHERE day='220217U' AND flight=4 AND pi=6;
UPDATE `index` SET notes = '10 Mbps' WHERE day='220217U' AND flight=5 AND pi=6;
UPDATE `index` SET notes = '15 Mbps' WHERE day='220217U' AND flight=6 AND pi=6;
UPDATE `index` SET notes = '20 Mbps' WHERE day='220217U' AND flight=7 AND pi=6;

UPDATE `index` SET notes = '15 Mbps' WHERE day='220313U' AND flight=1 AND pi=6;
UPDATE `index` SET notes = '25 Mbps' WHERE day='220313U' AND flight=2 AND pi=6;
UPDATE `index` SET notes = '25 Mbps' WHERE day='220313U' AND flight=5 AND pi=6;
UPDATE `index` SET notes = '25 Mbps' WHERE day='220313U' AND flight=9 AND pi=6;

UPDATE `index` SET notes = '10 Mbps' WHERE day='220323R' AND flight=2 AND pi=5;
UPDATE `index` SET notes = '10 Mbps' WHERE day='220323R' AND flight=2 AND pi=6;

UPDATE `index` SET notes = '25 Mbps' WHERE day='220323R' AND flight=3 AND pi=5;
UPDATE `index` SET notes = '8 Mbps' WHERE day='220323R' AND flight=3 AND pi=6;

UPDATE `index` SET notes = '25 Mbps' WHERE day='220323R' AND flight=6 AND pi=5;
UPDATE `index` SET notes = '8 Mbps'  WHERE day='220323R' AND flight=6 AND pi=6;

UPDATE `index` SET notes = '8 Mbps'  WHERE day='220323R' AND flight=12 AND pi=6;
UPDATE `index` SET notes = '12 Mbps' WHERE day='220323R' AND flight=13 AND pi=6;

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.