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

Yukarıdaki diyagramda;
commanderservisiMAVSDKkullanarak çift yönlü,exporterservisi ise direkt olarak mavlink mesajlarını topladığı için tek yönlü UAV ile haberleşilir.uiservisi commander'ın sağladığı temel aksiyonlar (arm/disarm, takeoff/land etc.) ve düşük frekanslı telemetri veriler için bir arayüz sağlar.exporterservisi 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
| field | yaml/env reference | default | description |
|---|---|---|---|
| Config Path | sadece env: COMMANDER_CONFIG_PATH | commander.yml | Commander configuration dosyasının yolunu belirtir. |
| Port | commander.port / COMMANDER_PORT | 3000 | Commander'ın REST API sunduğu portunu belirtir. |
| Host Addr | commander.host_addr / COMMANDER_HOST_ADDR | 0.0.0.0 | Commander REST API'sinin host adresini belirtir. |
Connection Konfigürasyonu
| field | yaml/env reference | default | description |
|---|---|---|---|
| Name | connections[n].name CONNECTION_<connection_name>_NAME | - | Connection ismi |
| Description | connections[n].description CONNECTION_<connection_name>_NAME | - | Connection açıklaması |
| Telemetry | connections[n].telemetry CONNECTION_<connection_name>_TELEMETRY | false | Connection için telemetry dinlenip dinlenmeyeceğini belirtir. Default olarak false olarak ayarlıdır. |
| Connection Type | connections[n].connection.type CONNECTION_<connection_name>_TYPE | - | Bağlantı türü belirtir. tcp|udp|serial |
| Connection Address | connections[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,statusolarak 3 adet panel bulunmaktadır.logspaneli, drone ile ilgili logları gösterirken,camerapaneli drone'un kamerasından gelen görüntüleri gösterir.statuspaneli 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.

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.
| field | default | description |
|---|---|---|
| EXPORTER_LISTEN_PORT | 5760 | Mavlink yayın portu (0-65565) |
| EXPORTER_LISTEN_TYPE | udp | Mavlink yayın türü (udp, tcp) |
| EXPORTER_LISTEN_HOST | - | Mavlink yayın adresi (örn: 127.0.0.1) |
| EXPORTER_PORT | 3000 | Exporter HTTP portu (0-65565) |
| EXPORTER_INTERVAL | 2000 | Servisin 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:
- Open the project with VSCode
- When prompted, click “Reopen in Container” (bottom-right popup).
- 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 Name | Image | Ports |
|---|---|---|
| Commander | ghcr.io/teamhalaskar/gcs:commander | 3000 |
| UI | local build* | 8080 |
| PX4 SITL (Gazebo) | jonasvautherin/px4-gazebo-headless:latest | 14540 , 14550 |
Running in Production Mode
-
Navigate to the
deploydirectory -
To start the gcs system with all services, run:
docker compose up -d
| Service Name | Image | Ports |
|---|---|---|
| Commander | ghcr.io/teamhalaskar/gcs-commander | 3001 |
| UI | local build* | 8080 |
| Exporter | ghcr.io/teamhalaskar/gcs-exporter | 3002 |
| Telegraf | telegraf:latest | - |
| InfluxDB | influxdb:latest | 8086 |
| Grafana | grafana/grafana:latest | 3000 |
| Prometheus | prom/prometheus:latest | 9090 |
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:
- Default values
- YAML File (specified by
COMMANDER_CONFIG_FILE) - 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.