QGC companion computer integration idea

QGroundControl integration under network environment with companion computer

Complex vehicles and environments with multiple devices under the network are getting common and more popular with the lower costs of SBCs, flight controllers and sensors.

As we can see, MAVLink services like the camera service, supports camera definitions URI with http and mavlinkftp. Also, QGroundControl provides a zero-configuration network (zeroconf) support to find components, in a friendly way, under the network.

A critical point is to have seamless integration of QGroundControl under the network, right now QGroundControl needs to have a known IP address, since it has by default a UDP server for the mavlink source, and with that, the vehicle will then connect to QGroundControl UDP server port and provide the mavlink data for it.

In a simple network environment, where the only components that exist under the network are the vehicle (as DHCP server) and QGroundControl computer (as a DHCP client), the vehicle can have QgroundControl IP hardcoded or use a broadcasting system (MAVProxy’s udpbcast, that binds to a single client).

In a complex network, where more than two devices can exist under the network, the simple approach does not work anymore since the vehicle will be unable to detect which devices under the network have QGroundControl or are ground station computers, since it only works for a single client under the network.

How can we improve it ?

QGroundControl could work as a MAVLink client, where it seeks for MAVLink sources under the network. How can that be accomplished ? QGroundControl could simply publish a broadcast message:

broadcastAddress = "255.255.255.255"

writeDatagram(broadcastMessage, broadcastAddress, broadcastPort)

Where it could receive as an answer a simple json description of the companion computer capabilities and the necessary information for QGroundStation to configure itself in the network.

{
  "version": 1.0,
  "device": {
    "name": "Companion computer name",
    "type": "companion",
    "vendor": {
      //Vendor specific properties
    }
  },
  "communication": {
    "mavlink": {
      "type": "udp",
      "port": 1234
    }
  }
}

This same approach can be used for any other service besides QGroundControl to integrate with the vehicle and companion computer seamlessly.

That’s just an idea that I have been working on, I believe it would be a good solution for complex network environments. This solution is also not limited by the mavlink protocol itself, so it’s generic enough to be future proof.

I dont have any experience with camera service or mavlinkftp, Is this discussion relevant for Companion computers (CC) that connect trough mavlink connection (over the Autopilot (ap), through an rfd for example)

If I understand it correctly, you are talking about a system where qgc could find mavlink CCs that could connect trough tcp/udp connections, and exchange mavlink messages trough that link. Is there a downside of connecting CCs to autopilot (maybe with a serial link) and send CC mavlink messages to qgc over the ap-qgc connection (whatever it maybe). The idea is utilising ap connection mechanisms of qgc, and make any improvements to there

In this case this improvement is still valid, but instead of trying to find CCs we are trying to find APs and manage the rest over that established connection.