MAVSDK Server Plugins: How To Connect?

Hi,

I am working on a robot of the rover kind (in fact a robotic harbor tug PoC based on an R/C boat) which I would like to “mesh” later with some Px4 based aerial drones.

The tug runs on some CAN-bus connected MCU’s and a RaspberryPi with a PiCAN hat. I would like to use QGroundcontrol as a means of planning tug missions and receiving a camera stream later.

I use the MAVSDK server plugins on the tug’s RasPi and am not sure if I fully understood the connection process between vehicle and QGC.

Based on the autopilot_server example from MAVSDK I tried two approaches:

1.1) create a generic UDP MAVLink Comm Link in QGC:

image

1.2) connect to the GCS IP adress from the vehicle:

mavsdk::Mavsdk mavsdkConnection;
...
auto result = mavsdkConnection.add_any_connection("udp://192.168.0.155:14551");
if (mavsdkConnection.systems().size()) {
   auto system = mavsdkConnection.systems().back();
   ...
}

The other approach is:

2.1) create a dedicated UDP MAVLink Comm Link in QGC with the vehicle as a server:

image

2.2) subscribe the vehicle to connection attempts from the GCS:

mavsdk::Mavsdk mavsdkConnection;
...
auto result = mavsdkConnection.add_any_connection("udp://:14551");
...
auto prom = std::promise < std::shared_ptr < mavsdk::System >> {};
auto fut = prom.get_future();

mavsdkConnection.subscribe_on_new_system([&mavsdkConnection, &prom]() {
    auto system = mavsdkConnection.systems().back();
    prom.set_value(system);
});

auto system = fut.get();

Both approaches seem to work, but I wonder if one of them can be considered the “preferred” one? I tend to like the second approach better, since the vehicle does not have to know the GCS address.

Thanks in advance for your input…

Kai