MAVLink-compatible ground rover

Hi all,

I’m currently building a MAVLink-compatible ground rover for HITL simulation using pymavlink. I’ve implemented a full MAVLink interface including:

  • HEARTBEAT, GLOBAL_POSITION_INT, SYS_STATUS, BATTERY_STATUS
  • MISSION_COUNT, MISSION_ITEM_INT, MISSION_ACK, MISSION_CURRENT, MISSION_ITEM_REACHED
  • MISSION_REQUEST_INT and MISSION_REQUEST_LIST handling
  • AUTOPILOT_VERSION and HOME_POSITION broadcast
  • Handling of COMMAND_LONG for mission start

The system also simulates rover motion and forwards commands to an Arduino-based motor controller via serial.

Problem:

When I try to upload a mission from QGroundControl (latest Daily), it fails with “Mission transfer failed”.
Despite this, QGC shows no vehicle settings under “Vehicle Setup” and mission upload always fails.

Questions:

  • Are there any additional messages QGC expects to see for the vehicle to become fully “recognized”?
  • Could the issue be related to missing parameters or component ID handling?
  • Does QGC expect MISSION_ITEM_INT to come from a specific component ID or include other flags?

Thanks in advance for any guidance or insights!

Right, that’s tricky. You will have to debug what exactly is going on.

I suggest to either add a few printfs in QGC yourself to check, or alternatively enable the mission transfer (or something like that) debug output in QGC → Console. If you start QGC from a terminal, you’ll then see debug output.

Alternatively, you could try to upload a mission using MAVSDK and if you set export MAVSDK_MISSION_TRANSFER_DEBUGGING=1 it’ll give you some more output as well.

And obviously, check the docs (Mission Protocol | MAVLink Guide) which I assume you have already done.

I tried to debug but got nowhere

Is there a simpler way to simulate raspberry pi as mavlink supported rover?

You can use MAVSDK server plugins. It’s very much rough and work in progress, but it’s for that thing, except for a drone and not a rover.

See: