Connect mavlink (on RPi) with QGroundControl

I am trying to connect Mavlink (installed on RPi) with QGroundControl via 3DR Radio Telemetry as to transmit telemetry data from RPi without dependency of Ardupilot/Px4 flightcontrollers. I want to achieve transmitting data such as GPS or Postion using the message format of mavlink without dependency of ardupilot/PX4.

So far, I have taken the example code from mavlink git and have built the code as per instructions. I start the QGroundControl and was able receive the System ID and component ID from QGC. I modified the code to transmit a heartbeat from RPI-mavlink to QGroundControl.

mavlink_msg_heartbeat_pack(system_id, 200, &msg, MAV_TYPE_HELICOPTER, MAV_AUTOPILOT_GENERIC, MAV_MODE_GUIDED_ARMED, 0, MAV_STATE_ACTIVE);

int len_hb = write_message(msg);

After building and executing this code, I was expecting the QGroundControl to connect/show received message, but nothing was available at the QGroundControl.

I need to understand if what I am doing is the right way to do or if there is predefined method to establish such kind of communication. Kindly, help me out with documentations (if any) available to accomplish message transmission without ardupilot/Px4. If someone could guide me on this issue, it would be really helpful.

P.S: I have posted the same Question on StackOverflow


Yes you are heading in the right direction. Start debuggin from MultiVehicleManager in QGC which is where Vehicles get created from heartbeats.

1 Like

Hi @DonLakeFlyer,

After lot of struggle, I was able to send heartbeat to the QGC. The System status messages sent from RPi are being received at QGC. We can visualize using the mavlink inspector, however it is unable to update in the UI. Also, we get the message “Vehicle1 did not respond to the parameters. QGroundControl cannot display in UI”. At this point of time, we are really confused how the QGC reads the messages and displays in UI. Could you please brief a little about the working of QGC. We want to send GPS data continiously and to display the data on the map.

looking forward for your reply.


This example might help.
Instead of FIFO, you can connect to the telemetry module attached to RPi.
And instead of parameter setting, you can send a heartbeat.

The problem is exactly what it says. You need to implement the parameter protocol. QGC is likely going to get confused if you have no parameters at all.

That should work even if the parameter download failed.

QGC isn’t meant to just be a telemetry displayed. I can theoretically do that possibly requiring some modifications. But it’s going to require you to understand QGC internals yourself and debug your own problems.