Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Airbound LTE Flight Dashboard

Automated analysis pipeline for 4G LTE telemetry link performance on ArduPilot-based UAV test flights. Push flight logs from the field → GitHub parses them, builds an interactive dashboard, and publishes it as a live webpage — no manual steps after the initial setup.


What this does

Each ArduPilot .BIN flight log contains raw LTES (LTE Status) records capturing the modem's cell connection throughout the flight. This pipeline parses those records and produces an interactive HTML report covering:

Link reliability

  • Outage events detected from LTES record gaps (ground truth — not just MSG strings)
  • Per-outage timeline: when it dropped, how long it was down, whether it recovered
  • Uptime % per flight and per day

Script performance scoring

  • Recovery speed after a drop (how fast the reconnect sequence completed)
  • Connect success rate (successful AT sequences vs failed/stuck ones)
  • Stuck AT step detection (CMUX, CPIN, CREG loops that stalled)

RF / network quality scoring

  • Mean RSRP and SINR per flight
  • LTE band usage and cross-band handover rate
  • Day-over-day signal quality comparison

Tower switch analysis

  • Cell ID transitions mapped to GPS coordinates
  • Cross-band switch hotspots (locations where band changes recur)
  • Cell boundary pair frequency

Day ranking Script performance and network quality are scored separately — so a day with many drops but fast recoveries scores differently from a day where the script stalled. This separates what the script did from what the network environment was.


Log format

Logs come from a Pixhawk 6C running ArduPlane with a Quectel EC25 modem managed by a Lua script over CMUX. The .BIN files are standard ArduPilot dataflash logs.

The analyser extracts four record types: LTES, GPS, BARO, MSG.


Folder naming convention

Log folders must follow this pattern exactly:

DD_MM_YYYY_fieldname

The field name is freeform but the keywords far, near, and fighting are recognised and used as labels in the dashboard. Examples:

logs/
  13_05_2026_far/
    00000060.BIN
  19_05_2026_near/
    00000067.BIN
    00000068.BIN
  21_05_2026_fighting/
    00000072.BIN

Multiple .BIN files per folder are supported — each is treated as a separate flight within that day.


One-time setup

1. Create the GitHub repo

Go to github.com/new:

  • Name: airbound-lte-dashboard (or anything)
  • Visibility: Public — required for free GitHub Pages
  • Leave it completely empty (no README, no .gitignore)

2. Push this folder

cd airbound-lte-v2
git init
git add .
git commit -m "initial setup"
git remote add origin https://github.com/YOUR_USERNAME/airbound-lte-dashboard.git
git branch -M main
git push -u origin main

3. Enable GitHub Pages

After the first push triggers the Action and the gh-pages branch is created (~3 min):

  1. Repo → SettingsPages
  2. Source: Deploy from a branch
  3. Branch: gh-pages / folder: / (root)
  4. Save

Your dashboard URLs will be:

Page URL
All dates index https://YOUR_USERNAME.github.io/airbound-lte-dashboard/date_index.html
Combined (all days) https://YOUR_USERNAME.github.io/airbound-lte-dashboard/
Specific date https://YOUR_USERNAME.github.io/airbound-lte-dashboard/2026-05-21/

Adding new flight logs

# Copy the day's folder into logs/
cp -r /path/to/21_05_2026_far  logs/

# Commit and push
git add logs/
git commit -m "21-May-2026 far field"
git push

GitHub Actions then:

  1. Detects which date folders are new in this push
  2. Parses all .BIN files via mavlogdump
  3. Builds a per-date dashboard + regenerates the combined dashboard
  4. Publishes both to the gh-pages branch (live within ~1 min of the build finishing)
  5. Creates a Release tagged flight-2026-05-21 with a direct link to that date's report

Find it under: repo → Releases → click the date → click Open Dashboard in the description.

Checking build status

Repo → Actions tab → latest run:

  • 🟡 Running (~3–4 min for a typical day's logs)
  • ✅ Done — dashboard updated
  • ❌ Failed — click the run to see which step errored

What gets published

gh-pages branch/
├── index.html              ← combined dashboard (all dates)
├── date_index.html         ← clickable index of all dates
├── 2026-05-13/
│   └── index.html
├── 2026-05-19/
│   └── index.html
└── 2026-05-21/
    └── index.html          ← linked from the Release

Configuration

Operator filter — edit .github/workflows/build-dashboard.yml:

--operator Airtel

Change to Jio, Vi, BSNL, etc.

.BIN files over 100 MB — GitHub blocks files above this limit. Use Git LFS:

git lfs install
git lfs track "*.BIN"
git add .gitattributes
git commit -m "track BIN files with LFS"
git push

GitHub Free includes 1 GB LFS storage and 1 GB/month bandwidth.


Stack

Component Detail
Flight controller Pixhawk 6C / ArduPlane
Modem Quectel EC25 (4G LTE)
Modem script Lua over CMUX on Serial4
Log format ArduPilot dataflash .BIN
Parser mavlogdump.py via pymavlink
CI GitHub Actions
Dashboard hosting GitHub Pages

About

This repository automatically parses ArduPilot flight logs from 4G LTE telemetry test flights and generates an interactive HTML dashboard. It tracks per-flight link reliability, signal quality (RSRP, RSRQ, SINR), tower switch events, reconnection behaviour, and day-over-day performance.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages