Software development
Learn more about developing the software with AIRLink and running your own custom apps.
The Sky-Drones Platform helps to integrate drones in custom end-to-end workflows with lots of enhanced features for advancing our enterprise customers:
  • Real-time digital HD video streaming
  • Real-time payload data processing (e.g. computer vision)
  • Real-time flight control (e.g. target tracking, collision prevention, and obstacle avoidance)
  • In-flight telemetry and payload data streaming directly to customer’s cloud
  • Drone-to-drone communications
  • Running custom apps directly on the drone (edge computing)
  • Safely performing autonomous BVLOS missions with real-time control
You have all the necessary infrastructure to develop your own drone software as well as use advanced software from Sky-Drones partners.

Accessing AIRLink Mission Computer with SSH

Open Terminal and access AIRLink Mission Computer with SSH using the following command:
You will be asked for the password, the default credentials are:
  • Login: smartap
  • Password: smartap
If you log in successfully you will see the following welcome page:
If you are connected to AIRLink using WiFi Access Point mode and your computer doesn't support local DNS, you would need to use IP address 10.42.0.1 instead of airlink.local.
That's all you need for the development and we assume now you know what to do :)

Root access

SSH root access is not available as standard for security and safety reasons. However, this can be provided by Sky-Drones upon request. Please contact us to get an access.

Read / Write MAVLink Telemetry data

SmartAP AIRLink provides user access for MAVLink telemetry stream which is useful for 3rd party applications development where you need to have access to the data from / to Autopilot and to / from Ground Control Station.
AIRLink supports 3 ports for user applications: 2 absolutely independent UDP ports and 1 TCP port for third party apps access:
#
Type
Host
Port
Protocol
1
UDP
127.0.0.1
14560
MAVLink
2
UDP
127.0.0.1
14561
MAVLink
3
TCP
127.0.0.1
14556
MAVLink
For developer's convenience we offer code samples for reading and writing MAVLink messages. This example displays how to read HEARTBEAT message from the other MAVLink nodes and send HEARTBEAT from our example.

UDP Example

Read / write MAVLink using UDP connection:
#!/usr/bin/python3
# Usage example of MAVLink UDP port for user applications
# To execute:
# python3 heartbeat_example_udp.py
# or
# python3 heartbeat_example.py 127.0.0.1:14560 35
# in this case: 127.0.0.1:14560 - address and port of mavlink source,
# now available 14560 and 14561 udp ports
# for user applications
# 35 - system-id for signature
#
import pymavlink.mavutil as mavutil
from pymavlink.dialects.v20 import common as mavlink
import sys
import time
from threading import Thread
if len(sys.argv) != 3:
# use default arguments if no arguments given from command line
srcSystem = mavlink.MAV_COMP_ID_USER1
remote_address = "127.0.0.1:14560"
else:
# use arguments from command line
srcSystem = int(sys.argv[2])
remote_address = sys.argv[1]
# create connection
mav = mavutil.mavlink_connection(
'udpout:' + remote_address, source_system=srcSystem)
def sender_loop():
while True:
mav.mav.heartbeat_send(mavlink.MAV_TYPE_GENERIC,
mavlink.MAV_AUTOPILOT_INVALID,
mavlink.MAV_MODE_FLAG_CUSTOM_MODE_ENABLED,
0,
mavlink.MAV_STATE_STANDBY)
time.sleep(2)
send_thread = Thread(target=sender_loop)
send_thread.daemon = True
send_thread.start()
while True:
msg = mav.recv_match(blocking=True)
if msg.get_type() == 'HEARTBEAT':
print("HEARTBEAT from %d: %s" % (msg.get_srcSystem(), msg))
Run this example with:
python3 heartbeat_example_udp.py

TCP Example

Read / write MAVLink using TCP connection:
#!/usr/bin/python3
# Usage example of MAVLink TCP port for user applications
# To execute:
# python3 heartbeat_example_tcp.py
# or
# python3 heartbeat_example.py 127.0.0.1:14556 35
# in this case: 127.0.0.1:14560 - address and port of mavlink source,
# now available 14556 tcp port
# 35 - system-id for signature
#
import pymavlink.mavutil as mavutil
from pymavlink.dialects.v20 import common as mavlink
import sys
import time
from threading import Thread
if len(sys.argv) != 3:
srcSystem = mavlink.MAV_COMP_ID_USER2
remote_address = "127.0.0.1:14556"
else:
srcSystem = int(sys.argv[2])
remote_address = sys.argv[1]
mav = mavutil.mavlink_connection(
'tcp:' + remote_address, source_system=srcSystem)
def sender_loop():
while True:
mav.mav.heartbeat_send(mavlink.MAV_TYPE_GENERIC,
mavlink.MAV_AUTOPILOT_INVALID,
mavlink.MAV_MODE_FLAG_CUSTOM_MODE_ENABLED,
0,
mavlink.MAV_STATE_STANDBY)
time.sleep(2)
send_thread = Thread(target=sender_loop)
send_thread.daemon = True
send_thread.start()
while True:
msg = mav.recv_match(blocking=True)
if msg.get_type() == 'HEARTBEAT':
print("HEARTBEAT from %d: %s" % (msg.get_srcSystem(), msg))

Run the example

Run the example with the following commands:
# Login via SSH
# Make sure that you have the example
# file in your home directory and run it with
python3 heartbeat_example_udp.py
Once you run the example above you should expect the following output. This is the Heartbeat message coming from the Flight Controller:
If you connect with the Ground Control Station software you will also see the heartbeat coming from the GCS:
Feel free to use these code samples for your custom apps development using SmartAP AIRLink and MAVLink communication protocol.

Get Video feed

AIRLink provides video feed access via RTSP either locally (127.0.0.1) or remotely (airlink.local). Currently, we support integrated CSI camera and HDMI input as well as NextVision cameras over Ethernet:
#
Video feed
Type
Host
Port
Address
1
CSI Camera
RTSP
127.0.0.1 or airlink.local
8554
rtsp://airlink.local:8554/camera/0
2
HDMI Input
RTSP
127.0.0.1 or airlink.local
8554
rtsp://airlink.local:8554/camera/1
3
NextVision Camera
RTSP
127.0.0.1 or airlink.local
8554
rtsp://airlink.local:8554/camera/2
To check the video stream using a standard GStreamer pipeline use the following command:
gst-launch-1.0 rtspsrc location=rtsp://airlink.local:8554/camera/0 ! rtph264depay ! avdec_h264 ! autovideosink sync=false
If you have any other questions related to the software development with AIRLink please get in touch with our support team here.
Copy link
Outline
Accessing AIRLink Mission Computer with SSH
Read / Write MAVLink Telemetry data
UDP Example
TCP Example
Run the example
Get Video feed