Skip to main content

Manual

Bu dokümantasyon, GCS (Ground Control Station) sistemimizde yer alan Commander, UI ve Exporter servislerinin teknik ayrıntılarını, kurulum adımlarını ve kullanım senaryolarını kapsar. Amaç; yeni ekip üyelerinin sistemi hızlıca ayağa kaldırmasını, mevcut kullanıcıların ise referans niteliğinde detaylı bilgilere erişmesini sağlamaktır.

Overview

Bu GCS sistemi, insansız hava aracı (UAV) operasyonlarını; HITL, SITL ve gerçek sahada yönetmek; gözlemlemek; analiz amacıyla geliştrilmiştir.

Architecture

design-diagram

Yukarıdaki diyagramda;

  • commander servisi MAVSDK kullanarak çift yönlü, exporter servisi ise direkt olarak mavlink mesajlarını topladığı için tek yönlü UAV ile haberleşilir.
  • ui servisi commander'ın sağladığı temel aksiyonlar (arm/disarm, takeoff/land etc.) ve düşük frekanslı telemetri veriler için bir arayüz sağlar.
  • exporter servisi ise mavlink verilerini telegraf'ın ve prometheus'un toplayabileceği formatta bir rest api sağlar.
  • Telegraf, Influxdb'ye gelen telemetri verilerini yazar ve grafana'da drone'un izlenebilmesi için görselleştirme yapılır.

Services

1. Commander

Commander, bir flask api'dır. MAVSDK ile drone'la iletişimini sağlar ve UI servisinin kullanabileceği şekilde bir REST API sunar.

Configuration

Configuration olarak hem bir yaml manifest hem de env değişkeni olarak değer verilebilir. Öncelik olarak sırasıyla aşağıdaki şekilde okunur:

Default values -> Yaml File (COMMANDER_CONFIG_FILE) -> Environment Vars

Genel konfigürasyonlar

fieldyaml/env referencedefaultdescription
Config Pathsadece env: COMMANDER_CONFIG_PATHcommander.ymlCommander configuration dosyasının yolunu belirtir.
Portcommander.port / COMMANDER_PORT3000Commander'ın REST API sunduğu portunu belirtir.
Host Addrcommander.host_addr / COMMANDER_HOST_ADDR0.0.0.0Commander REST API'sinin host adresini belirtir.

Connection Konfigürasyonu

fieldyaml/env referencedefaultdescription
Nameconnections[n].name CONNECTION_<connection_name>_NAME-Connection ismi
Descriptionconnections[n].description CONNECTION_<connection_name>_NAME-Connection açıklaması
Telemetryconnections[n].telemetry CONNECTION_<connection_name>_TELEMETRYfalseConnection için telemetry dinlenip dinlenmeyeceğini belirtir. Default olarak false olarak ayarlıdır.
Connection Typeconnections[n].connection.type CONNECTION_<connection_name>_TYPE-Bağlantı türü belirtir. tcp|udp|serial
Connection Addressconnections[n].connection.addr CONNECTION_<connection_name>_ADDR-Bağlantı adresini belirtir. [ip_addr]:<port>

Örnek bir yaml konfigürasyon dosyası:

# commander.yml
commander:
port: 3000

connections:
- name: drone_1
description: "drone controller connection"
telemetry: true
connection:
type: "tcp"
addr: ":5760"

Örnek olarak bu konfigürasyon override yapmak için env kullanılır:

COMMANDER_PORT=8080
CONNECTION_DRONE_1_ADDR=":5760"

2. UI Service

UI, Commander'ın sunduğu REST API'yi kullanan bir web arayüzüdür. Kullanıcıların drone'u kontrol etmesine, telemetri verilerini izlemesine ve aksiyonlar almasına olanak tanır.

Configuration

Build sırasında verilmesi gereken parametreler:

VITE_MAPTILER_API_KEY= # Maptiler API KEY
VITE_MAP_VISIBLE= # set whether the map appears or not (1: VISIBLE, 0: INVISIBLE)
VITE_API_URL= # Commander API Service URL (Example: http://127.0.0.1:<PORT>)

Overview

UI servisini başlattığınızda ve bir bağlantı durumu varsa aşağıdaki gibi bir görüntüyle karşılaşacaksınız. Eğer bir problemle karşılaşır veya nasıl başlatıcağınızı bilmiyorsanız Installation başlığına bakınız.

