Example: Autopilot Server

The Autopilot Server example creates two instances of MAVSDK, representing a client (GCS) and a server (Vehicle). The MAVSDK instances communicates with each other via UDP transmitting telemetry, publishing parameters, missions and takeoff commands.

This example shows how to use MAVSDK Server Plugins! This is a good starting point if you are looking to implement MAVLink services to a non-MAVLink compatible system.

Running the Example

The example is built and run in the normal way (as described here).

The example terminal output should be similar to that shown below:

This is from a debug build of the SDK. A release build will omit the "Debug" messages.

$ ./autopilot_server
[04:44:24|Info ] MAVSDK version: v0.44.0 (mavsdk_impl.cpp:29)
[04:44:24|Info ] MAVSDK version: v0.44.0 (mavsdk_impl.cpp:29)
Connected!
[04:44:24|Error] Sending message failed (mavsdk_impl.cpp:278)
[04:44:24|Debug] Initializing connection to remote system... (mavsdk_impl.cpp:473)
Connected autopilot server side!
Sleeping thread 
[04:44:24|Info ] New system on: 127.0.0.1:40799 (with sysid: 1) (udp_connection.cpp:194)
[04:44:24|Debug] New: System ID: 1 Comp ID: 1 (mavsdk_impl.cpp:475)
[04:44:24|Debug] Component Autopilot (1) added. (system_impl.cpp:372)
[04:44:24|Debug] New: System ID: 245 Comp ID: 190 (mavsdk_impl.cpp:222)
[04:44:24|Debug] Component Unsupported component (190) added. (system_impl.cpp:372)
[04:44:25|Debug] Discovered 1 component(s) (system_impl.cpp:520)
Discovered Autopilot from Client
[04:44:25|Debug] Autopilot Capabilities Request (system_impl.cpp:297)
Setting System
MissionRawServer created
[04:44:35|Debug] Setting interval for msg id: 245 interval_ms:1000 (telemetry_server_impl.cpp:38)
[04:44:35|Debug] Request Param CAL_GYRO0_ID (mavlink_parameters.cpp:756)
[04:44:35|Debug] Request Param CAL_ACC0_ID (mavlink_parameters.cpp:756)
[04:44:35|Debug] Request Param CAL_MAG0_ID (mavlink_parameters.cpp:756)
[04:44:35|Debug] Request Param SYS_HITL (mavlink_parameters.cpp:756)
[04:44:40|Warn ] command unsupported (512). (mavlink_commands.cpp:205)
[04:44:41|Debug] Falling back to gimbal protocol v1 (mission_impl.cpp:131)
[04:44:45|Debug] Request Param my_param (mavlink_parameters.cpp:756)
Found Param my_param: 1
Creating Mission
Uploading mission...
SystemID1
[04:44:45|Debug] Receive Mission Count in Server (mission_raw_server_impl.cpp:150)
Received Uploaded Mission!
mission_plan:
{
    mission_items: [mission_item:
{
    seq: 0
    frame: 6
    command: 16
    current: 1
    autocontinue: 1
    param1: 0.5
    param2: 1
    param3: 0
    param4: nan
Mission uploaded.    x: 
473981703
    y: 85456490
    z: 10
    mission_type: 0
}, mission_item:
{
    seq: 1
    frame: 2
    command: 178
    current: 0
    autocontinue: 1
    param1: 1
    param2: 5
    param3: -1
    param4: 0
    x: 0
    y: 0
    z: nan
    mission_type: 0
}, mission_item:
{
    seq: 2
    frame: 2
    command: 204
    current: 0
    autocontinue: 1
    param1: 2
    param2: 0
    param3: 0
    param4: 1
    x: 0
    y: 0
    z: 2
    mission_type: 0
}, mission_item:
{
    seq: 3
    frame: 2
    command: 205
    current: 0
    autocontinue: 1
    param1: 20
    param2: 0
    param3: 60
    param4: nan
    x: 0
    y: 0
    z: 2
    mission_type: 0
}]
}
Current Item Changed!
Current Item: mission_item:
{
    seq: 0
    frame: 6
    command: 16
    current: 1
    autocontinue: 1
    param1: 0.5
    param2: 1
    param3: 0
    param4: nan
    x: 473981703
    y: [8545649004:44:45|Debug] 
    z: 10
    mission_type: 0
}
current: 0, total: 1Current Item Changed! (
Current Item: mission_item:
{
mission_impl.cpp    seq: 1
    frame: 2
    command: 178
    current: 0
    autocontinue: 1
    param1: :1839)
Current: 0
Total: 1

    param2: 5
    param3: -1
    param4: 0
    x: 0
    y: 0
    z: nan
    mission_type: 0
}
[Current Item Changed!
Current Item: mission_item:
{
    seq: 2
    frame: 2
    command: 204
    current: 0
    autocontinue: 1
    param1: 2
    param2: 0
    param3: 0
    param4: 1
    x: 0
    y: 0
    z: 2
    mission_type: 0
}
Current Item Changed!
Current Item: mission_item:
{
    seq: 3
    frame: 2
    command: 205
    current: 0
    autocontinue: 1
    param1: 20
    param2: 0
    param3: 60
    param4: nan
    x: 0
    y: 0
    z: 2
    mission_type: 0
}
Current Item Changed!
Current Item: mission_item:
{
    seq: 0
    frame: 6
    command: 16
    current: 1
    autocontinue: 1
    param1: 0.5
    param2: 1
    param3: 0
    param4: nan
    x: 473981703
    y: 85456490
    z: 10
    mission_type: 0
}
04:44:45|Debug] current: 1, total: 1 (mission_impl.cpp:839)
Current: 1
Total: 1
Clear All Mission!
Clear Mission Request
[04:45:05|Debug] Setting interval for msg id: 33 interval_ms:1000 (telemetry_server_impl.cpp:38)
Arming...
Altitude: 0 m
[04:45:05|Debug] Set Param Request: MIS_TAKEOFF_ALT (mavlink_parameters.cpp:724)
Taking off...
Altitude: 10 m
Altitude: 10 m
Altitude: 10 m
Altitude: 10 m
Altitude: 10 m
Altitude: 10 m
Altitude: 10 m
Altitude: 10 m
Altitude: 10 m
Altitude: 10 m
Altitude: 10 m
Altitude: 10 m
Altitude: 10 m
Altitude: 10 m
Altitude: 10 m
Altitude: 10 m
Altitude: 10 m
Altitude: 10 m
Altitude: 10 m
Altitude: 10 m
Altitude: 10 m
Altitude: 10 m
Altitude: 10 m
Altitude: 10 m
...

How it works

By creating two MAVSDK instances on separate threads, configuring them and then using different plugins on each, we are able to create a full MAVLink system (GCS <-> Vehicle) in one program.

Each plugin (and it's respective server plugin) implements a particular MAVLink service. By utilising the server plugins and client plugins we are able to create a full MAVLink system, without the need for a separate external autopilot.

Source code

© MAVSDK Development Team 2017-2023. License: CC BY 4.0            Updated: 2023-12-27 03:10:20

results matching ""

    No results matching ""