
No Groundstation Required! Watch the video and see below for more details.
This project’s purpose is to allow an ardupilot-based boat to follow a person without needing a groundstation or phone. A pocket-sized GPS tag was created allowing basic controls such as follow, loiter, RTL and stop to be sent to the boat. Two Lilygo ESP32 LoRa modules were used for the radio link and communication.
Introduction
Follow mode is readily available in ardupilot, either following another vehicle or the ground control station. This project is another option, a simple microcontroller sending its location to a matching microcontroller on the ardupilot rover. The GPS tag is small and easy to use, just turn it on and go. The rover can still be controlled with a groundstation– groundstation mode changes will overrule commands from the GPS tag.
This is not the first time a solution like this has been created, for example see this discussion on the ardupilot forums. But I will aim to present the complete hardware/software/case designs so anyone could replicate this project.

How it Works- Operations
The system has two components: a handheld remote GPS Tag, and a receiver module that is mounted in the vehicle and communicates to the flight controller (autopilot) over serial mavlink. It is easy to use– simply arm the boat and get it loitering somewhere, then use the 4 buttons on the Tag to choose the operating mode. The buttons and their modes are:
- Off (Manual mode)
- Home (Return to Launch mode)
- Hold (Loiter mode)
- Follow (Guided mode to the Tag’s GPS location)
The receiver’s mavlink messages are also relayed to the ground control station (GCS) from the vehicle’s telemetry stream. This allows the Tag’s position to show up on the map. No GCS commands are supported at this time, but it would be fairly straightforward to implement something if it was desired, as all mavlink messages are seen by the Tag Receiver module. The figure below shows mission planner GCS with the Tag (Quad + Icon) being chased by a boat (boat icon). The data shown is from the boat but the (very limited) information from the Tag is also available by switching the focus in mission planner.

How it Works- Communications
The Tag communicates to the Tag Reciever using LoRa radios. A custom data packet is sent to the Receiver, and the Receiver sends a different custom packet in return. Custom packets were chose rather than directly sending mavlink because (in the author’s opinion) mavlink messages are somewhat inefficient. The Receiver uses the information it receives from the vehicle via mavlink, as well as the LoRa packets, to encode the mavlink communication required to the flight controller.
During development, the Tag was tested to a range of slightly over 1 km with good results, in a hilly suburban neighborhood.
How it Works- Hardware
The Tag and the Reciever are both based on a Lilygo ESP-32 LoRa display board. In addition, the Tag uses a small lipo battery, a power switch, a GPS module, and a 4 button keypad. See the figure below for images of the components used. A 3-D printed case was designed to house the components.

The keypad is wired to an analog input on the ESP-32 board to minimize the pins required. The five pins on the keypad are wired to Vcc and Ground using a voltage divider circuit, so each button signals the ESP-32 with a unique voltage. The figure below shows the schematic and voltages calculated. Note that the pins on the keypad used were not in the same numerical order as the buttons themselves; see the GPS Tag code for the ordering used.

The wiring is fairly straightforward, just power, ground, and signals to the various parts. Simple pinouts are shown below.


How it Works- Software
The Tag and the Reciever software was developed using the Arduino compiler for ESP-32. Several libraries are used, the comments in the code attempt to specify the proper source. In addition, the mavlink library used it included in the folder. This library is not the most common mavlink library so was explicitly included to avoid confusion.
The files can be found here:
https://github.com/meholden/Ardupilot-GPS-Tag-Archive
Next Steps
- Add manual control (joystick) to GPS Tag
- So no other control or groundstation needed
- Smaller, water-tight case for the Tag
- ESP 32 in Tag has wifi
- Telemetry to laptop
- Other config or status updates
- Could Work with Flying Drone (add altitude to commands)