Arayüz, 5 ana parçadan oluşmaktadır:

  • Scene - Arayüzdeki en fazla yer kaplayan ana parçasıdır. Default olarak harita görünümünü içerir. Harita dışında, drone'ların kamera görüntülerini, telemetri verilerini burada görüntülenebilir.(*)
  • Connection Bar - Commander bağlantısında bulunan drone'lar arasında gezinmenize olanak tanır
  • Toolbar - Drone ve hub ile ilgili tüm ayarları ve aksiyonlar buradan yapılır.
  • Panels - Ekranın ortasında; 2 adet üst ve altında olmak üzere drone ile ilgili telemetry verilerini gösterilir. İstenildiği zaman toolbar'dan profile sekmesinden ayarlanabilir.
  • MFD - Multi Function Display olarak adlandırılan bu bileşen, hem aksiyon hem de status olarak kullanılabilen özelleştirilmiş panellerdir. Şuanda logs, camera, status olarak 3 adet panel bulunmaktadır. logs paneli, drone ile ilgili logları gösterirken, camera paneli drone'un kamerasından gelen görüntüleri gösterir. status paneli ise drone'un anlık durumunu ve telemetri verilerini içerir.
  • Status Bar - Ekranın en altında bulunan bu bar, arayüzün genel durumunu ve bağlantı bilgilerini gösterir.

hub-layout

3. Exporter

Exporter, Drone'dan gelen mavlink mesajlarını dışa aktarmak için kullanılan bir servistir. Bu, verilerin başka sistemlere veya hizmetlere entegre edilmesine olanak tanır. Bizim sistemimizde, drone'dan gelen telemetri verilerini telegraf ve prometheus gibi sistemlere entegre etmek için kullanıyoruz. Prometheus exporter ve json formatlarında HTTP üzerinden sunar.

Configuration

Exporter servisi environment değişkenleri ile yapılandırılabilir.

fielddefaultdescription
EXPORTER_LISTEN_PORT5760Mavlink yayın portu (0-65565)
EXPORTER_LISTEN_TYPEudpMavlink yayın türü (udp, tcp)
EXPORTER_LISTEN_HOST-Mavlink yayın adresi (örn: 127.0.0.1)
EXPORTER_PORT3000Exporter HTTP portu (0-65565)
EXPORTER_INTERVAL2000Servisin ne sıklıkla gelen verileri tutacağını belirtir. (ms cinsinden)

Installation

There are 3 available ways of installation to start application. Before to skip installation of gcs, make sure you have configured the service you'd like to start (see Configuration section).

Development Environment

Make sure Docker is installed on your machine. If not, install it from Docker Website.

To get started:

  1. Open the project with VSCode
  2. When prompted, click “Reopen in Container” (bottom-right popup).
  3. Use the Taskfile to run specific services:
    task <app>:run

Replace <app> with ui, commander, or other available services.

Note: At reopen stage, it will take 2-3mins for building devcontainer

Running in SITL (Locally)

  • Navigate to the build/ directory

  • SITL (Software-In-The-Loop) mode allows you to simulate UAVs without any physical hardware. This is ideal for development, testing, and mission planning in a safe, virtual environment.

  • To start the application in SITL mode, simply run:

docker compose up -d
Service NameImagePorts
Commanderghcr.io/teamhalaskar/gcs:commander3000
UIlocal build*8080
PX4 SITL (Gazebo)jonasvautherin/px4-gazebo-headless:latest14540 , 14550

Running in Production Mode

  • Navigate to the deploy directory

  • To start the gcs system with all services, run:

docker compose up -d
Service NameImagePorts
Commanderghcr.io/teamhalaskar/gcs-commander3001
UIlocal build*8080
Exporterghcr.io/teamhalaskar/gcs-exporter3002
Telegraftelegraf:latest-
InfluxDBinfluxdb:latest8086
Grafanagrafana/grafana:latest3000
Prometheusprom/prometheus:latest9090

Additionally, to start only external monitor, run:

docker compose up -f ./monitor/docker-compose.yml -d

Configuration

Configuration for the GCS system can be done through environment variables or YAML files. The priority order is as follows:

  1. Default values
  2. YAML File (specified by COMMANDER_CONFIG_FILE)
  3. Environment Variables The configuration files for each service can be found in the respective directories. For example, the Commander service configuration is located at commander/commander.yml.

Note

This documentation is a work in progress and may not cover all aspects of the GCS system.